def check1(self,filename='FORCE_CONSTANTS'): from lxml import etree from ase import io ref=io.read('SPOSCAR') fc2=readfc2(filename) np.set_printoptions(precision=2,suppress=True) files=['dir_POSCAR-001'] vasprunxml="dir_SPOSCAR/vasprun.xml" if exists(vasprunxml): vasprun = etree.iterparse(vasprunxml, tag='varray') forces0=self.parseVasprun(vasprun,'forces') print forces0.max() else: forces0=0.0 for file in files: print file POSCAR='dirs/%s/POSCAR'%file vasprunxml="dirs/%s/vasprun.xml"%file atoms=io.read(POSCAR) u=atoms.positions-ref.positions f=-np.einsum('ijkl,jl',fc2,u) vasprun = etree.iterparse(vasprunxml, tag='varray') forces=self.parseVasprun(vasprun,'forces')-forces0 print np.abs(f).max(),"\n" print np.abs(forces-f).max() print np.allclose(f,forces,atol=1e-2)
def check(self,filename='FORCE_CONSTANTS'): try: from lxml import etree except ImportError: print "You need to install python-lxml." from ase import io ref=io.read('SPOSCAR') files=shell_exec("ls dirs").split('\n') fc2=readfc2(filename) np.set_printoptions(precision=2,suppress=True) vasprunxml="dir_SPOSCAR/vasprun.xml" if exists(vasprunxml): vasprun = etree.iterparse(vasprunxml, tag='varray') forces0=self.parseVasprun(vasprun,'forces') print forces0.max() else: forces0=0.0 for file in files: print file POSCAR='dirs/%s/POSCAR'%file vasprunxml="dirs/%s/vasprun.xml"%file atoms=io.read(POSCAR) u=atoms.positions-ref.positions f=-np.einsum('ijkl,jl',fc2,u) vasprun = etree.iterparse(vasprunxml, tag='varray') forces=self.parseVasprun(vasprun,'forces')-forces0 print np.abs(f).max(),"\n" print np.abs(forces-f).max() print np.allclose(f,forces,atol=1e-2)
def fc(self, dir, mm): fc = readfc2(dir + '/FORCE_CONSTANTS') atoms = read(dir + '/POSCAR') fc = self.nomalizeFC(fc, mm, atoms) fc = self.rearangefc(fc, atoms, dir) return fc
def stub(self): files=shell_exec("ls dirs").split('\n') files=map(lambda x:x.replace('dir_',''),files) fc2=readfc2('fc2') for file in files: from ase import io ref=io.read('SPOSCAR') a='dirs/dir_'+str(file) atoms=io.read(a+"/POSCAR") u=atoms.positions-ref.positions f=-np.einsum('ijkl,jl',fc2,u) forces="" for force in f: forces+="<v> %f %f %f </v>\n"%tuple(force) vasprun='<root><calculation><varray name="forces" >\n' vasprun+=forces vasprun+='</varray></calculation></root>\n' write(vasprun,a+"/vasprun.xml")
def getjvhar(): allpos = np.load('allpos.npy') atoms = io.read("POSCAR") n = len(atoms) m = len(allpos) from aces.f import readfc2 fc2 = readfc2() sigmas_haR = np.zeros([m, n, 3, 3]) R = allpos dR = R - np.einsum('i,jk', np.ones(m), atoms.positions) dRI = np.einsum('ijk,l', dR, np.ones(n)) dRJ = np.einsum('ilkj', dRI) RI = np.einsum('ijk,l', R, np.ones(n)) RJ = np.einsum('ilkj', RI) sigmas_haR = .5 * np.einsum('ijab,tiaj,tibj->tiab', fc2, dRI - dRJ, RI - RJ) v = np.gradient(allpos)[0] jv_haR = np.einsum('ijkl,ijl->ik', sigmas_haR, v) np.save('jv_haR.npy', jv_haR)