Molecular dynamics
MLatom can run molecular dynamics simulation. Here we use the trained model of KREG for H2.
Note
You need to have a KREG model trained in the previous section before running MD.
Now prepare the input file for MD simulation: h2_md_kreg.inp.
# h2_md_kreg.inp
MD # molecular dynamics
initXYZ=h2_md_kreg_init.xyz # initial geometry; Unit: Angstrom
initVXYZ=h2_md_kreg_init.vxyz # initial velocity; Unit: Angstrom/fs
dt=0.3 # time step; Unit: fs
trun=30 # total time; Unit: fs
ensemble=NVE # NVE ensemble
MLprog=KREG_API # for KREG model implemented in KREG Python API
MLmodelIn=energies.npz # file that saves the model
#MLprog=MLatomF # for KREG model implemented in the Fortran part of MLatom
#MLmodelIn=energies.unf # file that saves the model
#MLmodelType=ANI # or use an ANI model
#MLmodelIn=energies_ani.pt # the ANI model file
And provide the initial XYZ coordinates (h2_md_kreg_init.xyz) and initial XYZ
velocities (h2_md_kreg_init.vxyz) of this model.
# h2_md_kreg_init.xyz
2
H 0.0 0.0 1.0
H 0.0 0.0 0.0
Run the MD simulation.
mlatom h2_md_kreg.inp
The result will be saved in traj.xyz. We can view it by:
cat traj.xyz
In Python, same as above, we should provide the initial XYZ coordinates .xyz and initial XYZ velocities .vxyz.
The result will be saved in traj.xyz.
import mlatom as ml
# Get initial condition
mol = ml.data.molecule.from_xyz_file('h2_md_kreg_init.xyz')
init_cond_db = ml.generate_initial_conditions(molecule = mol,
generation_method = 'user-defined',
file_with_initial_xyz_coordinates = 'h2_md_kreg_init.xyz',
file_with_initial_xyz_velocities = 'h2_md_kreg_init.vxyz')
init_mol = init_cond_db[0]
# Initialize model
model = ml.models.kreg(model_file='energies.npz', ml_program='KREG_API')
# model = ml.models.kreg(model_file='energies.unf', ml_program='MLatomF') # use KREG model from MLatomF
# model = ml.models.ani(model_file='energies_ani.pt') # or use an ANI model
# Run molecular dynamics
dyn = ml.md(model=model,
molecule_with_initial_conditions = init_mol,
ensemble='NVE',
time_step=0.3,
maximum_propagation_time = 30.0)
# Dump trajectory
traj = dyn.molecular_trajectory
traj.dump(filename='traj', format='plain_text')
traj.dump(filename='traj.h5', format='h5md')