コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
    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
コード例 #5
0
    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
コード例 #6
0
    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