예제 #1
0
 def write_my_displacement_file(self, xdatdict, mydir="", fname="XDATCAR"):
     """Write a displacement file.
         Args:
             xdatdict <dict>: Dictionary of XDATCAR (see read_my_xdatcar)
             mydir <str>: Directory in which to write.
                          Use ingredient directory if null.
             fname <str>: filename (default DYNMAT)
     """
     if mydir == "":
         mydir = self.keywords['name']
     xdatwrite=MASTFile()
     xdatwrite.data=list()
     xdatwrite.data.append(xdatdict['descline'])
     if not (xdatdict['scale'] == ""):
         xdatwrite.data.append(xdatdict['scale'])
         xdatwrite.data.append(xdatdict['latta'])
         xdatwrite.data.append(xdatdict['lattb'])
         xdatwrite.data.append(xdatdict['lattc'])
     xdatwrite.data.append(xdatdict['specline'])
     xdatwrite.data.append(xdatdict['numline'])
     if not (xdatdict['type'] == ""):
         xdatwrite.data.append(xdatdict['type'])
     configlist = xdatdict['configs'].keys()
     configlist.sort()
     for cfg in configlist:
         xdatwrite.data.append("Konfig=%1i\n" % cfg)
         xdatwrite.data.extend(xdatdict['configs'][cfg])
     xdatwrite.to_file(os.path.join(mydir, fname))
예제 #2
0
 def write_my_dynamical_matrix_file(self, dyndict, mydir="", fname="DYNMAT"):
     """Write a dynamical matrix file based on a dictionary.
         Args:
             dyndict <dict>: Dictionary of dynmat (see read_my_dynmat)
             mydir <str>: Directory in which to write;
                          use ingredient directory if null
             fname <str>: filename (default DYNMAT)
     """
     if mydir == "":
         mydir = self.keywords['name']
     dynwrite=MASTFile()
     dynwrite.data=list()
     firstline=str(dyndict['numspec']) + " " + str(dyndict['numatoms']) + " " + str(dyndict['numdisp']) + "\n"
     dynwrite.data.append(firstline)
     dynwrite.data.append(dyndict['massline'])
     atomlist=dyndict['atoms'].keys()
     atomlist.sort()
     for atom in atomlist:
         displist = dyndict['atoms'][atom].keys()
         displist.sort()
         for disp in displist:
             thirdline = str(atom) + " " + str(disp) + " " + dyndict['atoms'][atom][disp]['displine'] + "\n"
             dynwrite.data.append(thirdline)
             for line in dyndict['atoms'][atom][disp]['dynmat']:
                 dynwrite.data.append(line)
     dynwrite.to_file(os.path.join(mydir, fname))
예제 #3
0
 def write_my_dynmat_without_disp_or_mass(self, dyndict, mydir="", fname="DYNMAT"):
     """Write a dynamical matrix file without the displacement indicators 1, 2, 3
         and without the masses line, and with first line having only
         the total number of displacements, for PHON.
         Args:
             dyndict <dict>: Dictionary of dynmat (see read_my_dynmat)
             mydir <str>: Directory in which to write; use 
                          ingredient directory if null
             fname <str>: filename (default DYNMAT)
     """
     if mydir == "":
         mydir = self.keywords['name']
     dynwrite=MASTFile()
     dynwrite.data=list()
     firstline=str(dyndict['numdisp']) + "\n"
     dynwrite.data.append(firstline)
     atomlist=dyndict['atoms'].keys()
     atomlist.sort()
     for atom in atomlist:
         displist = dyndict['atoms'][atom].keys()
         displist.sort()
         for disp in displist:
             thirdline = str(atom) + " " + dyndict['atoms'][atom][disp]['displine'] + "\n"
             dynwrite.data.append(thirdline)
             for line in dyndict['atoms'][atom][disp]['dynmat']:
                 dynwrite.data.append(line)
     dynwrite.to_file(os.path.join(mydir, fname))
