This example demonstrates how to add library structures via the atomicrex Python interface.

## Location¶

examples/python_interface

## Input files¶

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 from __future__ import print_function, division import atomicrex print('Create job object') job = atomicrex.Job() print('Parse XML input file with input parameters' ' and potential information.') job.parse_input_file('main.xml') print('Switch verbosity to "medium"') job.set_verbosity(2) print('Adding a structure from the library') structure = job.add_library_structure('Al-fcc', 'fcc', {'alat': 4.032, 'type': 'Al'}) structure.modify_property('atomic-energy', -3.36, 200.0) structure.modify_property('bulk-modulus', 80.9, 0.1) structure.modify_property('C11', 114.0, 100.0) structure.modify_property('C12', 61.9) structure.modify_property('C44', 31.6) print('') print('Testing some ASE like method calls') print('.positions: ', structure.positions) print('.get_positions: ', structure.get_positions()) print('.get_cell:') print(structure.get_cell()) print('.get_number_of_atoms: ', structure.get_number_of_atoms()) print('') print('Computing properties.') structure.compute_properties() print('') print('Printing properties.') structure.print_properties() print('') print('Adding another structure from the library') structure = job.add_library_structure('Al-bcc', 'body-centered cubic', {'alat': 4.032, 'type': 'Al'}) print('') print('Demonstrating the conversion to an ASE atoms object.') conf = structure.get_atoms(job) print(' cell') print(conf.cell) print(' atoms') for k, atom in enumerate(conf, start=1): print(' {:3}'.format(k)) print(atom) print('') print('Adding more structures from the library') structure = job.add_library_structure('my-simple-cubic', 'sc', {'alat': 3.0, 'type': 'Al'}) print(' id: {} (nat = {})'.format(structure.id, structure.get_number_of_atoms())) print(structure.cell) structure = job.add_library_structure('my-diamond', 'dia', {'alat': 1.0, 'type': 'Al'}) print(' id: {} (nat = {})'.format(structure.id, structure.get_number_of_atoms())) print(structure.cell) structure = job.add_library_structure('my-hcp', 'hcp', {'alat': 2.5, 'clat': 4.0, 'type': 'Al'}) print(' id: {} (nat = {})'.format(structure.id, structure.get_number_of_atoms())) print(structure.cell) structure = job.add_library_structure('my-omega', 'omega', {'alat': 2.5, 'ca_ratio': 0.69, 'type': 'Al'}) print(' id: {} (nat = {})'.format(structure.id, structure.get_number_of_atoms())) print(structure.cell) structure = job.add_library_structure('my-L10', 'L10', {'alat': 2.5, 'ca_ratio': 0.69, 'type_A': 'Al', 'type_B': 'Al'}) print(' id: {} (nat = {})'.format(structure.id, structure.get_number_of_atoms())) print(structure.cell) print('') 
• main.xml: file with definition of potential

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  EAM potential Al 
• potential.xml: definition of potential form and parameters

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83  r A * exp(-lambda * r) -lambda * A * exp(-lambda * r) 500 2.73 6.5 r 1 - 1/(1 + ((r - cutoff) / h)^4) 4 * h^4 * (r - cutoff)^3 / ((h^4 + (r - cutoff)^4)^2) 3 r exp(-twomu * r) -twomu * exp(-twomu * r) 1.14 6.5 r 1 - 1/(1 + ((r - cutoff) / h)^4) 4 * h^4 * (r - cutoff)^3 / ((h^4 + (r - cutoff)^4)^2) 3 rho -D * sqrt(rho) -D / (2 * sqrt(rho)) 8 

## Output (files)¶

• The properties (as well as parameters) are written to standard output.

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 -- Create job object -- Parse XML input file with input parameters and potential information. -- Switch verbosity to "medium" -- Adding a structure from the library -- Testing some ASE like method calls ('.positions: ', array([[ 0., 0., 0.]])) ('.get_positions: ', array([[ 0., 0., 0.]])) .get_cell: [[ 0. 2.016 2.016] [ 2.016 0. 2.016] [ 2.016 2.016 0. ]] ('.get_number_of_atoms: ', 1) -- Computing properties. -- Printing properties. total-energy: -3.82797 eV atomic-energy: -3.82797 eV/atom (target: -3.36 eV/atom) Rel. weight: 200; Abs. weight: 1; Weighted residual: 0.218993 total-volume: 16.3871 A^3 atomic-volume: 16.3871 A^3/atom bulk-modulus: 35.5454 GPa (target: 80.9 GPa) Rel. weight: 0.1; Abs. weight: 1; Weighted residual: 2057.04 C11: 43.1185 GPa (target: 114 GPa) Rel. weight: 100; Abs. weight: 1; Weighted residual: 5024.19 C12: 31.7592 GPa (target: 61.9 GPa) Rel. weight: 1; Abs. weight: 1; Weighted residual: 908.47 C44: 25.7187 GPa (target: 31.6 GPa) Rel. weight: 1; Abs. weight: 1; Weighted residual: 34.5897 -- Adding another structure from the library -- Demonstrating the conversion to an ASE atoms object. --- cell [[-2.016 2.016 2.016] [ 2.016 -2.016 2.016] [ 2.016 2.016 -2.016]] --- atoms 1 Atom('Al', [0.0, 0.0, 0.0], index=0) -- Adding more structures from the library --- id: my-simple-cubic (nat = 1) [[ 3. 0. 0.] [ 0. 3. 0.] [ 0. 0. 3.]] --- id: my-diamond (nat = 2) [[ 0. 0.5 0.5] [ 0.5 0. 0.5] [ 0.5 0.5 0. ]] --- id: my-hcp (nat = 2) [[ 2.50000000e+00 -2.22044605e-16 0.00000000e+00] [ -1.25000000e+00 2.16506351e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 4.00000000e+00]] --- id: my-omega (nat = 3) [[ 2.50000000e+00 -2.22044605e-16 0.00000000e+00] [ -1.25000000e+00 2.16506351e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 1.72500000e+00]] --- id: my-L10 (nat = 4) [[ 2.5 0. 0. ] [ 0. 2.5 0. ] [ 0. 0. 1.725]]