├── __init__.py ├── utils.py ├── atat2geo.py ├── atat2trainset.py ├── reax_test.py ├── geo.py ├── trainset.py └── README.org /__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | This module provides utilities to convert DFT calculations to the input files for the ReaxFF 3 | 4 | http://www.wag.caltech.edu/home/duin/reax_um.pdf 5 | 6 | 7 | geo.py - convert a DFT calculation into an entry in the geo file 8 | trainset.py - convert a DFT calculation into an entry in the trainset file 9 | ''' 10 | 11 | from utils import * 12 | from geo import * 13 | from trainset import * 14 | -------------------------------------------------------------------------------- /utils.py: -------------------------------------------------------------------------------- 1 | import hashlib, pickle 2 | def reax_hash(atoms): 3 | '''returns the first 15 characters of a hash of the pickled string 4 | representing an atoms object. 5 | 6 | used to generate unique keys for an atoms object. There is some 7 | concern that there could be collisions in just the first 15 8 | characters of the hash, but 15 characters is the limit of what the 9 | Reax code can handle. 10 | 11 | It is not sufficient to simply make 15 random characters because 12 | you need to ensure the same 15 characters every time you see a 13 | particular atoms object. 14 | 15 | This method is fragile to changes in the atoms object and pickling 16 | method. Any changes to those, e.g. additional information stored 17 | in the atoms object, or changes in the pickling algorithm, will 18 | result in changes to the hash. We could replace this with a 19 | hard-coded string representation of an atoms object and take a 20 | hash of that. 21 | ''' 22 | return hashlib.sha224(pickle.dumps(atoms)).hexdigest()[:15] 23 | 24 | if __name__ == '__main__': 25 | print reax_hash('test') 26 | print reax_hash('testt') 27 | -------------------------------------------------------------------------------- /atat2geo.py: -------------------------------------------------------------------------------- 1 | from geo import * 2 | ''' 3 | when run as a script, this module creates a geo file from 4 | directories created by ATAT. It is assumed for now that vasp was 5 | used to run the calculations. 6 | ''' 7 | from optparse import OptionParser 8 | import sys 9 | 10 | parser = OptionParser(usage='geo.py [-f geofile]') 11 | 12 | parser.add_option('-f', 13 | nargs = 1, 14 | help='Specify the geofile to add entry to. default = geo') 15 | 16 | options, args = parser.parse_args() 17 | 18 | if options.f is None: 19 | geofile = 'geo' 20 | 21 | from jasp import * 22 | import glob, os 23 | 24 | # first check if we are up to date 25 | if os.path.exists('geo'): 26 | geotime = os.path.getmtime('geo') 27 | else: 28 | geotime = None 29 | 30 | dirs = glob.glob('[0-9]*') 31 | 32 | if newer_files_exist(): 33 | if os.path.exists('geo'): 34 | os.unlink('geo') 35 | else: 36 | print 'No newer files found. geo is up to date.' 37 | sys.exit() 38 | 39 | count = 0 40 | for d in dirs: 41 | if (os.path.exists(os.path.join(d,'energy')) 42 | and not os.path.exists(os.path.join(d,'error'))): 43 | with jasp(d) as calc: 44 | atoms = calc.get_atoms() 45 | write_bgf(atoms,'geo') 46 | 47 | # now we add the equation of state data points 48 | if os.path.exists(os.path.join(d,'eos-exp')): 49 | # get directories in eos-exp 50 | eos_d = os.path.join(d,'eos-exp') 51 | for d in os.listdir(eos_d): 52 | if (os.path.isdir(os.path.join(eos_d,d)) 53 | and os.path.exists(os.path.join(eos_d,d,'energy')) 54 | and not os.path.exists(os.path.join(eos_d,d,'error'))): 55 | with jasp(os.path.join(eos_d,d)) as calc: 56 | atoms = calc.get_atoms() 57 | write_bgf(atoms, geofile) 58 | count += 1 59 | print 'Wrote {0:d} entries'.format(count) 60 | -------------------------------------------------------------------------------- /atat2trainset.py: -------------------------------------------------------------------------------- 1 | ''' 2 | when run as a script, this module creates a trainset.in file from 3 | directories created by ATAT. It is assumed for now that vasp was 4 | used to run the calculations. 5 | 6 | The script only works up to a ternary system. 7 | ''' 8 | import sys 9 | from optparse import OptionParser 10 | 11 | parser = OptionParser(usage='trainset.py [-f trainsetfile]') 12 | parser.add_option('-f', 13 | nargs = 1, 14 | help='Specify the trainset.in to create. default = trainset.in ') 15 | 16 | options, ncfiles = parser.parse_args() 17 | 18 | if options.f is None: 19 | trainset_file = 'trainset.in' 20 | 21 | from jasp import * 22 | import glob, os 23 | import numpy as np 24 | from geo import newer_files_exist 25 | 26 | if newer_files_exist(trainset_file): 27 | if os.path.exists(trainset_file): 28 | os.unlink(trainset_file) 29 | else: 30 | print 'No newer files found. trainset.in is up to date.' 31 | sys.exit() 32 | 33 | cells = parse_trainset() 34 | 35 | dirs = glob.glob('[0-9]*') 36 | 37 | if os.path.exists('atoms.out'): 38 | mmaps = True 39 | else: 40 | mmaps = False 41 | 42 | # reference endpoints 43 | with jasp('0') as c0: 44 | atoms0 = c0.get_atoms() 45 | e0 = atoms0.get_potential_energy()/len(atoms0) 46 | d0 = reax_hash(atoms0) 47 | 48 | with jasp('1') as c1: 49 | atoms1 = c1.get_atoms() 50 | e1 = atoms1.get_potential_energy()/len(atoms1) 51 | d1 = reax_hash(atoms1) 52 | 53 | if mmaps: 54 | with jasp('2') as c2: 55 | atoms2 = c2.get_atoms() 56 | e2 = atoms2.get_potential_energy()/len(atoms2) 57 | d2 = reax_hash(atoms2) 58 | 59 | #reference energies in eV/atom 60 | reference_energies = {} 61 | reference_energies[atoms0[0].symbol] = (d0, e0) # (description, energy) 62 | reference_energies[atoms1[0].symbol] = (d1, e1) 63 | if mmaps: 64 | reference_energies[atoms2[0].symbol] = (d2, e2) 65 | 66 | ''' 67 | this is how Adri likes the trainset.in 68 | ENERGY 69 | # Volume [phase_name1] 70 | [Equation of state data] 71 | # Volume [phase_name2] 72 | [Equation of state data] 73 | # Heats_of_formation 74 | [All heat of formation data[ 75 | ENDENERGY 76 | ''' 77 | # now we add formation energies and eos 78 | counter = 0 79 | eos_counter = 0 80 | for d in dirs: 81 | if (os.path.exists(os.path.join(d,'energy')) 82 | and not os.path.exists(os.path.join(d,'error'))): 83 | # geometry of cell 84 | with jasp(d) as calc: 85 | atoms = calc.get_atoms() 86 | cells = cell_parameters(atoms, weight=1.0, cells=cells) 87 | 88 | # equation of state Adri suggested we put a higher weight on 89 | # points close to the minimum 90 | eosdir = os.path.join(d,'eos-exp') 91 | if os.path.isdir(eosdir): 92 | edirs = glob.glob('%s/*' % eosdir) 93 | cells['ENERGY'].append('# Volume %s' % reax_hash(atoms)) 94 | for ed in edirs: 95 | if (os.path.exists(os.path.join(ed,'energy')) 96 | and not os.path.exists(os.path.join(ed,'error'))): 97 | with jasp(ed) as calc2: 98 | atoms2 = calc2.get_atoms() 99 | e1 = atoms.get_potential_energy() 100 | e2 = atoms2.get_potential_energy() 101 | weight = 0.1 + 0.25*np.abs((e2 - e1))*23.061 #kcal 102 | 103 | cells = eos(atoms, 104 | atoms2, 105 | weight=weight, 106 | cells=cells) 107 | eos_counter += 1 108 | 109 | # now heats of formation go last 110 | cells['ENERGY'].append('# Heats_of_formation') 111 | for d in dirs: 112 | if (os.path.exists(os.path.join(d,'energy')) 113 | and not os.path.exists(os.path.join(d,'error'))): 114 | # geometry of cell 115 | with jasp(d) as calc: 116 | atoms = calc.get_atoms() 117 | 118 | # This is a heat of formation 119 | cells = energy(atoms, 120 | reference_energies, 121 | weight=1.0, 122 | cells=cells) 123 | counter += 1 124 | 125 | write_trainset(trainset_file, cells=cells) 126 | print 'wrote {0:d} heats of formation'.format(counter) 127 | print 'wrote {0:d} EOS points'.format(eos_counter) 128 | -------------------------------------------------------------------------------- /reax_test.py: -------------------------------------------------------------------------------- 1 | from Cheetah.Template import Template 2 | from Scientific.IO.FortranFormat import FortranFormat, FortranLine 3 | from Scientific.Geometry import Vector 4 | import math 5 | 6 | bgf_template = ''' 7 | XTLGRF 200 8 | DESCRP $description 9 | REMARK 10 | RUTYPE CELL OPT 0 11 | $crstx 12 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 13 | #for $s in $atom_lines 14 | $s 15 | #end for 16 | FORMAT CONECT (a6,12i6) 17 | UNIT ENERGY kcal 18 | ENERGY $energy 19 | END 20 | 21 | ''' 22 | 23 | def write_bgf(atoms,description=None): 24 | 25 | uc = atoms.get_cell() 26 | a,b,c = [Vector(x) for x in uc] 27 | A = a.length() 28 | B = b.length() 29 | C = c.length() 30 | 31 | rad2deg = 360./(2*math.pi) 32 | alpha = b.angle(c)*rad2deg 33 | beta = a.angle(c)*rad2deg 34 | gamma = a.angle(b)*rad2deg 35 | 36 | crstx = str(FortranLine(('CRYSTX', 37 | A, 38 | B, 39 | C, 40 | alpha, 41 | beta, 42 | gamma), 43 | FortranFormat('a6,1x,6f11.5'))) 44 | 45 | atom_lines = [] 46 | fmt = FortranFormat('a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5') 47 | for i,atom in enumerate(atoms): 48 | 49 | line = str(FortranLine(('HETATM', 50 | i, 51 | atom.symbol, 52 | '', 53 | '', 54 | '', 55 | atom.x, 56 | atom.y, 57 | atom.z, 58 | atom.symbol, 59 | 1, 60 | 1, 61 | 0.0), 62 | fmt)) 63 | atom_lines.append(line) 64 | 65 | # energy in kcal 66 | energy = atoms.get_potential_energy()*23.061 67 | 68 | 69 | bgf = Template(bgf_template, searchList=[locals()]) 70 | 71 | return bgf.respond() 72 | 73 | trainset_template = ''' 74 | ENERGY 75 | # heats of formation 76 | #for ($weight, $label1, $label2, $m, $label3, $n, $dft_energy) in $lines 77 | $weight + $label1 /1 - $label2 /$m - $label3 /$n $dft_energy 78 | #end for 79 | ENDENERGY 80 | ''' 81 | 82 | def write_trainset(list_of_atoms, weight=1.0): 83 | ''' 84 | create the trainset.in function based on heats of formations. This 85 | file is limited in format, e.g. one cannot have arbitrary algebra 86 | in it, only + and - and division.i will have to be clever about 87 | computing formation energies this way. e.g assume a1 is a Ru3Pt 88 | alloy, r1 is a 4 atom Ru structure, and p1 is a 4 atom Pt 89 | structure. then this is the line that goes in trainset 90 | 91 | weight + a1 /1 - r1 /2 - r1/4 -p1 /4 dft_energy 92 | 93 | furthermore than cannot be more than 5 94 | 95 | TODO: this function prepares the heat of formation part of the 96 | trainset. so, it should take a list of atoms objects. 97 | 98 | ''' 99 | from collections import defaultdict 100 | 101 | lines = [] 102 | for atoms in list_of_atoms: 103 | # get composition 104 | syms = atoms.get_chemical_symbols() 105 | d = defaultdict(int) 106 | for s in syms: 107 | d[s] += 1 108 | 109 | items = d.items() 110 | 111 | natoms = len(atoms) 112 | 113 | calc = atoms.get_calculator() 114 | 115 | # TODO these need to be connected to the labels in geo 116 | label1 = calc.get_nc() 117 | label2 = items[0][0] + str(items[0][1]) 118 | label3 = items[1][0] + str(items[1][1]) 119 | 120 | m = float(items[0][1])/natoms 121 | n = float(items[1][1])/natoms 122 | 123 | # TODO this should be a formation energy 124 | dft_energy = atoms.get_potential_energy() 125 | 126 | lines.append((weight, label1, label2, m, label3, n, dft_energy)) 127 | 128 | tmpl = Template(trainset_template, searchList=[locals()]) 129 | return tmpl.respond() 130 | 131 | if __name__ in['__main__']: 132 | from ase.calculators.jacapo import * 133 | calc = Jacapo('fe-al/36/out.nc') 134 | atoms = calc.get_atoms() 135 | #print write_bgf(atoms) 136 | print write_trainset([atoms, atoms]) 137 | -------------------------------------------------------------------------------- /geo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Converts an atoms object into an entry in the reaxff geo file. 4 | 5 | This file is a module and script. 6 | 7 | commandline usage: geo.py -f geo ncfile 8 | 9 | python usage: 10 | from reaxx.geo import write_bgf 11 | write_bgf(atoms) 12 | ''' 13 | from reax import * 14 | from Cheetah.Template import Template 15 | from Scientific.IO.FortranFormat import FortranFormat, FortranLine 16 | from Scientific.Geometry import Vector 17 | import math, os, pickle 18 | 19 | bgf_template = ''' 20 | # file:$directory 21 | XTLGRF 200 22 | DESCRP $description 23 | REMARK created by reax.geo 24 | $crstx 25 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 26 | #for $s in $atom_lines 27 | $s 28 | #end for 29 | FORMAT CONECT (a6,12i6) 30 | UNIT ENERGY kcal 31 | ENERGY $energy 32 | END 33 | ''' 34 | def reax_coordinates(atoms): 35 | ''' 36 | returns an array of reax coordinates 37 | ''' 38 | import numpy as np 39 | pi=3.14159265 40 | rdndgr=180.0/pi 41 | dgrrdn=1.0/rdndgr 42 | 43 | uc = atoms.get_cell() 44 | vscale = 1.0 # I think since i get the uc from the atoms, 45 | # i dont' need vscale like adri did 46 | 47 | tm11, tm21, tm31 = uc[0,:] 48 | tm12, tm22, tm32 = uc[1,:] 49 | tm13, tm23, tm33 = uc[2,:] 50 | 51 | fc = atoms.get_scaled_positions() 52 | 53 | ## get a,b,c, alpha, beta, gamma 54 | aaxis = np.sqrt(np.dot(uc[0,:],uc[0,:])) 55 | baxis = np.sqrt(np.dot(uc[1,:],uc[1,:])) 56 | caxis = np.sqrt(np.dot(uc[2,:],uc[2,:])) 57 | 58 | adotb = np.dot(uc[0,:],uc[1,:]) 59 | adotc = np.dot(uc[0,:],uc[2,:]) 60 | bdotc = np.dot(uc[1,:],uc[2,:]) 61 | 62 | hgamma=rdndgr*np.arccos(adotb/(aaxis*baxis)) 63 | hbeta=rdndgr*np.arccos(adotc/(aaxis*caxis)) 64 | halfa=rdndgr*np.arccos(bdotc/(baxis*caxis)) 65 | 66 | halfa2=halfa*dgrrdn #Convert to ReaxFF cell matrix 67 | hbeta2=hbeta*dgrrdn 68 | hgamma2=hgamma*dgrrdn 69 | sinalf=np.sin(halfa2) 70 | cosalf=np.cos(halfa2) 71 | sinbet=np.sin(hbeta2) 72 | cosbet=np.cos(hbeta2) 73 | cosphi=(np.cos(hgamma2)-cosalf*cosbet)/(sinalf*sinbet) 74 | if (cosphi > 1.0): 75 | cosphi=1.0 76 | 77 | sinphi=np.sqrt(1.0-cosphi*cosphi) 78 | tm11r=vscale*aaxis*sinbet*sinphi 79 | tm21r=vscale*aaxis*sinbet*cosphi 80 | tm31r=vscale*aaxis*cosbet 81 | tm22r=vscale*baxis*sinalf 82 | tm32r=vscale*baxis*cosalf 83 | tm33r=vscale*caxis 84 | 85 | nat = len(atoms) 86 | 87 | c = [] 88 | for i in range(nat): 89 | ct1 = fc[i,0]*tm11r 90 | ct2 = fc[i,0]*tm21r + fc[i,1]*tm22r 91 | ct3 = fc[i,0]*tm31r + fc[i,1]*tm32r + fc[i,2]*tm33r 92 | c.append([ct1, ct2, ct3]) 93 | 94 | return c 95 | 96 | def write_bgf(atoms, geofile=None): 97 | ''' 98 | prepares a bgf entry from an atoms object and writes it to the geofile 99 | ''' 100 | if geofile is None: 101 | geofile = 'geo' 102 | 103 | # create the geofile if it does not already exist 104 | if not os.path.exists(geofile): 105 | f = open(geofile,'w') 106 | f.close() 107 | 108 | # get descriptions to make sure they are all unique. 109 | f = open(geofile,'r') 110 | DESCRIPTIONS = [] 111 | for line in f.readlines(): 112 | if line.startswith('DESCRP'): 113 | DESCRIPTIONS.append(line[6:].strip()) 114 | f.close() 115 | 116 | # we need a hash of something to check for uniqueness of the atoms. 117 | description = reax_hash(atoms) 118 | 119 | if description in DESCRIPTIONS: 120 | raise Exception, 'Non-unique description "%s" in geofile' % description 121 | 122 | # now prepare the unit cell information for the CRYSTX line 123 | uc = atoms.get_cell() 124 | a,b,c = [Vector(x) for x in uc] 125 | A = a.length() 126 | B = b.length() 127 | C = c.length() 128 | 129 | rad2deg = 360./(2*math.pi) 130 | alpha = b.angle(c)*rad2deg 131 | beta = a.angle(c)*rad2deg 132 | gamma = a.angle(b)*rad2deg 133 | 134 | crstx = str(FortranLine(('CRYSTX', 135 | A, 136 | B, 137 | C, 138 | alpha, 139 | beta, 140 | gamma), 141 | FortranFormat('a6,1x,6f11.5'))) 142 | 143 | # now we prepare each atom line. These are printed in the template. 144 | atom_lines = [] 145 | reax_coords = reax_coordinates(atoms) 146 | fmt = FortranFormat('a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5') 147 | for i,atom in enumerate(atoms): 148 | x,y,z = reax_coords[i] 149 | line = FortranLine(('HETATM', i, atom.symbol, 150 | '', '', '', 151 | x,y,z, 152 | atom.symbol, 153 | 1, 1, 0.0), 154 | fmt) 155 | atom_lines.append(line) 156 | 157 | # energy in kcal 158 | calc = atoms.get_calculator() 159 | if calc is not None: 160 | directory = os.path.abspath(calc.vaspdir) 161 | energy = atoms.get_potential_energy()*23.061 162 | else: 163 | directory = 'None' 164 | energy = 'None' 165 | 166 | 167 | bgf = Template(bgf_template, searchList=[locals()]) 168 | 169 | entry = bgf.respond() 170 | 171 | if geofile is None: 172 | geofile = 'geo' 173 | 174 | f = open(geofile, 'a') 175 | f.write(entry) 176 | f.close() 177 | 178 | def newer_files_exist(reference_file='geo'): 179 | import glob, os 180 | if not os.path.exists(reference_file): 181 | # no reference file, so there are newer files 182 | return True 183 | 184 | geotime = os.path.getmtime(reference_file) 185 | dirs = glob.glob('[0-9]*') 186 | for d in dirs: 187 | energy = os.path.join(d,'energy') 188 | # first check energy files 189 | if os.path.exists(energy): 190 | if os.path.getmtime(energy) > geotime: 191 | return True 192 | 193 | # now check EOS files 194 | if os.path.exists(os.path.join(d,'eos-exp')): 195 | 196 | eos_d = os.path.join(d,'eos-exp') 197 | for d in os.listdir(eos_d): 198 | nextdir = os.path.join(eos_d,d) 199 | if (os.path.isdir(nextdir)): 200 | energy = os.path.join(nextdir,'energy') 201 | if os.path.exists(energy): 202 | if os.path.getmtime(energy) > geotime: 203 | return True 204 | # getting here means no newer files found. 205 | return False 206 | 207 | -------------------------------------------------------------------------------- /trainset.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | trainset.in contains input training data for reax. 4 | 5 | Here is the basic format of these sections. 6 | I am not sure what a Heat of formation in reax is. those appear to be captured in the ENERGY section. 7 | 8 | HEATFO 9 | descriptor weight reference_value 10 | ENDHEATFO 11 | 12 | CELL PARAMETERS 13 | #descriptor weight type reference value 14 | fcc0 1 a 4.0 15 | fcc0 1 b 4.0 16 | fcc0 1 c 4.0 17 | fcc0 1 alpha 90 18 | fcc0 1 beta 90 19 | fcc0 1 gamma 90 20 | # comment 21 | fccm1 1 a 3.9 22 | fccm1 1 b 3.9 23 | fccm1 1 c 3.9 24 | fccm1 1 alpha 90 25 | fccm1 1 beta 90 26 | fccm1 1 gamma 90 27 | # 28 | fccp1 1 a 4.1 29 | fccp1 1 b 4.1 30 | fccp1 1 c 4.1 31 | fccp1 1 alpha 90 32 | fccp1 1 beta 90 33 | fccp1 1 gamma 90 34 | END CELL PARAMETERS 35 | 36 | ENERGY 37 | weight + descriptor1 /a +- descriptor2 /b +- descriptor3 /c reference_value 38 | ENDENERGY 39 | ''' 40 | from Cheetah.Template import Template 41 | from Scientific.IO.FortranFormat import FortranFormat, FortranLine 42 | from Scientific.Geometry import Vector 43 | import math, pickle, os 44 | from reax import * 45 | 46 | def parse_trainset(trainset_file='trainset.in'): 47 | ''' 48 | reads all the lines *between* the section indicators in 49 | trainset.in and stores them in a cells dictionary. 50 | 51 | this is so I can append new lines to existing sections, and later 52 | write them back out. Each line is stripped. 53 | ''' 54 | 55 | cells = {} 56 | cells['ENERGY'] = [] 57 | cells['CELL PARAMETERS'] = [] 58 | cells['HEATFO'] = [] 59 | if not os.path.exists(trainset_file): 60 | return cells 61 | 62 | EFLAG, HFLAG, CFLAG = False, False, False 63 | f = open(trainset_file,'r') 64 | for line in f: 65 | if line.startswith('ENERGY'): 66 | EFLAG = True 67 | continue 68 | elif line.startswith('ENDENERGY'): 69 | EFLAG = False 70 | 71 | elif line.startswith('HEATFO'): 72 | HFLAG = True 73 | continue 74 | elif line.startswith('ENDHEATFO'): 75 | HFLAG = False 76 | 77 | elif line.startswith('CELL PARAMETERS'): 78 | CFLAG = True 79 | continue 80 | elif line.startswith('END CELL PARAMETERS'): 81 | CFLAG = False 82 | 83 | if EFLAG: 84 | cells['ENERGY'].append(line.strip()) 85 | elif CFLAG: 86 | cells['CELL PARAMETERS'].append(line.strip()) 87 | elif HFLAG: 88 | cells['HEATFO'].append(line.strip()) 89 | f.close() 90 | return cells 91 | 92 | def write_trainset(trainset_file='trainset.in', cells=None): 93 | ''' 94 | writes all entries contained in the cells dictionary to the 95 | trainset file. 96 | ''' 97 | 98 | f = open(trainset_file, 'w') 99 | for key in cells: 100 | if cells[key] == []: 101 | continue 102 | f.write('%s\n' % key) 103 | for line in cells[key]: 104 | f.write(line+'\n') 105 | f.write('END%s\n' % key) 106 | f.close() 107 | 108 | ####################################################### 109 | # functions to generate trainset entries 110 | 111 | def cell_parameters(atoms, weight=1.0, cells=None): 112 | ''' 113 | adds entries to CELL PARAMETERS for the unit cell geometry of the 114 | atoms object. 115 | ''' 116 | 117 | description = reax_hash(atoms) 118 | 119 | # get all the parameters needed for a cell parameters block 120 | uc = atoms.get_cell() 121 | a,b,c = [Vector(x) for x in uc] 122 | A = a.length() 123 | B = b.length() 124 | C = c.length() 125 | 126 | rad2deg = 360./(2*math.pi) 127 | alpha = b.angle(c)*rad2deg 128 | beta = a.angle(c)*rad2deg 129 | gamma = a.angle(b)*rad2deg 130 | 131 | cells['CELL PARAMETERS'].append('# created by reax.trainset') 132 | # this is an org-link to the geo file 133 | #cells['CELL PARAMETERS'].append('# file:geo::%s' % description) 134 | for key,val in [('a',A), 135 | ('b',B), 136 | ('c',C), 137 | ('alpha',alpha), 138 | ('beta', beta), 139 | ('gamma', gamma)]: 140 | s = '%(description)s %(weight)f %(key)s %(val)s' % locals() 141 | if s not in cells['CELL PARAMETERS']: 142 | cells['CELL PARAMETERS'].append(s) 143 | 144 | return cells 145 | 146 | def energy(atoms, reference_energies, 147 | comment=None, 148 | weight=1.0, cells=None): 149 | '''generate lines for formation energies 150 | 151 | atoms is an ase.Atoms object 152 | reference_energies is a dictionary: 153 | chemical symbol: (description, energy) 154 | 155 | cells is a dictionary that you are appending these entries too. 156 | ''' 157 | description = reax_hash(atoms) 158 | # add org-link 159 | #cells['ENERGY'].append('# file:geo::%s ' % description) 160 | 161 | e = atoms.get_potential_energy() 162 | EE = e 163 | 164 | c = {} 165 | for atom in atoms: 166 | if atom.symbol in c: 167 | c[atom.symbol] += 1 168 | else: 169 | c[atom.symbol] = 1 170 | 171 | x = {} 172 | for key in c: 173 | x[key] = c[key]/float(len(atoms)) # mole fractions 174 | 175 | # compute formation energy 176 | for atom in atoms: 177 | e -= reference_energies[atom.symbol][1] 178 | 179 | # construct the string for reax to compute formation energy 180 | s = '%1.2f + %s /1' % (weight, description) 181 | for entry in reference_energies: 182 | desc, ref_energy = reference_energies[entry] 183 | xi = x.get(entry,None) 184 | if xi: 185 | s += ' - %s / %f ' % (desc, 1./(float(xi)*len(atoms))) 186 | EE -= ref_energy / (1./(float(xi)*len(atoms))) 187 | s += ' %f' % (e*23.061) 188 | 189 | cells['ENERGY'].append(s) 190 | return cells 191 | 192 | def eos(atoms1, atoms2, weight=1.0, cells=None): 193 | ''' 194 | add equation of state data to the trainset.in 195 | ''' 196 | d1 = reax_hash(atoms1) 197 | d2 = reax_hash(atoms2) 198 | e = atoms1.get_potential_energy() - atoms2.get_potential_energy() 199 | s = '%1.2f + %s /1 - %s /1 %f' % (weight, 200 | d1, d2, 201 | e*23.061) 202 | cells['ENERGY'].append(s) 203 | return cells 204 | 205 | -------------------------------------------------------------------------------- /README.org: -------------------------------------------------------------------------------- 1 | * Introduction 2 | this is a module to facilitate preparation of reaxx input files, especially the geometry file and trainset.in file. 3 | 4 | See this file for some documentation of the formats. 5 | http://www.wag.caltech.edu/home/duin/reax_um.pdf 6 | 7 | * COMMENT Generating geo files 8 | 9 | The principle function used to create geo files is reax.geo.write_bgf. This function takes an atoms object, and writes an entry to a geofile. It will raise an exception if you have written that atoms to the file before. 10 | 11 | As an example, we will create a geo file from some directories from an ATAT calculation. We need to have entries for every geometry we are going to train against, which includes the equation of state calculations. These calculations are stored in a directory called eos-exp inside each ATAT directory. 12 | 13 | #+BEGIN_SRC python 14 | import os 15 | 16 | from geo import * 17 | from jasp import * 18 | 19 | os.chdir('/home-research/jkitchin/research/fe-ni-al/AlNi_fcc') 20 | os.unlink('geo') 21 | for i in [0, 1, 2, 3]: 22 | wd = '{}'.format(i) 23 | with jasp(wd) as calc: 24 | atoms = calc.get_atoms() 25 | write_bgf(atoms, 'geo') 26 | 27 | # Now, we add the eos calculations 28 | for d in os.listdir(os.path.join(wd,'eos-exp')): 29 | nwd = os.path.join(wd, 'eos-exp', d) 30 | if (os.path.isdir(nwd) 31 | and os.path.exists(os.path.join(nwd, 'OUTCAR'))): 32 | with jasp(nwd) as calc: 33 | atoms = calc.get_atoms() 34 | write_bgf(atoms, 'geo') 35 | #+END_SRC 36 | 37 | #+RESULTS: 38 | 39 | Now, let us see the results. 40 | 41 | #+BEGIN_SRC sh 42 | cat '/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/geo' 43 | #+END_SRC 44 | 45 | #+RESULTS: 46 | #+begin_example 47 | 48 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0 49 | XTLGRF 200 50 | DESCRP b92e4a4aaa2b15b 51 | REMARK created by reax.geo 52 | CRYSTX 2.85573 2.85573 2.85573 60.00000 60.00000 60.00000 53 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 54 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 55 | FORMAT CONECT (a6,12i6) 56 | UNIT ENERGY kcal 57 | ENERGY -86.29910481 58 | END 59 | 60 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f+0 61 | XTLGRF 200 62 | DESCRP 96d77167125bccf 63 | REMARK created by reax.geo 64 | CRYSTX 2.85574 2.85574 2.85574 60.00000 60.00000 60.00000 65 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 66 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 67 | FORMAT CONECT (a6,12i6) 68 | UNIT ENERGY kcal 69 | ENERGY -86.29910481 70 | END 71 | 72 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f+10 73 | XTLGRF 200 74 | DESCRP f9acb4130a63a51 75 | REMARK created by reax.geo 76 | CRYSTX 2.94791 2.94791 2.94791 60.00000 60.00000 60.00000 77 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 78 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 79 | FORMAT CONECT (a6,12i6) 80 | UNIT ENERGY kcal 81 | ENERGY -85.54616316 82 | END 83 | 84 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f+12 85 | XTLGRF 200 86 | DESCRP 72ada980e18d7f7 87 | REMARK created by reax.geo 88 | CRYSTX 2.96568 2.96568 2.96568 60.00000 60.00000 60.00000 89 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 90 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 91 | FORMAT CONECT (a6,12i6) 92 | UNIT ENERGY kcal 93 | ENERGY -85.245563025 94 | END 95 | 96 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f+15 97 | XTLGRF 200 98 | DESCRP 719cb1f2e6d122d 99 | REMARK created by reax.geo 100 | CRYSTX 2.99192 2.99192 2.99192 60.00000 60.00000 60.00000 101 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 102 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 103 | FORMAT CONECT (a6,12i6) 104 | UNIT ENERGY kcal 105 | ENERGY -84.725745024 106 | END 107 | 108 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f+2 109 | XTLGRF 200 110 | DESCRP 10976c1b680050a 111 | REMARK created by reax.geo 112 | CRYSTX 2.87464 2.87464 2.87464 60.00000 60.00000 60.00000 113 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 114 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 115 | FORMAT CONECT (a6,12i6) 116 | UNIT ENERGY kcal 117 | ENERGY -86.267695728 118 | END 119 | 120 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f+4 121 | XTLGRF 200 122 | DESCRP 769ce5515f17062 123 | REMARK created by reax.geo 124 | CRYSTX 2.89331 2.89331 2.89331 60.00000 60.00000 60.00000 125 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 126 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 127 | FORMAT CONECT (a6,12i6) 128 | UNIT ENERGY kcal 129 | ENERGY -86.170263003 130 | END 131 | 132 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f+6 133 | XTLGRF 200 134 | DESCRP d19b3bb9977fb49 135 | REMARK created by reax.geo 136 | CRYSTX 2.91174 2.91174 2.91174 60.00000 60.00000 60.00000 137 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 138 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 139 | FORMAT CONECT (a6,12i6) 140 | UNIT ENERGY kcal 141 | ENERGY -86.013448203 142 | END 143 | 144 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f+8 145 | XTLGRF 200 146 | DESCRP 438895f7a40ac58 147 | REMARK created by reax.geo 148 | CRYSTX 2.92994 2.92994 2.92994 60.00000 60.00000 60.00000 149 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 150 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 151 | FORMAT CONECT (a6,12i6) 152 | UNIT ENERGY kcal 153 | ENERGY -85.803316371 154 | END 155 | 156 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f-10 157 | XTLGRF 200 158 | DESCRP 2fb84769bac2306 159 | REMARK created by reax.geo 160 | CRYSTX 2.75718 2.75718 2.75718 60.00000 60.00000 60.00000 161 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 162 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 163 | FORMAT CONECT (a6,12i6) 164 | UNIT ENERGY kcal 165 | ENERGY -85.145916444 166 | END 167 | 168 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f-12 169 | XTLGRF 200 170 | DESCRP 228a8dd90a2c50b 171 | REMARK created by reax.geo 172 | CRYSTX 2.73660 2.73660 2.73660 60.00000 60.00000 60.00000 173 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 174 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 175 | FORMAT CONECT (a6,12i6) 176 | UNIT ENERGY kcal 177 | ENERGY -84.577624221 178 | END 179 | 180 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f-15 181 | XTLGRF 200 182 | DESCRP b34659113c78767 183 | REMARK created by reax.geo 184 | CRYSTX 2.70515 2.70515 2.70515 60.00000 60.00000 60.00000 185 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 186 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 187 | FORMAT CONECT (a6,12i6) 188 | UNIT ENERGY kcal 189 | ENERGY -83.446805025 190 | END 191 | 192 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f-2 193 | XTLGRF 200 194 | DESCRP 08a1895c184876d 195 | REMARK created by reax.geo 196 | CRYSTX 2.83657 2.83657 2.83657 60.00000 60.00000 60.00000 197 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 198 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 199 | FORMAT CONECT (a6,12i6) 200 | UNIT ENERGY kcal 201 | ENERGY -86.256072984 202 | END 203 | 204 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f-4 205 | XTLGRF 200 206 | DESCRP ad475a5750e8ec9 207 | REMARK created by reax.geo 208 | CRYSTX 2.81714 2.81714 2.81714 60.00000 60.00000 60.00000 209 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 210 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 211 | FORMAT CONECT (a6,12i6) 212 | UNIT ENERGY kcal 213 | ENERGY -86.131151547 214 | END 215 | 216 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f-6 217 | XTLGRF 200 218 | DESCRP bb006cbdda12651 219 | REMARK created by reax.geo 220 | CRYSTX 2.79744 2.79744 2.79744 60.00000 60.00000 60.00000 221 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 222 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 223 | FORMAT CONECT (a6,12i6) 224 | UNIT ENERGY kcal 225 | ENERGY -85.912095108 226 | END 227 | 228 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/0/eos-exp/f-8 229 | XTLGRF 200 230 | DESCRP a285da536866087 231 | REMARK created by reax.geo 232 | CRYSTX 2.77746 2.77746 2.77746 60.00000 60.00000 60.00000 233 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 234 | HETATM 0 Al 0.00000 0.00000 0.00000 Al 1 1 0.00000 235 | FORMAT CONECT (a6,12i6) 236 | UNIT ENERGY kcal 237 | ENERGY -85.587280923 238 | END 239 | 240 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1 241 | XTLGRF 200 242 | DESCRP ae62c3e3e5941fd 243 | REMARK created by reax.geo 244 | CRYSTX 2.48978 2.48978 2.48978 60.00000 60.00000 60.00000 245 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 246 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 247 | FORMAT CONECT (a6,12i6) 248 | UNIT ENERGY kcal 249 | ENERGY -127.227882915 250 | END 251 | 252 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f+0 253 | XTLGRF 200 254 | DESCRP 017d4d131e74676 255 | REMARK created by reax.geo 256 | CRYSTX 2.48978 2.48978 2.48978 60.00000 60.00000 60.00000 257 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 258 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 259 | FORMAT CONECT (a6,12i6) 260 | UNIT ENERGY kcal 261 | ENERGY -127.227721488 262 | END 263 | 264 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f+10 265 | XTLGRF 200 266 | DESCRP 8bfca6e2cb5a6c4 267 | REMARK created by reax.geo 268 | CRYSTX 2.57015 2.57015 2.57015 60.00000 60.00000 60.00000 269 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 270 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 271 | FORMAT CONECT (a6,12i6) 272 | UNIT ENERGY kcal 273 | ENERGY -125.836405236 274 | END 275 | 276 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f+12 277 | XTLGRF 200 278 | DESCRP 807a2ecf09447fd 279 | REMARK created by reax.geo 280 | CRYSTX 2.58563 2.58563 2.58563 60.00000 60.00000 60.00000 281 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 282 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 283 | FORMAT CONECT (a6,12i6) 284 | UNIT ENERGY kcal 285 | ENERGY -125.317901712 286 | END 287 | 288 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f+15 289 | XTLGRF 200 290 | DESCRP 219ae9ef5ca014c 291 | REMARK created by reax.geo 292 | CRYSTX 2.60852 2.60852 2.60852 60.00000 60.00000 60.00000 293 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 294 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 295 | FORMAT CONECT (a6,12i6) 296 | UNIT ENERGY kcal 297 | ENERGY -124.431044835 298 | END 299 | 300 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f+2 301 | XTLGRF 200 302 | DESCRP 89b755c7fcb20e8 303 | REMARK created by reax.geo 304 | CRYSTX 2.50627 2.50627 2.50627 60.00000 60.00000 60.00000 305 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 306 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 307 | FORMAT CONECT (a6,12i6) 308 | UNIT ENERGY kcal 309 | ENERGY -127.14359496 310 | END 311 | 312 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f+4 313 | XTLGRF 200 314 | DESCRP ce31aa627931319 315 | REMARK created by reax.geo 316 | CRYSTX 2.52255 2.52255 2.52255 60.00000 60.00000 60.00000 317 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 318 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 319 | FORMAT CONECT (a6,12i6) 320 | UNIT ENERGY kcal 321 | ENERGY -126.950874183 322 | END 323 | 324 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f+6 325 | XTLGRF 200 326 | DESCRP a7d17f7e79d04ff 327 | REMARK created by reax.geo 328 | CRYSTX 2.53861 2.53861 2.53861 60.00000 60.00000 60.00000 329 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 330 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 331 | FORMAT CONECT (a6,12i6) 332 | UNIT ENERGY kcal 333 | ENERGY -126.663303513 334 | END 335 | 336 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f+8 337 | XTLGRF 200 338 | DESCRP bd2a33549ac94f9 339 | REMARK created by reax.geo 340 | CRYSTX 2.55448 2.55448 2.55448 60.00000 60.00000 60.00000 341 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 342 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 343 | FORMAT CONECT (a6,12i6) 344 | UNIT ENERGY kcal 345 | ENERGY -126.288470019 346 | END 347 | 348 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f-10 349 | XTLGRF 200 350 | DESCRP bd178676bc49638 351 | REMARK created by reax.geo 352 | CRYSTX 2.40385 2.40385 2.40385 60.00000 60.00000 60.00000 353 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 354 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 355 | FORMAT CONECT (a6,12i6) 356 | UNIT ENERGY kcal 357 | ENERGY -125.46475416 358 | END 359 | 360 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f-12 361 | XTLGRF 200 362 | DESCRP d6bdf9d1fd6fdd4 363 | REMARK created by reax.geo 364 | CRYSTX 2.38592 2.38592 2.38592 60.00000 60.00000 60.00000 365 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 366 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 367 | FORMAT CONECT (a6,12i6) 368 | UNIT ENERGY kcal 369 | ENERGY -124.539500718 370 | END 371 | 372 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f-15 373 | XTLGRF 200 374 | DESCRP 9ff7c76a4ae2d8d 375 | REMARK created by reax.geo 376 | CRYSTX 2.35848 2.35848 2.35848 60.00000 60.00000 60.00000 377 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 378 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 379 | FORMAT CONECT (a6,12i6) 380 | UNIT ENERGY kcal 381 | ENERGY -122.666809152 382 | END 383 | 384 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f-2 385 | XTLGRF 200 386 | DESCRP 8422db0d9cc1020 387 | REMARK created by reax.geo 388 | CRYSTX 2.47306 2.47306 2.47306 60.00000 60.00000 60.00000 389 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 390 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 391 | FORMAT CONECT (a6,12i6) 392 | UNIT ENERGY kcal 393 | ENERGY -127.188402483 394 | END 395 | 396 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f-4 397 | XTLGRF 200 398 | DESCRP a1a3da4ee5c0ee1 399 | REMARK created by reax.geo 400 | CRYSTX 2.45614 2.45614 2.45614 60.00000 60.00000 60.00000 401 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 402 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 403 | FORMAT CONECT (a6,12i6) 404 | UNIT ENERGY kcal 405 | ENERGY -127.010486868 406 | END 407 | 408 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f-6 409 | XTLGRF 200 410 | DESCRP 6cf09437f2f3c4d 411 | REMARK created by reax.geo 412 | CRYSTX 2.43895 2.43895 2.43895 60.00000 60.00000 60.00000 413 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 414 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 415 | FORMAT CONECT (a6,12i6) 416 | UNIT ENERGY kcal 417 | ENERGY -126.677647455 418 | END 419 | 420 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/1/eos-exp/f-8 421 | XTLGRF 200 422 | DESCRP 31718e1780c3ff3 423 | REMARK created by reax.geo 424 | CRYSTX 2.42153 2.42153 2.42153 60.00000 60.00000 60.00000 425 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 426 | HETATM 0 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 427 | FORMAT CONECT (a6,12i6) 428 | UNIT ENERGY kcal 429 | ENERGY -126.169613625 430 | END 431 | 432 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2 433 | XTLGRF 200 434 | DESCRP 8e13ad05577dbab 435 | REMARK created by reax.geo 436 | CRYSTX 4.21491 4.21491 4.21491 37.77179 37.77179 37.77179 437 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 438 | HETATM 0 Al 1.15824 1.86074 5.43916 Al 1 1 0.00000 439 | HETATM 1 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 440 | FORMAT CONECT (a6,12i6) 441 | UNIT ENERGY kcal 442 | ENERGY -234.409046079 443 | END 444 | 445 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f+0 446 | XTLGRF 200 447 | DESCRP cdf1c5197e3f781 448 | REMARK created by reax.geo 449 | CRYSTX 4.21491 4.21491 4.21491 37.77172 37.77172 37.77172 450 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 451 | HETATM 0 Al 1.15824 1.86074 5.43916 Al 1 1 0.00000 452 | HETATM 1 Ni 0.00000 0.00000 0.00000 Ni 1 1 0.00000 453 | FORMAT CONECT (a6,12i6) 454 | UNIT ENERGY kcal 455 | ENERGY -234.408884652 456 | END 457 | 458 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f+10 459 | XTLGRF 200 460 | DESCRP 2f698c6f24a158f 461 | REMARK created by reax.geo 462 | CRYSTX 4.35097 4.35097 4.35097 37.77169 37.77169 37.77169 463 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 464 | HETATM 0 Al 1.17715 1.89112 5.52796 Al 1 1 0.00000 465 | HETATM 1 Ni 2.37235 3.81123 11.14068 Ni 1 1 0.00000 466 | FORMAT CONECT (a6,12i6) 467 | UNIT ENERGY kcal 468 | ENERGY -232.359661131 469 | END 470 | 471 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f+12 472 | XTLGRF 200 473 | DESCRP f0398833d40d7ed 474 | REMARK created by reax.geo 475 | CRYSTX 4.37719 4.37719 4.37719 37.77167 37.77167 37.77167 476 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 477 | HETATM 0 Al 1.18119 1.89761 5.54693 Al 1 1 0.00000 478 | HETATM 1 Ni 2.38272 3.82789 11.18938 Ni 1 1 0.00000 479 | FORMAT CONECT (a6,12i6) 480 | UNIT ENERGY kcal 481 | ENERGY -231.519110742 482 | END 483 | 484 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f+15 485 | XTLGRF 200 486 | DESCRP 18fb2774ddf2bff 487 | REMARK created by reax.geo 488 | CRYSTX 4.41592 4.41592 4.41592 37.77169 37.77169 37.77169 489 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 490 | HETATM 0 Al 1.18559 1.90467 5.56758 Al 1 1 0.00000 491 | HETATM 1 Ni 2.39961 3.85502 11.26868 Ni 1 1 0.00000 492 | FORMAT CONECT (a6,12i6) 493 | UNIT ENERGY kcal 494 | ENERGY -230.062162884 495 | END 496 | 497 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f+2 498 | XTLGRF 200 499 | DESCRP b5c9f43c1739fa2 500 | REMARK created by reax.geo 501 | CRYSTX 4.24283 4.24283 4.24283 37.77173 37.77173 37.77173 502 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 503 | HETATM 0 Al 1.16226 1.86719 5.45801 Al 1 1 0.00000 504 | HETATM 1 Ni 2.32781 3.73968 10.93153 Ni 1 1 0.00000 505 | FORMAT CONECT (a6,12i6) 506 | UNIT ENERGY kcal 507 | ENERGY -234.340370421 508 | END 509 | 510 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f+4 511 | XTLGRF 200 512 | DESCRP d6547fc4a9cbbba 513 | REMARK created by reax.geo 514 | CRYSTX 4.27038 4.27038 4.27038 37.77170 37.77170 37.77170 515 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 516 | HETATM 0 Al 1.16587 1.87300 5.47499 Al 1 1 0.00000 517 | HETATM 1 Ni 2.33934 3.75820 10.98565 Ni 1 1 0.00000 518 | FORMAT CONECT (a6,12i6) 519 | UNIT ENERGY kcal 520 | ENERGY -234.084047406 521 | END 522 | 523 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f+6 524 | XTLGRF 200 525 | DESCRP 58d8a528e7e3451 526 | REMARK created by reax.geo 527 | CRYSTX 4.29758 4.29758 4.29758 37.77190 37.77190 37.77190 528 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 529 | HETATM 0 Al 1.16955 1.87891 5.49225 Al 1 1 0.00000 530 | HETATM 1 Ni 2.35062 3.77632 11.03857 Ni 1 1 0.00000 531 | FORMAT CONECT (a6,12i6) 532 | UNIT ENERGY kcal 533 | ENERGY -233.6563581 534 | END 535 | 536 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f+8 537 | XTLGRF 200 538 | DESCRP e66ae6536dfbc48 539 | REMARK created by reax.geo 540 | CRYSTX 4.32444 4.32444 4.32444 37.77176 37.77176 37.77176 541 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 542 | HETATM 0 Al 1.17304 1.88451 5.50863 Al 1 1 0.00000 543 | HETATM 1 Ni 2.36189 3.79443 11.09154 Ni 1 1 0.00000 544 | FORMAT CONECT (a6,12i6) 545 | UNIT ENERGY kcal 546 | ENERGY -233.075428449 547 | END 548 | 549 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f-10 550 | XTLGRF 200 551 | DESCRP d7898533abefd14 552 | REMARK created by reax.geo 553 | CRYSTX 4.06946 4.06946 4.06946 37.77179 37.77179 37.77179 554 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 555 | HETATM 0 Al 1.13831 1.82872 5.34555 Al 1 1 0.00000 556 | HETATM 1 Ni 0.01993 0.03202 0.09360 Ni 1 1 0.00000 557 | FORMAT CONECT (a6,12i6) 558 | UNIT ENERGY kcal 559 | ENERGY -231.066999837 560 | END 561 | 562 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f-12 563 | XTLGRF 200 564 | DESCRP 151d265e24aaca2 565 | REMARK created by reax.geo 566 | CRYSTX 4.03908 4.03908 4.03908 37.77170 37.77170 37.77170 567 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 568 | HETATM 0 Al 1.13421 1.82214 5.32632 Al 1 1 0.00000 569 | HETATM 1 Ni 0.02403 0.03860 0.11283 Ni 1 1 0.00000 570 | FORMAT CONECT (a6,12i6) 571 | UNIT ENERGY kcal 572 | ENERGY -229.44957048 573 | END 574 | 575 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f-15 576 | XTLGRF 200 577 | DESCRP ddb94050bd6b70e 578 | REMARK created by reax.geo 579 | CRYSTX 3.99265 3.99265 3.99265 37.77177 37.77177 37.77177 580 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 581 | HETATM 0 Al 1.12799 1.81214 5.29707 Al 1 1 0.00000 582 | HETATM 1 Ni 0.03026 0.04861 0.14208 Ni 1 1 0.00000 583 | FORMAT CONECT (a6,12i6) 584 | UNIT ENERGY kcal 585 | ENERGY -226.252416501 586 | END 587 | 588 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f-2 589 | XTLGRF 200 590 | DESCRP b77f88ee348db54 591 | REMARK created by reax.geo 592 | CRYSTX 4.18663 4.18663 4.18663 37.77167 37.77167 37.77167 593 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 594 | HETATM 0 Al 1.15423 1.85430 5.42035 Al 1 1 0.00000 595 | HETATM 1 Ni 0.00400 0.00643 0.01880 Ni 1 1 0.00000 596 | FORMAT CONECT (a6,12i6) 597 | UNIT ENERGY kcal 598 | ENERGY -234.266506038 599 | END 600 | 601 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f-4 602 | XTLGRF 200 603 | DESCRP d1e06d9e0bef0b7 604 | REMARK created by reax.geo 605 | CRYSTX 4.15795 4.15795 4.15795 37.77162 37.77162 37.77162 606 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 607 | HETATM 0 Al 1.15039 1.84814 5.40233 Al 1 1 0.00000 608 | HETATM 1 Ni 0.00784 0.01260 0.03683 Ni 1 1 0.00000 609 | FORMAT CONECT (a6,12i6) 610 | UNIT ENERGY kcal 611 | ENERGY -233.889942969 612 | END 613 | 614 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f-6 615 | XTLGRF 200 616 | DESCRP d54ff840ea97b4f 617 | REMARK created by reax.geo 618 | CRYSTX 4.12887 4.12887 4.12887 37.77184 37.77184 37.77184 619 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 620 | HETATM 0 Al 1.14642 1.84175 5.38364 Al 1 1 0.00000 621 | HETATM 1 Ni 0.01182 0.01899 0.05551 Ni 1 1 0.00000 622 | FORMAT CONECT (a6,12i6) 623 | UNIT ENERGY kcal 624 | ENERGY -233.250438378 625 | END 626 | 627 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/2/eos-exp/f-8 628 | XTLGRF 200 629 | DESCRP faf3d71f227e71e 630 | REMARK created by reax.geo 631 | CRYSTX 4.09937 4.09937 4.09937 37.77167 37.77167 37.77167 632 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 633 | HETATM 0 Al 1.14238 1.83525 5.36466 Al 1 1 0.00000 634 | HETATM 1 Ni 0.01586 0.02548 0.07449 Ni 1 1 0.00000 635 | FORMAT CONECT (a6,12i6) 636 | UNIT ENERGY kcal 637 | ENERGY -232.319996211 638 | END 639 | 640 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3 641 | XTLGRF 200 642 | DESCRP 9f23a5d523ba81e 643 | REMARK created by reax.geo 644 | CRYSTX 2.81673 2.81673 3.00437 90.00000 90.00000 90.00000 645 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 646 | HETATM 0 Al -0.00000 0.00000 0.00000 Al 1 1 0.00000 647 | HETATM 1 Ni 1.40837 1.40837 1.50219 Ni 1 1 0.00000 648 | FORMAT CONECT (a6,12i6) 649 | UNIT ENERGY kcal 650 | ENERGY -245.307997533 651 | END 652 | 653 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f+0 654 | XTLGRF 200 655 | DESCRP e46d258c64ef4da 656 | REMARK created by reax.geo 657 | CRYSTX 2.81673 2.81673 3.00437 90.00000 90.00000 90.00000 658 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 659 | HETATM 0 Al -0.00000 0.00000 0.00000 Al 1 1 0.00000 660 | HETATM 1 Ni 1.40837 1.40837 1.50219 Ni 1 1 0.00000 661 | FORMAT CONECT (a6,12i6) 662 | UNIT ENERGY kcal 663 | ENERGY -245.356402572 664 | END 665 | 666 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f+10 667 | XTLGRF 200 668 | DESCRP b7dc2afb79a7a53 669 | REMARK created by reax.geo 670 | CRYSTX 2.90765 2.90765 3.10135 90.00000 90.00000 90.00000 671 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 672 | HETATM 0 Al 2.88416 2.88416 3.07558 Al 1 1 0.00000 673 | HETATM 1 Ni 1.43186 1.43186 1.52796 Ni 1 1 0.00000 674 | FORMAT CONECT (a6,12i6) 675 | UNIT ENERGY kcal 676 | ENERGY -243.953302149 677 | END 678 | 679 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f+12 680 | XTLGRF 200 681 | DESCRP aa34a7c4db162a1 682 | REMARK created by reax.geo 683 | CRYSTX 2.92517 2.92517 3.12003 90.00000 90.00000 90.00000 684 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 685 | HETATM 0 Al 2.89722 2.89722 3.08956 Al 1 1 0.00000 686 | HETATM 1 Ni 1.43632 1.43632 1.53266 Ni 1 1 0.00000 687 | FORMAT CONECT (a6,12i6) 688 | UNIT ENERGY kcal 689 | ENERGY -243.186616143 690 | END 691 | 692 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f+15 693 | XTLGRF 200 694 | DESCRP 39f1866b9e106f4 695 | REMARK created by reax.geo 696 | CRYSTX 2.95105 2.95105 3.14765 90.00000 90.00000 90.00000 697 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 698 | HETATM 0 Al 2.91884 2.91884 3.11290 Al 1 1 0.00000 699 | HETATM 1 Ni 1.44058 1.44058 1.53694 Ni 1 1 0.00000 700 | FORMAT CONECT (a6,12i6) 701 | UNIT ENERGY kcal 702 | ENERGY -241.809182613 703 | END 704 | 705 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f+2 706 | XTLGRF 200 707 | DESCRP b244fc3921440c6 708 | REMARK created by reax.geo 709 | CRYSTX 2.83539 2.83539 3.02427 90.00000 90.00000 90.00000 710 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 711 | HETATM 0 Al 2.83050 2.83050 3.01881 Al 1 1 0.00000 712 | HETATM 1 Ni 1.41325 1.41325 1.50765 Ni 1 1 0.00000 713 | FORMAT CONECT (a6,12i6) 714 | UNIT ENERGY kcal 715 | ENERGY -245.459485242 716 | END 717 | 718 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f+4 719 | XTLGRF 200 720 | DESCRP 55c2636aa4e0823 721 | REMARK created by reax.geo 722 | CRYSTX 2.85380 2.85380 3.04391 90.00000 90.00000 90.00000 723 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 724 | HETATM 0 Al 2.84445 2.84445 3.03351 Al 1 1 0.00000 725 | HETATM 1 Ni 1.41771 1.41771 1.51259 Ni 1 1 0.00000 726 | FORMAT CONECT (a6,12i6) 727 | UNIT ENERGY kcal 728 | ENERGY -245.353104849 729 | END 730 | 731 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f+6 732 | XTLGRF 200 733 | DESCRP d712472047345e7 734 | REMARK created by reax.geo 735 | CRYSTX 2.87197 2.87197 3.06329 90.00000 90.00000 90.00000 736 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 737 | HETATM 0 Al 2.85750 2.85750 3.04722 Al 1 1 0.00000 738 | HETATM 1 Ni 1.42284 1.42284 1.51826 Ni 1 1 0.00000 739 | FORMAT CONECT (a6,12i6) 740 | UNIT ENERGY kcal 741 | ENERGY -245.053680825 742 | END 743 | 744 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f+8 745 | XTLGRF 200 746 | DESCRP ec9d7ced33e60b9 747 | REMARK created by reax.geo 748 | CRYSTX 2.88993 2.88993 3.08244 90.00000 90.00000 90.00000 749 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 750 | HETATM 0 Al 2.87072 2.87072 3.06122 Al 1 1 0.00000 751 | HETATM 1 Ni 1.42758 1.42758 1.52341 Ni 1 1 0.00000 752 | FORMAT CONECT (a6,12i6) 753 | UNIT ENERGY kcal 754 | ENERGY -244.580768898 755 | END 756 | 757 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f-10 758 | XTLGRF 200 759 | DESCRP d388c64cd56ab2c 760 | REMARK created by reax.geo 761 | CRYSTX 2.71952 2.71952 2.90069 90.00000 90.00000 90.00000 762 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 763 | HETATM 0 Al 0.02354 0.02354 0.02711 Al 1 1 0.00000 764 | HETATM 1 Ni 1.38482 1.38482 1.47508 Ni 1 1 0.00000 765 | FORMAT CONECT (a6,12i6) 766 | UNIT ENERGY kcal 767 | ENERGY -240.729950874 768 | END 769 | 770 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f-12 771 | XTLGRF 200 772 | DESCRP 510d3c9c74cf7e5 773 | REMARK created by reax.geo 774 | CRYSTX 2.69922 2.69922 2.87904 90.00000 90.00000 90.00000 775 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 776 | HETATM 0 Al 0.02852 0.02852 0.03294 Al 1 1 0.00000 777 | HETATM 1 Ni 1.37984 1.37984 1.46925 Ni 1 1 0.00000 778 | FORMAT CONECT (a6,12i6) 779 | UNIT ENERGY kcal 780 | ENERGY -238.751340135 781 | END 782 | 783 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f-15 784 | XTLGRF 200 785 | DESCRP 684dd3f52bd791a 786 | REMARK created by reax.geo 787 | CRYSTX 2.66820 2.66820 2.84594 90.00000 90.00000 90.00000 788 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 789 | HETATM 0 Al 0.03584 0.03584 0.04165 Al 1 1 0.00000 790 | HETATM 1 Ni 1.37253 1.37253 1.46054 Ni 1 1 0.00000 791 | FORMAT CONECT (a6,12i6) 792 | UNIT ENERGY kcal 793 | ENERGY -234.927964701 794 | END 795 | 796 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f-2 797 | XTLGRF 200 798 | DESCRP 8dae7f355878af1 799 | REMARK created by reax.geo 800 | CRYSTX 2.79782 2.79782 2.98421 90.00000 90.00000 90.00000 801 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 802 | HETATM 0 Al 0.00491 0.00491 0.00557 Al 1 1 0.00000 803 | HETATM 1 Ni 1.40346 1.40346 1.49662 Ni 1 1 0.00000 804 | FORMAT CONECT (a6,12i6) 805 | UNIT ENERGY kcal 806 | ENERGY -245.016368127 807 | END 808 | 809 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f-4 810 | XTLGRF 200 811 | DESCRP a0aaf9afea39e45 812 | REMARK created by reax.geo 813 | CRYSTX 2.77866 2.77866 2.96377 90.00000 90.00000 90.00000 814 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 815 | HETATM 0 Al 0.00956 0.00956 0.01091 Al 1 1 0.00000 816 | HETATM 1 Ni 1.39881 1.39881 1.49128 Ni 1 1 0.00000 817 | FORMAT CONECT (a6,12i6) 818 | UNIT ENERGY kcal 819 | ENERGY -244.416989676 820 | END 821 | 822 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f-6 823 | XTLGRF 200 824 | DESCRP 245bf84490158b1 825 | REMARK created by reax.geo 826 | CRYSTX 2.75923 2.75923 2.94304 90.00000 90.00000 90.00000 827 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 828 | HETATM 0 Al 0.01414 0.01414 0.01619 Al 1 1 0.00000 829 | HETATM 1 Ni 1.39423 1.39423 1.48600 Ni 1 1 0.00000 830 | FORMAT CONECT (a6,12i6) 831 | UNIT ENERGY kcal 832 | ENERGY -243.524367549 833 | END 834 | 835 | # file:/home-research/jkitchin/research/fe-ni-al/AlNi_fcc/3/eos-exp/f-8 836 | XTLGRF 200 837 | DESCRP c7e897607f1973f 838 | REMARK created by reax.geo 839 | CRYSTX 2.73952 2.73952 2.92202 90.00000 90.00000 90.00000 840 | FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5) 841 | HETATM 0 Al 0.01871 0.01871 0.02148 Al 1 1 0.00000 842 | HETATM 1 Ni 1.38966 1.38966 1.48071 Ni 1 1 0.00000 843 | FORMAT CONECT (a6,12i6) 844 | UNIT ENERGY kcal 845 | ENERGY -242.306723688 846 | END 847 | #+end_example 848 | 849 | * Generating trainset.in. 850 | The trainsets are more complicated to make. The trainset.in file has several different sections. We need to create a dictionary that has the contents of these sections in it, and then a convenient function will write out the file for us. This file has heats of formation, and equation of state data. 851 | 852 | #+BEGIN_SRC python 853 | import glob, os 854 | 855 | from trainset import * 856 | from jasp import * 857 | 858 | os.chdir('/home-research/jkitchin/research/fe-ni-al/AlNi_fcc') 859 | if os.path.exists('trainset.in'): os.unlink('trainset.in') 860 | # reference endpoints 861 | with jasp('0') as c0: 862 | atoms0 = c0.get_atoms() 863 | e0 = atoms0.get_potential_energy()/len(atoms0) 864 | d0 = reax_hash(atoms0) 865 | 866 | with jasp('1') as c1: 867 | atoms1 = c1.get_atoms() 868 | e1 = atoms1.get_potential_energy()/len(atoms1) 869 | d1 = reax_hash(atoms1) 870 | 871 | #reference energies in eV/atom 872 | reference_energies = {} 873 | reference_energies[atoms0[0].symbol] = (d0, e0) # (description, energy) 874 | reference_energies[atoms1[0].symbol] = (d1, e1) 875 | 876 | cells = parse_trainset() 877 | 878 | dirs = [0, 1, 2, 3] 879 | # First we do the equations of state 880 | for wd in dirs: 881 | d = str(wd) # directory name as string 882 | if (os.path.exists(os.path.join(d,'OUTCAR')) 883 | and not os.path.exists(os.path.join(d,'error'))): 884 | # geometry of cell 885 | with jasp(d) as calc: 886 | atoms = calc.get_atoms() 887 | cells = cell_parameters(atoms, weight=1.0, cells=cells) 888 | 889 | # equation of state Adri suggested we put a higher weight on 890 | # points close to the minimum 891 | eosdir = os.path.join(d,'eos-exp') 892 | if os.path.isdir(eosdir): 893 | edirs = glob.glob('%s/*' % eosdir) 894 | cells['ENERGY'].append('# Volume %s' % reax_hash(atoms)) 895 | for ed in edirs: 896 | if (os.path.exists(os.path.join(ed,'energy')) 897 | and not os.path.exists(os.path.join(ed,'error'))): 898 | with jasp(ed) as calc2: 899 | atoms2 = calc2.get_atoms() 900 | e1 = atoms.get_potential_energy() 901 | e2 = atoms2.get_potential_energy() 902 | weight = 0.1 + 0.25*np.abs((e2 - e1))*23.061 #kcal 903 | 904 | cells = eos(atoms, 905 | atoms2, 906 | weight=weight, 907 | cells=cells) 908 | 909 | 910 | # comment line for readability 911 | cells['ENERGY'].append('# Heats_of_formation') 912 | 913 | for i in [0, 1, 2]: 914 | with jasp('{}'.format(i)) as calc: 915 | atoms = calc.get_atoms() 916 | 917 | # This is a heat of formation 918 | cells = energy(atoms, 919 | reference_energies, 920 | weight=1.0, 921 | cells=cells) 922 | 923 | write_trainset('trainset.in', cells=cells) 924 | #+END_SRC 925 | 926 | #+RESULTS: 927 | 928 | Now the results. 929 | 930 | #+BEGIN_SRC sh 931 | cat /home-research/jkitchin/research/fe-ni-al/AlNi_fcc/trainset.in 932 | #+END_SRC 933 | 934 | #+RESULTS: 935 | #+begin_example 936 | ENERGY 937 | # Volume b92e4a4aaa2b15b 938 | 0.10 + b92e4a4aaa2b15b /1 - 96d77167125bccf /1 0.000000 939 | 0.29 + b92e4a4aaa2b15b /1 - f9acb4130a63a51 /1 -0.752942 940 | 0.36 + b92e4a4aaa2b15b /1 - 72ada980e18d7f7 /1 -1.053542 941 | 0.49 + b92e4a4aaa2b15b /1 - 719cb1f2e6d122d /1 -1.573360 942 | 0.11 + b92e4a4aaa2b15b /1 - 10976c1b680050a /1 -0.031409 943 | 0.13 + b92e4a4aaa2b15b /1 - 769ce5515f17062 /1 -0.128842 944 | 0.17 + b92e4a4aaa2b15b /1 - d19b3bb9977fb49 /1 -0.285657 945 | 0.22 + b92e4a4aaa2b15b /1 - 438895f7a40ac58 /1 -0.495788 946 | 0.39 + b92e4a4aaa2b15b /1 - 2fb84769bac2306 /1 -1.153188 947 | 0.53 + b92e4a4aaa2b15b /1 - 228a8dd90a2c50b /1 -1.721481 948 | 0.81 + b92e4a4aaa2b15b /1 - b34659113c78767 /1 -2.852300 949 | 0.11 + b92e4a4aaa2b15b /1 - 08a1895c184876d /1 -0.043032 950 | 0.14 + b92e4a4aaa2b15b /1 - ad475a5750e8ec9 /1 -0.167953 951 | 0.20 + b92e4a4aaa2b15b /1 - bb006cbdda12651 /1 -0.387010 952 | 0.28 + b92e4a4aaa2b15b /1 - a285da536866087 /1 -0.711824 953 | # Volume ae62c3e3e5941fd 954 | 0.10 + ae62c3e3e5941fd /1 - 017d4d131e74676 /1 -0.000161 955 | 0.45 + ae62c3e3e5941fd /1 - 8bfca6e2cb5a6c4 /1 -1.391478 956 | 0.58 + ae62c3e3e5941fd /1 - 807a2ecf09447fd /1 -1.909981 957 | 0.80 + ae62c3e3e5941fd /1 - 219ae9ef5ca014c /1 -2.796838 958 | 0.12 + ae62c3e3e5941fd /1 - 89b755c7fcb20e8 /1 -0.084288 959 | 0.17 + ae62c3e3e5941fd /1 - ce31aa627931319 /1 -0.277009 960 | 0.24 + ae62c3e3e5941fd /1 - a7d17f7e79d04ff /1 -0.564579 961 | 0.33 + ae62c3e3e5941fd /1 - bd2a33549ac94f9 /1 -0.939413 962 | 0.54 + ae62c3e3e5941fd /1 - bd178676bc49638 /1 -1.763129 963 | 0.77 + ae62c3e3e5941fd /1 - d6bdf9d1fd6fdd4 /1 -2.688382 964 | 1.24 + ae62c3e3e5941fd /1 - 9ff7c76a4ae2d8d /1 -4.561074 965 | 0.11 + ae62c3e3e5941fd /1 - 8422db0d9cc1020 /1 -0.039480 966 | 0.15 + ae62c3e3e5941fd /1 - a1a3da4ee5c0ee1 /1 -0.217396 967 | 0.24 + ae62c3e3e5941fd /1 - 6cf09437f2f3c4d /1 -0.550235 968 | 0.36 + ae62c3e3e5941fd /1 - 31718e1780c3ff3 /1 -1.058269 969 | # Volume 8e13ad05577dbab 970 | 0.10 + 8e13ad05577dbab /1 - cdf1c5197e3f781 /1 -0.000161 971 | 0.61 + 8e13ad05577dbab /1 - 2f698c6f24a158f /1 -2.049385 972 | 0.82 + 8e13ad05577dbab /1 - f0398833d40d7ed /1 -2.889935 973 | 1.19 + 8e13ad05577dbab /1 - 18fb2774ddf2bff /1 -4.346883 974 | 0.12 + 8e13ad05577dbab /1 - b5c9f43c1739fa2 /1 -0.068676 975 | 0.18 + 8e13ad05577dbab /1 - d6547fc4a9cbbba /1 -0.324999 976 | 0.29 + 8e13ad05577dbab /1 - 58d8a528e7e3451 /1 -0.752688 977 | 0.43 + 8e13ad05577dbab /1 - e66ae6536dfbc48 /1 -1.333618 978 | 0.94 + 8e13ad05577dbab /1 - d7898533abefd14 /1 -3.342046 979 | 1.34 + 8e13ad05577dbab /1 - 151d265e24aaca2 /1 -4.959476 980 | 2.14 + 8e13ad05577dbab /1 - ddb94050bd6b70e /1 -8.156630 981 | 0.14 + 8e13ad05577dbab /1 - b77f88ee348db54 /1 -0.142540 982 | 0.23 + 8e13ad05577dbab /1 - d1e06d9e0bef0b7 /1 -0.519103 983 | 0.39 + 8e13ad05577dbab /1 - d54ff840ea97b4f /1 -1.158608 984 | 0.62 + 8e13ad05577dbab /1 - faf3d71f227e71e /1 -2.089050 985 | # Volume 9f23a5d523ba81e 986 | 0.11 + 9f23a5d523ba81e /1 - e46d258c64ef4da /1 0.048405 987 | 0.44 + 9f23a5d523ba81e /1 - b7dc2afb79a7a53 /1 -1.354695 988 | 0.63 + 9f23a5d523ba81e /1 - aa34a7c4db162a1 /1 -2.121381 989 | 0.97 + 9f23a5d523ba81e /1 - 39f1866b9e106f4 /1 -3.498815 990 | 0.14 + 9f23a5d523ba81e /1 - b244fc3921440c6 /1 0.151488 991 | 0.11 + 9f23a5d523ba81e /1 - 55c2636aa4e0823 /1 0.045107 992 | 0.16 + 9f23a5d523ba81e /1 - d712472047345e7 /1 -0.254317 993 | 0.28 + 9f23a5d523ba81e /1 - ec9d7ced33e60b9 /1 -0.727229 994 | 1.24 + 9f23a5d523ba81e /1 - d388c64cd56ab2c /1 -4.578047 995 | 1.74 + 9f23a5d523ba81e /1 - 510d3c9c74cf7e5 /1 -6.556657 996 | 2.70 + 9f23a5d523ba81e /1 - 684dd3f52bd791a /1 -10.380033 997 | 0.17 + 9f23a5d523ba81e /1 - 8dae7f355878af1 /1 -0.291629 998 | 0.32 + 9f23a5d523ba81e /1 - a0aaf9afea39e45 /1 -0.891008 999 | 0.55 + 9f23a5d523ba81e /1 - 245bf84490158b1 /1 -1.783630 1000 | 0.85 + 9f23a5d523ba81e /1 - c7e897607f1973f /1 -3.001274 1001 | # Heats_of_formation 1002 | 1.00 + b92e4a4aaa2b15b /1 - b92e4a4aaa2b15b / 1.000000 0.000000 1003 | 1.00 + ae62c3e3e5941fd /1 - ae62c3e3e5941fd / 1.000000 0.000000 1004 | 1.00 + 8e13ad05577dbab /1 - ae62c3e3e5941fd / 1.000000 - b92e4a4aaa2b15b / 1.000000 -20.882058 1005 | ENDENERGY 1006 | CELL PARAMETERS 1007 | # created by reax.trainset 1008 | b92e4a4aaa2b15b 1.000000 a 2.85573030929 1009 | b92e4a4aaa2b15b 1.000000 b 2.85573030929 1010 | b92e4a4aaa2b15b 1.000000 c 2.85573030929 1011 | b92e4a4aaa2b15b 1.000000 alpha 60.0 1012 | b92e4a4aaa2b15b 1.000000 beta 60.0 1013 | b92e4a4aaa2b15b 1.000000 gamma 60.0 1014 | # created by reax.trainset 1015 | ae62c3e3e5941fd 1.000000 a 2.48978198238 1016 | ae62c3e3e5941fd 1.000000 b 2.48978198238 1017 | ae62c3e3e5941fd 1.000000 c 2.48978198238 1018 | ae62c3e3e5941fd 1.000000 alpha 60.0 1019 | ae62c3e3e5941fd 1.000000 beta 60.0 1020 | ae62c3e3e5941fd 1.000000 gamma 60.0 1021 | # created by reax.trainset 1022 | 8e13ad05577dbab 1.000000 a 4.21491031746 1023 | 8e13ad05577dbab 1.000000 b 4.21491031746 1024 | 8e13ad05577dbab 1.000000 c 4.21491031746 1025 | 8e13ad05577dbab 1.000000 alpha 37.771789037 1026 | 8e13ad05577dbab 1.000000 beta 37.771789037 1027 | 8e13ad05577dbab 1.000000 gamma 37.771789037 1028 | # created by reax.trainset 1029 | 9f23a5d523ba81e 1.000000 a 2.81673152555 1030 | 9f23a5d523ba81e 1.000000 b 2.81673152555 1031 | 9f23a5d523ba81e 1.000000 c 3.00437259302 1032 | 9f23a5d523ba81e 1.000000 alpha 90.0 1033 | 9f23a5d523ba81e 1.000000 beta 90.0 1034 | 9f23a5d523ba81e 1.000000 gamma 90.0 1035 | ENDCELL PARAMETERS 1036 | #+end_example 1037 | 1038 | --------------------------------------------------------------------------------