예제 #4
0
    def create_input_files(self, datasets_dict):
        """Create independently looped input files.
            Args:
                datasets_dict <dict of list>

            Returns:
                createdfiles <list of str>: list of newly-created file names
            Creates an input file for each entry.


        """
        ifname = self.keywords['inputfile']
        dirstem = os.path.dirname(ifname)
        basename = os.path.basename(ifname).split('.')[0]
        createdfiles = list()
        if dirstem == "":
            dirstem = os.getcwd()
        dkeys = datasets_dict.keys()
        dkeys.sort()
        dct = 1
        for didx in dkeys:
            newfile = MASTFile()
            newfile.data = list(datasets_dict[didx])
            newname = "%s/loop_%s_%s.inp" % (dirstem, basename,
                                             str(dct).zfill(2))
            newfile.to_file(newname)
            #createdfiles.append(os.path.basename(newname))
            createdfiles.append(newname)
            dct = dct + 1
        return createdfiles
예제 #5
0
    def create_input_files(self, datasets_dict):
        """Create independently looped input files.
            Args:
                datasets_dict <dict of list>

            Returns:
                createdfiles <list of str>: list of newly-created file names
            Creates an input file for each entry.


        """
        ifname = self.keywords['inputfile']
        dirstem = os.path.dirname(ifname)
        basename = os.path.basename(ifname).split('.')[0]
        createdfiles=list()
        if dirstem == "":
            dirstem = os.getcwd()
        dkeys = datasets_dict.keys()
        dkeys.sort()
        dct=1
        for didx in dkeys:
            newfile = MASTFile()
            newfile.data = list(datasets_dict[didx])
            newname="%s/loop_%s_%s.inp" % (dirstem, basename, str(dct).zfill(2))
            newfile.to_file(newname)
            #createdfiles.append(os.path.basename(newname))
            createdfiles.append(newname)
            dct=dct+1
        return createdfiles
예제 #6
0
def clear_submission_list():
    """Clear all entries from the submission list at
        $MAST_CONTROL/submitlist
    """
    submitlist=os.path.join(mast_control, "submitlist")
    if not os.path.isfile(submitlist):
        print "No submission list at %s" % submitlist
        return
    submitfile=MASTFile(submitlist)
    submitfile.data=list()
    submitfile.data.append("\n")
    submitfile.to_file(submitlist)
예제 #7
0
def clear_submission_list():
    """Clear all entries from the submission list at
        $MAST_CONTROL/submitlist
    """
    submitlist = os.path.join(mast_control, "submitlist")
    if not os.path.isfile(submitlist):
        print "No submission list at %s" % submitlist
        return
    submitfile = MASTFile(submitlist)
    submitfile.data = list()
    submitfile.data.append("\n")
    submitfile.to_file(submitlist)
예제 #8
0
 def write_script(self, dirname="", fname=""):
     """Write the python input script, created from the *.inp input file.
         Args:
             dirname <str>: directory in which to write
             fname <str>: filename to write
         Returns:
             filename <str>: Full file name of the input script created.
     """
     mylines = self.print_input_options()
     if dirname == "":
         dirname = os.getcwd()
     if fname == "":
         fname = 'input.py'
     filename = os.path.join(dirname, fname)
     inputpy = MASTFile()
     inputpy.data = mylines
     inputpy.to_file(filename)
     return filename
