Read Potentials and Initial Testing
This commit is contained in:
@@ -1,21 +1,19 @@
|
||||
from diceplayer.player import Player
|
||||
|
||||
from pathlib import Path
|
||||
import argparse
|
||||
import os
|
||||
import logging
|
||||
import pickle
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
import setproctitle
|
||||
|
||||
from diceplayer.DPpack.Player import Player
|
||||
from diceplayer.DPpack.Utils.Misc import *
|
||||
|
||||
__VERSION = "v0.0.1"
|
||||
os.nice(+19)
|
||||
setproctitle.setproctitle("diceplayer-{}".format(__VERSION))
|
||||
|
||||
if __name__ == "__main__":
|
||||
#### Read and store the arguments passed to the program ####
|
||||
#### and set the usage and help messages ####
|
||||
"""
|
||||
Read and store the arguments passed to the program
|
||||
and set the usage and help messages
|
||||
"""
|
||||
|
||||
parser = argparse.ArgumentParser(prog="Diceplayer")
|
||||
parser.add_argument(
|
||||
@@ -38,173 +36,30 @@ if __name__ == "__main__":
|
||||
metavar="OUTFILE",
|
||||
help="output file of diceplayer [default = run.log]"
|
||||
)
|
||||
## Study the option of a parameter for continuing the last process via data from control.in and run.log files
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
#### Open OUTFILE for writing and print keywords and initial info
|
||||
# Open OUTFILE for writing and print keywords and initial info
|
||||
|
||||
try:
|
||||
|
||||
if args.opt_continue and os.path.exists(args.outfile):
|
||||
pickle_path = Path("latest-step.pkl")
|
||||
if args.opt_continue and pickle_path.exists():
|
||||
with open(pickle_path) as pickle_file:
|
||||
save = pickle.load(pickle_file)
|
||||
|
||||
save = pickle.load(open("latest-step.pkl", "rb"))
|
||||
|
||||
if os.path.isfile(args.outfile + ".backup"):
|
||||
os.remove(args.outfile + ".backup")
|
||||
|
||||
os.rename(args.outfile, args.outfile + ".backup")
|
||||
outfile = open(args.outfile, "w", 1)
|
||||
|
||||
elif os.path.exists(args.outfile):
|
||||
os.rename(args.outfile, args.outfile + ".backup")
|
||||
outfile = open(args.outfile, "w", 1)
|
||||
else:
|
||||
outfile = open(args.outfile, "w", 1)
|
||||
output_path = Path(args.outfile)
|
||||
if output_path.exists():
|
||||
output_path.rename(str(output_path)+".backup")
|
||||
|
||||
except Exception as err:
|
||||
sys.exit(err)
|
||||
|
||||
try:
|
||||
logging.basicConfig(
|
||||
filename=args.outfile,
|
||||
format='%(message)s',
|
||||
level=logging.INFO
|
||||
)
|
||||
|
||||
if os.path.exists(args.infile):
|
||||
infile = open(args.infile, "r")
|
||||
player = Player(args.infile)
|
||||
|
||||
except Exception as err:
|
||||
sys.exit(err)
|
||||
|
||||
#### Read and check the keywords in INFILE
|
||||
|
||||
player = Player(infile, outfile)
|
||||
|
||||
player.read_keywords()
|
||||
|
||||
player.check_keywords()
|
||||
player.print_keywords()
|
||||
|
||||
if args.opt_continue:
|
||||
player.initcyc = save[0] + 1
|
||||
player.system = save[1]
|
||||
else:
|
||||
player.initcyc = 1
|
||||
player.read_potential()
|
||||
|
||||
#### Check whether the executables are in the path
|
||||
#### and print potential to Log File
|
||||
|
||||
player.check_executables()
|
||||
|
||||
player.print_potential()
|
||||
|
||||
#### Bring the molecules to standard orientation and prints info about them
|
||||
|
||||
for i in range(len(player.system.molecule)):
|
||||
|
||||
player.outfile.write(
|
||||
"\nMolecule type {} - {}:\n\n".format(
|
||||
i + 1, player.system.molecule[i].molname
|
||||
)
|
||||
)
|
||||
player.system.molecule[i].print_mol_info(player.outfile)
|
||||
player.outfile.write(
|
||||
" Translating and rotating molecule to standard orientation..."
|
||||
)
|
||||
player.system.molecule[i].standard_orientation()
|
||||
player.outfile.write(" Done\n\n New values:\n")
|
||||
player.system.molecule[i].print_mol_info(player.outfile)
|
||||
|
||||
player.outfile.write(90 * "=")
|
||||
player.outfile.write("\n")
|
||||
|
||||
if not args.opt_continue:
|
||||
make_simulation_dir()
|
||||
else:
|
||||
simdir = "simfiles"
|
||||
stepdir = "step{:02d}".format(player.initcyc)
|
||||
if os.path.exists(simdir + os.sep + stepdir):
|
||||
shutil.rmtree(simdir + os.sep + stepdir)
|
||||
|
||||
#### Open the geoms.xyz file and prints the initial geometry if starting from zero
|
||||
|
||||
if player.initcyc == 1:
|
||||
try:
|
||||
path = "geoms.xyz"
|
||||
geomsfh = open(path, "w", 1)
|
||||
except EnvironmentError as err:
|
||||
sys.exit(err)
|
||||
player.system.print_geom(0, geomsfh)
|
||||
geomsfh.write(40 * "-" + "\n")
|
||||
else:
|
||||
try:
|
||||
path = "geoms.xyz"
|
||||
geomsfh = open(path, "a", 1)
|
||||
except EnvironmentError as err:
|
||||
sys.exit(err)
|
||||
|
||||
player.outfile.write("\nStarting the iterative process.\n")
|
||||
|
||||
## Initial position (in Bohr)
|
||||
position = player.system.molecule[0].read_position()
|
||||
|
||||
## If restarting, read the last gradient and hessian
|
||||
# if player.initcyc > 1:
|
||||
# if player.qmprog in ("g03", "g09", "g16"):
|
||||
# Gaussian.read_forces("grad_hessian.dat")
|
||||
# Gaussian.read_hessian_fchk("grad_hessian.dat")
|
||||
|
||||
# if player['qmprog'] == "molcas":
|
||||
# Molcas.read_forces("grad_hessian.dat")
|
||||
# Molcas.read_hessian("grad_hessian.dat")
|
||||
|
||||
###
|
||||
### Start the iterative process
|
||||
###
|
||||
|
||||
player.outfile.write("\n" + 90 * "-" + "\n")
|
||||
|
||||
for cycle in range(player.initcyc, player.initcyc + player.maxcyc):
|
||||
|
||||
player.outfile.write("{} Step # {}\n".format(40 * " ", cycle))
|
||||
player.outfile.write(90 * "-" + "\n\n")
|
||||
|
||||
make_step_dir(cycle)
|
||||
|
||||
####
|
||||
#### Start block of parallel simulations
|
||||
####
|
||||
|
||||
player.dice_start(cycle)
|
||||
|
||||
###
|
||||
### End of parallel simulations block
|
||||
###
|
||||
|
||||
## After ASEC is built, compress files bigger than 1MB
|
||||
for proc in range(1, player.nprocs + 1):
|
||||
path = "simfiles"+os.sep+"step{:02d}".format(cycle) + os.sep + "p{:02d}".format(proc)
|
||||
compress_files_1mb(path)
|
||||
|
||||
###
|
||||
### Start QM calculation
|
||||
###
|
||||
|
||||
player.gaussian_start(cycle, geomsfh)
|
||||
|
||||
player.system.print_geom(cycle, geomsfh)
|
||||
geomsfh.write(40 * "-" + "\n")
|
||||
|
||||
player.outfile.write("\n+" + 88 * "-" + "+\n")
|
||||
|
||||
pickle.dump([cycle, player.system], open("latest-step.pkl", "wb"))
|
||||
####
|
||||
#### End of the iterative process
|
||||
####
|
||||
|
||||
## imprimir ultimas mensagens, criar um arquivo de potencial para ser usado em eventual
|
||||
## continuacao, fechar arquivos (geoms.xyz, run.log, ...)
|
||||
|
||||
player.outfile.write("\nDiceplayer finished normally!\n")
|
||||
player.outfile.close()
|
||||
####
|
||||
#### End of the program
|
||||
####
|
||||
player.start()
|
||||
|
||||
Reference in New Issue
Block a user