def getforce(self, filename, numele, outname, potential, symb, starttime, intcycle): if intcycle: resultname = filename + str(intcycle) else: resultname = filename if not os.path.isfile("%s//gradient" % resultname): writefile.werror(outname, 'forces', starttime) exit('no force in outfile') resultfile = open("%s//gradient" % resultname).readlines() numf = resultfile[numele + 2:numele + 2 + numele] sfar = [] for i in range(numele): nuf = numf[i].replace("D", "e") eachforce = nuf.split() sfar.append(eachforce) far = np.array(sfar, dtype=float) far = far * -1 return far
def getenergy(self, filename, outname, potential, starttime, intcycle): ''' get the energy ''' if intcycle: resultname = filename + str(intcycle) else: resultname = filename resultfile = open("%s.out" % resultname).readlines() try: ev = resultfile[-3].split()[0] outenergy = float(ev) potential.append(outenergy) outfile = open(outname, 'a+') outfile.write('the total potential is %f a.u. \n' % outenergy) outfile.close() except: writefile.werror(outname, 'energy', starttime) exit('no energy in outfile') return potential
def getforce(self, filename, numele, outname, potential, symb, starttime, intcycle): ''' get the force and position from the soft output file only use to calculate the Hartree-Fork theory ''' if intcycle: resultname = filename + str(intcycle) else: resultname = filename resultfile = open("%s.out" % resultname).readlines() signf = 0 for i, line in enumerate(resultfile): if 'GRADIENT FOR ' in line: signf = i if 'GRADIENT FOR ' in resultfile[signf]: numf = resultfile[signf + 4:signf + 4 + numele] else: writefile.werror(outname, 'forces', starttime) exit('no force in outfile') sfar = [] for i in range(numele): eachforce = numf[i].split() sfar.append(eachforce[1:]) far = np.array(sfar, dtype=float) far = far * -1.0 return far
def reinpotfile(self, filename, newpos, symb, intcycle, numele, getname): ''' use the new position to create a new in file ''' oldcycle = intcycle - 1 if oldcycle: oldname = filename + str(oldcycle) else: oldname = filename oldfile = open("%s.in" % oldname).readlines() newfile = open("%s%d.in" % (filename, intcycle), 'w') for i, line in enumerate(oldfile): if 'geometry' in line: geoline = i + 3 if 'geometry' not in oldfile[geoline - 3]: writefile.werror(out0, 'geometry', starttime) for i in range(geoline): newfile.write(oldfile[i]) for i in range(geoline, geoline + numele): newfile.write(symb[i - geoline]) newfile.write(' ') for ii in range(3): newfile.write(' ') newfile.write(str(newpos[i - geoline][ii])) newfile.write('\n') for i in range(geoline + numele, len(oldfile)): newfile.write(oldfile[i]) newfile.close() return
def getenergy(self, filename, outname, potential, starttime, intcycle): if intcycle: resultname = filename + str(intcycle) else: resultname = filename if not os.path.isfile("%s//energy" % resultname): writefile.werror(outname, 'energy', starttime) exit('no energy in outfile') resultfile = open("%s//energy" % resultname).readlines() ev = resultfile[1].split()[1] outenergy = float(ev) potential.append(outenergy) outfile = open(outname, 'a+') outfile.write('the total potential is %f a.u. \n' % outenergy) outfile.close() return potential
def getenergy(self, filename, outname, potential, starttime, intcycle): ''' get the energy ''' if intcycle: resultname = filename + str(intcycle) else: resultname = filename resultfile = open("%s.log" % resultname).readlines() signe = [] for i, line in enumerate(resultfile): if 'SCF Done' in line: signe.append(i) if '\\MP2=' in line: signe.append(i) if '\\CISD=' in line: signe.append(i) if 'ITN=' in line: signe.append(i) ii = signe[-1] if 'SCF Done' in resultfile[ii]: energyrow = resultfile[ii].split() outenergy = float(energyrow[4]) potential.append(outenergy) outfile = open(outname, 'a+') outfile.write('the total potential is %f a.u. \n' % outenergy) outfile.close() elif '\\MP2=' in resultfile[ii]: energyrow = resultfile[ii].split('\\') for linemp in energyrow: if 'MP2' in linemp: outenergy = linemp.split('=') outenergy = float(outenergy[1]) potential.append(outenergy) outfile = open(outname, 'a+') outfile.write('the total potential is %f a.u. \n' % outenergy) outfile.close() elif '\\CISD=' in resultfile[ii]: energyrow = resultfile[ii].split('\\') for linemp in energyrow: if 'CISD' in linemp: outenergy = linemp.split('=') outenergy = float(outenergy[1]) potential.append(outenergy) outfile = open(outname, 'a+') outfile.write('the total potential is %f a.u. \n' % outenergy) outfile.close() elif 'ITN' in resultfile[ii]: energyrow = resultfile[ii].split() outenergy = float(energyrow[5]) potential.append(outenergy) outfile = open(outname, 'a+') outfile.write('the total potential is %f a.u. \n' % outenergy) outfile.close() else: writefile.werror(outname, 'energy', starttime) exit('no energy in outfile') return potential