예제 #9
0
def write_submit_script(keywords):
    """This script example is built on the following ingredient keywords,
        and may require significant customization.
        mast_processors
        mast_ppn
        mast_queue
        mast_nodes
        mast_exec
        mast_walltime
        mast_memory
    """
    import os
    #set defaults
    name = os.path.basename(keywords['name'])
    try:
        mast_processors = str(keywords['program_keys']['mast_processors'])
    except KeyError:
        mast_processors = "8"
    try:
        mast_ppn = str(keywords['program_keys']['mast_ppn'])
    except KeyError:
        mast_ppn = "8"
    try:
        mast_queue = str(keywords['program_keys']['mast_queue'])
    except KeyError:
        mast_queue = 'default'
    try:
        mast_nodes = str(keywords['program_keys']['mast_nodes'])
    except KeyError:
        mast_nodes = "1"
    try:
        mast_exec = str(keywords['program_keys']['mast_exec'])
    except KeyError:
        mast_exec = "mpiexec vasp"
    try:
        mast_walltime = str(
            keywords['program_keys']['mast_walltime']) + ":00:00"
    except KeyError:
        mast_walltime = "24:00:00"
    try:
        mast_memory = str(keywords['program_keys']['mast_memory'])
    except KeyError:
        mast_memory = "1000"
    #create submission script
    newkey = dict()
    newkey['mast_memory'] = mast_memory
    newkey['mast_exec'] = mast_exec
    newkey['mast_walltime'] = mast_walltime
    newkey['mast_queue'] = mast_queue
    newkey['mast_ppn'] = mast_ppn
    newkey['mast_nodes'] = mast_nodes
    newkey['mast_processors'] = mast_processors
    newkey['mast_name'] = name

    my_template = MASTFile("%s/submit/platforms/%s/submit_template.sh" %
                           (mast_install, mast_platform))
    newdata = list()
    for myline in my_template.data:
        for mykey in newkey.keys():
            querykey = "?" + mykey + "?"
            if querykey in myline:
                myline = myline.replace(querykey, newkey[mykey])
        newdata.append(myline)
    filled_template = MASTFile()
    filled_template.data = list(newdata)
    filled_template.to_file("%s/submit.sh" %
                            keywords['name'])  #use full path here
    return
예제 #10
0
def write_submit_script(keywords):
    """This script example is built on the following ingredient keywords,
        and may require significant customization.
        mast_processors
        mast_ppn
        mast_queue
        mast_nodes
        mast_exec
        mast_walltime
        mast_memory
    """ 
    import os
    #set defaults
    name = os.path.basename(keywords['name'])
    try:
        mast_processors = str(keywords['program_keys']['mast_processors'])
    except KeyError:
        mast_processors = "8"
    try:
        mast_ppn = str(keywords['program_keys']['mast_ppn'])
    except KeyError:
        mast_ppn = "8"
    try:
        mast_queue = str(keywords['program_keys']['mast_queue'])
    except KeyError:
        mast_queue = 'default'
    try:
        mast_nodes = str(keywords['program_keys']['mast_nodes'])
    except KeyError:
        mast_nodes = "1"
    try:
        mast_exec = str(keywords['program_keys']['mast_exec'])
    except KeyError:
        mast_exec = "mpiexec vasp"
    try:
        mast_walltime = str(keywords['program_keys']['mast_walltime']) + ":00:00"
    except KeyError:
        mast_walltime = "24:00:00"
    try:
        mast_memory = str(keywords['program_keys']['mast_memory'])
    except KeyError:
        mast_memory = "1000"
    #create submission script
    newkey = dict()
    newkey['mast_memory'] = mast_memory
    newkey['mast_exec'] = mast_exec
    newkey['mast_walltime'] = mast_walltime
    newkey['mast_queue'] = mast_queue
    newkey['mast_ppn'] = mast_ppn
    newkey['mast_nodes'] = mast_nodes
    newkey['mast_processors'] = mast_processors
    newkey['mast_name'] = name
    my_template = MASTFile("%s/submit/platforms/%s/submit_template.sh" % (mast_install, mast_platform))
    newdata = list()
    for myline in my_template.data:
        for mykey in newkey.keys():
            querykey = "?" + mykey + "?"
            if querykey in myline:
                myline = myline.replace(querykey, newkey[mykey])
        newdata.append(myline)
    filled_template = MASTFile()
    filled_template.data = list(newdata)
    filled_template.to_file("%s/submit.sh" % keywords['name']) #use full path here
    return