def main(ingname=""): """Get the U value from an ingredient. Args: ingname <str>: Ingredient name, full path Returns: <string>: "LDAUU, LDAUJ (eV);x x x, x x x", ex: "LDAUU, LDAUJ (eV); 0 5 0, 0 1 0" """ trymeta = "%s/metadata.txt" % ingname frontstr = "LDAUU, LDAUJ (eV);" if os.path.isfile(trymeta): mymeta = Metadata(metafile=trymeta) myprogram = mymeta.read_data("program") else: myprogram = "None" if myprogram in ['vasp','vasp_neb']: if os.path.isdir("%s/01" % ingname): tryfile = "%s/01/OUTCAR" % ingname else: tryfile = "%s/OUTCAR" % ingname grepldauu = fileutil.grepme(tryfile, "LDAUU") if grepldauu == []: return "%s N/A" % frontstr ldauuparse = grepldauu[0].split("=")[1].strip() grepldauj = fileutil.grepme(tryfile, "LDAUJ") ldaujparse = grepldauj[0].split("=")[1].strip() return "%s %s, %s" % (frontstr, ldauuparse, ldaujparse) else: return "%s N/A" % frontstr
def main(ingname=""): """Get the U value from an ingredient. Args: ingname <str>: Ingredient name, full path Returns: <string>: "LDAUU, LDAUJ (eV);x x x, x x x", ex: "LDAUU, LDAUJ (eV); 0 5 0, 0 1 0" """ trymeta = "%s/metadata.txt" % ingname frontstr = "LDAUU, LDAUJ (eV);" if os.path.isfile(trymeta): mymeta = Metadata(metafile=trymeta) myprogram = mymeta.read_data("program") else: myprogram = "None" if myprogram in ['vasp', 'vasp_neb']: if os.path.isdir("%s/01" % ingname): tryfile = "%s/01/OUTCAR" % ingname else: tryfile = "%s/OUTCAR" % ingname grepldauu = fileutil.grepme(tryfile, "LDAUU") if grepldauu == []: return "%s N/A" % frontstr ldauuparse = grepldauu[0].split("=")[1].strip() grepldauj = fileutil.grepme(tryfile, "LDAUJ") ldaujparse = grepldauj[0].split("=")[1].strip() return "%s %s, %s" % (frontstr, ldauuparse, ldaujparse) else: return "%s N/A" % frontstr
def get_citations(recipedir): """Use mast_exec lines from the recipe directory in order to assign a CITATIONS section to the SUMMARY.txt file. Args: recipedir <str>: Recipe directory Returns: linelist <list of str>: Lines to add to SUMMARY.txt """ mylist = list() mylist = ['mast', 'pymatgen', 'spglib'] #need to use; removed python as standard myinput = os.path.join(recipedir, "input.inp") mastexecs = fileutil.grepme(myinput, "mast_exec") for mastexec in mastexecs: if 'vasp' in mastexec.lower(): mylist.append('vasp') mastxcs = fileutil.grepme(myinput, "mast_xc") if len(mastxcs) >= 1: mylist.append('vasp_pps') for mastxc in mastxcs: if ("pw" in mastxc.lower()) or ("paw" in mastxc.lower()): mylist.append('vasp_paw') mastprogs = fileutil.grepme(myinput, "mast_program") if len(mastprogs) >= 1: for mastprog in mastprogs: if ("vasp_neb" in mastprog.lower()): mylist.append('vaspneb') if "tst" in mastexec.lower(): mylist.append('vaspneb') #if 'phon' in mastexec.lower(): # mylist.append('phon') if 'structopt' in mastexec.lower(): mylist.append('structopt') mastwrites = fileutil.grepme(myinput, "mast_write_method") for mastwrite in mastwrites: if 'pathfinder' in mastexec.lower(): mylist.append('pathfinder') citationpath = os.path.join(dirutil.get_mast_install_path(), "summary", "citation_files") citationfiles = os.listdir(citationpath) linelist = list() uniquelist = list() for mylistitem in mylist: if not mylistitem in uniquelist: uniquelist.append(mylistitem) #print "UNIQUELIST: ", uniquelist for listitem in uniquelist: for citationfile in citationfiles: if citationfile[:-3] == listitem: #all except number cfpath = os.path.join(citationpath, citationfile) cffile = MASTFile(cfpath) linelist.extend(cffile.data) return linelist
def get_citations(recipedir): """Use mast_exec lines from the recipe directory in order to assign a CITATIONS section to the SUMMARY.txt file. Args: recipedir <str>: Recipe directory Returns: linelist <list of str>: Lines to add to SUMMARY.txt """ mylist=list() mylist=['mast','pymatgen','spglib'] #need to use; removed python as standard myinput = os.path.join(recipedir, "input.inp") mastexecs = fileutil.grepme(myinput, "mast_exec") for mastexec in mastexecs: if 'vasp' in mastexec.lower(): mylist.append('vasp') mastxcs = fileutil.grepme(myinput, "mast_xc") if len(mastxcs) >= 1: mylist.append('vasp_pps') for mastxc in mastxcs: if ("pw" in mastxc.lower()) or ("paw" in mastxc.lower()): mylist.append('vasp_paw') mastprogs = fileutil.grepme(myinput, "mast_program") if len(mastprogs) >= 1: for mastprog in mastprogs: if ("vasp_neb" in mastprog.lower()): mylist.append('vaspneb') if "tst" in mastexec.lower(): mylist.append('vaspneb') #if 'phon' in mastexec.lower(): # mylist.append('phon') if 'structopt' in mastexec.lower(): mylist.append('structopt') mastwrites = fileutil.grepme(myinput, "mast_write_method") for mastwrite in mastwrites: if 'pathfinder' in mastexec.lower(): mylist.append('pathfinder') citationpath = os.path.join(dirutil.get_mast_install_path(), "summary","citation_files") citationfiles = os.listdir(citationpath) linelist = list() uniquelist=list() for mylistitem in mylist: if not mylistitem in uniquelist: uniquelist.append(mylistitem) #print "UNIQUELIST: ", uniquelist for listitem in uniquelist: for citationfile in citationfiles: if citationfile[:-3] == listitem: #all except number cfpath = os.path.join(citationpath, citationfile) cffile = MASTFile(cfpath) linelist.extend(cffile.data) return linelist
def check(self): ifile = "%s/INCAR" % self.ingpath if os.path.isfile(ifile): myincar = pymatgen.io.vaspio.Incar.from_file(ifile) else: self.logger.warning("No INCAR file found at %s" % ifile) return False nsw = myincar.get('NSW', 0) if nsw == 0: self.logger.info("NSW is 0 or not set.") return False ofile = "%s/OUTCAR" % self.ingpath if not (os.path.isfile(ofile)): ofile = "%s/01/OUTCAR" % self.ingpath if not (os.path.isfile(ofile)): self.logger.error("No OUTCAR file at %s or %s/01." % (self.ingpath, self.ingpath)) return False myiters = fileutil.grepme(ofile, "Iter") if len(myiters) == 0: self.logger.warning("No Iterations in OUTCAR at %s" % ofile) return False lastentry = myiters[-1] ionichalf = lastentry.split('(')[0] lastiter = ionichalf.split()[-1] lastiter = int(lastiter) if lastiter >= nsw: self.logger.info("Last ionic step %s is at NSW %s" % (lastiter, nsw)) return True return False
def main(ingname=""): """Get the last volume value from an ingredient. Args: ingname <str>: Ingredient name, full path Returns: <string>: "Last volume (Angstroms^3);0.000", ex: "Last volume (Angstroms^3); 324.456" """ trymeta = "%s/metadata.txt" % ingname frontstr = "Last volume (Angstroms^3);" if os.path.isfile(trymeta): mymeta = Metadata(metafile=trymeta) myprogram = mymeta.read_data("program") else: myprogram = "None" if myprogram in ['vasp', 'vasp_neb']: if os.path.isdir("%s/01" % ingname): tryfile = "%s/01/OUTCAR" % ingname else: tryfile = "%s/OUTCAR" % ingname grepvol = fileutil.grepme(tryfile, "volume of cell") if grepvol == []: return "%s N/A" % frontstr myvol = grepvol[-1].split(":")[1].strip() return "%s %s" % (frontstr, myvol) else: return "%s N/A" % frontstr
def main(ingname=""): """Get the last pressure value from an ingredient. Args: ingname <str>: Ingredient name, full path Returns: <string>: "Last pressure (kbar);0.00", ex: "Last pressure (kbar);-23.55" """ trymeta = "%s/metadata.txt" % ingname frontstr = "Last pressure (kbar);" if os.path.isfile(trymeta): mymeta = Metadata(metafile=trymeta) myprogram = mymeta.read_data("program") else: myprogram = "None" if myprogram in ['vasp', 'vasp_neb']: if os.path.isdir("%s/01" % ingname): tryfile = "%s/01/OUTCAR" % ingname else: tryfile = "%s/OUTCAR" % ingname greppress = fileutil.grepme(tryfile, "external pressure") #"external pressure = -1.97 kB Pullay stress = 0.00 kB" if greppress == []: return "%s N/A" % frontstr mypress = greppress[-1].strip().split()[3] return "%s %s" % (frontstr, mypress) else: return "%s N/A" % frontstr
def check(self): ifile = "%s/INCAR" % self.ingpath if os.path.isfile(ifile): myincar = pymatgen.io.vaspio.Incar.from_file(ifile) else: self.logger.warning("No INCAR file found at %s" % ifile) return False nsw = myincar.get('NSW',0) if nsw == 0: self.logger.info("NSW is 0 or not set.") return False ofile = "%s/OUTCAR" % self.ingpath if not (os.path.isfile(ofile)): ofile = "%s/01/OUTCAR" % self.ingpath if not (os.path.isfile(ofile)): self.logger.error("No OUTCAR file at %s or %s/01." % (self.ingpath, self.ingpath)) return False myiters = fileutil.grepme(ofile, "Iter") if len(myiters) == 0: self.logger.warning("No Iterations in OUTCAR at %s" % ofile) return False lastentry = myiters[-1] ionichalf = lastentry.split('(')[0] lastiter = ionichalf.split()[-1] lastiter = int(lastiter) if lastiter >= nsw: self.logger.info("Last ionic step %s is at NSW %s" % (lastiter, nsw)) return True return False
def main(ingname=""): """Get the last pressure value from an ingredient. Args: ingname <str>: Ingredient name, full path Returns: <string>: "Last pressure (kbar);0.00", ex: "Last pressure (kbar);-23.55" """ trymeta = "%s/metadata.txt" % ingname frontstr = "Last pressure (kbar);" if os.path.isfile(trymeta): mymeta = Metadata(metafile=trymeta) myprogram = mymeta.read_data("program") else: myprogram = "None" if myprogram in ['vasp','vasp_neb']: if os.path.isdir("%s/01" % ingname): tryfile = "%s/01/OUTCAR" % ingname else: tryfile = "%s/OUTCAR" % ingname greppress = fileutil.grepme(tryfile, "external pressure") #"external pressure = -1.97 kB Pullay stress = 0.00 kB" if greppress == []: return "%s N/A" % frontstr mypress = greppress[-1].strip().split()[3] return "%s %s" % (frontstr, mypress) else: return "%s N/A" % frontstr
def main(ingname=""): """Get the last volume value from an ingredient. Args: ingname <str>: Ingredient name, full path Returns: <string>: "Last volume (Angstroms^3);0.000", ex: "Last volume (Angstroms^3); 324.456" """ trymeta = "%s/metadata.txt" % ingname frontstr = "Last volume (Angstroms^3);" if os.path.isfile(trymeta): mymeta = Metadata(metafile=trymeta) myprogram = mymeta.read_data("program") else: myprogram = "None" if myprogram in ['vasp','vasp_neb']: if os.path.isdir("%s/01" % ingname): tryfile = "%s/01/OUTCAR" % ingname else: tryfile = "%s/OUTCAR" % ingname grepvol = fileutil.grepme(tryfile, "volume of cell") if grepvol == []: return "%s N/A" % frontstr myvol = grepvol[-1].split(":")[1].strip() return "%s %s" % (frontstr, myvol) else: return "%s N/A" % frontstr
def get_fermi_energy(self, directory): """Returns the Fermi energy from a directory""" abspath = '%s/%s/' % (self.recdir, directory) if ('OUTCAR' in os.listdir(abspath)): grepfermi = fileutil.grepme("%s/OUTCAR" % abspath, "E-fermi") lastfermi = grepfermi[-1] fermi = float(lastfermi.split()[2]) print "TTM DEBUG LAST FERMI: ", fermi return fermi #print "TTM DEBUG: OUTCAR efermi: ", Outcar('%s/OUTCAR' % abspath).efermi #return Outcar('%s/OUTCAR' % abspath).efermi elif ('vasprun.xml' in os.listdir(abspath)): return Vasprun('%s/vasprun.xml' % abspath).efermi
def get_fermi_energy(self, directory): """Returns the Fermi energy from a directory""" abspath = '%s/%s/' % (self.recdir, directory) if ('OUTCAR' in os.listdir(abspath)): grepfermi = fileutil.grepme("%s/OUTCAR" % abspath, "E-fermi") lastfermi=grepfermi[-1] fermi = float(lastfermi.split()[2]) print "TTM DEBUG LAST FERMI: ", fermi return fermi #print "TTM DEBUG: OUTCAR efermi: ", Outcar('%s/OUTCAR' % abspath).efermi #return Outcar('%s/OUTCAR' % abspath).efermi elif ('vasprun.xml' in os.listdir(abspath)): return Vasprun('%s/vasprun.xml' % abspath).efermi
def get_v(self,vdir,vdir_num,vdir_denom): """Obtaining the attempt frequencies. Args: vdir <list of dict>: vdir={'v0':*,'v1':*,...}, * is the list like [<local_min>,<saddle>] vdir_num <dict>: vdir_num={'E0':<local_min>,...} Edir_denum <dict>: Edir_denom={'E0':<saddle>,...} """ v = dict() v_num = dict() v_denom = dict() for freq in vdir.keys(): if len(vdir[freq])==1: v[freq] = vdir[freq][0] else: if os.path.isfile(vdir_num[freq]+'_FREQ') and os.path.isfile(vdir_num[freq]+'_FREQ'): # Reading data from FREQ files fn=open(vdir_num[freq]+'_FREQ','r') nthzlist=self.getinfo(fn.readline()) i=0 num_num=0 v_num[freq]=1.0 while i<len(nthzlist): if abs(float(nthzlist[i]))>0.1: v_num[freq]=v_num[freq]*float(nthzlist[i]) num_num+=1 i+=1 fd=open(vdir_denom[freq]+'_FREQ','r') dthzlist=self.getinfo(fd.readline()) j=0 denom_num=0 v_denom[freq]=1.0 while j<len(dthzlist): if abs(float(dthzlist[j]))>0.1: v_denom[freq]=v_denom[freq]*float(dthzlist[j]) denom_num+=1 j+=1 if not num_num==denom_num+1: print 'WARNING: Numbers of non-zero frequencies at local minimum and at saddle point do not match! Please double-check the FREQ files of %s and %s'%(vdir_num[freq],vdir_denom[freq]) else: # Reading data from OUTCAR files nthzlist = fileutil.grepme(vdir_num[freq]+'_OUTCAR', "2PiTHz") num_num=len(nthzlist) dthzlist = fileutil.grepme(vdir_denom[freq]+'_OUTCAR', "2PiTHz") denom_num=len(dthzlist) im_num=0 im_denom=0 if denom_num==num_num: for i in range(num_num): if 'f/i' in dthzlist[i]: im_denom+=1 if 'f/i' in nthzlist[i]: im_num+=1 if not im_num==0: print 'WARNING: Imaginary frequency found in the local minimum! Please check the OUTCAR of %s!'%vdir_num[freq] elif im_denom==0: print 'WARNING: No imaginary frequency found in the saddle point! Please check the OUTCAR of %s!'%vdir_denom[freq] elif im_denom>1: print 'WARNING: More than 1 imaginary frequencies found in the saddle point! Please check the OUTCAR of %s!'%vdir_denom[freq] else: print 'WARNING: Numbers of frequencies at local minimum and at saddle point are not equal! Please check the OUTCAR of %s and %s!'%(vdir_num[freq],vdir_denom[freq]) v_num[freq]=v_denom[freq]=1.0 for i in range(num_num): if not 'f/i' in nthzlist[i]: v_num[freq]*=float(self.getinfo(nthzlist[i])[3]) for i in range(denom_num): if not 'f/i' in dthzlist[i]: v_denom[freq]*=float(self.getinfo(dthzlist[i])[3]) v[freq]=v_num[freq]/v_denom[freq] return v
i+=1 fd=open(vdir_denom[freq]+'_FREQ','r') dthzlist=self.getinfo(fd.readline()) j=0 denom_num=0 v_denom[freq]=1.0 while j<len(dthzlist): if abs(float(dthzlist[j]))>0.1: v_denom[freq]=v_denom[freq]*float(dthzlist[j]) denom_num+=1 j+=1 if not num_num==denom_num+1: print 'WARNING: Numbers of non-zero frequencies at local minimum and at saddle point do not match! Please double-check the FREQ files of %s and %s'%(vdir_num[freq],vdir_denom[freq]) else: # Reading data from OUTCAR files nthzlist = fileutil.grepme(vdir_num[freq]+'_OUTCAR', "2PiTHz") num_num=len(nthzlist) dthzlist = fileutil.grepme(vdir_denom[freq]+'_OUTCAR', "2PiTHz") denom_num=len(dthzlist) im_num=0 im_denom=0 if denom_num==num_num: for i in range(num_num): if 'f/i' in dthzlist[i]: im_denom+=1 if 'f/i' in nthzlist[i]: im_num+=1 if not im_num==0: print 'WARNING: Imaginary frequency found in the local minimum! Please check the OUTCAR of %s!'%vdir_num[freq] elif im_denom==0: print 'WARNING: No imaginary frequency found in the saddle point! Please check the OUTCAR of %s!'%vdir_denom[freq] elif im_denom>1: print 'WARNING: More than 1 imaginary frequencies found in the saddle point! Please check the OUTCAR of %s!'%vdir_denom[freq]