From 7b2bedafb553d5073f131139b3167dc3959b7113 Mon Sep 17 00:00:00 2001 From: wujing81 Date: Wed, 8 Mar 2023 10:49:43 +0800 Subject: [PATCH 1/4] Lammps template for MD+MC --- examples/run/dp-lammps-MC+MD/param.json | 126 ++++++++++++++++++ .../run/dp-lammps-MC+MD/template/lammps.in | 55 ++++++++ 2 files changed, 181 insertions(+) create mode 100644 examples/run/dp-lammps-MC+MD/param.json create mode 100644 examples/run/dp-lammps-MC+MD/template/lammps.in diff --git a/examples/run/dp-lammps-MC+MD/param.json b/examples/run/dp-lammps-MC+MD/param.json new file mode 100644 index 000000000..32f3df184 --- /dev/null +++ b/examples/run/dp-lammps-MC+MD/param.json @@ -0,0 +1,126 @@ +{ + "type_map": ["Sr", "Pb", "Ti", "O"], + "mass_map": [87.62, 207.2, 47.867, 15.999], + "init_data_prefix": "./data", + "init_data_sys": [ + "deepmd" + ], + + "sys_configs": [ + ["someplace/POSCAR"] + ], + + "_comment": " 00.train ", + "numb_models": 4, + "default_training_param": { + "model":{ + "type_map":[ + "Sr", + "Pb", + "Ti", + "O" + ], + "descriptor": { + "type": "se_e2_a", + "sel": "auto", + "rcut_smth": 0.5, + "rcut": 6.00, + "neuron": [25, 50, 100], + "resnet_dt": false, + "axis_neuron": 16, + "seed": 1 + }, + "fitting_net": { + "neuron": [ + 240, + 240, + 240 + ], + "resnet_dt": true, + "seed": 1 + } + }, + "learning_rate": { + "type": "exp", + "start_lr": 0.001, + "stop_lr":3.51e-8, + "decay_steps": 2000 + }, + "loss": { + "type":"ener", + "start_pref_e": 0.02, + "limit_pref_e": 1, + "start_pref_f": 1000, + "limit_pref_f": 1, + "start_pref_v": 0.0, + "limit_pref_v": 0.0 + }, + "training": { + "set_prefix": "set", + "stop_batch": 400000, + "batch_size": "auto", + "disp_file": "lcurve.out", + "disp_freq": 1000, + "numb_test": 4, + "save_freq": 1000, + "save_ckpt": "model.ckpt", + "disp_training": true, + "time_training": true, + "profiling": false, + "profiling_file": "timeline.json", + "_comment": "that's all" + } + }, + + "model_devi_dt": 0.002, + "model_devi_skip": 0, + "model_devi_f_trust_lo": 0.1, + "model_devi_f_trust_hi": 0.20, + "model_devi_clean_traj": true, + "model_devi_jobs": [ + {"_idx": 0, "ensemble": "npt","sys_idx": [0], "trj_freq": 10, + "rev_mat":{"lmp":{ + "${MC_NSTEPS}":[50], + "${MD_NSTEPS}":[1000], + "${PRES}":[0,100], + "${TEMP_MD}":[100,300], + "${TEMP_MC}":[100,300], + "${RANDOM_SEED}":[15196], + "${ELEMENT_TYPE_1}":[1], + "${ELEMENT_TYPE_2}":[2], + "${N_LOOP}":[10] + } + }, + "template":{"lmp":"template/lammps.in"} + + }, + {"_idx": 1, "ensemble": "npt","press": [1,100],"sys_idx": [0], "trj_freq": 10, + "rev_mat":{"lmp":{ + "${MC_NSTEPS}":[50], + "${MD_NSTEPS}":[1000], + "${PRES}":[0,100], + "${TEMP_MD}":[100], + "${TEMP_MC}":[100], + "${RANDOM_SEED}":[15196], + "${ELEMENT_TYPE_1}":[1], + "${ELEMENT_TYPE_2}":[2], + "${N_LOOP}":[10] + } + }, + "template":{"lmp":"template/lammps.in"} + + } + ], + "fp_style": "vasp", + "shuffle_poscar": false, + "fp_task_max": 100, + "fp_task_min": 10, + "fp_pp_path": "workplace", + "fp_pp_files": [ + "POTCAR_Sr", + "POTCAR_Pb", + "POTCAR_Ti", + "POTCAR_O" + ], + "fp_incar": "workplace/INCAR" +} diff --git a/examples/run/dp-lammps-MC+MD/template/lammps.in b/examples/run/dp-lammps-MC+MD/template/lammps.in new file mode 100644 index 000000000..c41d26a6f --- /dev/null +++ b/examples/run/dp-lammps-MC+MD/template/lammps.in @@ -0,0 +1,55 @@ +variable MD_NSTEPS equal MD_NSTEPS +variable MC_NSTEPS equal MC_NSTEPS +variable THERMO_FREQ equal 10 +variable TEMP_MD equal TEMP_MD +variable TEMP_MC equal TEMP_MC +variable PRES equal press +variable TAU_T equal 0.100000 +variable TAU_P equal 0.500000 +variable RANDOM_SEED equal RANDOM_SEED +variable ELEMENT_TYPE_1 equal ELEMENT_TYPE_1 +variable ELEMENT_TYPE_2 equal ELEMENT_TYPE_2 +variable N_LOOP equal N_LOOP + +#Initialization +units metal +boundary p p p +atom_style atomic +neighbor 1.0 bin + +#read data +read_data conf.lmp +mass 1 87.620000 +mass 2 207.200000 +mass 3 47.867000 +mass 4 15.999000 + +# read in the potentia +pair_style deepmd ../graph.001.pb ../graph.000.pb ../graph.003.pb ../graph.002.pb out_freq ${THERMO_FREQ} out_file model_devi.out +pair_coeff + +# output observables +thermo_style custom step temp pe ke etotal press vol lx ly lz xy xz yz +thermo ${THERMO_FREQ} +dump dpgen_dump + +timestep 0.002000 + +variable loop1 loop ${N_LOOP} +label runloop1 + +# Monte Carlo followed by short md +fix mc1 all atom/swap 1 1 500 ${TEMP_MC} ke no semi-grand no types ${ELEMENT_TYPE_1} ${ELEMENT_TYPE_2} +run ${MC_NSTEPS} +unfix mc1 + +velocity all create ${TEMP_MD} ${RANDOM_SEED}" +velocity all zero linear +fix md1 all npt temp ${TEMP_MD} ${TEMP_MD} ${TAU_T} iso ${PRES} ${PRES} ${TAU_P} +run ${MD_NSTEPS} +unfix md1 + +variable idx equal "(v_loop1-1)" +write_data conf.${idx}.lmp +next loop1 +jump SELF runloop1 From 2ae7756def83b39d3487702dbac0df0a36a69193 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 9 Mar 2023 01:56:32 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- examples/run/dp-lammps-MC+MD/param.json | 16 ++++++++-------- examples/run/dp-lammps-MC+MD/template/lammps.in | 10 +++++----- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/examples/run/dp-lammps-MC+MD/param.json b/examples/run/dp-lammps-MC+MD/param.json index 32f3df184..392a926d0 100644 --- a/examples/run/dp-lammps-MC+MD/param.json +++ b/examples/run/dp-lammps-MC+MD/param.json @@ -16,9 +16,9 @@ "model":{ "type_map":[ "Sr", - "Pb", + "Pb", "Ti", - "O" + "O" ], "descriptor": { "type": "se_e2_a", @@ -78,7 +78,7 @@ "model_devi_f_trust_hi": 0.20, "model_devi_clean_traj": true, "model_devi_jobs": [ - {"_idx": 0, "ensemble": "npt","sys_idx": [0], "trj_freq": 10, + {"_idx": 0, "ensemble": "npt","sys_idx": [0], "trj_freq": 10, "rev_mat":{"lmp":{ "${MC_NSTEPS}":[50], "${MD_NSTEPS}":[1000], @@ -89,12 +89,12 @@ "${ELEMENT_TYPE_1}":[1], "${ELEMENT_TYPE_2}":[2], "${N_LOOP}":[10] - } + } }, "template":{"lmp":"template/lammps.in"} - + }, - {"_idx": 1, "ensemble": "npt","press": [1,100],"sys_idx": [0], "trj_freq": 10, + {"_idx": 1, "ensemble": "npt","press": [1,100],"sys_idx": [0], "trj_freq": 10, "rev_mat":{"lmp":{ "${MC_NSTEPS}":[50], "${MD_NSTEPS}":[1000], @@ -105,10 +105,10 @@ "${ELEMENT_TYPE_1}":[1], "${ELEMENT_TYPE_2}":[2], "${N_LOOP}":[10] - } + } }, "template":{"lmp":"template/lammps.in"} - + } ], "fp_style": "vasp", diff --git a/examples/run/dp-lammps-MC+MD/template/lammps.in b/examples/run/dp-lammps-MC+MD/template/lammps.in index c41d26a6f..dd308226e 100644 --- a/examples/run/dp-lammps-MC+MD/template/lammps.in +++ b/examples/run/dp-lammps-MC+MD/template/lammps.in @@ -6,10 +6,10 @@ variable TEMP_MC equal TEMP_MC variable PRES equal press variable TAU_T equal 0.100000 variable TAU_P equal 0.500000 -variable RANDOM_SEED equal RANDOM_SEED +variable RANDOM_SEED equal RANDOM_SEED variable ELEMENT_TYPE_1 equal ELEMENT_TYPE_1 -variable ELEMENT_TYPE_2 equal ELEMENT_TYPE_2 -variable N_LOOP equal N_LOOP +variable ELEMENT_TYPE_2 equal ELEMENT_TYPE_2 +variable N_LOOP equal N_LOOP #Initialization units metal @@ -25,8 +25,8 @@ mass 3 47.867000 mass 4 15.999000 # read in the potentia -pair_style deepmd ../graph.001.pb ../graph.000.pb ../graph.003.pb ../graph.002.pb out_freq ${THERMO_FREQ} out_file model_devi.out -pair_coeff +pair_style deepmd ../graph.001.pb ../graph.000.pb ../graph.003.pb ../graph.002.pb out_freq ${THERMO_FREQ} out_file model_devi.out +pair_coeff # output observables thermo_style custom step temp pe ke etotal press vol lx ly lz xy xz yz From a2129ade5ed3934e4b2bba7627b8bf320dfb84a2 Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Sun, 30 Aug 2026 00:21:51 +0800 Subject: [PATCH 3/4] fix: make MC and MD LAMMPS template runnable Coding-Agent: Codex Codex-Version: codex-cli 0.151.0 Model: gpt-5.6-sol Reasoning-Effort: xhigh --- .../run/dp-lammps-MC+MD/template/lammps.in | 22 ++++++------- tests/test_lammps_mc_md_example.py | 33 +++++++++++++++++++ 2 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 tests/test_lammps_mc_md_example.py diff --git a/examples/run/dp-lammps-MC+MD/template/lammps.in b/examples/run/dp-lammps-MC+MD/template/lammps.in index dd308226e..f023b51db 100644 --- a/examples/run/dp-lammps-MC+MD/template/lammps.in +++ b/examples/run/dp-lammps-MC+MD/template/lammps.in @@ -1,15 +1,15 @@ -variable MD_NSTEPS equal MD_NSTEPS -variable MC_NSTEPS equal MC_NSTEPS +variable MD_NSTEPS equal ${MD_NSTEPS} +variable MC_NSTEPS equal ${MC_NSTEPS} variable THERMO_FREQ equal 10 -variable TEMP_MD equal TEMP_MD -variable TEMP_MC equal TEMP_MC -variable PRES equal press +variable TEMP_MD equal ${TEMP_MD} +variable TEMP_MC equal ${TEMP_MC} +variable PRES equal ${PRES} variable TAU_T equal 0.100000 variable TAU_P equal 0.500000 -variable RANDOM_SEED equal RANDOM_SEED -variable ELEMENT_TYPE_1 equal ELEMENT_TYPE_1 -variable ELEMENT_TYPE_2 equal ELEMENT_TYPE_2 -variable N_LOOP equal N_LOOP +variable RANDOM_SEED equal ${RANDOM_SEED} +variable ELEMENT_TYPE_1 equal ${ELEMENT_TYPE_1} +variable ELEMENT_TYPE_2 equal ${ELEMENT_TYPE_2} +variable N_LOOP equal ${N_LOOP} #Initialization units metal @@ -31,7 +31,7 @@ pair_coeff # output observables thermo_style custom step temp pe ke etotal press vol lx ly lz xy xz yz thermo ${THERMO_FREQ} -dump dpgen_dump +dump dpgen_dump all custom ${THERMO_FREQ} traj/*.lammpstrj id type x y z timestep 0.002000 @@ -43,7 +43,7 @@ fix mc1 all atom/swap 1 1 500 ${TEMP_MC} ke no semi-grand no types $ run ${MC_NSTEPS} unfix mc1 -velocity all create ${TEMP_MD} ${RANDOM_SEED}" +velocity all create ${TEMP_MD} ${RANDOM_SEED} velocity all zero linear fix md1 all npt temp ${TEMP_MD} ${TEMP_MD} ${TAU_T} iso ${PRES} ${PRES} ${TAU_P} run ${MD_NSTEPS} diff --git a/tests/test_lammps_mc_md_example.py b/tests/test_lammps_mc_md_example.py new file mode 100644 index 000000000..4c8744626 --- /dev/null +++ b/tests/test_lammps_mc_md_example.py @@ -0,0 +1,33 @@ +import json +import unittest +from pathlib import Path + + +class TestLammpsMcMdExample(unittest.TestCase): + def test_template_placeholders_and_dump_command(self): + """The example must become runnable after applying its revision matrix.""" + example = Path(__file__).parents[1] / "examples" / "run" / "dp-lammps-MC+MD" + template = (example / "template" / "lammps.in").read_text() + parameters = json.loads((example / "param.json").read_text()) + replacements = parameters["model_devi_jobs"][0]["rev_mat"]["lmp"] + + rendered = template + for placeholder, values in replacements.items(): + self.assertIn(placeholder, template) + rendered = rendered.replace(placeholder, str(values[0])) + + variable_lines = [ + line for line in rendered.splitlines() if line.startswith("variable") + ] + self.assertFalse(any("${" in line for line in variable_lines)) + self.assertNotIn('RANDOM_SEED}"', rendered) + + dump_line = next( + line for line in template.splitlines() if line.startswith("dump") + ) + self.assertGreaterEqual(len(dump_line.split()), 9) + self.assertIn("traj/*.lammpstrj", dump_line) + + +if __name__ == "__main__": + unittest.main() From f759dc41a60d05ee18d0b7b90a503739db072f1f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 29 Aug 2026 16:26:33 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- examples/run/dp-lammps-MC+MD/param.json | 267 +++++++++++++++--------- 1 file changed, 170 insertions(+), 97 deletions(-) diff --git a/examples/run/dp-lammps-MC+MD/param.json b/examples/run/dp-lammps-MC+MD/param.json index 392a926d0..abdf01396 100644 --- a/examples/run/dp-lammps-MC+MD/param.json +++ b/examples/run/dp-lammps-MC+MD/param.json @@ -1,61 +1,75 @@ { - "type_map": ["Sr", "Pb", "Ti", "O"], - "mass_map": [87.62, 207.2, 47.867, 15.999], - "init_data_prefix": "./data", - "init_data_sys": [ - "deepmd" - ], - - "sys_configs": [ - ["someplace/POSCAR"] - ], - - "_comment": " 00.train ", - "numb_models": 4, - "default_training_param": { - "model":{ - "type_map":[ - "Sr", - "Pb", - "Ti", - "O" - ], - "descriptor": { + "type_map": [ + "Sr", + "Pb", + "Ti", + "O" + ], + "mass_map": [ + 87.62, + 207.2, + 47.867, + 15.999 + ], + "init_data_prefix": "./data", + "init_data_sys": [ + "deepmd" + ], + "sys_configs": [ + [ + "someplace/POSCAR" + ] + ], + "_comment": " 00.train ", + "numb_models": 4, + "default_training_param": { + "model": { + "type_map": [ + "Sr", + "Pb", + "Ti", + "O" + ], + "descriptor": { "type": "se_e2_a", "sel": "auto", - "rcut_smth": 0.5, - "rcut": 6.00, - "neuron": [25, 50, 100], - "resnet_dt": false, - "axis_neuron": 16, - "seed": 1 + "rcut_smth": 0.5, + "rcut": 6.0, + "neuron": [ + 25, + 50, + 100 + ], + "resnet_dt": false, + "axis_neuron": 16, + "seed": 1 + }, + "fitting_net": { + "neuron": [ + 240, + 240, + 240 + ], + "resnet_dt": true, + "seed": 1 + } }, - "fitting_net": { - "neuron": [ - 240, - 240, - 240 - ], - "resnet_dt": true, - "seed": 1 - } - }, - "learning_rate": { + "learning_rate": { "type": "exp", "start_lr": 0.001, - "stop_lr":3.51e-8, + "stop_lr": 3.51e-08, "decay_steps": 2000 - }, - "loss": { - "type":"ener", + }, + "loss": { + "type": "ener", "start_pref_e": 0.02, "limit_pref_e": 1, "start_pref_f": 1000, "limit_pref_f": 1, "start_pref_v": 0.0, "limit_pref_v": 0.0 - }, - "training": { + }, + "training": { "set_prefix": "set", "stop_batch": 400000, "batch_size": "auto", @@ -71,56 +85,115 @@ "_comment": "that's all" } }, - - "model_devi_dt": 0.002, - "model_devi_skip": 0, - "model_devi_f_trust_lo": 0.1, - "model_devi_f_trust_hi": 0.20, - "model_devi_clean_traj": true, - "model_devi_jobs": [ - {"_idx": 0, "ensemble": "npt","sys_idx": [0], "trj_freq": 10, - "rev_mat":{"lmp":{ - "${MC_NSTEPS}":[50], - "${MD_NSTEPS}":[1000], - "${PRES}":[0,100], - "${TEMP_MD}":[100,300], - "${TEMP_MC}":[100,300], - "${RANDOM_SEED}":[15196], - "${ELEMENT_TYPE_1}":[1], - "${ELEMENT_TYPE_2}":[2], - "${N_LOOP}":[10] - } - }, - "template":{"lmp":"template/lammps.in"} - - }, - {"_idx": 1, "ensemble": "npt","press": [1,100],"sys_idx": [0], "trj_freq": 10, - "rev_mat":{"lmp":{ - "${MC_NSTEPS}":[50], - "${MD_NSTEPS}":[1000], - "${PRES}":[0,100], - "${TEMP_MD}":[100], - "${TEMP_MC}":[100], - "${RANDOM_SEED}":[15196], - "${ELEMENT_TYPE_1}":[1], - "${ELEMENT_TYPE_2}":[2], - "${N_LOOP}":[10] - } - }, - "template":{"lmp":"template/lammps.in"} - - } - ], - "fp_style": "vasp", - "shuffle_poscar": false, - "fp_task_max": 100, - "fp_task_min": 10, - "fp_pp_path": "workplace", - "fp_pp_files": [ - "POTCAR_Sr", - "POTCAR_Pb", - "POTCAR_Ti", - "POTCAR_O" - ], - "fp_incar": "workplace/INCAR" + "model_devi_dt": 0.002, + "model_devi_skip": 0, + "model_devi_f_trust_lo": 0.1, + "model_devi_f_trust_hi": 0.2, + "model_devi_clean_traj": true, + "model_devi_jobs": [ + { + "_idx": 0, + "ensemble": "npt", + "sys_idx": [ + 0 + ], + "trj_freq": 10, + "rev_mat": { + "lmp": { + "${MC_NSTEPS}": [ + 50 + ], + "${MD_NSTEPS}": [ + 1000 + ], + "${PRES}": [ + 0, + 100 + ], + "${TEMP_MD}": [ + 100, + 300 + ], + "${TEMP_MC}": [ + 100, + 300 + ], + "${RANDOM_SEED}": [ + 15196 + ], + "${ELEMENT_TYPE_1}": [ + 1 + ], + "${ELEMENT_TYPE_2}": [ + 2 + ], + "${N_LOOP}": [ + 10 + ] + } + }, + "template": { + "lmp": "template/lammps.in" + } + }, + { + "_idx": 1, + "ensemble": "npt", + "press": [ + 1, + 100 + ], + "sys_idx": [ + 0 + ], + "trj_freq": 10, + "rev_mat": { + "lmp": { + "${MC_NSTEPS}": [ + 50 + ], + "${MD_NSTEPS}": [ + 1000 + ], + "${PRES}": [ + 0, + 100 + ], + "${TEMP_MD}": [ + 100 + ], + "${TEMP_MC}": [ + 100 + ], + "${RANDOM_SEED}": [ + 15196 + ], + "${ELEMENT_TYPE_1}": [ + 1 + ], + "${ELEMENT_TYPE_2}": [ + 2 + ], + "${N_LOOP}": [ + 10 + ] + } + }, + "template": { + "lmp": "template/lammps.in" + } + } + ], + "fp_style": "vasp", + "shuffle_poscar": false, + "fp_task_max": 100, + "fp_task_min": 10, + "fp_pp_path": "workplace", + "fp_pp_files": [ + "POTCAR_Sr", + "POTCAR_Pb", + "POTCAR_Ti", + "POTCAR_O" + ], + "fp_incar": "workplace/INCAR" }