127 lines
4.5 KiB
Plaintext
127 lines
4.5 KiB
Plaintext
These are examples that work the MDI package in LAMMPS which uses the
|
|
MolSSI MDI library for coupling codes together and communicating
|
|
between them with MDI messages.
|
|
|
|
To use the serial_drive.py example you will need Python 3 with Numpy
|
|
and mpi4py available in your Python. Make sure LAMMPS and Python are
|
|
using same the same version of MPI.
|
|
|
|
In MDI lingo, one code is the driver and another code is the engine.
|
|
The 2 codes can be written in any language; C++ (LAMMPS) and Python
|
|
are illustrated here. The 2 codes can be run on different numbers of
|
|
processors.
|
|
|
|
The 2 codes can communicate either via TCP (sockets) or via MPI. For
|
|
the TCP case, the driver and engine need to be launched separately,
|
|
e.g. in 2 windows on your desktop machine. For the MPI case, a single
|
|
mpirun command launches both codes.
|
|
|
|
The example run commands below have variants for these options.
|
|
|
|
-------------------------------------------------
|
|
-------------------------------------------------
|
|
|
|
* Example #1 = AIMD with LAMMPS as both a driver and engine
|
|
As an engine, LAMMPS is acting as a surrogate for a quantum code.
|
|
|
|
Note that the 2 input scripts in.aimd.alone and in.aimd.driver
|
|
have an option for running in NVE vs NPT mode. Comment in/out
|
|
the appropriate line to change modes. Nothing needs to be
|
|
changed in the 3rd input script in.aimd.engine.
|
|
|
|
---
|
|
|
|
Run the entire calculation with a single instance of LAMMPS by itself
|
|
results should be identical to running in driver/engine mode
|
|
|
|
% lmp_mpi < in.aimd.alone
|
|
|
|
---
|
|
|
|
Run with TCP: 1 proc each
|
|
|
|
% lmp_mpi -mdi "-name driver -role DRIVER -method TCP -port 8021" -log log.aimd.driver -in in.aimd.driver
|
|
|
|
% lmp_mpi -mdi "-name LAMMPS -role ENGINE -method TCP -port 8021 -hostname localhost" -log log.aimd.engine -in in.aimd.engine
|
|
|
|
---
|
|
|
|
Run with TCP: 3 procs + 4 procs
|
|
|
|
% mpirun -np 3 lmp_mpi -mdi "-name driver -role DRIVER -method TCP -port 8021" -log log.aimd.driver -in in.aimd.driver
|
|
|
|
% mpirun -np 4 lmp_mpi -mdi "-name LAMMPS -role ENGINE -method TCP -port 8021 -hostname localhost" -log log.aimd.engine -in in.aimd.engine
|
|
|
|
---
|
|
|
|
Run with MPI: 1 proc each
|
|
|
|
% mpirun -np 1 lmp_mpi -mdi "-name driver -role DRIVER -method MPI" -log log.aimd.driver -in in.aimd.driver : -np 1 lmp_mpi -mdi "-name LAMMPS -role ENGINE -method MPI" -log log.aimd.engine -in in.aimd.engine
|
|
|
|
---
|
|
|
|
Run with MPI: 3 procs + 4 procs
|
|
|
|
% mpirun -np 3 lmp_mpi -mdi "-name driver -role DRIVER -method MPI" -log log.aimd.driver -in in.aimd.driver : -np 4 lmp_mpi -mdi "-name LAMMPS -role ENGINE -method MPI" -log log.aimd.engine -in in.aimd.engine
|
|
|
|
-------------------------------------------------
|
|
-------------------------------------------------
|
|
|
|
* Example #2 = Use a Python driver code to run a series of independent
|
|
LAMMPS calculations
|
|
|
|
Note that the series_driver.py code allows for optional arguments in
|
|
addition to -mdi (required). The example run commands below just
|
|
using the default values. The options are explained the top of the file;
|
|
the info is copied here:
|
|
|
|
# -n 10
|
|
# number of calculations to perform, default = 1
|
|
# -mode eval/run/min
|
|
# style of calculations: single snapshot evals, dynamics, minimization
|
|
# default = eval
|
|
# -size Nx Ny Nz
|
|
# cubic lattice, default = 2 2 2
|
|
# -rho 0.75 0.1
|
|
# reduced density and random variation thereof, default = 0.75 0.1
|
|
# -delta 0.1
|
|
# randomly perturb atoms initially by this distance, default 0.0
|
|
# -nsteps 100
|
|
# number of timesteps in dynamics runs, default = 100
|
|
# -temp 1.0
|
|
# initial temperature in dynamics runs, default = 1.0
|
|
# -tol 0.001
|
|
# tolerance for minimizations, default = 0.001
|
|
# -seed 12345
|
|
# random number seed > 0, default = 12345
|
|
|
|
---
|
|
|
|
Run with TCP: 1 proc each
|
|
|
|
% python3 series_driver.py -mdi "-role DRIVER -name aimd -method TCP -port 8021"
|
|
|
|
% lmp_mpi -mdi "-role ENGINE -name LAMMPS -method TCP -port 8021 -hostname localhost" -log log.series -in in.series
|
|
|
|
---
|
|
|
|
Run with TCP: 1 proc + 4 procs
|
|
|
|
% python3 series_driver.py -mdi "-role DRIVER -name aimd -method TCP -port 8021"
|
|
|
|
% mpirun -np 4 lmp_mpi -mdi "-role ENGINE -name LAMMPS -method TCP -port 8021 -hostname localhost" -log log.series -in in.series
|
|
|
|
---
|
|
|
|
Run with MPI: 1 proc each
|
|
|
|
% mpirun -np 1 python3 series_driver.py -mdi "-role DRIVER -name aimd -method MPI" : -np 1 lmp_mpi -mdi "-role ENGINE -name LAMMPS -method MPI" -log log.series -in in.series
|
|
|
|
---
|
|
|
|
Run with MPI: 2 procs + 3 procs
|
|
|
|
% mpirun -np 2 python3 series_driver.py -mdi "-role DRIVER -name aimd -method MPI" : -np 3 lmp_mpi -mdi "-role ENGINE -name LAMMPS -method MPI" -log log.series -in in.series
|
|
|
|
|