Skip to content
20 changes: 10 additions & 10 deletions dpti/mti.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ def _gen_lammps_input(
ret = ""
ret += "clear\n"
ret += "# --------------------- VARIABLES-------------------------\n"
ret += "variable ibead uloop %d pad\n" % (power - 1)
ret += "variable NSTEPS equal %d\n" % nsteps
ret += "variable THERMO_FREQ equal %d\n" % thermo_freq
ret += "variable DUMP_FREQ equal %d\n" % dump_freq
ret += f"variable ibead uloop {(power - 1):d} pad\n"
ret += f"variable NSTEPS equal {nsteps:d}\n"
ret += f"variable THERMO_FREQ equal {thermo_freq:d}\n"
ret += f"variable DUMP_FREQ equal {dump_freq:d}\n"
ret += f"variable TEMP equal {temp:f}\n"
ret += f"variable PRES equal {pres:f}\n"
ret += f"variable TAU_T equal {tau_t:f}\n"
Expand All @@ -67,9 +67,9 @@ def _gen_lammps_input(
ret += "box tilt large\n"
ret += f'if "${{restart}} > 0" then "read_restart ${{ibead}}.restart.*" else "read_data {conf_file}"\n'
if copies is not None:
ret += "replicate %d %d %d\n" % (copies[0], copies[1], copies[2])
ret += f"replicate {copies[0]} {copies[1]} {copies[2]}\n"
for jj in range(len(mass_map)):
ret += "mass %d %f\n" % (jj + 1, mass_map[jj] * mass_scale)
ret += f"mass {jj + 1} {(mass_map[jj] * mass_scale):f}\n"
ret += "# --------------------- FORCE FIELDS ---------------------\n"
if model is not None:
ret += f"pair_style deepmd {model}\n"
Expand Down Expand Up @@ -194,7 +194,7 @@ def make_tasks(iter_name, jdata):
json.dump(ti_settings, f, indent=4)

for ii in range(ntasks):
task_dir = os.path.join(job_abs_dir, "task.%06d" % ii)
task_dir = os.path.join(job_abs_dir, f"task.{ii:06d}")
task_abs_dir = create_path(task_dir)
settings = {}
if path == "t":
Expand All @@ -207,12 +207,12 @@ def make_tasks(iter_name, jdata):
settings["pres"] = pres
if job_type == "nbead_convergence":
for jj in range(len(mass_scale_y_list)):
mass_scale_y_dir = os.path.join(task_abs_dir, "mass_scale_y.%06d" % jj)
mass_scale_y_dir = os.path.join(task_abs_dir, f"mass_scale_y.{jj:06d}")
mass_scale_y_abs_dir = create_path(mass_scale_y_dir)
settings["mass_scale_y"] = mass_scale_y_list[jj]
settings["mass_scale"] = mass_scales[jj]
for kk in range(len(nbead_list)):
nbead_dir = os.path.join(mass_scale_y_abs_dir, "nbead.%06d" % kk)
nbead_dir = os.path.join(mass_scale_y_abs_dir, f"nbead.{kk:06d}")
nbead_abs_dir = create_path(nbead_dir)
settings["nbead"] = nbead_list[kk]
if nnode_seq is not None:
Expand Down Expand Up @@ -263,7 +263,7 @@ def make_tasks(iter_name, jdata):
json.dump(settings, f, indent=4)
elif job_type == "mass_ti":
for jj in range(len(mass_scale_y_list)):
mass_scale_y_dir = os.path.join(task_abs_dir, "mass_scale_y.%06d" % jj)
mass_scale_y_dir = os.path.join(task_abs_dir, f"mass_scale_y.{jj:06d}")
mass_scale_y_abs_dir = create_path(mass_scale_y_dir)
settings["mass_scale_y"] = mass_scale_y_list[jj]
settings["mass_scale"] = mass_scales[jj]
Expand Down
6 changes: 3 additions & 3 deletions dpti/relax.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ def _gen_lammps_relax(conf_file, mass_map, model, pres, thermo_freq=100, dump_fr
ret = ""
ret += "clear\n"
ret += "# --------------------- VARIABLES-------------------------\n"
ret += "variable THERMO_FREQ equal %d\n" % thermo_freq
ret += "variable DUMP_FREQ equal %d\n" % dump_freq
ret += f"variable THERMO_FREQ equal {thermo_freq}\n"
ret += f"variable DUMP_FREQ equal {dump_freq}\n"
ret += f"variable PRES equal {pres:f}\n"
ret += "# ---------------------- INITIALIZAITION ------------------\n"
ret += "units metal\n"
Expand All @@ -24,7 +24,7 @@ def _gen_lammps_relax(conf_file, mass_map, model, pres, thermo_freq=100, dump_fr
ret += f"read_data {conf_file}\n"
ret += "change_box all triclinic\n"
for jj in range(len(mass_map)):
ret += "mass %d %f\n" % (jj + 1, mass_map[jj])
ret += f"mass {jj + 1} {mass_map[jj]:f}\n"
ret += "# --------------------- FORCE FIELDS ---------------------\n"
ret += f"pair_style deepmd {model}\n"
ret += "pair_coeff * *\n"
Expand Down
56 changes: 18 additions & 38 deletions dpti/ti.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@


def make_iter_name(iter_index):
return "task_ti." + ("%04d" % iter_index)
return f"task_ti.{iter_index:04d}"


def parse_seq_ginv(seq):
Expand Down Expand Up @@ -65,9 +65,9 @@ def _gen_lammps_input(
ret = ""
ret += "clear\n"
ret += "# --------------------- VARIABLES-------------------------\n"
ret += "variable NSTEPS equal %d\n" % nsteps
ret += "variable THERMO_FREQ equal %d\n" % thermo_freq
ret += "variable DUMP_FREQ equal %d\n" % dump_freq
ret += f"variable NSTEPS equal {nsteps:d}\n"
ret += f"variable THERMO_FREQ equal {thermo_freq:d}\n"
ret += f"variable DUMP_FREQ equal {dump_freq:d}\n"
ret += f"variable TEMP equal {temp:f}\n"
ret += f"variable PRES equal {pres:f}\n"
ret += f"variable TAU_T equal {tau_t:f}\n"
Expand All @@ -83,17 +83,17 @@ def _gen_lammps_input(
ret += "box tilt large\n"
ret += f"read_data {conf_file}\n"
if copies is not None:
ret += "replicate %d %d %d\n" % (copies[0], copies[1], copies[2])
ret += f"replicate {copies[0]:d} {copies[1]:d} {copies[2]:d}\n"
ret += "change_box all triclinic\n"
for jj in range(len(mass_map)):
ret += "mass %d %f\n" % (jj + 1, mass_map[jj])
ret += f"mass {jj + 1} {mass_map[jj]:f}\n"
ret += "# --------------------- FORCE FIELDS ---------------------\n"
# if if_meam:
# ret += 'pair_style meam \n'
# ret += 'pair_coeff * * /home/fengbo/4_Sn/meam_files/library_18Metal.meam Sn /home/fengbo/4_Sn/meam_files/Sn_18Metal.meam Sn\n'
if if_meam:
ret += "pair_style meam\n"
ret += f'pair_coeff * * {meam_model["library"]} {meam_model["element"]} {meam_model["potential"]} {meam_model["element"]}\n'
ret += f"pair_coeff * * {meam_model['library']} {meam_model['element']} {meam_model['potential']} {meam_model['element']}\n"
else:
if append:
ret += f"pair_style deepmd {model:s} {append:s}\n"
Expand Down Expand Up @@ -131,9 +131,7 @@ def _gen_lammps_input(
raise RuntimeError(f"unknow ensemble {ens}\n")
ret += "fix mzero all momentum 10 linear 1 1 1\n"
ret += "# --------------------- INITIALIZE -----------------------\n"
ret += "velocity all create ${TEMP} %d\n" % (
np.random.default_rng().integers(1, 2**16)
)
ret += f"velocity all create ${{TEMP}} {np.random.default_rng().integers(1, 2**16)}\n"
ret += "velocity all zero linear\n"
ret += "# --------------------- RUN ------------------------------\n"
ret += "run ${NSTEPS}\n"
Expand Down Expand Up @@ -242,7 +240,7 @@ def make_tasks(iter_name, jdata, if_meam=None):
json.dump(ti_settings, f, indent=4)

for ii in range(ntasks):
task_dir = os.path.join(job_abs_dir, "task.%06d" % ii)
task_dir = os.path.join(job_abs_dir, f"task.{ii:06d}")
task_abs_dir = create_path(task_dir)
# os.chdir(work_path)

Expand Down Expand Up @@ -465,7 +463,6 @@ def post_tasks(

all_tasks = glob.glob(os.path.join(iter_name, "task.[0-9]*"))
all_tasks.sort()
ntasks = len(all_tasks)

all_t = []
all_e = []
Expand All @@ -491,7 +488,7 @@ def post_tasks(
print("# TI in NPT along P path")
else:
raise RuntimeError("invalid ens or path setting")
print("# natoms: %d" % natoms)
print(f"# natoms: {natoms:d}")

for ii in all_tasks:
# get T or P
Expand Down Expand Up @@ -627,34 +624,19 @@ def post_tasks(
# result_file = open(f"{iter_name}/../result", 'w')
if "nvt" == ens:
print(
"#%8s %20s %9s %9s %9s"
% ("T(ctrl)", "F", "stat_err", "inte_err", "err")
)
result += "#%8s %20s %9s %9s %9s\n" % (
"T(ctrl)",
"F",
"stat_err",
"inte_err",
"err",
f"#{'T(ctrl)':>8} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}"
)
result += f"#{'T(ctrl)':>8} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}\n"
for ii in range(len(all_temps)):
print(
f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e} {np.linalg.norm([all_fe_err[ii], all_fe_sys_err[ii]]):9.2e}"
)
result += f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e} {np.linalg.norm([all_fe_err[ii], all_fe_sys_err[ii]]):9.2e}\n"
elif "npt" in ens:
print(
"#%8s %15s %20s %9s %9s %9s"
% ("T(ctrl)", "P(ctrl)", "F", "stat_err", "inte_err", "err")
)
result += "#%8s %15s %20s %9s %9s %9s\n" % (
"T(ctrl)",
"P(ctrl)",
"F",
"stat_err",
"inte_err",
"err",
f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}"
)
result += f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}\n"
for ii in range(len(all_temps)):
print(
f"{all_temps[ii]:9.2f} {all_press[ii]:15.8e} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e} {np.linalg.norm([all_fe_err[ii], all_fe_sys_err[ii]]):9.2e}"
Expand Down Expand Up @@ -697,7 +679,6 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None):

all_tasks = glob.glob(os.path.join(iter_name, "task.[0-9]*"))
all_tasks.sort()
ntasks = len(all_tasks)

if "nvt" in ens and path == "t":
# TotEng
Expand All @@ -713,7 +694,7 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None):
print("# TI in NPT along P path")
else:
raise RuntimeError("invalid ens or path setting")
print("# natoms: %d" % natoms)
print(f"# natoms: {natoms:d}")

all_t = []
for ii in all_tasks:
Expand Down Expand Up @@ -797,15 +778,14 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None):
all_fe_sys_err.append(sys_err)

if "nvt" == ens:
print("#%8s %15s %9s %9s" % ("T(ctrl)", "F", "stat_err", "inte_err"))
print(f"#{'T(ctrl)':>8} {'F':>15} {'stat_err':>9} {'inte_err':>9}")
for ii in range(len(all_temps)):
print(
f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e}"
)
elif "npt" in ens:
print(
"#%8s %15s %15s %9s %9s"
% ("T(ctrl)", "P(ctrl)", "F", "stat_err", "inte_err")
f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>15} {'stat_err':>9} {'inte_err':>9}"
)
for ii in range(len(all_temps)):
print(
Expand All @@ -829,7 +809,7 @@ def refine_task(from_task, to_task, err):
from_ti = os.path.join(from_task, "ti.out")
if not os.path.isfile(from_ti):
raise RuntimeError(
f"cannot find file {from_ti}, task should be computed befor refined"
f"cannot find file {from_ti}, task should be computed before refined"
)
tmp_array = np.loadtxt(from_ti)
all_t = tmp_array[:, 0]
Expand Down