Esempio n. 1
0
class Q2RGenerator(object):

    def __init__(self, director, inventory):
        self._director  = director
        self._inv       = inventory
        self._input     = None


    def setInput(self):
        "Set namelist 'input'"
        self._input     = QEInput(type='q2r')
        nl              = self._input.namelist("input")
        zasr            = ZASR[ZASRLIST[int(self._inv.zasr)]]

        nl.set("fildyn",    self.fildyn()) # from PH results
        nl.set("zasr",      zasr)
        nl.set("flfrc",     FLFRC)


    def fildyn(self):
        "Returns fildyn parameter from PH results"
        phresults       = PHResult(self._director, self._inv.id)
        return phresults.fildyn()


    def toString(self):
        return self._input.toString()
Esempio n. 2
0
def getInputParam(text, param):
    "Gets input string, sets param value and returns updated string"
    # XXX: Parameters should be from "SYSTEM" namelist (extend for K-points)
    input   = QEInput(config=text)
    input.parse()
    nl      = input.namelist("system")
    return nl.param(param)
Esempio n. 3
0
def getInputParam(text, param):
    "Gets input string, sets param value and returns updated string"
    # XXX: Parameters should be from "SYSTEM" namelist (extend for K-points)
    input = QEInput(config=text)
    input.parse()
    nl = input.namelist("system")
    return nl.param(param)
Esempio n. 4
0
class BANDSGenerator(object):
    def __init__(self, director, inventory):
        self._director = director
        self._inv = inventory
        self._input = None

    def setInputpp(self):
        self._input = QEInput(type="bands")
        nl = self._input.namelist("inputpp")
        nl.add("filband", FILBAND)
        nl.add("lsym", LSIM)

    def toString(self):
        return self._input.toString()
Esempio n. 5
0
class DOSGenerator(object):
    def __init__(self, director, inventory):
        self._director = director
        self._inv = inventory
        self._input = None

    def setInputpp(self):
        self._input = QEInput(type="dos")
        nl = self._input.namelist("inputpp")
        nl.add("Emin", self._inv.emin)
        nl.add("Emax", self._inv.emax)
        nl.add("DeltaE", self._inv.deltae)

    def toString(self):
        return self._input.toString()
Esempio n. 6
0
class DOSGenerator(object):

    def __init__(self, director, inventory):
        self._director  = director
        self._inv       = inventory
        self._input     = None

    def setInputpp(self):
        self._input     = QEInput(type="dos")
        nl      = self._input.namelist("inputpp")
        nl.add("Emin",      self._inv.emin)
        nl.add("Emax",      self._inv.emax)
        nl.add("DeltaE",    self._inv.deltae)


    def toString(self):
        return self._input.toString()
Esempio n. 7
0
class BANDSGenerator(object):

    def __init__(self, director, inventory):
        self._director  = director
        self._inv       = inventory
        self._input     = None


    def setInputpp(self):
        self._input     = QEInput(type="bands")
        nl      = self._input.namelist("inputpp")
        nl.add("filband",   FILBAND)
        nl.add("lsym",      LSIM)


    def toString(self):
        return self._input.toString()
Esempio n. 8
0
class Q2RGenerator(object):
    def __init__(self, director, inventory):
        self._director = director
        self._inv = inventory
        self._input = None

    def setInput(self):
        "Set namelist 'input'"
        self._input = QEInput(type='q2r')
        nl = self._input.namelist("input")
        zasr = ZASR[ZASRLIST[int(self._inv.zasr)]]

        nl.set("fildyn", self.fildyn())  # from PH results
        nl.set("zasr", zasr)
        nl.set("flfrc", FLFRC)

    def fildyn(self):
        "Returns fildyn parameter from PH results"
        phresults = PHResult(self._director, self._inv.id)
        return phresults.fildyn()

    def toString(self):
        return self._input.toString()
Esempio n. 9
0
class PHGenerator(object):

    def __init__(self, director, inventory):
        self._director  = director
        self._inv       = inventory
        self._input     = None
        self._pwresult  = PWResult(self._director, self._inv.id)


    # XXX:  Handle prefix properly (should be same as in pw input)
    def setInputph(self):
        "Sets inputph depending on the simulation type"
        self._input      = QEInput(type='ph')
        self._input.header = "phonon simulation\n"
        nl  = Namelist("inputph")
        self._input.addNamelist(nl)
        
        self._simtype   = self._simtype()
        if not self._simtype:   # no simtype, no inputph population
            return

        if self._simtype == SIMTYPE["multiple-phonon"]:
            self._multiPhonInput()    # population of inputph for multiple phonon

        elif self._simtype == SIMTYPE["single-phonon"]:
            self._singlePhonInput()     # population of inputph for single phonon
            

    def toString(self):
        if not self._input:
            return ""
        
        return self._input.toString()


    def amasses(self):
        """Returns list of tuples with amass label and mass value from PW input configuration
        Example: [("amass(1)", "35.5"), ("amass(2)", "54.3")]
        """
        species     = self._pwresult.species()    # Example: masses = [("Al", "29.7"), ("Ni", "56.7") ...]
        if not species:
            return None # No masses, no amasses :)
        
        list    = []    # amass list
        for l in range(len(species)):
            list.append(("amass(%s)" % str(l+1), species[l][1]))

        return list


    def isGammaPoint(self):
        "Checks if phonon point is gamma point"
        # Rudimentary filter
        if self._inv.kx == '' or self._inv.ky == '' or self._inv.kz == '':
            return False

        return float(self._inv.kx) == 0.0 and float(self._inv.ky) == 0.0 and float(self._inv.kz) == 0.0


    # XXX: Reset parameters 'prefix', 'outdir', 'fildyn'
    def _singlePhonInput(self):
        "Takes namelist and populates inputph for single phonon"
        nl  = self._input.namelist("inputph")
        nl.add("tr2_ph",    TR2_PH)
        nl.add("trans",    TRANS)
        self._addAmasses(nl)
        self._addEpsil(nl)  # for isolator only
        self._addLnscf(nl)  # for non-Gamma point
        self._input.addAttach("%s %s %s" % (self._inv.kx, self._inv.ky, self._inv.kz))


    def _multiPhonInput(self):
        "Takes namelist and populates inputph for multiple phonons"
        nl  = self._input.namelist("inputph")
        nl.add("nq1",       self._inv.nq1)
        nl.add("nq2",       self._inv.nq2)
        nl.add("nq3",       self._inv.nq3)
        nl.add("tr2_ph",    TR2_PH)
        nl.add("ldisp",     LDISP)
        #nl.add("prefix",   QE_PREFIX)
        self._addAmasses(nl)
        self._addEpsil(nl)  # for isolator only


    def _addAmasses(self, nl):
        "Takes namelist and adds amasses"
        masses    = self.amasses()

        if not masses:  # In case if not masses are found in PW input
            nl.add("amass", "ERROR: masses not defined in PW input file!")
            return

        for m in masses:
            nl.add(m[0], m[1])


    def _addLnscf(self, nl):
        "Adds 'lnscf' parameter for non-Gamma point"
        if not self.isGammaPoint():
            nl.add("lnscf", LNSCF)


    def _addEpsil(self, nl):
        "Add 'epsil' parameter for isolators only. Do nothing otherwise"
        if self._pwresult.isIsolator():
            nl.add("epsil", EPSIL)

        
    def _simtype(self):
        "Be cautious in case if inventory doesn't have simtype"
        try:
            simtype   = self._inv.simtype
        except AttributeError:
            return None

        return simtype