diff --git a/dpti/equi.py b/dpti/equi.py index b25f194..77a51e3 100755 --- a/dpti/equi.py +++ b/dpti/equi.py @@ -44,19 +44,19 @@ def gen_equi_header( ret += "variable THERMO_FREQ equal %d\n" % thermo_freq ret += "variable DUMP_FREQ equal %d\n" % dump_freq ret += "variable NREPEAT equal ${NSTEPS}/${DUMP_FREQ}\n" - ret += "variable TEMP equal %.6f\n" % temp + ret += f"variable TEMP equal {temp:.6f}\n" # if equi_settings['pres'] is not None : if pres is not None: - ret += "variable PRES equal %.6f\n" % pres - ret += "variable TAU_T equal %.6f\n" % tau_t - ret += "variable TAU_P equal %.6f\n" % tau_p + ret += f"variable PRES equal {pres:.6f}\n" + ret += f"variable TAU_T equal {tau_t:.6f}\n" + ret += f"variable TAU_P equal {tau_p:.6f}\n" ret += "# ---------------------- INITIALIZAITION ------------------\n" ret += "units metal\n" ret += "boundary p p p\n" ret += "atom_style atomic\n" ret += "# --------------------- ATOM DEFINITION ------------------\n" ret += "box tilt large\n" - ret += "read_data %s\n" % equi_conf + ret += f"read_data {equi_conf}\n" ret += "change_box all triclinic\n" for jj in range(len(mass_map)): ret += "mass %d %.6f\n" % (jj + 1, mass_map[jj]) @@ -82,7 +82,7 @@ def gen_equi_force_field(model, if_meam=False, meam_model=None): ret = "" ret += "# --------------------- FORCE FIELDS ---------------------\n" if not if_meam: - ret += "pair_style deepmd %s\n" % model + ret += f"pair_style deepmd {model}\n" ret += "pair_coeff * *\n" else: meam_library = meam_model["library"] @@ -97,7 +97,7 @@ def gen_equi_thermo_settings(timestep): ret = "" ret += "# --------------------- MD SETTINGS ----------------------\n" ret += "neighbor 1.0 bin\n" - ret += "timestep %.6f\n" % timestep + ret += f"timestep {timestep:.6f}\n" ret += "thermo ${THERMO_FREQ}\n" ret += "compute allmsd all msd\n" ret += "thermo_style custom step ke pe etotal enthalpy temp press vol lx ly lz xy xz yz pxx pyy pzz pxy pxz pyz c_allmsd[*]\n" @@ -132,7 +132,7 @@ def gen_equi_ensemble_settings(ens): elif ens == "nve": ret += "fix 1 all nve\n" else: - raise RuntimeError("unknow ensemble %s\n" % ens) + 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" % ( diff --git a/dpti/hti.py b/dpti/hti.py index 90a162f..074e66c 100755 --- a/dpti/hti.py +++ b/dpti/hti.py @@ -43,7 +43,7 @@ def _ff_lj_on(lamb, model, sparam): # sigma_hh = sparam['sigma_hh'] activation = sparam["activation"] ret = "" - ret += "variable EPSILON equal %f\n" % epsilon + ret += f"variable EPSILON equal {epsilon:f}\n" ret += f"pair_style lj/cut/soft {nn:f} {alpha_lj:f} {rcut:f}\n" element_num = sparam.get("element_num", 1) @@ -79,7 +79,7 @@ def _ff_deep_on(lamb, model, sparam, if_meam=False, meam_model=None): # sigma_hh = sparam['sigma_hh'] activation = sparam["activation"] ret = "" - ret += "variable EPSILON equal %f\n" % epsilon + ret += f"variable EPSILON equal {epsilon:f}\n" ret += "variable ONE equal 1\n" # if if_meam: # ret += 'pair_style hybrid/overlay meam lj/cut/soft %f %f %f \n' % (nn, alpha_lj, rcut) @@ -166,7 +166,7 @@ def _ff_lj_off(lamb, model, sparam, if_meam=False, meam_model=None): # sigma_hh = sparam['sigma_hh'] activation = sparam["activation"] ret = "" - ret += "variable EPSILON equal %f\n" % epsilon + ret += f"variable EPSILON equal {epsilon:f}\n" ret += "variable INV_EPSILON equal -${EPSILON}\n" # if if_meam: # ret += 'pair_style hybrid/overlay meam lj/cut/soft %f %f %f \n' % (nn, alpha_lj, rcut) @@ -248,7 +248,7 @@ def _ff_spring(lamb, m_spring_k, var_spring): sum_str = "f_l_spring_1" for ii in range(1, ntypes): sum_str += "+f_l_spring_%s" % (ii + 1) - ret += "variable l_spring equal %s\n" % (sum_str) + ret += f"variable l_spring equal {sum_str}\n" return ret @@ -277,7 +277,7 @@ def _ff_soft_lj(lamb, model, m_spring_k, step, sparam, if_meam=False, meam_model def _ff_two_steps(lamb, model, m_spring_k, step): ret = "" ret += "# --------------------- FORCE FIELDS ---------------------\n" - ret += "pair_style deepmd %s\n" % model + ret += f"pair_style deepmd {model}\n" ret += "pair_coeff * *\n" if step == "both" or step == "spring_off": @@ -330,11 +330,11 @@ def _gen_lammps_input( 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 += "variable TEMP equal %f\n" % temp - ret += "variable PRES equal %f\n" % pres - ret += "variable TAU_T equal %f\n" % tau_t - ret += "variable TAU_P equal %f\n" % tau_p - ret += "variable LAMBDA equal %.10e\n" % lamb + 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" + ret += f"variable TAU_P equal {tau_p:f}\n" + ret += f"variable LAMBDA equal {lamb:.10e}\n" ret += "variable INV_LAMBDA equal %.10e\n" % (1 - lamb) ret += "# ---------------------- INITIALIZAITION ------------------\n" ret += "units metal\n" @@ -342,7 +342,7 @@ def _gen_lammps_input( ret += "atom_style atomic\n" ret += "# --------------------- ATOM DEFINITION ------------------\n" ret += "box tilt large\n" - ret += "read_data %s\n" % conf_file + 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 += "change_box all triclinic\n" @@ -367,7 +367,7 @@ def _gen_lammps_input( ret += "# --------------------- MD SETTINGS ----------------------\n" ret += "neighbor 1.0 bin\n" - ret += "timestep %s\n" % timestep + ret += f"timestep {timestep}\n" ret += "thermo ${THERMO_FREQ}\n" ret += "compute allmsd all msd\n" if 1 - lamb != 0: @@ -405,7 +405,7 @@ def _gen_lammps_input( elif ens == "nve": ret += "fix 1 all nve\n" else: - raise RuntimeError("unknow ensemble %s\n" % ens) + raise RuntimeError(f"unknow ensemble {ens}\n") ret += "# --------------------- INITIALIZE -----------------------\n" ret += "velocity all create ${TEMP} %d\n" % ( np.random.default_rng().integers(1, 2**16) @@ -806,7 +806,7 @@ def refine_task( from_ti = os.path.join(from_task, "hti.out") if not os.path.isfile(from_ti): raise RuntimeError( - "cannot find file %s, task should be computed befor refined" % from_ti + f"cannot find file {from_ti}, task should be computed befor refined" ) tmp_array = np.loadtxt(from_ti) all_t = tmp_array[:, 0] @@ -1276,9 +1276,9 @@ def compute_task( info = thermo_info.copy() if jdata["reference"] == "einstein": - print("# free ener of Einstein Mole: %20.8f" % e0) + print(f"# free ener of Einstein Mole: {e0:20.8f}") else: - print("# free ener of ideal gas: %20.8f" % e0) + print(f"# free ener of ideal gas: {e0:20.8f}") print( ("# fe contrib due to integration " + print_format) % (de, de_err[0], de_err[1]) diff --git a/dpti/hti_ice.py b/dpti/hti_ice.py index 54df821..ef4c9a6 100755 --- a/dpti/hti_ice.py +++ b/dpti/hti_ice.py @@ -223,14 +223,14 @@ def handle_compute(args): print_format = "%20.12f %10.3e %10.3e" hti.print_thermo_info(thermo_info) if crystal == "vega": - print("# free ener of Einstein Mole: %20.8f" % (e0)) + print(f"# free ener of Einstein Mole: {e0:20.8f}") else: - print("# free ener of Einstein Crys: %20.8f" % (e0)) + print(f"# free ener of Einstein Crys: {e0:20.8f}") print(f"# Pauling corr {note_pauling}: {pauling_corr:20.8f}") print( ("# fe integration " + print_format) % (de, de_err[0], de_err[1]) ) - print("# fe const shift %20.12f" % args.shift) + print(f"# fe const shift {args.shift:20.12f}") # if args.type == 'helmholtz' : print("# Helmholtz free ener per mol (stat_err inte_err) [eV]:") print(print_format % (e0 + de - args.shift, de_err[0], de_err[1])) diff --git a/dpti/hti_liq.py b/dpti/hti_liq.py index 6d74043..e2ae5b8 100755 --- a/dpti/hti_liq.py +++ b/dpti/hti_liq.py @@ -36,7 +36,7 @@ def _ff_soft_on(lamb, sparam): # sigma = sparam['sigma'] activation = sparam["activation"] ret = "" - ret += "variable EPSILON equal %f\n" % epsilon + ret += f"variable EPSILON equal {epsilon:f}\n" ret += f"pair_style lj/cut/soft {nn:f} {alpha_lj:f} {rcut:f}\n" element_num = sparam.get("element_num", 1) @@ -66,7 +66,7 @@ def _ff_deep_on(lamb, sparam, model, if_meam=False, meam_model=None): # sigma = sparam['sigma'] activation = sparam["activation"] ret = "" - ret += "variable EPSILON equal %f\n" % epsilon + ret += f"variable EPSILON equal {epsilon:f}\n" ret += "variable ONE equal 1\n" if if_meam: ret += f"pair_style hybrid/overlay meam lj/cut/soft {nn:f} {alpha_lj:f} {rcut:f}\n" @@ -110,7 +110,7 @@ def _ff_soft_off(lamb, sparam, model, if_meam=False, meam_model=None): activation = sparam["activation"] ret = "" ret += "variable INV_LAMBDA equal 1-${LAMBDA}\n" - ret += "variable EPSILON equal %f\n" % epsilon + ret += f"variable EPSILON equal {epsilon:f}\n" ret += "variable INV_EPSILON equal -${EPSILON}\n" if if_meam: ret += f"pair_style hybrid/overlay meam lj/cut/soft {nn:f} {alpha_lj:f} {rcut:f}\n" @@ -166,11 +166,11 @@ def _gen_lammps_input_ideal( 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 += "variable TEMP equal %f\n" % temp - ret += "variable PRES equal %f\n" % pres - ret += "variable TAU_T equal %f\n" % tau_t - ret += "variable TAU_P equal %f\n" % tau_p - ret += "variable LAMBDA equal %.10e\n" % lamb + 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" + ret += f"variable TAU_P equal {tau_p:f}\n" + ret += f"variable LAMBDA equal {lamb:.10e}\n" ret += "variable ZERO equal 0\n" ret += "# ---------------------- INITIALIZAITION ------------------\n" ret += "units metal\n" @@ -178,7 +178,7 @@ def _gen_lammps_input_ideal( ret += "atom_style atomic\n" ret += "# --------------------- ATOM DEFINITION ------------------\n" ret += "box tilt large\n" - ret += "read_data %s\n" % conf_file + 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 += "change_box all triclinic\n" @@ -199,7 +199,7 @@ def _gen_lammps_input_ideal( raise RuntimeError("unknown step") ret += "# --------------------- MD SETTINGS ----------------------\n" ret += "neighbor 1.0 bin\n" - ret += "timestep %s\n" % timestep + ret += f"timestep {timestep}\n" ret += "compute allmsd all msd\n" ret += "thermo ${THERMO_FREQ}\n" ret += "thermo_style custom step ke pe etotal enthalpy temp press vol c_e_diff[1] c_allmsd[*]\n" @@ -212,7 +212,7 @@ def _gen_lammps_input_ideal( elif ens == "nve": ret += "fix 1 all nve\n" else: - raise RuntimeError("unknow ensemble %s\n" % ens) + 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" % ( diff --git a/dpti/hti_water.py b/dpti/hti_water.py index 1b31e93..8784d38 100755 --- a/dpti/hti_water.py +++ b/dpti/hti_water.py @@ -40,16 +40,16 @@ def _ff_angle_on(lamb, model, bparam, sparam): sigma_hh = sparam["sigma_hh"] activation = sparam["activation"] ret = "" - ret += "variable EPSILON equal %f\n" % epsilon + ret += f"variable EPSILON equal {epsilon:f}\n" ret += f"pair_style lj/cut/soft {nn:f} {alpha_lj:f} {rcut:f} \n" ret += f"pair_coeff 1 1 ${{EPSILON}} {sigma_oo:f} {activation:f}\n" ret += f"pair_coeff 1 2 ${{EPSILON}} {sigma_oh:f} {activation:f}\n" ret += f"pair_coeff 2 2 ${{EPSILON}} {sigma_hh:f} {activation:f}\n" ret += "bond_style harmonic\n" ret += f"bond_coeff 1 {bond_k:f} {bond_l:f}\n" - ret += "variable ANGLE_K equal ${LAMBDA}*%.16e\n" % angle_k + ret += f"variable ANGLE_K equal ${{LAMBDA}}*{angle_k:.16e}\n" ret += "angle_style harmonic\n" - ret += "angle_coeff 1 ${ANGLE_K} %f\n" % (angle_t) + ret += f"angle_coeff 1 ${{ANGLE_K}} {angle_t:f}\n" ret += "fix tot_pot all adapt/fep 0 pair lj/cut/soft epsilon * * v_LAMBDA scale yes\n" ret += "compute e_diff all fep ${TEMP} pair lj/cut/soft epsilon * * v_EPSILON\n" return ret @@ -69,7 +69,7 @@ def _ff_deep_on(lamb, model, bparam, sparam): sigma_hh = sparam["sigma_hh"] activation = sparam["activation"] ret = "" - ret += "variable EPSILON equal %f\n" % epsilon + ret += f"variable EPSILON equal {epsilon:f}\n" ret += "variable ONE equal 1\n" ret += f"pair_style hybrid/overlay deepmd {model} lj/cut/soft {nn:f} {alpha_lj:f} {rcut:f} \n" ret += "pair_coeff * * deepmd\n" @@ -100,7 +100,7 @@ def _ff_bond_angle_off(lamb, model, bparam, sparam): activation = sparam["activation"] ret = "" ret += "variable INV_LAMBDA equal 1-${LAMBDA}\n" - ret += "variable EPSILON equal %f\n" % epsilon + ret += f"variable EPSILON equal {epsilon:f}\n" ret += "variable INV_EPSILON equal -${EPSILON}\n" ret += f"pair_style hybrid/overlay deepmd {model} lj/cut/soft {nn:f} {alpha_lj:f} {rcut:f} \n" ret += "pair_coeff * * deepmd\n" @@ -109,10 +109,10 @@ def _ff_bond_angle_off(lamb, model, bparam, sparam): ret += f"pair_coeff 2 2 lj/cut/soft ${{EPSILON}} {sigma_hh:f} {activation:f}\n" ret += "variable BOND_K equal %.16e\n" % (bond_k * (1 - lamb)) ret += "bond_style harmonic\n" - ret += "bond_coeff 1 ${BOND_K} %f\n" % (bond_l) + ret += f"bond_coeff 1 ${{BOND_K}} {bond_l:f}\n" ret += "variable ANGLE_K equal %.16e\n" % (angle_k * (1 - lamb)) ret += "angle_style harmonic\n" - ret += "angle_coeff 1 ${ANGLE_K} %f\n" % (angle_t) + ret += f"angle_coeff 1 ${{ANGLE_K}} {angle_t:f}\n" ret += "fix tot_pot all adapt/fep 0 pair lj/cut/soft epsilon * * v_INV_LAMBDA scale yes\n" ret += "compute e_diff all fep ${TEMP} pair lj/cut/soft epsilon * * v_INV_EPSILON\n" return ret @@ -143,18 +143,18 @@ def _gen_lammps_input( ret += "variable NSTEPS equal %d\n" % nsteps ret += "variable THERMO_FREQ equal %d\n" % prt_freq ret += "variable DUMP_FREQ equal %d\n" % dump_freq - ret += "variable TEMP equal %f\n" % temp - ret += "variable PRES equal %f\n" % pres - ret += "variable TAU_T equal %f\n" % tau_t - ret += "variable TAU_P equal %f\n" % tau_p - ret += "variable LAMBDA equal %.10e\n" % lamb + 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" + ret += f"variable TAU_P equal {tau_p:f}\n" + ret += f"variable LAMBDA equal {lamb:.10e}\n" ret += "# ---------------------- INITIALIZAITION ------------------\n" ret += "units metal\n" ret += "boundary p p p\n" ret += "atom_style angle\n" ret += "# --------------------- ATOM DEFINITION ------------------\n" ret += "box tilt large\n" - ret += "read_data %s\n" % conf_file + 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 += "change_box all triclinic\n" @@ -170,7 +170,7 @@ def _gen_lammps_input( ret += "special_bonds lj/coul 1 1 1 angle no\n" ret += "# --------------------- MD SETTINGS ----------------------\n" ret += "neighbor 1.0 bin\n" - ret += "timestep %s\n" % dt + ret += f"timestep {dt}\n" ret += "thermo ${THERMO_FREQ}\n" ret += "thermo_style custom step ke pe etotal enthalpy temp press vol ebond eangle c_e_diff[1]\n" ret += "thermo_modify format 9 %.16e\n" @@ -184,7 +184,7 @@ def _gen_lammps_input( elif ens == "nve": ret += "fix 1 all nve\n" else: - raise RuntimeError("unknow ensemble %s\n" % ens) + 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" % ( @@ -291,7 +291,7 @@ def _refine_tasks(from_task, to_task, err, step): from_ti = os.path.join(from_task, "hti.out") if not os.path.isfile(from_ti): raise RuntimeError( - "cannot find file %s, task should be computed befor refined" % from_ti + f"cannot find file {from_ti}, task should be computed befor refined" ) tmp_array = np.loadtxt(from_ti) all_t = tmp_array[:, 0] @@ -667,7 +667,7 @@ def compute_ideal_mol(iter_name): def post_tasks(iter_name, natoms, method="inte", scheme="s"): subtask_name = os.path.join(iter_name, "00.angle_on") fe = compute_ideal_mol(subtask_name) - print("# fe of ideal mol: %20.12f" % fe) + print(f"# fe of ideal mol: {fe:20.12f}") # print('# fe of ideal gas: %20.12f' % (einstein.ideal_gas_fe(subtask_name) * 3)) if method == "inte": e0, err0, tinfo0 = _post_tasks(subtask_name, "angle_on", natoms, scheme=scheme) diff --git a/dpti/lib/RemoteJob.py b/dpti/lib/RemoteJob.py index c0aa0ac..00bad7a 100644 --- a/dpti/lib/RemoteJob.py +++ b/dpti/lib/RemoteJob.py @@ -114,7 +114,7 @@ def download(self, job_dirs, remote_down_files): def block_checkcall(self, cmd): stdin, stdout, stderr = self.ssh.exec_command( - ("cd %s ;" % self.remote_root) + cmd + (f"cd {self.remote_root} ;") + cmd ) exit_status = stdout.channel.recv_exit_status() if exit_status != 0: @@ -126,7 +126,7 @@ def block_checkcall(self, cmd): def block_call(self, cmd): stdin, stdout, stderr = self.ssh.exec_command( - ("cd %s ;" % self.remote_root) + cmd + (f"cd {self.remote_root} ;") + cmd ) exit_status = stdout.channel.recv_exit_status() return exit_status, stdin, stdout, stderr @@ -167,7 +167,7 @@ def _put_files(self, files, dereference=True): sftp = self.ssh.open_sftp() sftp.put(from_f, to_f) # remote extract - self.block_checkcall("tar xf %s" % of) + self.block_checkcall(f"tar xf {of}") # clean up os.remove(from_f) sftp.remove(to_f) @@ -250,21 +250,21 @@ def _make_script(self, job_dirs, cmd, args=None, resources=None): fp.write("\n") if module_unload_list is not None: for ii in module_unload_list: - fp.write("module unload %s\n" % ii) + fp.write(f"module unload {ii}\n") fp.write("\n") if module_list is not None: for ii in module_list: - fp.write("module load %s\n" % ii) + fp.write(f"module load {ii}\n") fp.write("\n") for ii, jj in zip(job_dirs, args): - fp.write("cd %s\n" % ii) + fp.write(f"cd {ii}\n") fp.write("test $? -ne 0 && exit\n") if resources["with_mpi"] is True: fp.write("mpirun -n %d %s %s\n" % (task_per_node, cmd, jj)) else: fp.write(f"{cmd} {jj}\n") fp.write("test $? -ne 0 && exit\n") - fp.write("cd %s\n" % self.remote_root) + fp.write(f"cd {self.remote_root}\n") fp.write("test $? -ne 0 && exit\n") fp.write("\ntouch tag_finished\n") sftp.close() @@ -287,7 +287,7 @@ def submit(self, job_dirs, cmd, args=None, resources=None): def check_status(self): job_id = self._get_job_id() if job_id == "": - raise RuntimeError("job %s is has not been submitted" % self.remote_root) + raise RuntimeError(f"job {self.remote_root} is has not been submitted") ret, stdin, stdout, stderr = self.block_call("squeue --job " + job_id) err_str = stderr.read().decode("utf-8") if ret != 0: @@ -351,32 +351,32 @@ def _make_script(self, job_dirs, cmd, args=None, res=None): ret += "#!/bin/bash -l\n" ret += "#SBATCH -N %d\n" % res["numb_node"] ret += "#SBATCH --ntasks-per-node %d\n" % res["task_per_node"] - ret += "#SBATCH -t %s\n" % res["time_limit"] + ret += "#SBATCH -t {}\n".format(res["time_limit"]) if res["mem_limit"] > 0: ret += "#SBATCH --mem %dG \n" % res["mem_limit"] if len(res["account"]) > 0: - ret += "#SBATCH --account %s \n" % res["account"] + ret += "#SBATCH --account {} \n".format(res["account"]) if len(res["partition"]) > 0: - ret += "#SBATCH --partition %s \n" % res["partition"] + ret += "#SBATCH --partition {} \n".format(res["partition"]) if len(res["qos"]) > 0: - ret += "#SBATCH --qos %s \n" % res["qos"] + ret += "#SBATCH --qos {} \n".format(res["qos"]) if res["numb_gpu"] > 0: ret += "#SBATCH --gres=gpu:%d\n" % res["numb_gpu"] for ii in res["constraint_list"]: - ret += "#SBATCH -C %s \n" % ii + ret += f"#SBATCH -C {ii} \n" for ii in res["license_list"]: - ret += "#SBATCH -L %s \n" % ii + ret += f"#SBATCH -L {ii} \n" for ii in res["exclude_list"]: - ret += "#SBATCH --exclude %s \n" % ii + ret += f"#SBATCH --exclude {ii} \n" ret += "\n" # ret += 'set -euo pipefail\n\n' for ii in res["module_unload_list"]: - ret += "module unload %s\n" % ii + ret += f"module unload {ii}\n" for ii in res["module_list"]: - ret += "module load %s\n" % ii + ret += f"module load {ii}\n" ret += "\n" for ii in res["source_list"]: - ret += "source %s\n" % ii + ret += f"source {ii}\n" ret += "\n" envs = res["envs"] if envs is not None: @@ -389,14 +389,14 @@ def _make_script(self, job_dirs, cmd, args=None, res=None): for ii in job_dirs: args.append("") for ii, jj in zip(job_dirs, args): - ret += "cd %s\n" % ii + ret += f"cd {ii}\n" ret += "test $? -ne 0 && exit\n" if res["with_mpi"]: ret += f"srun {cmd} {jj}\n" else: ret += f"{cmd} {jj}\n" ret += "test $? -ne 0 && exit\n" - ret += "cd %s\n" % self.remote_root + ret += f"cd {self.remote_root}\n" ret += "test $? -ne 0 && exit\n" ret += "\ntouch tag_finished\n" @@ -426,7 +426,7 @@ def submit(self, job_dirs, cmd, args=None, resources=None): def check_status(self): job_id = self._get_job_id() if job_id == "": - raise RuntimeError("job %s is has not been submitted" % self.remote_root) + raise RuntimeError(f"job {self.remote_root} is has not been submitted") ret, stdin, stdout, stderr = self.block_call("qstat -x " + job_id) err_str = stderr.read().decode("utf-8") if ret != 0: @@ -477,7 +477,7 @@ def _make_script(self, job_dirs, cmd, args=None, res=None): ret = "" ret += "#!/bin/bash -l\n" if res.get("hpc_job_name", None): - ret += "#PBS -N %s\n" % res["hpc_job_name"] + ret += "#PBS -N {}\n".format(res["hpc_job_name"]) if res["numb_gpu"] == 0: ret += "#PBS -l select=%d:ncpus=%d\n" % ( res["numb_node"], @@ -489,20 +489,20 @@ def _make_script(self, job_dirs, cmd, args=None, res=None): res["task_per_node"], res["numb_gpu"], ) - ret += "#PBS -l walltime=%s\n" % (res["time_limit"]) + ret += "#PBS -l walltime={}\n".format(res["time_limit"]) # if res['mem_limit'] > 0 : # ret += "#PBS -l mem=%dG \n" % res['mem_limit'] ret += "#PBS -j oe\n" if len(res["partition"]) > 0: - ret += "#PBS -q %s\n" % res["partition"] + ret += "#PBS -q {}\n".format(res["partition"]) ret += "\n" for ii in res["module_unload_list"]: - ret += "module unload %s\n" % ii + ret += f"module unload {ii}\n" for ii in res["module_list"]: - ret += "module load %s\n" % ii + ret += f"module load {ii}\n" ret += "\n" for ii in res["source_list"]: - ret += "source %s\n" % ii + ret += f"source {ii}\n" ret += "\n" envs = res["envs"] if envs is not None: @@ -516,7 +516,7 @@ def _make_script(self, job_dirs, cmd, args=None, res=None): for ii in job_dirs: args.append("") for ii, jj in zip(job_dirs, args): - ret += "cd %s\n" % ii + ret += f"cd {ii}\n" ret += "test $? -ne 0 && exit\n" if res["with_mpi"]: ret += "mpirun -machinefile $PBS_NODEFILE -n %d %s %s\n" % ( @@ -527,7 +527,7 @@ def _make_script(self, job_dirs, cmd, args=None, res=None): else: ret += f"{cmd} {jj}\n" ret += "test $? -ne 0 && exit\n" - ret += "cd %s\n" % self.remote_root + ret += f"cd {self.remote_root}\n" ret += "test $? -ne 0 && exit\n" ret += "\ntouch tag_finished\n" diff --git a/dpti/lib/lmp.py b/dpti/lib/lmp.py index 46b42f2..f1e5372 100644 --- a/dpti/lib/lmp.py +++ b/dpti/lib/lmp.py @@ -176,9 +176,9 @@ def from_system_data(system): ntypes = len(system["atom_numbs"]) ret += "%d atoms\n" % natoms ret += "%d atom types\n" % ntypes - ret += "0 %.8f xlo xhi\n" % system["cell"][0][0] - ret += "0 %.8f ylo yhi\n" % system["cell"][1][1] - ret += "0 %.8f zlo zhi\n" % system["cell"][2][2] + ret += "0 {:.8f} xlo xhi\n".format(system["cell"][0][0]) + ret += "0 {:.8f} ylo yhi\n".format(system["cell"][1][1]) + ret += "0 {:.8f} zlo zhi\n".format(system["cell"][2][2]) ret += "{:.8f} {:.8f} {:.8f} xy xz yz\n".format( system["cell"][1][0], system["cell"][2][0], diff --git a/dpti/lib/utils.py b/dpti/lib/utils.py index efac8f6..7bbbf37 100644 --- a/dpti/lib/utils.py +++ b/dpti/lib/utils.py @@ -486,8 +486,8 @@ def integrate_range_hti(all_lambda, de, de_err, scheme="s"): xx = np.arange(0, 1 + 1e-10, 1.0 / ninter) yy = np.exp(xx) ye = np.ones(xx.shape) * error / np.sqrt(12) - yy = yy + (np.random.random([ninter + 1]) * error - 0.5 * error) - print("here", np.random.random([ninter + 1]) * error - 0.5 * error) + rng = np.random.default_rng() + yy = yy + (rng.random([ninter + 1]) * error - 0.5 * error) # diff0, err0 = integrate_simpson(xx, yy, ye) # diff1, err1 = integrate_simpson_nonuniform(xx, yy, ye) # real_err0 = np.abs(np.exp(1) - np.exp(0) - diff0) diff --git a/dpti/lib/vasp.py b/dpti/lib/vasp.py index 4c34e11..c435c3f 100644 --- a/dpti/lib/vasp.py +++ b/dpti/lib/vasp.py @@ -134,7 +134,7 @@ def poscar_scale(poscar_in, poscar_out, scale): elif "C" == lines[7][0] or "c" == lines[7][0]: lines = _poscar_scale_cartesian(lines, scale) else: - raise RuntimeError("Unknow poscar coord style at line 7: %s" % lines[7]) + raise RuntimeError(f"Unknow poscar coord style at line 7: {lines[7]}") with open(poscar_out, "w") as fout: fout.write("".join(lines)) diff --git a/dpti/mti.py b/dpti/mti.py index c26436b..b607da2 100644 --- a/dpti/mti.py +++ b/dpti/mti.py @@ -54,10 +54,10 @@ def _gen_lammps_input( 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 += "variable TEMP equal %f\n" % temp - ret += "variable PRES equal %f\n" % pres - ret += "variable TAU_T equal %f\n" % tau_t - ret += "variable TAU_P equal %f\n" % tau_p + 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" + ret += f"variable TAU_P equal {tau_p:f}\n" ret += "# ---------------------- INITIALIZAITION ------------------\n" ret += "units metal\n" ret += "boundary p p p\n" @@ -72,14 +72,14 @@ def _gen_lammps_input( ret += "mass %d %f\n" % (jj + 1, mass_map[jj] * mass_scale) ret += "# --------------------- FORCE FIELDS ---------------------\n" if model is not None: - ret += "pair_style deepmd %s\n" % model + ret += f"pair_style deepmd {model}\n" ret += "pair_coeff * *\n" elif template_ff is not None: ret += template_ff ret += "# --------------------- MD SETTINGS ----------------------\n" ret += "neighbor 2.0 bin\n" ret += "neigh_modify every 10 delay 0 check no\n" - ret += "timestep %s\n" % timestep + ret += f"timestep {timestep}\n" ret += "thermo ${THERMO_FREQ}\n" ret += "compute allmsd all msd\n" ret += "dump 1 all custom ${DUMP_FREQ} ${ibead}.dump id type x y z\n" @@ -96,7 +96,7 @@ def _gen_lammps_input( elif ens == "nve": ret += "fix 1 all pimd/langevin ensemble nve integrator obabo temp ${TEMP}\n" else: - raise RuntimeError("unknow ensemble %s\n" % ens) + raise RuntimeError(f"unknow ensemble {ens}\n") if ens == "nvt" or ens == "nve": ret += "thermo_style custom step temp f_1[5] f_1[7] c_allmsd[*]\n" ret += "thermo_modify format float %6.8e\n" @@ -106,7 +106,7 @@ def _gen_lammps_input( ret += "thermo_modify format float %6.8e\n" ret += 'fix print all print ${THERMO_FREQ} "$(step) $(temp) $(vol) $(density) $(f_1[5]) $(f_1[7])" append ${ibead}.out title "# step temp vol density K_prim K_cv" screen no' else: - raise RuntimeError("unknow ensemble %s\n" % ens) + raise RuntimeError(f"unknow ensemble {ens}\n") ret += "# --------------------- INITIALIZE -----------------------\n" ret += "# --------------------- RUN ------------------------------\n" ret += "restart 100000 ${ibead}.restart\n" diff --git a/dpti/old_equi.py b/dpti/old_equi.py index e6c40c4..0320aeb 100755 --- a/dpti/old_equi.py +++ b/dpti/old_equi.py @@ -47,18 +47,18 @@ def _gen_lammps_input( ret += "variable THERMO_FREQ equal %d\n" % prt_freq ret += "variable DUMP_FREQ equal %d\n" % dump_freq ret += "variable NREPEAT equal ${NSTEPS}/${DUMP_FREQ}\n" - ret += "variable TEMP equal %f\n" % temp + ret += f"variable TEMP equal {temp:f}\n" if pres is not None: - ret += "variable PRES equal %f\n" % pres - ret += "variable TAU_T equal %f\n" % tau_t - ret += "variable TAU_P equal %f\n" % tau_p + ret += f"variable PRES equal {pres:f}\n" + ret += f"variable TAU_T equal {tau_t:f}\n" + ret += f"variable TAU_P equal {tau_p:f}\n" ret += "# ---------------------- INITIALIZAITION ------------------\n" ret += "units metal\n" ret += "boundary p p p\n" ret += "atom_style atomic\n" ret += "# --------------------- ATOM DEFINITION ------------------\n" ret += "box tilt large\n" - ret += "read_data %s\n" % conf_file + 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]) @@ -67,11 +67,11 @@ def _gen_lammps_input( ret += "pair_style meam\n" ret += f"pair_coeff * * {meam_model[0]} {meam_model[2]} {meam_model[1]} {meam_model[2]}\n" else: - ret += "pair_style deepmd %s\n" % model + ret += f"pair_style deepmd {model}\n" ret += "pair_coeff * *\n" ret += "# --------------------- MD SETTINGS ----------------------\n" ret += "neighbor 1.0 bin\n" - ret += "timestep %s\n" % dt + ret += f"timestep {dt}\n" ret += "thermo ${THERMO_FREQ}\n" ret += "compute allmsd all msd\n" if ens == "nvt": @@ -79,7 +79,7 @@ def _gen_lammps_input( elif "npt" in ens: ret += "thermo_style custom step ke pe etotal enthalpy temp press vol lx ly lz xy xz yz pxx pyy pzz pxy pxz pyz c_allmsd[*]\n" else: - raise RuntimeError("unknow ensemble %s\n" % ens) + raise RuntimeError(f"unknow ensemble {ens}\n") if dump_ave_posi: ret += "compute ru all property/atom xu yu zu\n" ret += "fix ap all ave/atom ${DUMP_FREQ} ${NREPEAT} ${NSTEPS} c_ru[1] c_ru[2] c_ru[3]\n" @@ -100,7 +100,7 @@ def _gen_lammps_input( elif ens == "nve": ret += "fix 1 all nve\n" else: - raise RuntimeError("unknow ensemble %s\n" % ens) + 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" % ( @@ -193,18 +193,18 @@ def make_task( if ens is None: ens = jdata["ens"] elif "ens" in jdata: - print("ens = %s overrides the ens in json data" % ens) + print(f"ens = {ens} overrides the ens in json data") jdata["ens"] = ens if temp is None: temp = jdata["temp"] elif "temp" in jdata: - print("T = %f overrides the temp in json data" % temp) + print(f"T = {temp:f} overrides the temp in json data") jdata["temp"] = temp if "npt" in ens: if pres is None: pres = jdata["pres"] elif "pres" in jdata: - print("P = %f overrides the pres in json data" % pres) + print(f"P = {pres:f} overrides the pres in json data") jdata["pres"] = pres if if_meam is None: if_meam = jdata.get("if_meam", False) diff --git a/dpti/relax.py b/dpti/relax.py index 162e11f..ec01c8b 100755 --- a/dpti/relax.py +++ b/dpti/relax.py @@ -14,19 +14,19 @@ def _gen_lammps_relax(conf_file, mass_map, model, pres, thermo_freq=100, dump_fr ret += "# --------------------- VARIABLES-------------------------\n" ret += "variable THERMO_FREQ equal %d\n" % thermo_freq ret += "variable DUMP_FREQ equal %d\n" % dump_freq - ret += "variable PRES equal %f\n" % pres + ret += f"variable PRES equal {pres:f}\n" ret += "# ---------------------- INITIALIZAITION ------------------\n" ret += "units metal\n" ret += "boundary p p p\n" ret += "atom_style atomic\n" ret += "# --------------------- ATOM DEFINITION ------------------\n" ret += "box tilt large\n" - ret += "read_data %s\n" % conf_file + 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 += "# --------------------- FORCE FIELDS ---------------------\n" - ret += "pair_style deepmd %s\n" % model + ret += f"pair_style deepmd {model}\n" ret += "pair_coeff * *\n" ret += "# --------------------- MD SETTINGS ----------------------\n" ret += "neighbor 1.0 bin\n" @@ -51,7 +51,7 @@ def make_task(iter_name, jdata, pres): if pres is None: pres = jdata["pres"] elif "pres" in jdata: - print("P = %f overrides the pres in json data" % pres) + print(f"P = {pres:f} overrides the pres in json data") jdata["pres"] = pres create_path(iter_name) diff --git a/dpti/ti.py b/dpti/ti.py index 5be74af..36e5ba4 100755 --- a/dpti/ti.py +++ b/dpti/ti.py @@ -66,17 +66,17 @@ def _gen_lammps_input( 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 += "variable TEMP equal %f\n" % temp - ret += "variable PRES equal %f\n" % pres - ret += "variable TAU_T equal %f\n" % tau_t - ret += "variable TAU_P equal %f\n" % tau_p + 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" + ret += f"variable TAU_P equal {tau_p:f}\n" ret += "# ---------------------- INITIALIZAITION ------------------\n" ret += "units metal\n" ret += "boundary p p p\n" ret += "atom_style atomic\n" ret += "# --------------------- ATOM DEFINITION ------------------\n" ret += "box tilt large\n" - ret += "read_data %s\n" % conf_file + 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 += "change_box all triclinic\n" @@ -90,11 +90,11 @@ def _gen_lammps_input( ret += "pair_style meam\n" ret += f'pair_coeff * * {meam_model["library"]} {meam_model["element"]} {meam_model["potential"]} {meam_model["element"]}\n' else: - ret += "pair_style deepmd %s\n" % model + ret += f"pair_style deepmd {model}\n" ret += "pair_coeff * *\n" ret += "# --------------------- MD SETTINGS ----------------------\n" ret += "neighbor 1.0 bin\n" - ret += "timestep %s\n" % timestep + ret += f"timestep {timestep}\n" ret += "thermo ${THERMO_FREQ}\n" ret += "compute allmsd all msd\n" if ens == "nvt": @@ -104,7 +104,7 @@ def _gen_lammps_input( ret += "thermo_style custom step ke pe etotal enthalpy temp press vol c_allmsd[*]\n" ret += "thermo_modify format 4*8 %20.6f\n" else: - raise RuntimeError("unknow ensemble %s\n" % ens) + raise RuntimeError(f"unknow ensemble {ens}\n") ret += "dump 1 all custom ${DUMP_FREQ} traj.dump id type x y z\n" if ens == "nvt": ret += "fix 1 all nvt temp ${TEMP} ${TEMP} ${TAU_T}\n" @@ -119,7 +119,7 @@ def _gen_lammps_input( elif ens == "nve": ret += "fix 1 all nve\n" else: - raise RuntimeError("unknow ensemble %s\n" % ens) + 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" % ( @@ -314,7 +314,7 @@ def make_tasks(iter_name, jdata, if_meam=None): raise RuntimeError("invalid ens or path setting") with open(os.path.join(task_abs_dir, "thermo.out"), "w") as fp: - fp.write("%f" % (thermo_out)) + fp.write(f"{thermo_out:f}") with open(os.path.join(task_abs_dir, "in.lammps"), "w") as fp: fp.write(lmp_str) @@ -346,7 +346,7 @@ def _compute_thermo(lmplog, natoms, stat_skip, stat_bsize): def _print_thermo_info(info, more_head=""): - ptr = "# thermodynamics (normalized by natoms) %s\n" % more_head + ptr = f"# thermodynamics (normalized by natoms) {more_head}\n" ptr += "# E (err) [eV]: {:20.8f} {:20.8f}\n".format(info["e"], info["e_err"]) ptr += "# H (err) [eV]: {:20.8f} {:20.8f}\n".format(info["h"], info["h_err"]) ptr += "# T (err) [K]: {:20.8f} {:20.8f}\n".format(info["t"], info["t_err"]) @@ -809,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( - "cannot find file %s, task should be computed befor refined" % from_ti + f"cannot find file {from_ti}, task should be computed befor refined" ) tmp_array = np.loadtxt(from_ti) all_t = tmp_array[:, 0]