Beispiel #1
0
 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)                
Beispiel #2
0
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())
Beispiel #3
0
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())
Beispiel #4
0
    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()
Beispiel #5
0
    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')

Beispiel #7
0
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')
Beispiel #8
0
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')