Exemple #1
0
	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)
Exemple #2
0
	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)
Exemple #3
0
    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
Exemple #4
0
	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")
Exemple #5
0
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)
Exemple #6
0
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)