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')
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')