Initial Translation of Gaussian Processes and Packaging of DicePlayer python module
This commit adds the methods that were present in the Gaussian.py file into the SetGlobals.py file and packages the program into a diceplayer module so it can be ran using 'python3 -m diceplayer' Signed-off-by: Vitor Hideyoshi <vitor.h.n.batista@gmail.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# diceplayer
|
# diceplayer
|
||||||
maxcyc = 3
|
maxcyc = 3
|
||||||
opt = NO
|
opt = YES
|
||||||
nprocs = 4
|
nprocs = 4
|
||||||
qmprog = g16
|
qmprog = g16
|
||||||
lps = no
|
lps = no
|
||||||
@@ -11,7 +11,7 @@ altsteps = 20000
|
|||||||
ncores = 3
|
ncores = 3
|
||||||
nmol = 1 50
|
nmol = 1 50
|
||||||
dens = 0.75
|
dens = 0.75
|
||||||
nstep = 40000 60000 50000
|
nstep = 4000 6000
|
||||||
isave = 1000
|
isave = 1000
|
||||||
ljname = phb.ljc
|
ljname = phb.ljc
|
||||||
outname = phb
|
outname = phb
|
||||||
|
|||||||
527
diceplayer/DPpack/.Dice.py
Normal file
527
diceplayer/DPpack/.Dice.py
Normal file
@@ -0,0 +1,527 @@
|
|||||||
|
import sys, os, time
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
|
from numpy import random
|
||||||
|
|
||||||
|
from DPpack.PTable import *
|
||||||
|
from DPpack.SetGlobals import *
|
||||||
|
from DPpack.Misc import *
|
||||||
|
|
||||||
|
####################################### functions ######################################
|
||||||
|
|
||||||
|
def make_inputs(cycle, proc):
|
||||||
|
|
||||||
|
step_dir = "step{:02d}".format(cycle)
|
||||||
|
proc_dir = "p{:02d}".format(proc)
|
||||||
|
path = step_dir + os.sep + proc_dir
|
||||||
|
|
||||||
|
num = time.time() ## Take the decimal places 7 to 12 of the
|
||||||
|
num = (num - int(num)) * 1e6 ## time in seconds as a floating point
|
||||||
|
num = int((num - int(num)) * 1e6) ## to make an integer in the range 1-1e6
|
||||||
|
random.seed( (os.getpid() * num) % (max_seed + 1) )
|
||||||
|
|
||||||
|
if not dice['randominit']:
|
||||||
|
xyzfile = dice['outname'] + ".xyz.last-" + "p{:02d}".format(proc)
|
||||||
|
make_init_file(path, xyzfile)
|
||||||
|
|
||||||
|
if len(dice['nstep']) == 2: ## Means NVT simulation
|
||||||
|
|
||||||
|
make_nvt_ter(path)
|
||||||
|
make_nvt_eq(path)
|
||||||
|
|
||||||
|
elif len(dice['nstep']) == 3: ## Means NPT simulation
|
||||||
|
|
||||||
|
if dice['randominit']:
|
||||||
|
make_nvt_ter(path)
|
||||||
|
else:
|
||||||
|
dice['dens'] = new_density(proc)
|
||||||
|
|
||||||
|
make_npt_ter(path)
|
||||||
|
make_npt_eq(path)
|
||||||
|
|
||||||
|
else:
|
||||||
|
sys.exit("Error: bad number of entries for 'nstep'")
|
||||||
|
|
||||||
|
make_potential(path)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def make_nvt_ter(path):
|
||||||
|
|
||||||
|
file = path + os.sep + "NVT.ter"
|
||||||
|
try:
|
||||||
|
fh = open(file, "w")
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
fh.write("title = {} - NVT Thermalization\n".format(dice['title']))
|
||||||
|
fh.write("ncores = {}\n".format(dice['ncores']))
|
||||||
|
fh.write("ljname = {}\n".format(dice['ljname']))
|
||||||
|
fh.write("outname = {}\n".format(dice['outname']))
|
||||||
|
|
||||||
|
string = " ".join(str(x) for x in dice['nmol'])
|
||||||
|
fh.write("nmol = {}\n".format(string))
|
||||||
|
|
||||||
|
fh.write("dens = {}\n".format(dice['dens']))
|
||||||
|
fh.write("temp = {}\n".format(dice['temp']))
|
||||||
|
|
||||||
|
if dice['randominit']:
|
||||||
|
fh.write("init = yes\n")
|
||||||
|
fh.write("nstep = {}\n".format(dice['nstep'][0]))
|
||||||
|
else:
|
||||||
|
fh.write("init = yesreadxyz\n")
|
||||||
|
fh.write("nstep = {}\n".format(player['altsteps']))
|
||||||
|
|
||||||
|
fh.write("vstep = 0\n")
|
||||||
|
fh.write("mstop = 1\n")
|
||||||
|
fh.write("accum = no\n")
|
||||||
|
fh.write("iprint = 1\n")
|
||||||
|
fh.write("isave = 0\n")
|
||||||
|
fh.write("irdf = 0\n")
|
||||||
|
|
||||||
|
seed = int(1e6 * random.random())
|
||||||
|
fh.write("seed = {}\n".format(seed))
|
||||||
|
|
||||||
|
fh.close()
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def make_nvt_eq(path):
|
||||||
|
|
||||||
|
file = path + os.sep + "NVT.eq"
|
||||||
|
try:
|
||||||
|
fh = open(file, "w")
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
fh.write("title = {} - NVT Production\n".format(dice['title']))
|
||||||
|
fh.write("ncores = {}\n".format(dice['ncores']))
|
||||||
|
fh.write("ljname = {}\n".format(dice['ljname']))
|
||||||
|
fh.write("outname = {}\n".format(dice['outname']))
|
||||||
|
|
||||||
|
string = " ".join(str(x) for x in dice['nmol'])
|
||||||
|
fh.write("nmol = {}\n".format(string))
|
||||||
|
|
||||||
|
fh.write("dens = {}\n".format(dice['dens']))
|
||||||
|
fh.write("temp = {}\n".format(dice['temp']))
|
||||||
|
fh.write("init = no\n")
|
||||||
|
fh.write("nstep = {}\n".format(dice['nstep'][1]))
|
||||||
|
fh.write("vstep = 0\n")
|
||||||
|
fh.write("mstop = 1\n")
|
||||||
|
fh.write("accum = no\n")
|
||||||
|
fh.write("iprint = 1\n")
|
||||||
|
fh.write("isave = {}\n".format(dice['isave']))
|
||||||
|
fh.write("irdf = {}\n".format(10 * player['nprocs']))
|
||||||
|
|
||||||
|
seed = int(1e6 * random.random())
|
||||||
|
fh.write("seed = {}\n".format(seed))
|
||||||
|
|
||||||
|
fh.close()
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def make_npt_ter(path):
|
||||||
|
|
||||||
|
file = path + os.sep + "NPT.ter"
|
||||||
|
try:
|
||||||
|
fh = open(file, "w")
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
fh.write("title = {} - NPT Thermalization\n".format(dice['title']))
|
||||||
|
fh.write("ncores = {}\n".format(dice['ncores']))
|
||||||
|
fh.write("ljname = {}\n".format(dice['ljname']))
|
||||||
|
fh.write("outname = {}\n".format(dice['outname']))
|
||||||
|
|
||||||
|
string = " ".join(str(x) for x in dice['nmol'])
|
||||||
|
fh.write("nmol = {}\n".format(string))
|
||||||
|
|
||||||
|
fh.write("press = {}\n".format(dice['press']))
|
||||||
|
fh.write("temp = {}\n".format(dice['temp']))
|
||||||
|
|
||||||
|
if dice['randominit']:
|
||||||
|
fh.write("init = no\n") ## Because there will be a previous NVT simulation
|
||||||
|
fh.write("vstep = {}\n".format(int(dice['nstep'][1] / 5)))
|
||||||
|
else:
|
||||||
|
fh.write("init = yesreadxyz\n")
|
||||||
|
fh.write("dens = {:<8.4f}\n".format(dice['dens']))
|
||||||
|
fh.write("vstep = {}\n".format(int(player['altsteps'] / 5)))
|
||||||
|
|
||||||
|
fh.write("nstep = 5\n")
|
||||||
|
fh.write("mstop = 1\n")
|
||||||
|
fh.write("accum = no\n")
|
||||||
|
fh.write("iprint = 1\n")
|
||||||
|
fh.write("isave = 0\n")
|
||||||
|
fh.write("irdf = 0\n")
|
||||||
|
|
||||||
|
seed = int(1e6 * random.random())
|
||||||
|
fh.write("seed = {}\n".format(seed))
|
||||||
|
|
||||||
|
fh.close()
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def make_npt_eq(path):
|
||||||
|
|
||||||
|
file = path + os.sep + "NPT.eq"
|
||||||
|
try:
|
||||||
|
fh = open(file, "w")
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
fh.write("title = {} - NPT Production\n".format(dice['title']))
|
||||||
|
fh.write("ncores = {}\n".format(dice['ncores']))
|
||||||
|
fh.write("ljname = {}\n".format(dice['ljname']))
|
||||||
|
fh.write("outname = {}\n".format(dice['outname']))
|
||||||
|
|
||||||
|
string = " ".join(str(x) for x in dice['nmol'])
|
||||||
|
fh.write("nmol = {}\n".format(string))
|
||||||
|
|
||||||
|
fh.write("press = {}\n".format(dice['press']))
|
||||||
|
fh.write("temp = {}\n".format(dice['temp']))
|
||||||
|
|
||||||
|
fh.write("nstep = 5\n")
|
||||||
|
|
||||||
|
fh.write("vstep = {}\n".format(int(dice['nstep'][2] / 5)))
|
||||||
|
fh.write("init = no\n")
|
||||||
|
fh.write("mstop = 1\n")
|
||||||
|
fh.write("accum = no\n")
|
||||||
|
fh.write("iprint = 1\n")
|
||||||
|
fh.write("isave = {}\n".format(dice['isave']))
|
||||||
|
fh.write("irdf = {}\n".format(10 * player['nprocs']))
|
||||||
|
|
||||||
|
seed = int(1e6 * random.random())
|
||||||
|
fh.write("seed = {}\n".format(seed))
|
||||||
|
|
||||||
|
fh.close()
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def make_init_file(path, file):
|
||||||
|
|
||||||
|
if not os.path.isfile(file):
|
||||||
|
sys.exit("Error: cannot find the xyz file {} in main directory".format(file))
|
||||||
|
try:
|
||||||
|
with open(file) as fh:
|
||||||
|
xyzfile = fh.readlines()
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
nsites_mm = 0
|
||||||
|
for i in range(1, len(dice['nmol'])):
|
||||||
|
nsites_mm += dice['nmol'][i] * len(molecules[i])
|
||||||
|
|
||||||
|
nsites_mm *= -1 ## Become an index to count from the end of xyzfile (list)
|
||||||
|
xyzfile = xyzfile[nsites_mm :] ## Only the MM atoms of the last configuration remains
|
||||||
|
|
||||||
|
file = path + os.sep + dice['outname'] + ".xy"
|
||||||
|
|
||||||
|
try:
|
||||||
|
fh = open(file, "w")
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
for atom in molecules[0]:
|
||||||
|
fh.write("{:>10.6f} {:>10.6f} {:>10.6f}\n".format(atom['rx'], atom['ry'],
|
||||||
|
atom['rz']))
|
||||||
|
|
||||||
|
for ghost in ghost_atoms:
|
||||||
|
fh.write("{:>10.6f} {:>10.6f} {:>10.6f}\n".format(ghost['rx'], ghost['ry'],
|
||||||
|
ghost['rz']))
|
||||||
|
|
||||||
|
for lps in lp_atoms:
|
||||||
|
fh.write("{:>10.6f} {:>10.6f} {:>10.6f}\n".format(lps['rx'], lps['ry'],
|
||||||
|
lps['rz']))
|
||||||
|
|
||||||
|
for line in xyzfile:
|
||||||
|
atom = line.split()
|
||||||
|
rx = float(atom[1])
|
||||||
|
ry = float(atom[2])
|
||||||
|
rz = float(atom[3])
|
||||||
|
fh.write("{:>10.5f} {:>10.5f} {:>10.5f}\n".format(rx, ry, rz))
|
||||||
|
|
||||||
|
fh.write("$end")
|
||||||
|
|
||||||
|
fh.close()
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def make_potential(path):
|
||||||
|
|
||||||
|
fstr = "{:<3d} {:>3d} {:>10.5f} {:>10.5f} {:>10.5f} {:>10.6f} {:>9.5f} {:>7.4f}\n"
|
||||||
|
|
||||||
|
file = path + os.sep + dice['ljname']
|
||||||
|
try:
|
||||||
|
fh = open(file, "w")
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
fh.write("{}\n".format(dice['combrule']))
|
||||||
|
fh.write("{}\n".format(len(dice['nmol'])))
|
||||||
|
|
||||||
|
nsites_qm = len(molecules[0]) + len(ghost_atoms) + len(lp_atoms)
|
||||||
|
|
||||||
|
## Print the sites of the QM molecule
|
||||||
|
fh.write("{}\n".format(nsites_qm))
|
||||||
|
for atom in molecules[0]:
|
||||||
|
fh.write(fstr.format(atom['lbl'], atom['na'], atom['rx'], atom['ry'], atom['rz'],
|
||||||
|
atom['chg'], atom['eps'], atom['sig']))
|
||||||
|
|
||||||
|
ghost_label = molecules[0][-1]['lbl'] + 1
|
||||||
|
for ghost in ghost_atoms:
|
||||||
|
fh.write(fstr.format(ghost_label, ghost_number, ghost['rx'], ghost['ry'],
|
||||||
|
ghost['rz'], ghost['chg'], 0, 0))
|
||||||
|
|
||||||
|
ghost_label += 1
|
||||||
|
for lp in lp_atoms:
|
||||||
|
fh.write(fstr.format(ghost_label, ghost_number, lp['rx'], lp['ry'], lp['rz'],
|
||||||
|
lp['chg'], 0, 0))
|
||||||
|
|
||||||
|
## Print the sites of the other molecules
|
||||||
|
for mol in molecules[1:]:
|
||||||
|
fh.write("{}\n".format(len(mol)))
|
||||||
|
for atom in mol:
|
||||||
|
fh.write(fstr.format(atom['lbl'], atom['na'], atom['rx'], atom['ry'],
|
||||||
|
atom['rz'], atom['chg'], atom['eps'], atom['sig']))
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def make_proc_dir(cycle, proc):
|
||||||
|
|
||||||
|
step_dir = "step{:02d}".format(cycle)
|
||||||
|
proc_dir = "p{:02d}".format(proc)
|
||||||
|
path = step_dir + os.sep + proc_dir
|
||||||
|
try:
|
||||||
|
os.makedirs(path)
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot make directory {}".format(path))
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def run_dice(cycle, proc, fh):
|
||||||
|
|
||||||
|
step_dir = "step{:02d}".format(cycle)
|
||||||
|
proc_dir = "p{:02d}".format(proc)
|
||||||
|
path = step_dir + os.sep + proc_dir
|
||||||
|
working_dir = os.getcwd()
|
||||||
|
os.chdir(path)
|
||||||
|
|
||||||
|
fh.write("Simulation process {} initiated with pid {}\n".format(proc_dir, os.getpid()))
|
||||||
|
|
||||||
|
if len(dice['nstep']) == 2: ## Means NVT simulation
|
||||||
|
|
||||||
|
## NVT thermalization
|
||||||
|
string = "(from " + ("random" if dice['randominit'] else "previous") + " configuration)"
|
||||||
|
fh.write("p{:02d}> NVT thermalization initiated {} on {}\n".format(proc, string,
|
||||||
|
date_time()))
|
||||||
|
|
||||||
|
infh = open("NVT.ter")
|
||||||
|
outfh = open("NVT.ter.out", "w")
|
||||||
|
|
||||||
|
exit_status = subprocess.call(dice['progname'], stdin=infh, stdout=outfh)
|
||||||
|
infh.close()
|
||||||
|
outfh.close()
|
||||||
|
|
||||||
|
if os.getppid() == 1: ## Parent process is dead
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
if exit_status != 0:
|
||||||
|
sys.exit("Dice process p{:02d} did not exit properly".format(proc))
|
||||||
|
else:
|
||||||
|
outfh = open("NVT.ter.out") ## Open again to seek the normal end flag
|
||||||
|
flag = outfh.readlines()[dice_flag_line].strip()
|
||||||
|
outfh.close()
|
||||||
|
if flag != dice_end_flag:
|
||||||
|
sys.exit("Dice process p{:02d} did not exit properly".format(proc))
|
||||||
|
|
||||||
|
## NVT production
|
||||||
|
fh.write("p{:02d}> NVT production initiated on {}\n".format(proc, date_time()))
|
||||||
|
|
||||||
|
infh = open("NVT.eq")
|
||||||
|
outfh = open("NVT.eq.out", "w")
|
||||||
|
|
||||||
|
exit_status = subprocess.call(dice['progname'], stdin=infh, stdout=outfh)
|
||||||
|
infh.close()
|
||||||
|
outfh.close()
|
||||||
|
|
||||||
|
if os.getppid() == 1: ## Parent process is dead
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
if exit_status != 0:
|
||||||
|
sys.exit("Dice process p{:02d} did not exit properly".format(proc))
|
||||||
|
else:
|
||||||
|
outfh = open("NVT.eq.out") ## Open again to seek the normal end flag
|
||||||
|
flag = outfh.readlines()[dice_flag_line].strip()
|
||||||
|
outfh.close()
|
||||||
|
if flag != dice_end_flag:
|
||||||
|
sys.exit("Dice process p{:02d} did not exit properly".format(proc))
|
||||||
|
|
||||||
|
fh.write("p{:02d}> ----- NVT production finished on {}\n".format(proc,
|
||||||
|
date_time()))
|
||||||
|
|
||||||
|
elif len(dice['nstep']) == 3: ## Means NPT simulation
|
||||||
|
|
||||||
|
## NVT thermalization if randominit
|
||||||
|
if dice['randominit']:
|
||||||
|
string = "(from random configuration)"
|
||||||
|
fh.write("p{:02d}> NVT thermalization initiated {} on {}\n".format(proc,
|
||||||
|
string, date_time()))
|
||||||
|
infh = open("NVT.ter")
|
||||||
|
outfh = open("NVT.ter.out", "w")
|
||||||
|
|
||||||
|
exit_status = subprocess.call(dice['progname'], stdin=infh, stdout=outfh)
|
||||||
|
infh.close()
|
||||||
|
outfh.close()
|
||||||
|
|
||||||
|
if os.getppid() == 1: ## Parent process is dead
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
if exit_status != 0:
|
||||||
|
sys.exit("Dice process p{:02d} did not exit properly".format(proc))
|
||||||
|
else:
|
||||||
|
outfh = open("NVT.ter.out") ## Open again to seek the normal end flag
|
||||||
|
flag = outfh.readlines()[dice_flag_line].strip()
|
||||||
|
outfh.close()
|
||||||
|
if flag != dice_end_flag:
|
||||||
|
sys.exit("Dice process p{:02d} did not exit properly".format(proc))
|
||||||
|
|
||||||
|
## NPT thermalization
|
||||||
|
string = (" (from previous configuration) " if not dice['randominit'] else " ")
|
||||||
|
fh.write("p{:02d}> NPT thermalization initiated{}on {}\n".format(proc, string,
|
||||||
|
date_time()))
|
||||||
|
infh = open("NPT.ter")
|
||||||
|
outfh = open("NPT.ter.out", "w")
|
||||||
|
|
||||||
|
exit_status = subprocess.call(dice['progname'], stdin=infh, stdout=outfh)
|
||||||
|
infh.close()
|
||||||
|
outfh.close()
|
||||||
|
|
||||||
|
if os.getppid() == 1: ## Parent process is dead
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
if exit_status != 0:
|
||||||
|
sys.exit("Dice process p{:02d} did not exit properly".format(proc))
|
||||||
|
else:
|
||||||
|
outfh = open("NPT.ter.out") ## Open again to seek the normal end flag
|
||||||
|
flag = outfh.readlines()[dice_flag_line].strip()
|
||||||
|
outfh.close()
|
||||||
|
if flag != dice_end_flag:
|
||||||
|
sys.exit("Dice process p{:02d} did not exit properly".format(proc))
|
||||||
|
|
||||||
|
## NPT production
|
||||||
|
fh.write("p{:02d}> NPT production initiated on {}\n".format(proc, date_time()))
|
||||||
|
|
||||||
|
infh = open("NPT.eq")
|
||||||
|
outfh = open("NPT.eq.out", "w")
|
||||||
|
|
||||||
|
exit_status = subprocess.call(dice['progname'], stdin=infh, stdout=outfh)
|
||||||
|
infh.close()
|
||||||
|
outfh.close()
|
||||||
|
|
||||||
|
if os.getppid() == 1: ## Parent process is dead
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
if exit_status != 0:
|
||||||
|
sys.exit("Dice process p{:02d} did not exit properly".format(proc))
|
||||||
|
else:
|
||||||
|
outfh = open("NPT.eq.out") ## Open again to seek the normal end flag
|
||||||
|
flag = outfh.readlines()[dice_flag_line].strip()
|
||||||
|
outfh.close()
|
||||||
|
if flag != dice_end_flag:
|
||||||
|
sys.exit("Dice process p{:02d} did not exit properly".format(proc))
|
||||||
|
|
||||||
|
fh.write("p{:02d}> ----- NPT production finished on {}\n".format(proc,
|
||||||
|
date_time()))
|
||||||
|
|
||||||
|
os.chdir(working_dir)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def print_last_config(cycle, proc):
|
||||||
|
|
||||||
|
step_dir = "step{:02d}".format(cycle)
|
||||||
|
proc_dir = "p{:02d}".format(proc)
|
||||||
|
path = step_dir + os.sep + proc_dir
|
||||||
|
file = path + os.sep + dice['outname'] + ".xyz"
|
||||||
|
if not os.path.isfile(file):
|
||||||
|
sys.exit("Error: cannot find the xyz file {}".format(file))
|
||||||
|
try:
|
||||||
|
with open(file) as fh:
|
||||||
|
xyzfile = fh.readlines()
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
nsites = ( len(molecules[0]) + len(ghost_atoms) + len(lp_atoms) ) * dice['nmol'][0]
|
||||||
|
for i in range(1, len(dice['nmol'])):
|
||||||
|
nsites += dice['nmol'][i] * len(molecules[i])
|
||||||
|
|
||||||
|
nsites += 2 ## To include the comment line and the number of atoms (xyz file format)
|
||||||
|
|
||||||
|
nsites *= -1 ## Become an index to count from the end of xyzfile (list)
|
||||||
|
xyzfile = xyzfile[nsites :] ## Take the last configuration
|
||||||
|
|
||||||
|
|
||||||
|
file = dice['outname'] + ".xyz.last-" + proc_dir
|
||||||
|
fh = open(file, "w")
|
||||||
|
for line in xyzfile:
|
||||||
|
fh.write(line)
|
||||||
|
|
||||||
|
fh.close()
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def new_density(proc):
|
||||||
|
|
||||||
|
file = dice['outname'] + ".xyz.last-" + "p{:02d}".format(proc)
|
||||||
|
if not os.path.isfile(file):
|
||||||
|
sys.exit("Error: cannot find the xyz file {} in main directory".format(file))
|
||||||
|
try:
|
||||||
|
with open(file) as fh:
|
||||||
|
xyzfile = fh.readlines()
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
box = xyzfile[1].split()
|
||||||
|
volume = float(box[-3]) * float(box[-2]) * float(box[-1])
|
||||||
|
|
||||||
|
total_mass = 0
|
||||||
|
for i in range(len(molecules)):
|
||||||
|
mol_mass = 0
|
||||||
|
for atom in molecules[i]:
|
||||||
|
mol_mass += atom['mass']
|
||||||
|
total_mass += mol_mass * dice['nmol'][i]
|
||||||
|
|
||||||
|
density = (total_mass / volume) * umaAng3_to_gcm3
|
||||||
|
|
||||||
|
return density
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def simulation_process(cycle, proc, logfh):
|
||||||
|
|
||||||
|
try:
|
||||||
|
make_proc_dir(cycle, proc)
|
||||||
|
make_inputs(cycle, proc)
|
||||||
|
run_dice(cycle, proc, logfh)
|
||||||
|
except Exception as err:
|
||||||
|
sys.exit(err)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -148,7 +148,7 @@ def print_grad_hessian(cycle, cur_gradient, hessian):
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
## Change the name to make_gaussian_input
|
||||||
def make_force_input(cycle, asec_charges):
|
def make_force_input(cycle, asec_charges):
|
||||||
|
|
||||||
path = "step{:02d}".format(cycle) + os.sep + "qm"
|
path = "step{:02d}".format(cycle) + os.sep + "qm"
|
||||||
@@ -241,92 +241,92 @@ def make_force_input(cycle, asec_charges):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def make_charge_input(cycle, asec_charges):
|
# def make_charge_input(cycle, asec_charges):
|
||||||
|
|
||||||
path = "step{:02d}".format(cycle) + os.sep + "qm"
|
# path = "step{:02d}".format(cycle) + os.sep + "qm"
|
||||||
file = path + os.sep + "asec2.gjf"
|
# file = path + os.sep + "asec2.gjf"
|
||||||
try:
|
# try:
|
||||||
fh = open(file, "w")
|
# fh = open(file, "w")
|
||||||
except:
|
# except:
|
||||||
sys.exit("Error: cannot open file {}".format(file))
|
# sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
fh.write("%Chk=asec.chk\n")
|
# fh.write("%Chk=asec.chk\n")
|
||||||
if gaussian['mem'] != None:
|
# if gaussian['mem'] != None:
|
||||||
fh.write("%Mem={}MB\n".format(gaussian['mem']))
|
# fh.write("%Mem={}MB\n".format(gaussian['mem']))
|
||||||
fh.write("%Nprocs={}\n".format(player['nprocs'] * dice['ncores']))
|
# fh.write("%Nprocs={}\n".format(player['nprocs'] * dice['ncores']))
|
||||||
|
|
||||||
kword_line = "#P " + gaussian['chglevel'] + " " + gaussian['keywords'] + " Charge NoSymm"
|
# kword_line = "#P " + gaussian['chglevel'] + " " + gaussian['keywords'] + " Charge NoSymm"
|
||||||
|
|
||||||
if player['opt'] != "no" or cycle > 1:
|
# if player['opt'] != "no" or cycle > 1:
|
||||||
kword_line += " Guess=Read"
|
# kword_line += " Guess=Read"
|
||||||
|
|
||||||
kword_line += " Pop={} Density=Current\n".format(gaussian['pop'])
|
# kword_line += " Pop={} Density=Current\n".format(gaussian['pop'])
|
||||||
|
|
||||||
fh.write(textwrap.fill(kword_line, 90))
|
# fh.write(textwrap.fill(kword_line, 90))
|
||||||
fh.write("\n")
|
# fh.write("\n")
|
||||||
|
|
||||||
fh.write("\nCharge calculation - Cycle number {}\n".format(cycle))
|
# fh.write("\nCharge calculation - Cycle number {}\n".format(cycle))
|
||||||
fh.write("\n")
|
# fh.write("\n")
|
||||||
fh.write("{},{}\n".format(gaussian['chgmult'][0], gaussian['chgmult'][1]))
|
# fh.write("{},{}\n".format(gaussian['chgmult'][0], gaussian['chgmult'][1]))
|
||||||
|
|
||||||
for atom in molecules[0]:
|
# for atom in molecules[0]:
|
||||||
symbol = atomsymb[atom['na']]
|
# symbol = atomsymb[atom['na']]
|
||||||
fh.write("{:<2s} {:>10.5f} {:>10.5f} {:>10.5f}\n".format(symbol,
|
# fh.write("{:<2s} {:>10.5f} {:>10.5f} {:>10.5f}\n".format(symbol,
|
||||||
atom['rx'], atom['ry'], atom['rz']))
|
# atom['rx'], atom['ry'], atom['rz']))
|
||||||
|
|
||||||
if cycle >= player['switchcyc']:
|
# if cycle >= player['switchcyc']:
|
||||||
for ghost in ghost_atoms:
|
# for ghost in ghost_atoms:
|
||||||
fh.write("Bq {:>10.5f} {:>10.5f} {:>10.5f}\n".format(
|
# fh.write("Bq {:>10.5f} {:>10.5f} {:>10.5f}\n".format(
|
||||||
ghost['rx'], ghost['ry'], ghost['rz']))
|
# ghost['rx'], ghost['ry'], ghost['rz']))
|
||||||
|
|
||||||
for lp in lp_atoms:
|
# for lp in lp_atoms:
|
||||||
fh.write("Bq {:>10.5f} {:>10.5f} {:>10.5f}\n".format(
|
# fh.write("Bq {:>10.5f} {:>10.5f} {:>10.5f}\n".format(
|
||||||
lp['rx'], lp['ry'], lp['rz']))
|
# lp['rx'], lp['ry'], lp['rz']))
|
||||||
|
|
||||||
fh.write("\n")
|
# fh.write("\n")
|
||||||
|
|
||||||
## If gmiddle file was informed, write its contents in asec.gjf
|
# ## If gmiddle file was informed, write its contents in asec.gjf
|
||||||
if gaussian['gmiddle'] != None:
|
# if gaussian['gmiddle'] != None:
|
||||||
if not os.path.isfile(gaussian['gmiddle']):
|
# if not os.path.isfile(gaussian['gmiddle']):
|
||||||
sys.exit("Error: cannot find file {} in main directory".format(
|
# sys.exit("Error: cannot find file {} in main directory".format(
|
||||||
gaussian['gmiddle']))
|
# gaussian['gmiddle']))
|
||||||
try:
|
# try:
|
||||||
with open(gaussian['gmiddle']) as gmiddlefile:
|
# with open(gaussian['gmiddle']) as gmiddlefile:
|
||||||
gmiddle = gmiddlefile.readlines()
|
# gmiddle = gmiddlefile.readlines()
|
||||||
except:
|
# except:
|
||||||
sys.exit("Error: cannot open file {}".format(gaussian['gmiddle']))
|
# sys.exit("Error: cannot open file {}".format(gaussian['gmiddle']))
|
||||||
|
|
||||||
for line in gmiddle:
|
# for line in gmiddle:
|
||||||
fh.write(line)
|
# fh.write(line)
|
||||||
|
|
||||||
fh.write("\n")
|
# fh.write("\n")
|
||||||
|
|
||||||
## Write the ASEC:
|
# ## Write the ASEC:
|
||||||
for charge in asec_charges:
|
# for charge in asec_charges:
|
||||||
fh.write("{:>10.5f} {:>10.5f} {:>10.5f} {:>11.8f}\n".format(
|
# fh.write("{:>10.5f} {:>10.5f} {:>10.5f} {:>11.8f}\n".format(
|
||||||
charge['rx'], charge['ry'], charge['rz'], charge['chg']))
|
# charge['rx'], charge['ry'], charge['rz'], charge['chg']))
|
||||||
|
|
||||||
fh.write("\n")
|
# fh.write("\n")
|
||||||
|
|
||||||
## If gbottom file was informed, write its contents in asec.gjf
|
# ## If gbottom file was informed, write its contents in asec.gjf
|
||||||
if gaussian['gbottom'] != None:
|
# if gaussian['gbottom'] != None:
|
||||||
if not os.path.isfile(gaussian['gbottom']):
|
# if not os.path.isfile(gaussian['gbottom']):
|
||||||
sys.exit("Error: cannot find file {} in main directory".format(
|
# sys.exit("Error: cannot find file {} in main directory".format(
|
||||||
gaussian['gbottom']))
|
# gaussian['gbottom']))
|
||||||
try:
|
# try:
|
||||||
with open(gaussian['gbottom']) as gbottomfile:
|
# with open(gaussian['gbottom']) as gbottomfile:
|
||||||
gbottom = gbottomfile.readlines()
|
# gbottom = gbottomfile.readlines()
|
||||||
except:
|
# except:
|
||||||
sys.exit("Error: cannot open file {}".format(gaussian['gbottom']))
|
# sys.exit("Error: cannot open file {}".format(gaussian['gbottom']))
|
||||||
|
|
||||||
for line in gbottom:
|
# for line in gbottom:
|
||||||
fh.write(line)
|
# fh.write(line)
|
||||||
|
|
||||||
fh.write("\n")
|
# fh.write("\n")
|
||||||
|
|
||||||
fh.close()
|
# fh.close()
|
||||||
|
|
||||||
return
|
# return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -371,50 +371,3 @@ def read_charges(file, fh):
|
|||||||
fh.write("------------------------------------\n")
|
fh.write("------------------------------------\n")
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def run_gaussian(cycle, type, fh):
|
|
||||||
|
|
||||||
path = "step{:02d}".format(cycle) + os.sep + "qm"
|
|
||||||
work_dir = os.getcwd()
|
|
||||||
os.chdir(path)
|
|
||||||
|
|
||||||
if type == "force":
|
|
||||||
infile = "asec.gjf"
|
|
||||||
elif type == "charge":
|
|
||||||
infile = "asec2.gjf"
|
|
||||||
|
|
||||||
fh.write("\nCalculation of {}s initiated with Gaussian on {}\n".format(type, date_time()))
|
|
||||||
|
|
||||||
exit_status = subprocess.call([player['qmprog'], infile])
|
|
||||||
|
|
||||||
if exit_status != 0:
|
|
||||||
sys.exit("Gaussian process did not exit properly")
|
|
||||||
|
|
||||||
fh.write("Calculation of {}s finished on {}\n".format(type, date_time()))
|
|
||||||
|
|
||||||
os.chdir(work_dir)
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def run_formchk(cycle, fh):
|
|
||||||
|
|
||||||
path = "step{:02d}".format(cycle) + os.sep + "qm"
|
|
||||||
work_dir = os.getcwd()
|
|
||||||
os.chdir(path)
|
|
||||||
|
|
||||||
fh.write("Formatting the checkpoint file... ")
|
|
||||||
|
|
||||||
exit_status = subprocess.call(["formchk", "asec.chk"])
|
|
||||||
|
|
||||||
fh.write("Done\n")
|
|
||||||
|
|
||||||
os.chdir(work_dir)
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -8,8 +8,8 @@ from copy import deepcopy
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from numpy import linalg
|
from numpy import linalg
|
||||||
|
|
||||||
from DPpack.Misc import *
|
from diceplayer.DPpack.Misc import *
|
||||||
from DPpack.PTable import *
|
from diceplayer.DPpack.PTable import *
|
||||||
|
|
||||||
env = ["OMP_STACKSIZE"]
|
env = ["OMP_STACKSIZE"]
|
||||||
|
|
||||||
@@ -44,20 +44,6 @@ class System:
|
|||||||
|
|
||||||
return distance
|
return distance
|
||||||
|
|
||||||
def minimum_distance(self, index1, index2):
|
|
||||||
|
|
||||||
distances = []
|
|
||||||
for atom1 in self.molecule[index1]:
|
|
||||||
if atom1.na != ghost_number:
|
|
||||||
for atom2 in self.molecule[index2]:
|
|
||||||
if atom2.na != ghost_number:
|
|
||||||
dx = atom1.rx - atom2.rx
|
|
||||||
dy = atom1.ry - atom2.ry
|
|
||||||
dz = atom1.rz - atom2.rz
|
|
||||||
distances.append(math.sqrt(dx**2 + dy**2 + dz**2))
|
|
||||||
|
|
||||||
return min(distances)
|
|
||||||
|
|
||||||
def rmsd_fit(self, index_p, index_r):
|
def rmsd_fit(self, index_p, index_r):
|
||||||
|
|
||||||
projecting_mol = self.molecule[index_p]
|
projecting_mol = self.molecule[index_p]
|
||||||
@@ -434,6 +420,20 @@ class Molecule:
|
|||||||
fh.write(" Dipole moment = ( {:>9.4f} , {:>9.4f} , {:>9.4f} ) Total = {:>9.4f} Debye\n\n".format(
|
fh.write(" Dipole moment = ( {:>9.4f} , {:>9.4f} , {:>9.4f} ) Total = {:>9.4f} Debye\n\n".format(
|
||||||
chg_dip[1], chg_dip[2], chg_dip[3], chg_dip[4]))
|
chg_dip[1], chg_dip[2], chg_dip[3], chg_dip[4]))
|
||||||
|
|
||||||
|
def minimum_distance(self, molec):
|
||||||
|
|
||||||
|
distances = []
|
||||||
|
for atom1 in self.atom:
|
||||||
|
if atom1.na != ghost_number:
|
||||||
|
for atom2 in molec.atom:
|
||||||
|
if atom2.na != ghost_number:
|
||||||
|
dx = atom1.rx - atom2.rx
|
||||||
|
dy = atom1.ry - atom2.ry
|
||||||
|
dz = atom1.rz - atom2.rz
|
||||||
|
distances.append(math.sqrt(dx**2 + dy**2 + dz**2))
|
||||||
|
|
||||||
|
return min(distances)
|
||||||
|
|
||||||
class Atom:
|
class Atom:
|
||||||
|
|
||||||
def __init__(self, lbl,na,rx,ry,rz,chg,eps,sig):
|
def __init__(self, lbl,na,rx,ry,rz,chg,eps,sig):
|
||||||
@@ -6,9 +6,9 @@ import types
|
|||||||
|
|
||||||
from numpy.core.fromnumeric import partition
|
from numpy.core.fromnumeric import partition
|
||||||
|
|
||||||
from DPpack.MolHandling import *
|
from diceplayer.DPpack.MolHandling import *
|
||||||
from DPpack.PTable import *
|
from diceplayer.DPpack.PTable import *
|
||||||
from DPpack.Misc import *
|
from diceplayer.DPpack.Misc import *
|
||||||
|
|
||||||
from numpy import random
|
from numpy import random
|
||||||
import subprocess
|
import subprocess
|
||||||
@@ -129,7 +129,7 @@ class Internal:
|
|||||||
|
|
||||||
elif key == 'randominit':
|
elif key == 'randominit':
|
||||||
if value in ('always','first'):
|
if value in ('always','first'):
|
||||||
setattr(self.dice,key,value)
|
setattr(self.dice,key,value[0])
|
||||||
|
|
||||||
elif key in ('ncores', 'isave'):
|
elif key in ('ncores', 'isave'):
|
||||||
err = "Error: expected a positive integer for keyword {} in file {}".format(key, self.infile)
|
err = "Error: expected a positive integer for keyword {} in file {}".format(key, self.infile)
|
||||||
@@ -207,7 +207,7 @@ class Internal:
|
|||||||
sys.exit(err)
|
sys.exit(err)
|
||||||
|
|
||||||
elif key == 'level':
|
elif key == 'level':
|
||||||
setattr(self.gaussian, key, value)
|
setattr(self.gaussian, key, value[0])
|
||||||
|
|
||||||
elif key in ('gmiddle', 'gbottom'):
|
elif key in ('gmiddle', 'gbottom'):
|
||||||
setattr(self.gaussian, key, value[0])
|
setattr(self.gaussian, key, value[0])
|
||||||
@@ -665,8 +665,10 @@ class Internal:
|
|||||||
### I still have to talk with Herbet about this function
|
### I still have to talk with Herbet about this function
|
||||||
def populate_asec_vdw(self, cycle):
|
def populate_asec_vdw(self, cycle):
|
||||||
|
|
||||||
asec_charges = [] # (rx, ry, rz, chg)
|
## Both asec_charges and vdw_meanfield will utilize the Molecule() class and Atoms() with some None elements
|
||||||
vdw_meanfield = [] # (rx, ry, rz, eps, sig)
|
|
||||||
|
asec_charges = Molecule() # (lbl=None, na=None, rx, ry, rz, chg, eps=None, sig=None)
|
||||||
|
vdw_meanfield = Molecule() # (lbl=None, na=None, rx, ry, rz, chg=None, eps, sig)
|
||||||
|
|
||||||
if self.dice.nstep[-1] % self.dice.isave == 0:
|
if self.dice.nstep[-1] % self.dice.isave == 0:
|
||||||
nconfigs = round(self.dice.nstep[-1] / self.dice.isave)
|
nconfigs = round(self.dice.nstep[-1] / self.dice.isave)
|
||||||
@@ -719,24 +721,25 @@ class Internal:
|
|||||||
|
|
||||||
for mol in range(nmols): ## Run over molecules of each type
|
for mol in range(nmols): ## Run over molecules of each type
|
||||||
|
|
||||||
new_molecule = []
|
new_molecule = Molecule(self.system.molecule[type].molnale)
|
||||||
for site in range(len(self.system.molecule[types].atom)): ## Run over sites of each molecule
|
for site in range(len(self.system.molecule[types].atom)): ## Run over sites of each molecule
|
||||||
|
|
||||||
new_molecule.append({})
|
new_molecule.append({})
|
||||||
line = xyzfile.pop(0).split()
|
line = xyzfile.pop(0).split()
|
||||||
|
|
||||||
if line[0].title() != atomsymb[molecules[type][site]['na']].strip():
|
if line[0].title() != atomsymb[self.system.molecule[type].atom[site].na.strip()]:
|
||||||
sys.exit("Error reading file {}".format(file))
|
sys.exit("Error reading file {}".format(file))
|
||||||
|
|
||||||
new_molecule[site]['na'] = molecules[type][site]['na']
|
new_molecule.add_atom(Atom(self.system.molecule[type].atom[site].lbl,
|
||||||
new_molecule[site]['rx'] = float(line[1])
|
self.system.molecule[type].atom[site].na,
|
||||||
new_molecule[site]['ry'] = float(line[2])
|
self.system.molecule[type].atom[site].float(line[1]),
|
||||||
new_molecule[site]['rz'] = float(line[3])
|
self.system.molecule[type].atom[site].float(line[2]),
|
||||||
new_molecule[site]['chg'] = molecules[type][site]['chg']
|
self.system.molecule[type].atom[site].float(line[3]),
|
||||||
new_molecule[site]['eps'] = molecules[type][site]['eps']
|
self.system.molecule[type].atom[site].chg,
|
||||||
new_molecule[site]['sig'] = molecules[type][site]['sig']
|
self.system.molecule[type].atom[site].eps,
|
||||||
|
self.system.molecule[type].atom[site].sig))
|
||||||
|
|
||||||
dist = minimum_distance(molecules[0], new_molecule)
|
dist = self.system.molecule[0].minimum_distance(new_molecule)
|
||||||
if dist < thickness[-1]:
|
if dist < thickness[-1]:
|
||||||
mol_count += 1
|
mol_count += 1
|
||||||
for atom in new_molecule:
|
for atom in new_molecule:
|
||||||
@@ -748,37 +751,37 @@ class Internal:
|
|||||||
asec_charges[-1]['rz'] = atom['rz']
|
asec_charges[-1]['rz'] = atom['rz']
|
||||||
asec_charges[-1]['chg'] = atom['chg'] / norm_factor
|
asec_charges[-1]['chg'] = atom['chg'] / norm_factor
|
||||||
|
|
||||||
if player['vdwforces'] == "yes":
|
if self.player.vdwforces == "yes":
|
||||||
vdw_meanfield[-1]['rx'] = atom['rx']
|
vdw_meanfield[-1]['rx'] = atom['rx']
|
||||||
vdw_meanfield[-1]['ry'] = atom['ry']
|
vdw_meanfield[-1]['ry'] = atom['ry']
|
||||||
vdw_meanfield[-1]['rz'] = atom['rz']
|
vdw_meanfield[-1]['rz'] = atom['rz']
|
||||||
vdw_meanfield[-1]['eps'] = atom['eps']
|
vdw_meanfield[-1]['eps'] = atom['eps']
|
||||||
vdw_meanfield[-1]['sig'] = atom['sig']
|
vdw_meanfield[-1]['sig'] = atom['sig']
|
||||||
|
|
||||||
#### Read lines with ghosts or lps in molecules of type 0 (reference)
|
# #### Read lines with ghosts or lps in molecules of type 0 (reference)
|
||||||
#### and, if dist < thickness, appends to asec
|
# #### and, if dist < thickness, appends to asec
|
||||||
if type == 0:
|
# if type == 0:
|
||||||
for ghost in ghost_atoms:
|
# for ghost in ghost_atoms:
|
||||||
line = xyzfile.pop(0).split()
|
# line = xyzfile.pop(0).split()
|
||||||
if line[0] != dice_ghost_label:
|
# if line[0] != dice_ghost_label:
|
||||||
sys.exit("Error reading file {}".format(file))
|
# sys.exit("Error reading file {}".format(file))
|
||||||
if dist < thickness[-1]:
|
# if dist < thickness[-1]:
|
||||||
asec_charges.append({})
|
# asec_charges.append({})
|
||||||
asec_charges[-1]['rx'] = float(line[1])
|
# asec_charges[-1]['rx'] = float(line[1])
|
||||||
asec_charges[-1]['ry'] = float(line[2])
|
# asec_charges[-1]['ry'] = float(line[2])
|
||||||
asec_charges[-1]['rz'] = float(line[3])
|
# asec_charges[-1]['rz'] = float(line[3])
|
||||||
asec_charges[-1]['chg'] = ghost['chg'] / norm_factor
|
# asec_charges[-1]['chg'] = ghost['chg'] / norm_factor
|
||||||
|
|
||||||
for lp in lp_atoms:
|
# for lp in lp_atoms:
|
||||||
line = xyzfile.pop(0).split()
|
# line = xyzfile.pop(0).split()
|
||||||
if line[0] != dice_ghost_label:
|
# if line[0] != dice_ghost_label:
|
||||||
sys.exit("Error reading file {}".format(file))
|
# sys.exit("Error reading file {}".format(file))
|
||||||
if dist < thickness[-1]:
|
# if dist < thickness[-1]:
|
||||||
asec_charges.append({})
|
# asec_charges.append({})
|
||||||
asec_charges[-1]['rx'] = float(line[1])
|
# asec_charges[-1]['rx'] = float(line[1])
|
||||||
asec_charges[-1]['ry'] = float(line[2])
|
# asec_charges[-1]['ry'] = float(line[2])
|
||||||
asec_charges[-1]['rz'] = float(line[3])
|
# asec_charges[-1]['rz'] = float(line[3])
|
||||||
asec_charges[-1]['chg'] = lp['chg'] / norm_factor
|
# asec_charges[-1]['chg'] = lp['chg'] / norm_factor
|
||||||
|
|
||||||
picked_mols.append(mol_count)
|
picked_mols.append(mol_count)
|
||||||
|
|
||||||
@@ -865,12 +868,12 @@ class Internal:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
self.dice.make_proc_dir(cycle, proc)
|
self.dice.make_proc_dir(cycle, proc)
|
||||||
self.make_inputs(cycle, proc)
|
self.make_dice_inputs(cycle, proc)
|
||||||
self.dice.run_dice(cycle, proc, self.outfile)
|
self.dice.run_dice(cycle, proc, self.outfile)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
sys.exit(err)
|
sys.exit(err)
|
||||||
|
|
||||||
def make_inputs(self, cycle, proc):
|
def make_dice_inputs(self, cycle, proc):
|
||||||
|
|
||||||
sim_dir = "simfiles"
|
sim_dir = "simfiles"
|
||||||
step_dir = "step{:02d}".format(cycle)
|
step_dir = "step{:02d}".format(cycle)
|
||||||
@@ -978,7 +981,7 @@ class Internal:
|
|||||||
fh.write("mstop = 1\n")
|
fh.write("mstop = 1\n")
|
||||||
fh.write("accum = no\n")
|
fh.write("accum = no\n")
|
||||||
fh.write("iprint = 1\n")
|
fh.write("iprint = 1\n")
|
||||||
fh.write("isave = {}\n".format(self.isave))
|
fh.write("isave = {}\n".format(self.dice.isave))
|
||||||
fh.write("irdf = {}\n".format(10 * self.player.nprocs))
|
fh.write("irdf = {}\n".format(10 * self.player.nprocs))
|
||||||
|
|
||||||
seed = int(1e6 * random.random())
|
seed = int(1e6 * random.random())
|
||||||
@@ -1144,6 +1147,286 @@ class Internal:
|
|||||||
fh.write(fstr.format(atom.lbl, atom.na, atom.rx, atom.ry,
|
fh.write(fstr.format(atom.lbl, atom.na, atom.rx, atom.ry,
|
||||||
atom.rz, atom.chg, atom.eps, atom.sig))
|
atom.rz, atom.chg, atom.eps, atom.sig))
|
||||||
|
|
||||||
|
# Gaussian related methods
|
||||||
|
|
||||||
|
def read_forces_fchk(self, file, fh):
|
||||||
|
|
||||||
|
forces = []
|
||||||
|
try:
|
||||||
|
with open(file) as tmpfh:
|
||||||
|
fchkfile = tmpfh.readlines()
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
start = fchkfile.pop(0).strip()
|
||||||
|
while start.find("Cartesian Gradient") != 0: ## expression in begining of line
|
||||||
|
start = fchkfile.pop(0).strip()
|
||||||
|
|
||||||
|
degrees = 3 * len(self.system.molecule[0])
|
||||||
|
count = 0
|
||||||
|
while True:
|
||||||
|
values = fchkfile.pop(0).split()
|
||||||
|
forces.extend([ float(x) for x in values ])
|
||||||
|
count += len(values)
|
||||||
|
if count >= degrees:
|
||||||
|
forces = forces[:degrees]
|
||||||
|
break
|
||||||
|
|
||||||
|
gradient = np.array(forces)
|
||||||
|
|
||||||
|
fh.write("\nGradient read from file {}:\n".format(file))
|
||||||
|
fh.write("-----------------------------------------------------------------------\n"
|
||||||
|
"Center Atomic Forces (Hartree/Bohr)\n"
|
||||||
|
"Number Number X Y Z\n"
|
||||||
|
"-----------------------------------------------------------------------\n")
|
||||||
|
for i in range(len(self.system.molecule[0])):
|
||||||
|
fh.write(" {:>5d} {:>3d} {:>14.9f} {:>14.9f} {:>14.9f}\n".format(
|
||||||
|
i + 1, self.system.molecule[0][i]['na'], forces.pop(0), forces.pop(0), forces.pop(0)))
|
||||||
|
|
||||||
|
fh.write("-----------------------------------------------------------------------\n")
|
||||||
|
|
||||||
|
force_max = np.amax(np.absolute(gradient))
|
||||||
|
force_rms = np.sqrt(np.mean(np.square(gradient)))
|
||||||
|
|
||||||
|
fh.write(" Max Force = {:>14.9f} RMS Force = {:>14.9f}\n\n".format(
|
||||||
|
force_max, force_rms))
|
||||||
|
|
||||||
|
return gradient
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def read_hessian_fchk(self, file):
|
||||||
|
|
||||||
|
force_const = []
|
||||||
|
try:
|
||||||
|
with open(file) as tmpfh:
|
||||||
|
fchkfile = tmpfh.readlines()
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
start = fchkfile.pop(0).strip()
|
||||||
|
while start.find("Cartesian Force Constants") != 0:
|
||||||
|
start = fchkfile.pop(0).strip()
|
||||||
|
|
||||||
|
degrees = 3 * len(self.system.molecule[0])
|
||||||
|
last = round(degrees * (degrees + 1) / 2)
|
||||||
|
count = 0
|
||||||
|
while True:
|
||||||
|
values = fchkfile.pop(0).split()
|
||||||
|
force_const.extend([ float(x) for x in values ])
|
||||||
|
count += len(values)
|
||||||
|
if count >= last:
|
||||||
|
force_const = force_const[:last]
|
||||||
|
break
|
||||||
|
|
||||||
|
hessian = np.zeros((degrees, degrees))
|
||||||
|
for i in range(degrees):
|
||||||
|
for j in range(i + 1):
|
||||||
|
hessian[i,j] = force_const.pop(0)
|
||||||
|
hessian[j,i] = hessian[i,j]
|
||||||
|
|
||||||
|
return hessian
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def read_hessian_log(self, file):
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(file) as tmpfh:
|
||||||
|
logfile = tmpfh.readlines()
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
start = logfile.pop(0).strip()
|
||||||
|
while start.find("The second derivative matrix:") != 0:
|
||||||
|
start = logfile.pop(0).strip()
|
||||||
|
|
||||||
|
degrees = 3 * len(self.system.molecule[0])
|
||||||
|
hessian = np.zeros((degrees, degrees))
|
||||||
|
|
||||||
|
k = 0
|
||||||
|
while k < degrees:
|
||||||
|
logfile.pop(0)
|
||||||
|
for i in range(k, degrees):
|
||||||
|
values = logfile.pop(0).split()[1:]
|
||||||
|
for j in range(k, min(i + 1, k + 5)):
|
||||||
|
hessian[i,j] = float(values.pop(0))
|
||||||
|
hessian[j,i] = hessian[i,j]
|
||||||
|
k += 5
|
||||||
|
|
||||||
|
return hessian
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def print_grad_hessian(self, cycle, cur_gradient, hessian):
|
||||||
|
|
||||||
|
try:
|
||||||
|
fh = open("grad_hessian.dat", "w")
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file grad_hessian.dat")
|
||||||
|
|
||||||
|
fh.write("Optimization cycle: {}\n".format(cycle))
|
||||||
|
fh.write("Cartesian Gradient\n")
|
||||||
|
degrees = 3 * len(self.system.molecule[0])
|
||||||
|
for i in range(degrees):
|
||||||
|
fh.write(" {:>11.8g}".format(cur_gradient[i]))
|
||||||
|
if (i + 1) % 5 == 0 or i == degrees - 1:
|
||||||
|
fh.write("\n")
|
||||||
|
|
||||||
|
fh.write("Cartesian Force Constants\n")
|
||||||
|
last = degrees * (degrees + 1) / 2
|
||||||
|
count = 0
|
||||||
|
for i in range(degrees):
|
||||||
|
for j in range(i + 1):
|
||||||
|
count += 1
|
||||||
|
fh.write(" {:>11.8g}".format(hessian[i,j]))
|
||||||
|
if count % 5 == 0 or count == last:
|
||||||
|
fh.write("\n")
|
||||||
|
|
||||||
|
fh.close()
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
## Change the name to make_gaussian_input
|
||||||
|
def make_gaussian_input(self, cycle, asec_charges=None):
|
||||||
|
|
||||||
|
simdir="simfiles"
|
||||||
|
stepdir="step{:02d}".format(cycle)
|
||||||
|
path = simdir + os.sep + stepdir + os.sep + "qm"
|
||||||
|
|
||||||
|
file = path + os.sep + "asec.gjf"
|
||||||
|
|
||||||
|
try:
|
||||||
|
fh = open(file, "w")
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
fh.write("%Chk=asec.chk\n")
|
||||||
|
if self.gaussian.mem != None:
|
||||||
|
fh.write("%Mem={}MB\n".format(self.gaussian.mem))
|
||||||
|
fh.write("%Nprocs={}\n".format(self.player.nprocs * self.dice.ncores))
|
||||||
|
|
||||||
|
kword_line = "#P " + str(self.gaussian.level)
|
||||||
|
|
||||||
|
if self.gaussian.keywords != None:
|
||||||
|
kword_line += " " + self.gaussian.keywords
|
||||||
|
|
||||||
|
if self.player.opt == 'yes':
|
||||||
|
kword_line += " Force"
|
||||||
|
|
||||||
|
# kword_line += " Charge"
|
||||||
|
kword_line += " NoSymm"
|
||||||
|
kword_line += " Pop={} Density=Current".format(self.gaussian.pop)
|
||||||
|
|
||||||
|
if cycle > 1:
|
||||||
|
kword_line += " Guess=Read"
|
||||||
|
|
||||||
|
fh.write(textwrap.fill(kword_line, 90))
|
||||||
|
fh.write("\n")
|
||||||
|
|
||||||
|
fh.write("\nForce calculation - Cycle number {}\n".format(cycle))
|
||||||
|
fh.write("\n")
|
||||||
|
fh.write("{},{}\n".format(self.gaussian.chgmult[0], self.gaussian.chgmult[1]))
|
||||||
|
|
||||||
|
for atom in self.system.molecule[0].atom:
|
||||||
|
symbol = atomsymb[atom.na]
|
||||||
|
fh.write("{:<2s} {:>10.5f} {:>10.5f} {:>10.5f}\n".format(symbol,
|
||||||
|
atom.rx, atom.ry, atom.rz))
|
||||||
|
|
||||||
|
# ## If also performing charge fit in the same calculation
|
||||||
|
# if cycle >= self.player.switchcyc:
|
||||||
|
# for ghost in ghost_atoms:
|
||||||
|
# fh.write("Bq {:>10.5f} {:>10.5f} {:>10.5f}\n".format(
|
||||||
|
# ghost['rx'], ghost['ry'], ghost['rz']))
|
||||||
|
|
||||||
|
# for lp in lp_atoms:
|
||||||
|
# fh.write("Bq {:>10.5f} {:>10.5f} {:>10.5f}\n".format(
|
||||||
|
# lp['rx'], lp['ry'], lp['rz']))
|
||||||
|
|
||||||
|
# fh.write("\n")
|
||||||
|
|
||||||
|
## If gmiddle file was informed, write its contents in asec.gjf
|
||||||
|
# if self.gaussian.gmiddle != None:
|
||||||
|
# if not os.path.isfile(self.gaussian.gmiddle):
|
||||||
|
# sys.exit("Error: cannot find file {} in main directory".format(
|
||||||
|
# self.gaussian.gmiddle))
|
||||||
|
# try:
|
||||||
|
# with open(self.gaussian.gmiddle) as gmiddlefile:
|
||||||
|
# gmiddle = gmiddlefile.readlines()
|
||||||
|
# except:
|
||||||
|
# sys.exit("Error: cannot open file {}".format(self.gaussian.gmiddle))
|
||||||
|
|
||||||
|
# for line in gmiddle:
|
||||||
|
# fh.write(line)
|
||||||
|
|
||||||
|
# fh.write("\n")
|
||||||
|
|
||||||
|
# ## Write the ASEC:
|
||||||
|
# for charge in asec_charges:
|
||||||
|
# fh.write("{:>10.5f} {:>10.5f} {:>10.5f} {:>11.8f}\n".format(
|
||||||
|
# charge['rx'], charge['ry'], charge['rz'], charge['chg']))
|
||||||
|
|
||||||
|
fh.write("\n")
|
||||||
|
|
||||||
|
# ## If gbottom file was informed, write its contents in asec.gjf
|
||||||
|
# if self.gaussian.gbottom != None:
|
||||||
|
# if not os.path.isfile(self.gaussian.gbottom):
|
||||||
|
# sys.exit("Error: cannot find file {} in main directory".format(
|
||||||
|
# self.gaussian.gbottom))
|
||||||
|
# try:
|
||||||
|
# with open(self.gaussian.gbottom) as gbottomfile:
|
||||||
|
# gbottom = gbottomfile.readlines()
|
||||||
|
# except:
|
||||||
|
# sys.exit("Error: cannot open file {}".format(self.gaussian.gbottom))
|
||||||
|
|
||||||
|
# for line in gbottom:
|
||||||
|
# fh.write(line)
|
||||||
|
|
||||||
|
# fh.write("\n")
|
||||||
|
|
||||||
|
# fh.close()
|
||||||
|
|
||||||
|
def read_charges(self, file, fh):
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(file) as tmpfh:
|
||||||
|
glogfile = tmpfh.readlines()
|
||||||
|
except:
|
||||||
|
sys.exit("Error: cannot open file {}".format(file))
|
||||||
|
|
||||||
|
start = glogfile.pop(0).strip()
|
||||||
|
while start != "Fitting point charges to electrostatic potential":
|
||||||
|
start = glogfile.pop(0).strip()
|
||||||
|
|
||||||
|
glogfile = glogfile[3:] ## Consume 3 more lines
|
||||||
|
|
||||||
|
fh.write("\nAtomic charges:\n")
|
||||||
|
fh.write("------------------------------------\n")
|
||||||
|
for atom in self.system.molecule[0].atom:
|
||||||
|
line = glogfile.pop(0).split()
|
||||||
|
atom_str = line[1]
|
||||||
|
charge = float(line[2])
|
||||||
|
atom.chg = charge
|
||||||
|
fh.write(" {:<2s} {:>10.6f}\n".format(atom_str, charge))
|
||||||
|
|
||||||
|
# if self.gaussian.pop == "chelpg":
|
||||||
|
# for ghost in ghost_atoms:
|
||||||
|
# line = glogfile.pop(0).split()
|
||||||
|
# atom_str = line[1]
|
||||||
|
# charge = float(line[2])
|
||||||
|
# ghost['chg'] = charge
|
||||||
|
# fh.write(" {:<2s} {:>10.6f}\n".format(atom_str, charge))
|
||||||
|
|
||||||
|
# for lp in lp_atoms:
|
||||||
|
# line = glogfile.pop(0).split()
|
||||||
|
# atom_str = line[1]
|
||||||
|
# charge = float(line[2])
|
||||||
|
# lp['chg'] = charge
|
||||||
|
# fh.write(" {:<2s} {:>10.6f}\n".format(atom_str, charge))
|
||||||
|
|
||||||
|
fh.write("------------------------------------\n")
|
||||||
|
|
||||||
class Player:
|
class Player:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -1389,6 +1672,52 @@ class Internal:
|
|||||||
self.pop = "chelpg"
|
self.pop = "chelpg"
|
||||||
self.level = None
|
self.level = None
|
||||||
|
|
||||||
|
def run_gaussian(self, cycle, type, fh):
|
||||||
|
|
||||||
|
simdir="simfiles"
|
||||||
|
stepdir="step{:02d}".format(cycle)
|
||||||
|
path = simdir + os.sep + stepdir + os.sep + "qm"
|
||||||
|
work_dir = os.getcwd()
|
||||||
|
os.chdir(path)
|
||||||
|
|
||||||
|
# if type == "force":
|
||||||
|
# infile = "asec.gjf"
|
||||||
|
# elif type == "charge":
|
||||||
|
# infile = "asec2.gjf"
|
||||||
|
|
||||||
|
infile = "asec.gjf"
|
||||||
|
|
||||||
|
fh.write("\nCalculation of {}s initiated with Gaussian on {}\n".format(type, date_time()))
|
||||||
|
|
||||||
|
if shutil.which("bash") != None:
|
||||||
|
exit_status = subprocess.call(["bash","-c","exec -a {}-step{} {} {}".format(self.qmprog, cycle, self.qmprog, infile)])
|
||||||
|
else:
|
||||||
|
exit_status = subprocess.call([self.qmprog, infile])
|
||||||
|
|
||||||
|
if exit_status != 0:
|
||||||
|
sys.exit("Gaussian process did not exit properly")
|
||||||
|
|
||||||
|
fh.write("Calculation of {}s finished on {}\n".format(type, date_time()))
|
||||||
|
|
||||||
|
os.chdir(work_dir)
|
||||||
|
|
||||||
|
def run_formchk(self, cycle, fh):
|
||||||
|
|
||||||
|
simdir="simfiles"
|
||||||
|
stepdir="step{:02d}".format(cycle)
|
||||||
|
path = simdir + os.sep + stepdir + os.sep + "qm"
|
||||||
|
|
||||||
|
work_dir = os.getcwd()
|
||||||
|
os.chdir(path)
|
||||||
|
|
||||||
|
fh.write("Formatting the checkpoint file... ")
|
||||||
|
|
||||||
|
exit_status = subprocess.call(["formchk", "asec.chk"])
|
||||||
|
|
||||||
|
fh.write("Done\n")
|
||||||
|
|
||||||
|
os.chdir(work_dir)
|
||||||
|
|
||||||
# class Molcas:
|
# class Molcas:
|
||||||
|
|
||||||
# def __init(self):
|
# def __init(self):
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/export/apps/python/361/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import os, sys, time, signal
|
import os, sys, time, signal
|
||||||
import setproctitle
|
import setproctitle
|
||||||
@@ -6,19 +6,18 @@ import argparse
|
|||||||
import shutil
|
import shutil
|
||||||
from multiprocessing import Process, connection
|
from multiprocessing import Process, connection
|
||||||
|
|
||||||
import DPpack.Gaussian as Gaussian
|
from diceplayer.DPpack.PTable import *
|
||||||
from DPpack.PTable import *
|
from diceplayer.DPpack.SetGlobals import *
|
||||||
from DPpack.SetGlobals import *
|
from diceplayer.DPpack.MolHandling import *
|
||||||
from DPpack.MolHandling import *
|
from diceplayer.DPpack.Misc import *
|
||||||
from DPpack.Misc import *
|
|
||||||
|
|
||||||
|
_version = 'dev'
|
||||||
|
setproctitle.setproctitle("diceplayer-{}".format(_version))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
#### Read and store the arguments passed to the program ####
|
#### Read and store the arguments passed to the program ####
|
||||||
#### and set the usage and help messages ####
|
#### and set the usage and help messages ####
|
||||||
|
|
||||||
setproctitle.setproctitle("diceplayer-current")
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(prog='Diceplayer')
|
parser = argparse.ArgumentParser(prog='Diceplayer')
|
||||||
parser.add_argument('--continue', dest='opt_continue' , default=False, action='store_true')
|
parser.add_argument('--continue', dest='opt_continue' , default=False, action='store_true')
|
||||||
parser.add_argument('--version', action='version', version='%(prog)s 1.0')
|
parser.add_argument('--version', action='version', version='%(prog)s 1.0')
|
||||||
@@ -200,11 +199,11 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
internal.outfile.write("\n+" + 88 * "-" + "+\n")
|
internal.outfile.write("\n+" + 88 * "-" + "+\n")
|
||||||
|
|
||||||
####
|
###
|
||||||
#### End of parallel simulations block
|
### End of parallel simulations block
|
||||||
####
|
###
|
||||||
|
|
||||||
# ## Make ASEC
|
## Make ASEC
|
||||||
# internal.outfile.write("\nBuilding the ASEC and vdW meanfields... ")
|
# internal.outfile.write("\nBuilding the ASEC and vdW meanfields... ")
|
||||||
# asec_charges = internal.populate_asec_vdw(cycle)
|
# asec_charges = internal.populate_asec_vdw(cycle)
|
||||||
|
|
||||||
@@ -213,31 +212,26 @@ if __name__ == '__main__':
|
|||||||
# path = "step{:02d}".format(cycle) + os.sep + "p{:02d}".format(proc)
|
# path = "step{:02d}".format(cycle) + os.sep + "p{:02d}".format(proc)
|
||||||
# compress_files_1mb(path)
|
# compress_files_1mb(path)
|
||||||
|
|
||||||
####
|
|
||||||
#### Start QM calculation
|
|
||||||
####
|
|
||||||
|
|
||||||
# make_qm_dir(cycle)
|
|
||||||
|
|
||||||
# if internal.player.opt == "yes":
|
|
||||||
|
|
||||||
###
|
###
|
||||||
# ## Gaussian block
|
### Start QM calculation
|
||||||
###
|
###
|
||||||
# if internal.player.qmprog in ("g03", "g09", "g16"):
|
|
||||||
|
|
||||||
# if cycle > 1:
|
make_qm_dir(cycle)
|
||||||
# src = "step{:02d}".format(cycle - 1) + os.sep + "qm" + os.sep + "asec.chk"
|
|
||||||
# dst = "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec.chk"
|
|
||||||
# shutil.copyfile(src, dst)
|
|
||||||
|
|
||||||
# Gaussian.make_force_input(cycle, asec_charges)
|
if internal.player.qmprog in ("g03", "g09", "g16"):
|
||||||
# Gaussian.run_gaussian(cycle, "force", internal.outfile)
|
|
||||||
# Gaussian.run_formchk(cycle, internal.outfile)
|
if cycle > 1:
|
||||||
|
src = "simfiles" + os.sep + "step{:02d}".format(cycle - 1) + os.sep + "qm" + os.sep + "asec.chk"
|
||||||
|
dst = "simfiles" + os.sep + "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec.chk"
|
||||||
|
shutil.copyfile(src, dst)
|
||||||
|
|
||||||
|
internal.make_gaussian_input(cycle)
|
||||||
|
internal.gaussian.run_gaussian(cycle, "force", internal.outfile)
|
||||||
|
# internal.gaussian.run_formchk(cycle, internal.outfile)
|
||||||
|
|
||||||
# ## Read the gradient
|
# ## Read the gradient
|
||||||
# file = "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec.fchk"
|
# file = "simfiles" + os.sep + "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec.fchk"
|
||||||
# gradient = Gaussian.read_forces(file, internal.outfile)
|
# gradient = internal.read_forces(file, internal.outfile)
|
||||||
# if len(cur_gradient) > 0:
|
# if len(cur_gradient) > 0:
|
||||||
# old_gradient = cur_gradient
|
# old_gradient = cur_gradient
|
||||||
# cur_gradient = gradient
|
# cur_gradient = gradient
|
||||||
@@ -247,9 +241,9 @@ if __name__ == '__main__':
|
|||||||
# if internal.player.readhessian == "yes":
|
# if internal.player.readhessian == "yes":
|
||||||
# file = "grad_hessian.dat"
|
# file = "grad_hessian.dat"
|
||||||
# internal.outfile.write("\nReading the hessian matrix from file {}\n".format(file))
|
# internal.outfile.write("\nReading the hessian matrix from file {}\n".format(file))
|
||||||
# hessian = Gaussian.read_hessian_fchk(file)
|
# hessian = internal.read_hessian_fchk(file)
|
||||||
# else:
|
# else:
|
||||||
# file = "step01" + os.sep + "qm" + os.sep + "asec.fchk"
|
# file = "simfiles" + os.sep + "step01" + os.sep + "qm" + os.sep + "asec.fchk"
|
||||||
# internal.outfile.write("\nReading the hessian matrix from file {}\n".format(file))
|
# internal.outfile.write("\nReading the hessian matrix from file {}\n".format(file))
|
||||||
# hessian = internal.gaussian.read_hessian(file)
|
# hessian = internal.gaussian.read_hessian(file)
|
||||||
|
|
||||||
@@ -272,15 +266,15 @@ if __name__ == '__main__':
|
|||||||
# ## If needed, calculate the charges
|
# ## If needed, calculate the charges
|
||||||
# if cycle < internal.player.switchcyc:
|
# if cycle < internal.player.switchcyc:
|
||||||
|
|
||||||
# internal.gaussian.make_charge_input(cycle, asec_charges)
|
# # internal.gaussian.make_charge_input(cycle, asec_charges)
|
||||||
# internal.gaussian.run_gaussian(cycle, "charge", internal.outfile)
|
# internal.gaussian.run_gaussian(cycle, "charge", internal.outfile)
|
||||||
|
|
||||||
# ## Read the new charges and update molecules[0]
|
# ## Read the new charges and update molecules[0]
|
||||||
# if cycle < internal.player.switchcyc:
|
# if cycle < internal.player.switchcyc:
|
||||||
# file = "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec2.log"
|
# file = "simfiles" + os.sep + "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec2.log"
|
||||||
# internal.gaussian.read_charges(file, internal.outfile)
|
# internal.gaussian.read_charges(file, internal.outfile)
|
||||||
# else:
|
# else:
|
||||||
# file = "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec.log"
|
# file = "simfiles" + os.sep + "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec.log"
|
||||||
# internal.gaussian.read_charges(file, internal.outfile)
|
# internal.gaussian.read_charges(file, internal.outfile)
|
||||||
|
|
||||||
# ## Print new info for molecule[0]
|
# ## Print new info for molecule[0]
|
||||||
@@ -316,15 +310,15 @@ if __name__ == '__main__':
|
|||||||
# if internal.player.qmprog in ("g03", "g09", "g16"):
|
# if internal.player.qmprog in ("g03", "g09", "g16"):
|
||||||
|
|
||||||
# if cycle > 1:
|
# if cycle > 1:
|
||||||
# src = "step{:02d}".format(cycle - 1) + os.sep + "qm" + os.sep + "asec.chk"
|
# src = "simfiles" + os.sep + "step{:02d}".format(cycle - 1) + os.sep + "qm" + os.sep + "asec.chk"
|
||||||
# dst = "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec.chk"
|
# dst = "simfiles" + os.sep + "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec.chk"
|
||||||
# shutil.copyfile(src, dst)
|
# shutil.copyfile(src, dst)
|
||||||
|
|
||||||
# Gaussian.make_charge_input(cycle, asec_charges)
|
# # internal.gaussian.make_charge_input(cycle, asec_charges)
|
||||||
# Gaussian.run_gaussian(cycle, "charge", internal.outfile)
|
# internal.gaussian.run_gaussian(cycle, "charge", internal.outfile)
|
||||||
|
|
||||||
# file = "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec2.log"
|
# file = "simfiles" + os.sep + "step{:02d}".format(cycle) + os.sep + "qm" + os.sep + "asec2.log"
|
||||||
# Gaussian.read_charges(file)
|
# internal.read_charges(file)
|
||||||
|
|
||||||
# ## Print new info for molecule[0]
|
# ## Print new info for molecule[0]
|
||||||
# internal.outfile.write("\nNew values for molecule type 1:\n\n")
|
# internal.outfile.write("\nNew values for molecule type 1:\n\n")
|
||||||
@@ -338,11 +332,11 @@ if __name__ == '__main__':
|
|||||||
# #### End of the iterative process
|
# #### End of the iterative process
|
||||||
# ####
|
# ####
|
||||||
|
|
||||||
# ## imprimir ultimas mensagens, criar um arquivo de potencial para ser usado em eventual
|
# # ## imprimir ultimas mensagens, criar um arquivo de potencial para ser usado em eventual
|
||||||
# ## continuacao, fechar arquivos (geoms.xyz, run.log, ...)
|
# # ## continuacao, fechar arquivos (geoms.xyz, run.log, ...)
|
||||||
|
|
||||||
# internal.outfile.write("\nDiceplayer finished normally!\n")
|
# # internal.outfile.write("\nDiceplayer finished normally!\n")
|
||||||
# internal.outfile.close()
|
# # internal.outfile.close()
|
||||||
# ####
|
# # ####
|
||||||
# #### End of the program
|
# # #### End of the program
|
||||||
# ####
|
# # ####
|
||||||
110
run.log
110
run.log
@@ -5,7 +5,7 @@
|
|||||||
Your python version is 3.6.9 (default, Jan 26 2021, 15:33:00)
|
Your python version is 3.6.9 (default, Jan 26 2021, 15:33:00)
|
||||||
[GCC 8.4.0]
|
[GCC 8.4.0]
|
||||||
|
|
||||||
Program started on Saturday, 20 Nov 2021 at 14:52:20
|
Program started on Friday, 03 Dec 2021 at 21:20:24
|
||||||
|
|
||||||
Environment variables:
|
Environment variables:
|
||||||
OMP_STACKSIZE = Not set
|
OMP_STACKSIZE = Not set
|
||||||
@@ -22,7 +22,7 @@ lps = no
|
|||||||
maxcyc = 3
|
maxcyc = 3
|
||||||
maxstep = 0.3
|
maxstep = 0.3
|
||||||
nprocs = 4
|
nprocs = 4
|
||||||
opt = no
|
opt = yes
|
||||||
qmprog = g16
|
qmprog = g16
|
||||||
readhessian = no
|
readhessian = no
|
||||||
switchcyc = 3
|
switchcyc = 3
|
||||||
@@ -39,7 +39,7 @@ isave = 1000
|
|||||||
ljname = phb.ljc
|
ljname = phb.ljc
|
||||||
ncores = 3
|
ncores = 3
|
||||||
nmol = 1 50
|
nmol = 1 50
|
||||||
nstep = 40000 60000 50000
|
nstep = 20000 20000
|
||||||
outname = phb
|
outname = phb
|
||||||
press = 1.0
|
press = 1.0
|
||||||
progname = dice
|
progname = dice
|
||||||
@@ -115,8 +115,8 @@ Lbl AN X Y Z Charge Epsilon Sigma Mass
|
|||||||
1 6 2.07203 -2.82345 0.00263 -0.115000 0.07000 3.5500 12.0110
|
1 6 2.07203 -2.82345 0.00263 -0.115000 0.07000 3.5500 12.0110
|
||||||
1 6 2.76823 -1.61764 0.00263 -0.115000 0.07000 3.5500 12.0110
|
1 6 2.76823 -1.61764 0.00263 -0.115000 0.07000 3.5500 12.0110
|
||||||
1 6 2.06824 -0.40521 0.00264 -0.115000 0.07000 3.5500 12.0110
|
1 6 2.06824 -0.40521 0.00264 -0.115000 0.07000 3.5500 12.0110
|
||||||
1 14 0.67589 -0.40522 0.00264 0.150000 0.07000 3.5500 28.0860
|
1 6 0.67589 -0.40522 0.00264 0.150000 0.07000 3.5500 12.0110
|
||||||
1 104 -0.02420 -1.61760 0.00263 -0.115000 0.07000 3.5500 0.0000
|
1 6 -0.02420 -1.61760 0.00263 -0.115000 0.07000 3.5500 12.0110
|
||||||
2 1 0.13203 -3.75875 0.00263 0.115000 0.03000 2.4200 1.0079
|
2 1 0.13203 -3.75875 0.00263 0.115000 0.03000 2.4200 1.0079
|
||||||
2 1 2.61203 -3.75875 0.00263 0.115000 0.03000 2.4200 1.0079
|
2 1 2.61203 -3.75875 0.00263 0.115000 0.03000 2.4200 1.0079
|
||||||
2 1 2.60824 0.53010 0.00264 0.115000 0.03000 2.4200 1.0079
|
2 1 2.60824 0.53010 0.00264 0.115000 0.03000 2.4200 1.0079
|
||||||
@@ -159,13 +159,13 @@ Molecule type 1 - PHENOL_BLUE:
|
|||||||
|
|
||||||
Molecule type 2 - PLACEHOLDER:
|
Molecule type 2 - PLACEHOLDER:
|
||||||
|
|
||||||
Center of mass = ( 1.6067 , -1.0929 , 0.0026 )
|
Center of mass = ( 1.5639 , -1.2534 , 0.0026 )
|
||||||
Moments of inertia = 1.205279E+02 2.859254E+02 4.033761E+02
|
Moments of inertia = 1.394830E+02 2.777126E+02 4.141185E+02
|
||||||
Major principal axis = ( 0.795913 , -0.605411 , -0.000001 )
|
Major principal axis = ( 0.865900 , -0.500217 , -0.000001 )
|
||||||
Inter principal axis = ( 0.605411 , 0.795913 , 0.000001 )
|
Inter principal axis = ( 0.500217 , 0.865900 , 0.000001 )
|
||||||
Minor principal axis = ( 0.000000 , -0.000002 , 1.000000 )
|
Minor principal axis = ( 0.000000 , -0.000002 , 1.000000 )
|
||||||
Characteristic lengths = ( 5.74 , 5.26 , 1.51 )
|
Characteristic lengths = ( 5.74 , 5.26 , 1.51 )
|
||||||
Total mass = 112.20 au
|
Total mass = 108.14 au
|
||||||
Total charge = -0.0000 e
|
Total charge = -0.0000 e
|
||||||
Dipole moment = ( 2.3293 , 0.1593 , -0.0000 ) Total = 2.3347 Debye
|
Dipole moment = ( 2.3293 , 0.1593 , -0.0000 ) Total = 2.3347 Debye
|
||||||
|
|
||||||
@@ -173,14 +173,14 @@ Molecule type 2 - PLACEHOLDER:
|
|||||||
|
|
||||||
New values:
|
New values:
|
||||||
Center of mass = ( 0.0000 , -0.0000 , 0.0000 )
|
Center of mass = ( 0.0000 , -0.0000 , 0.0000 )
|
||||||
Moments of inertia = 1.205279E+02 2.859254E+02 4.033761E+02
|
Moments of inertia = 1.394830E+02 2.777126E+02 4.141185E+02
|
||||||
Major principal axis = ( -1.000000 , 0.000000 , 0.000000 )
|
Major principal axis = ( 1.000000 , -0.000000 , -0.000000 )
|
||||||
Inter principal axis = ( 0.000000 , 1.000000 , 0.000000 )
|
Inter principal axis = ( 0.000000 , 1.000000 , 0.000000 )
|
||||||
Minor principal axis = ( 0.000000 , 0.000000 , 1.000000 )
|
Minor principal axis = ( 0.000000 , -0.000000 , 1.000000 )
|
||||||
Characteristic lengths = ( 5.67 , 5.13 , 1.51 )
|
Characteristic lengths = ( 5.65 , 4.95 , 1.51 )
|
||||||
Total mass = 112.20 au
|
Total mass = 108.14 au
|
||||||
Total charge = -0.0000 e
|
Total charge = -0.0000 e
|
||||||
Dipole moment = ( 1.7575 , 1.5369 , -0.0000 ) Total = 2.3347 Debye
|
Dipole moment = ( 1.9373 , 1.3031 , -0.0000 ) Total = 2.3347 Debye
|
||||||
|
|
||||||
==========================================================================================
|
==========================================================================================
|
||||||
|
|
||||||
@@ -190,67 +190,23 @@ Starting the iterative process.
|
|||||||
Step # 1
|
Step # 1
|
||||||
------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
Simulation process simfiles/step01/p02 initiated with pid 15516
|
Simulation process simfiles/step01/p01 initiated with pid 8024
|
||||||
p02> NVT thermalization initiated (from random configuration) on 20 Nov 2021 at 14:52:20
|
p01> NVT thermalization finished (from random configuration) on 03 Dec 2021 at 21:20:24
|
||||||
Simulation process simfiles/step01/p01 initiated with pid 15515
|
Simulation process simfiles/step01/p03 initiated with pid 8026
|
||||||
p01> NVT thermalization initiated (from random configuration) on 20 Nov 2021 at 14:52:20
|
p03> NVT thermalization finished (from random configuration) on 03 Dec 2021 at 21:20:24
|
||||||
Simulation process simfiles/step01/p03 initiated with pid 15517
|
Simulation process simfiles/step01/p02 initiated with pid 8025
|
||||||
p03> NVT thermalization initiated (from random configuration) on 20 Nov 2021 at 14:52:20
|
p02> NVT thermalization finished (from random configuration) on 03 Dec 2021 at 21:20:24
|
||||||
Simulation process simfiles/step01/p04 initiated with pid 15518
|
Simulation process simfiles/step01/p04 initiated with pid 8027
|
||||||
p04> NVT thermalization initiated (from random configuration) on 20 Nov 2021 at 14:52:20
|
p04> NVT thermalization finished (from random configuration) on 03 Dec 2021 at 21:20:24
|
||||||
p03> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 14:54:12
|
p02> NVT production initiated on 03 Dec 2021 at 21:21:22
|
||||||
p04> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 14:54:13
|
p04> NVT production initiated on 03 Dec 2021 at 21:21:23
|
||||||
p02> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 14:54:13
|
p03> NVT production initiated on 03 Dec 2021 at 21:21:23
|
||||||
p01> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 14:54:13
|
p01> NVT production initiated on 03 Dec 2021 at 21:21:27
|
||||||
p03> NPT production initiated on 20 Nov 2021 at 14:57:16
|
p03> ----- NVT production finished on 03 Dec 2021 at 21:22:35
|
||||||
p02> NPT production initiated on 20 Nov 2021 at 14:57:19
|
p04> ----- NVT production finished on 03 Dec 2021 at 21:22:36
|
||||||
p04> NPT production initiated on 20 Nov 2021 at 14:57:20
|
p02> ----- NVT production finished on 03 Dec 2021 at 21:22:36
|
||||||
p01> NPT production initiated on 20 Nov 2021 at 14:57:21
|
p01> ----- NVT production finished on 03 Dec 2021 at 21:22:39
|
||||||
p03> ----- NPT production finished on 20 Nov 2021 at 15:00:16
|
|
||||||
p02> ----- NPT production finished on 20 Nov 2021 at 15:00:21
|
|
||||||
p04> ----- NPT production finished on 20 Nov 2021 at 15:00:23
|
|
||||||
p01> ----- NPT production finished on 20 Nov 2021 at 15:00:27
|
|
||||||
|
|
||||||
+----------------------------------------------------------------------------------------+
|
+----------------------------------------------------------------------------------------+
|
||||||
Step # 2
|
|
||||||
------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Simulation process simfiles/step02/p02 initiated with pid 15559
|
Calculation of forces initiated with Gaussian on 03 Dec 2021 at 21:22:39
|
||||||
p02> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 15:00:27
|
|
||||||
Simulation process simfiles/step02/p01 initiated with pid 15558
|
|
||||||
p01> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 15:00:27
|
|
||||||
Simulation process simfiles/step02/p03 initiated with pid 15560
|
|
||||||
p03> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 15:00:27
|
|
||||||
Simulation process simfiles/step02/p04 initiated with pid 15561
|
|
||||||
p04> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 15:00:27
|
|
||||||
p03> NPT production initiated on 20 Nov 2021 at 15:01:30
|
|
||||||
p01> NPT production initiated on 20 Nov 2021 at 15:01:30
|
|
||||||
p02> NPT production initiated on 20 Nov 2021 at 15:01:31
|
|
||||||
p04> NPT production initiated on 20 Nov 2021 at 15:01:31
|
|
||||||
p03> ----- NPT production finished on 20 Nov 2021 at 15:04:29
|
|
||||||
p02> ----- NPT production finished on 20 Nov 2021 at 15:04:33
|
|
||||||
p01> ----- NPT production finished on 20 Nov 2021 at 15:04:34
|
|
||||||
p04> ----- NPT production finished on 20 Nov 2021 at 15:04:37
|
|
||||||
|
|
||||||
+----------------------------------------------------------------------------------------+
|
|
||||||
Step # 3
|
|
||||||
------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Simulation process simfiles/step03/p01 initiated with pid 15661
|
|
||||||
p01> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 15:04:37
|
|
||||||
Simulation process simfiles/step03/p02 initiated with pid 15662
|
|
||||||
p02> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 15:04:37
|
|
||||||
Simulation process simfiles/step03/p04 initiated with pid 15664
|
|
||||||
p04> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 15:04:37
|
|
||||||
Simulation process simfiles/step03/p03 initiated with pid 15663
|
|
||||||
p03> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 15:04:37
|
|
||||||
p03> NPT production initiated on 20 Nov 2021 at 15:05:41
|
|
||||||
p01> NPT production initiated on 20 Nov 2021 at 15:05:42
|
|
||||||
p04> NPT production initiated on 20 Nov 2021 at 15:05:42
|
|
||||||
p02> NPT production initiated on 20 Nov 2021 at 15:05:44
|
|
||||||
p01> ----- NPT production finished on 20 Nov 2021 at 15:08:44
|
|
||||||
p03> ----- NPT production finished on 20 Nov 2021 at 15:08:45
|
|
||||||
p04> ----- NPT production finished on 20 Nov 2021 at 15:08:48
|
|
||||||
p02> ----- NPT production finished on 20 Nov 2021 at 15:08:51
|
|
||||||
|
|
||||||
+----------------------------------------------------------------------------------------+
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
Your python version is 3.6.9 (default, Jan 26 2021, 15:33:00)
|
Your python version is 3.6.9 (default, Jan 26 2021, 15:33:00)
|
||||||
[GCC 8.4.0]
|
[GCC 8.4.0]
|
||||||
|
|
||||||
Program started on Saturday, 20 Nov 2021 at 13:29:59
|
Program started on Friday, 03 Dec 2021 at 21:18:49
|
||||||
|
|
||||||
Environment variables:
|
Environment variables:
|
||||||
OMP_STACKSIZE = Not set
|
OMP_STACKSIZE = Not set
|
||||||
@@ -19,10 +19,10 @@ freq = no
|
|||||||
ghosts = no
|
ghosts = no
|
||||||
initcyc = 1
|
initcyc = 1
|
||||||
lps = no
|
lps = no
|
||||||
maxcyc = 4
|
maxcyc = 3
|
||||||
maxstep = 0.3
|
maxstep = 0.3
|
||||||
nprocs = 4
|
nprocs = 4
|
||||||
opt = no
|
opt = yes
|
||||||
qmprog = g16
|
qmprog = g16
|
||||||
readhessian = no
|
readhessian = no
|
||||||
switchcyc = 3
|
switchcyc = 3
|
||||||
@@ -39,7 +39,7 @@ isave = 1000
|
|||||||
ljname = phb.ljc
|
ljname = phb.ljc
|
||||||
ncores = 3
|
ncores = 3
|
||||||
nmol = 1 50
|
nmol = 1 50
|
||||||
nstep = 40000 60000 50000
|
nstep = 20000 20000
|
||||||
outname = phb
|
outname = phb
|
||||||
press = 1.0
|
press = 1.0
|
||||||
progname = dice
|
progname = dice
|
||||||
@@ -115,8 +115,8 @@ Lbl AN X Y Z Charge Epsilon Sigma Mass
|
|||||||
1 6 2.07203 -2.82345 0.00263 -0.115000 0.07000 3.5500 12.0110
|
1 6 2.07203 -2.82345 0.00263 -0.115000 0.07000 3.5500 12.0110
|
||||||
1 6 2.76823 -1.61764 0.00263 -0.115000 0.07000 3.5500 12.0110
|
1 6 2.76823 -1.61764 0.00263 -0.115000 0.07000 3.5500 12.0110
|
||||||
1 6 2.06824 -0.40521 0.00264 -0.115000 0.07000 3.5500 12.0110
|
1 6 2.06824 -0.40521 0.00264 -0.115000 0.07000 3.5500 12.0110
|
||||||
1 14 0.67589 -0.40522 0.00264 0.150000 0.07000 3.5500 28.0860
|
1 6 0.67589 -0.40522 0.00264 0.150000 0.07000 3.5500 12.0110
|
||||||
1 104 -0.02420 -1.61760 0.00263 -0.115000 0.07000 3.5500 0.0000
|
1 6 -0.02420 -1.61760 0.00263 -0.115000 0.07000 3.5500 12.0110
|
||||||
2 1 0.13203 -3.75875 0.00263 0.115000 0.03000 2.4200 1.0079
|
2 1 0.13203 -3.75875 0.00263 0.115000 0.03000 2.4200 1.0079
|
||||||
2 1 2.61203 -3.75875 0.00263 0.115000 0.03000 2.4200 1.0079
|
2 1 2.61203 -3.75875 0.00263 0.115000 0.03000 2.4200 1.0079
|
||||||
2 1 2.60824 0.53010 0.00264 0.115000 0.03000 2.4200 1.0079
|
2 1 2.60824 0.53010 0.00264 0.115000 0.03000 2.4200 1.0079
|
||||||
@@ -159,13 +159,13 @@ Molecule type 1 - PHENOL_BLUE:
|
|||||||
|
|
||||||
Molecule type 2 - PLACEHOLDER:
|
Molecule type 2 - PLACEHOLDER:
|
||||||
|
|
||||||
Center of mass = ( 1.6067 , -1.0929 , 0.0026 )
|
Center of mass = ( 1.5639 , -1.2534 , 0.0026 )
|
||||||
Moments of inertia = 1.205279E+02 2.859254E+02 4.033761E+02
|
Moments of inertia = 1.394830E+02 2.777126E+02 4.141185E+02
|
||||||
Major principal axis = ( 0.795913 , -0.605411 , -0.000001 )
|
Major principal axis = ( 0.865900 , -0.500217 , -0.000001 )
|
||||||
Inter principal axis = ( 0.605411 , 0.795913 , 0.000001 )
|
Inter principal axis = ( 0.500217 , 0.865900 , 0.000001 )
|
||||||
Minor principal axis = ( 0.000000 , -0.000002 , 1.000000 )
|
Minor principal axis = ( 0.000000 , -0.000002 , 1.000000 )
|
||||||
Characteristic lengths = ( 5.74 , 5.26 , 1.51 )
|
Characteristic lengths = ( 5.74 , 5.26 , 1.51 )
|
||||||
Total mass = 112.20 au
|
Total mass = 108.14 au
|
||||||
Total charge = -0.0000 e
|
Total charge = -0.0000 e
|
||||||
Dipole moment = ( 2.3293 , 0.1593 , -0.0000 ) Total = 2.3347 Debye
|
Dipole moment = ( 2.3293 , 0.1593 , -0.0000 ) Total = 2.3347 Debye
|
||||||
|
|
||||||
@@ -173,14 +173,14 @@ Molecule type 2 - PLACEHOLDER:
|
|||||||
|
|
||||||
New values:
|
New values:
|
||||||
Center of mass = ( 0.0000 , -0.0000 , 0.0000 )
|
Center of mass = ( 0.0000 , -0.0000 , 0.0000 )
|
||||||
Moments of inertia = 1.205279E+02 2.859254E+02 4.033761E+02
|
Moments of inertia = 1.394830E+02 2.777126E+02 4.141185E+02
|
||||||
Major principal axis = ( -1.000000 , 0.000000 , 0.000000 )
|
Major principal axis = ( 1.000000 , -0.000000 , -0.000000 )
|
||||||
Inter principal axis = ( 0.000000 , 1.000000 , 0.000000 )
|
Inter principal axis = ( 0.000000 , 1.000000 , 0.000000 )
|
||||||
Minor principal axis = ( 0.000000 , 0.000000 , 1.000000 )
|
Minor principal axis = ( 0.000000 , -0.000000 , 1.000000 )
|
||||||
Characteristic lengths = ( 5.67 , 5.13 , 1.51 )
|
Characteristic lengths = ( 5.65 , 4.95 , 1.51 )
|
||||||
Total mass = 112.20 au
|
Total mass = 108.14 au
|
||||||
Total charge = -0.0000 e
|
Total charge = -0.0000 e
|
||||||
Dipole moment = ( 1.7575 , 1.5369 , -0.0000 ) Total = 2.3347 Debye
|
Dipole moment = ( 1.9373 , 1.3031 , -0.0000 ) Total = 2.3347 Debye
|
||||||
|
|
||||||
==========================================================================================
|
==========================================================================================
|
||||||
|
|
||||||
@@ -190,19 +190,11 @@ Starting the iterative process.
|
|||||||
Step # 1
|
Step # 1
|
||||||
------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
Simulation process simfiles/step01/p01 initiated with pid 14014
|
Simulation process simfiles/step01/p01 initiated with pid 7513
|
||||||
p01> NVT thermalization initiated (from random configuration) on 20 Nov 2021 at 13:29:59
|
p01> NVT thermalization finished (from random configuration) on 03 Dec 2021 at 21:18:49
|
||||||
Simulation process simfiles/step01/p02 initiated with pid 14015
|
Simulation process simfiles/step01/p02 initiated with pid 7514
|
||||||
p02> NVT thermalization initiated (from random configuration) on 20 Nov 2021 at 13:29:59
|
p02> NVT thermalization finished (from random configuration) on 03 Dec 2021 at 21:18:49
|
||||||
Simulation process simfiles/step01/p03 initiated with pid 14016
|
Simulation process simfiles/step01/p03 initiated with pid 7515
|
||||||
p03> NVT thermalization initiated (from random configuration) on 20 Nov 2021 at 13:29:59
|
p03> NVT thermalization finished (from random configuration) on 03 Dec 2021 at 21:18:49
|
||||||
Simulation process simfiles/step01/p04 initiated with pid 14017
|
Simulation process simfiles/step01/p04 initiated with pid 7516
|
||||||
p04> NVT thermalization initiated (from random configuration) on 20 Nov 2021 at 13:29:59
|
p04> NVT thermalization finished (from random configuration) on 03 Dec 2021 at 21:18:49
|
||||||
p03> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 13:31:50
|
|
||||||
p01> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 13:31:51
|
|
||||||
p04> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 13:31:52
|
|
||||||
p02> NPT thermalization finished (from previous configuration) on 20 Nov 2021 at 13:31:52
|
|
||||||
p03> NPT production initiated on 20 Nov 2021 at 13:34:53
|
|
||||||
p02> NPT production initiated on 20 Nov 2021 at 13:34:57
|
|
||||||
p01> NPT production initiated on 20 Nov 2021 at 13:34:58
|
|
||||||
p04> NPT production initiated on 20 Nov 2021 at 13:35:00
|
|
||||||
|
|||||||
Reference in New Issue
Block a user