Read Potentials and Initial Testing

This commit is contained in:
2023-03-04 16:20:25 -03:00
parent 7a87204181
commit 71744641ff
35 changed files with 793 additions and 2836 deletions

View File

@@ -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()