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