Added blessed log files

This commit is contained in:
Aidan Thompson
2020-12-04 14:48:02 -07:00
parent 2654aca658
commit ed7775f083
3 changed files with 123 additions and 114 deletions

View File

@ -1,6 +1,7 @@
README for the PyTorch energy model example
These examples run the Ta06 example from the MLIAP package, but using the python coupling.
These two examples run the Ta06 example from the MLIAP package, but using the python coupling.
The differ only in how the coupling is constructed.
1: Running models using LAMMPS executable: in.mliap.pytorch.Ta06A
@ -13,14 +14,22 @@ creating or unpicking a PyTorch energy model.
From that point you can run the example lmp -in in.mliap.pytorch.Ta06A -echo both
2: Running models from python with LAMMPS in library mode: load_external.py
2: Running models from python with LAMMPS in library mode: mliap_pytorch_Ta06A.py
Before testing this, ensure that the first example (using LAMMPS executable) works.
Also, not all python installations support this mode of operation.
It requires that the Python interpreter be initialized.
To check this for your Python library,
run the Py_IsInitialized() method.
If the return value is True, you should be able to run the example,
as follows:
Not all python installations support this mode of operation.
Too test if your interpreter supports this, run:
`python test_pylibs.py`
and examine the output.
`python mliap_pytorch_Ta06A.py`
or
`mpirun -np 4 python mliap_pytorch_Ta06A.py`
The resultant log.lammps output should be identical to that generated
by in.mliap.snap.Ta06A and in.mliap.pytorch.Ta06A
If this succeeds, you should be able to run:
`python load_external.py`

View File

@ -1,106 +0,0 @@
# Demonstrate how to load a model from the python side.
# This is essentially the same as in.mliap.pytorch.Ta06A
# except that python is the driving program, and lammps
# is in library mode.
before_loading =\
"""
# Demonstrate MLIAP/PyTorch interface to linear SNAP potential
# Initialize simulation
variable nsteps index 100
variable nrep equal 4
variable a equal 3.316
units metal
# generate the box and atom positions using a BCC lattice
variable nx equal ${nrep}
variable ny equal ${nrep}
variable nz equal ${nrep}
boundary p p p
lattice bcc $a
region box block 0 ${nx} 0 ${ny} 0 ${nz}
create_box 1 box
create_atoms 1 box
mass 1 180.88
# choose potential
# DATE: 2014-09-05 UNITS: metal CONTRIBUTOR: Aidan Thompson athomps@sandia.gov CITATION: Thompson, Swiler, Trott, Foiles and Tucker, arxiv.org, 1409.3880 (2014)
# Definition of SNAP potential Ta_Cand06A
# Assumes 1 LAMMPS atom type
variable zblcutinner equal 4
variable zblcutouter equal 4.8
variable zblz equal 73
# Specify hybrid with SNAP, ZBL
pair_style hybrid/overlay &
zbl ${zblcutinner} ${zblcutouter} &
mliap model mliappy LATER &
descriptor sna Ta06A.mliap.descriptor
pair_coeff 1 1 zbl ${zblz} ${zblz}
pair_coeff * * mliap Ta
"""
after_loading =\
"""
# Setup output
compute eatom all pe/atom
compute energy all reduce sum c_eatom
compute satom all stress/atom NULL
compute str all reduce sum c_satom[1] c_satom[2] c_satom[3]
variable press equal (c_str[1]+c_str[2]+c_str[3])/(3*vol)
thermo_style custom step temp epair c_energy etotal press v_press
thermo 10
thermo_modify norm yes
# Set up NVE run
timestep 0.5e-3
neighbor 1.0 bin
neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
"""
import lammps
lmp = lammps.lammps(cmdargs=['-echo','both'])
# this commmand must be run before the MLIAP object is declared in lammps.
lmp.mliappy.activate()
# setup the simulation and declare an empty model
# by specifying model filename as "LATER"
lmp.commands_string(before_loading)
# define the PyTorch model by loading a pkl file.
# this could also be done in other ways.
import pickle
with open('Ta06A.mliap.pytorch.model.pkl','rb') as pfile:
model = pickle.load(pfile)
# connect the PyTorch model to the mliap pair style
lmp.mliappy.load_model(model)
# run the simulation with the mliap pair style
lmp.commands_string(after_loading)

View File

@ -0,0 +1,106 @@
# Demonstrate how to load a model from the python side.
# This is essentially the same as in.mliap.pytorch.Ta06A
# except that python is the driving program, and lammps
# is in library mode.
before_loading =\
"""# Demonstrate MLIAP/PyTorch interface to linear SNAP potential
# Initialize simulation
variable nsteps index 100
variable nrep equal 4
variable a equal 3.316
units metal
# generate the box and atom positions using a BCC lattice
variable nx equal ${nrep}
variable ny equal ${nrep}
variable nz equal ${nrep}
boundary p p p
lattice bcc $a
region box block 0 ${nx} 0 ${ny} 0 ${nz}
create_box 1 box
create_atoms 1 box
mass 1 180.88
# choose potential
# DATE: 2014-09-05 UNITS: metal CONTRIBUTOR: Aidan Thompson athomps@sandia.gov CITATION: Thompson, Swiler, Trott, Foiles and Tucker, arxiv.org, 1409.3880 (2014)
# Definition of SNAP potential Ta_Cand06A
# Assumes 1 LAMMPS atom type
variable zblcutinner equal 4
variable zblcutouter equal 4.8
variable zblz equal 73
# Specify hybrid with SNAP, ZBL
pair_style hybrid/overlay &
zbl ${zblcutinner} ${zblcutouter} &
mliap model mliappy LATER &
descriptor sna Ta06A.mliap.descriptor
pair_coeff 1 1 zbl ${zblz} ${zblz}
pair_coeff * * mliap Ta
"""
after_loading =\
"""
# Setup output
compute eatom all pe/atom
compute energy all reduce sum c_eatom
compute satom all stress/atom NULL
compute str all reduce sum c_satom[1] c_satom[2] c_satom[3]
variable press equal (c_str[1]+c_str[2]+c_str[3])/(3*vol)
thermo_style custom step temp epair c_energy etotal press v_press
thermo 10
thermo_modify norm yes
# Set up NVE run
timestep 0.5e-3
neighbor 1.0 bin
neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
"""
import lammps
lmp = lammps.lammps(cmdargs=['-echo','both'])
# this commmand must be run before the MLIAP object is declared in lammps.
lmp.mliappy.activate()
# setup the simulation and declare an empty model
# by specifying model filename as "LATER"
lmp.commands_string(before_loading)
# define the PyTorch model by loading a pkl file.
# this could also be done in other ways.
import pickle
with open('Ta06A.mliap.pytorch.model.pkl','rb') as pfile:
model = pickle.load(pfile)
# connect the PyTorch model to the mliap pair style
lmp.mliappy.load_model(model)
# run the simulation with the mliap pair style
lmp.commands_string(after_loading)