diff --git a/dpti/mti.py b/dpti/mti.py index 7570a2b4..76520cc1 100644 --- a/dpti/mti.py +++ b/dpti/mti.py @@ -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" @@ -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" @@ -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": @@ -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: @@ -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] diff --git a/dpti/relax.py b/dpti/relax.py index ec01c8bf..2a89a734 100755 --- a/dpti/relax.py +++ b/dpti/relax.py @@ -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" @@ -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" diff --git a/dpti/ti.py b/dpti/ti.py index c130475f..cd8e19ba 100755 --- a/dpti/ti.py +++ b/dpti/ti.py @@ -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): @@ -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" @@ -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" @@ -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" @@ -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) @@ -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 = [] @@ -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 @@ -627,16 +624,9 @@ 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}" @@ -644,17 +634,9 @@ def post_tasks( 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}" @@ -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 @@ -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: @@ -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( @@ -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]