def test_kpoints(self): pw = self.task['pw'] pw.setting.set('pwInput', 'data/al_pw.in') pw.input.parse() from qeutils import kmesh qmesh = [2,2,2] qpoints = kmesh.kMeshCart(qmesh,pw.input.structure.lattice.reciprocalBase()) pw.input.kpoints.set(qpoints) self.assertEqual( (8, 3), pw.input.kpoints.coords.shape)
def testMatdyn(): #matdyn = MatdynTask( configString = "") pwString = """ &SYSTEM ibrav = 4 celldm(1) = 5.78552800736 celldm(3) = 1.13577682118 nat = 3 ntyp = 2 / ATOMIC_SPECIES Mg 24.305 mg_6.ncpp B 11.0 B.pbe-n-van_ak.UPF ATOMIC_POSITIONS ALAT Mg 0. 0. 0. B 0.5 0.28867513 0.56788841 B 0. 0.57735027 0.56788841 """ matdynString = """ &INPUT asr = 'crystal', flfrc = '/home/dexity/espresso/qejobs/643E2QQI/default.fc', dos = .true., nk1 = 4, nk2 = 4, nk3 = 4, amass(1) = 26.98, / """ # Initialize structure (PW input): pwInput = PWInput(config=pwString) pwInput.parse() # Initialize MATDYN input matdynInput = MatdynInput(config=matdynString) matdynInput.parse() print matdynInput.toString() # Pass matdyn input to matdyn task #matdyn.input = matdynInput nl = matdynInput.namelist("input") # Populate grid nqGrid = [int(nl.param("nk1")), int(nl.param("nk2")), int(nl.param("nk3"))] qpoints = kmesh.kMeshCart(nqGrid, pwInput.structure.lattice.reciprocalBase()) # Generate grid point #matdyn.input.qpoints.set(qpoints) # Generate Q-mesh matdynInput.qpoints.set(qpoints) open("matdyn.2.in", "w").write(matdynInput.toString())
def testMatdyn(): #matdyn = MatdynTask( configString = "") pwString = """ &SYSTEM ibrav = 4 celldm(1) = 5.78552800736 celldm(3) = 1.13577682118 nat = 3 ntyp = 2 / ATOMIC_SPECIES Mg 24.305 mg_6.ncpp B 11.0 B.pbe-n-van_ak.UPF ATOMIC_POSITIONS ALAT Mg 0. 0. 0. B 0.5 0.28867513 0.56788841 B 0. 0.57735027 0.56788841 """ matdynString = """ &INPUT asr = 'crystal', flfrc = '/home/dexity/espresso/qejobs/643E2QQI/default.fc', dos = .true., nk1 = 4, nk2 = 4, nk3 = 4, amass(1) = 26.98, / """ # Initialize structure (PW input): pwInput = PWInput(config = pwString) pwInput.parse() # Initialize MATDYN input matdynInput = MatdynInput(config = matdynString) matdynInput.parse() print matdynInput.toString() # Pass matdyn input to matdyn task #matdyn.input = matdynInput nl = matdynInput.namelist("input") # Populate grid nqGrid = [int(nl.param("nk1")), int(nl.param("nk2")), int(nl.param("nk3"))] qpoints = kmesh.kMeshCart(nqGrid, pwInput.structure.lattice.reciprocalBase()) # Generate grid point #matdyn.input.qpoints.set(qpoints) # Generate Q-mesh matdynInput.qpoints.set(qpoints) open("matdyn.2.in", "w").write(matdynInput.toString())
def launch(self, nqpoints, partialDOS=False): """ launches matdyn task with a grid provided through list 'nqpoints' """ if partialDOS == False: self.matdynTask.qpoints.setAutomatic(nqpoints) self.matdynTask.input.save() self.matdynTask.launch() self.loadPhonons() self.axis, self.dos = self.matdynTask.output.property("phonon dos") else: if self.structure == None: raise ("PartialDOS: structure was not set") qpoints = kmesh.kMeshCart(nqpoints, self.structure.lattice.reciprocalBase()) # update qpoints and launch matdyn self.matdynTask.syncSetting() self.matdynTask.input.qpoints.set(qpoints) self.matdynTask.input.save() self.matdynTask.launch() self.loadPhonons()
def launch(self, nqpoints, partialDOS=False): """ launches matdyn task with a grid provided through list 'nqpoints' """ if partialDOS == False: self.matdynTask.qpoints.setAutomatic(nqpoints) self.matdynTask.input.save() self.matdynTask.launch() self.loadPhonons() self.axis, self.dos = self.matdynTask.output.property('phonon dos') else: if self.structure == None: raise ('PartialDOS: structure was not set') qpoints = kmesh.kMeshCart(nqpoints, \ self.structure.lattice.reciprocalBase()) #update qpoints and launch matdyn self.matdynTask.syncSetting() self.matdynTask.input.qpoints.set(qpoints) self.matdynTask.input.save() self.matdynTask.launch() self.loadPhonons()
from qecalc.qetask.matdyntask import MatdynTask from qecalc.qetask.pwtask import PWTask from qeutils import kmesh from qeutils.bandstobxsf import bandstobxsf matdyn = MatdynTask('config.ini') pw = PWTask('config.ini') pw.input.parse() matdyn.input.parse() qmesh = [17,17,17] qpoints = kmesh.kMeshCart(qmesh,pw.input.structure.lattice.reciprocalBase()) matdyn.input.qpoints.set(qpoints) matdyn.input.save() matdyn.launch() #matdyn.output.parse() modes, freqs, qpts = matdyn.output.property('multi phonon') bands = kmesh.packBands(qmesh, freqs) phononEnergy = 720.0 bandstobxsf(phononEnergy, pw.input.structure.lattice.reciprocalBase(), bands,\ 'phonons.bxsf')
def testIDF(): # matdyn setting: settingString = """ [matdyn.x] matdynInput = matdyn.in flfrc = mgb2666.fc """ #*********************Initialize matdyn***************************************** matdyn = MatdynTask( configString = settingString) matdyn.syncSetting() #******************************************************************************* print 'generating "Phonons on the Grid"' # scf.in with fields relevant to structure information pwString = """ &SYSTEM ibrav = 4 celldm(1) = 5.78552800736 celldm(3) = 1.13577682118 nat = 3 ntyp = 2 / ATOMIC_SPECIES Mg 24.305 mg_6.ncpp B 11.0 B.pbe-n-van_ak.UPF ATOMIC_POSITIONS ALAT Mg 0. 0. 0. B 0.5 0.28867513 0.56788841 B 0. 0.57735027 0.56788841 """ nqGrid = [4,4,4] #initialize structure: pwInput = PWInput(config = pwString) pwInput.parse() qpoints = kmesh.kMeshCart(nqGrid,pwInput.structure.lattice.reciprocalBase()) #update qpoints and launch matdyn matdyn.input.qpoints.set(qpoints) matdyn.input.save() matdyn.launch() #matdyn.output.toString() matdyn.output.parse() Pols, Freqs, qPoints = matdyn.output.property('multi phonon') # convert to Hz**2 and save Omega2.write( (Freqs*C*TWO_PI)**2,'Omega2.idf','') Polarizations.write(Pols, 'Polarizations.idf','Polarizations') idfPolData = Polarizations.read('Polarizations.idf') idfOmega2Data = Omega2.read('Omega2.idf') #save lattice/grid information and make it angstrem compatible, multiply by 2pi: genQgridinfo('Qgridinfo.idf', nqGrid, \ pwInput.structure.lattice.matter().\ reciprocal().base*2.0*3.14159265*1.889725989) print idfPolData print idfOmega2Data #******************************************************************************* print 'generating "Phonon DOS"' nqGrid = [10,10,10] matdyn.input.qpoints.setAutomatic(nqGrid) matdyn.input.save() matdyn.launch() matdyn.output.parse() axis, dos = matdyn.output.property('phonon dos') # save DOS in THz DOS.write(axis*0.0299792458, dos, filename = 'DOS', comment = '') idfDOSData = DOS.read('DOS') print idfDOSData #import numpy #import numpy.linalg as numalg #print 2 * 3.14159265 * numalg.inv(numpy.transpose(pwInput.structure.lattice.matter().base/1.889725989)) #*********************Cleaning************************************************** import os os.system('cat ./Qgridinfo.idf')
def testIDF(): # matdyn setting: settingString = """ [matdyn.x] matdynInput = matdyn.in flfrc = mgb2666.fc """ #*********************Initialize matdyn***************************************** matdyn = MatdynTask(configString=settingString) matdyn.syncSetting() #******************************************************************************* print 'generating "Phonons on the Grid"' # scf.in with fields relevant to structure information pwString = """ &SYSTEM ibrav = 4 celldm(1) = 5.78552800736 celldm(3) = 1.13577682118 nat = 3 ntyp = 2 / ATOMIC_SPECIES Mg 24.305 mg_6.ncpp B 11.0 B.pbe-n-van_ak.UPF ATOMIC_POSITIONS ALAT Mg 0. 0. 0. B 0.5 0.28867513 0.56788841 B 0. 0.57735027 0.56788841 """ nqGrid = [4, 4, 4] #initialize structure: pwInput = PWInput(config=pwString) pwInput.parse() qpoints = kmesh.kMeshCart(nqGrid, pwInput.structure.lattice.reciprocalBase()) #update qpoints and launch matdyn matdyn.input.qpoints.set(qpoints) matdyn.input.save() matdyn.launch() #matdyn.output.toString() matdyn.output.parse() Pols, Freqs, qPoints = matdyn.output.property('multi phonon') # convert to Hz**2 and save Omega2.write((Freqs * C * TWO_PI)**2, 'Omega2.idf', '') Polarizations.write(Pols, 'Polarizations.idf', 'Polarizations') idfPolData = Polarizations.read('Polarizations.idf') idfOmega2Data = Omega2.read('Omega2.idf') #save lattice/grid information and make it angstrem compatible, multiply by 2pi: genQgridinfo('Qgridinfo.idf', nqGrid, \ pwInput.structure.lattice.matter().\ reciprocal().base*2.0*3.14159265*1.889725989) print idfPolData print idfOmega2Data #******************************************************************************* print 'generating "Phonon DOS"' nqGrid = [10, 10, 10] matdyn.input.qpoints.setAutomatic(nqGrid) matdyn.input.save() matdyn.launch() matdyn.output.parse() axis, dos = matdyn.output.property('phonon dos') # save DOS in THz DOS.write(axis * 0.0299792458, dos, filename='DOS', comment='') idfDOSData = DOS.read('DOS') print idfDOSData #import numpy #import numpy.linalg as numalg #print 2 * 3.14159265 * numalg.inv(numpy.transpose(pwInput.structure.lattice.matter().base/1.889725989)) #*********************Cleaning************************************************** import os os.system('cat ./Qgridinfo.idf')