forked from lijiext/lammps
44 lines
1.7 KiB
Plaintext
44 lines
1.7 KiB
Plaintext
This directory has a code that shows how LAMMPS can be linked to a
|
|
driver application as a library. The purpose is to illustrate how
|
|
another code could perform computations while using LAMMPS to perform
|
|
MD, or how an umbrella code or script could call both LAMMPS and some
|
|
other code to perform a coupled calculation.
|
|
|
|
Umbrella.cpp is the simple driving code that will call LAMMPS.
|
|
|
|
LAMMPS must first be built as a library. See the "Making LAMMPS"
|
|
section of Section_start.html in the documentation for info on how to
|
|
do this. Basically, you type something like
|
|
|
|
make makelib
|
|
make -f Makefile.lib g++
|
|
|
|
in the LAMMPS src directory to create liblmp_g++.a
|
|
|
|
You can then build the umbrella code with a compile line something
|
|
like this, which includes paths to the LAMMPS library interface, MPI,
|
|
and FFTW.
|
|
|
|
g++ -I/home/sjplimp/tools/mpich/include -I/home/sjplimp/lammps/src
|
|
-L/home/sjplimp/lammps/src -L/home/sjplimp/tools/mpich/lib
|
|
-L/home/sjplimp/tools/fftw/lib umbrella.cpp
|
|
-llmp_g++ -lfftw -lmpich -o umbrella
|
|
|
|
You then run umbrella on a parallel machine on some number
|
|
of processors Q with 2 arguments:
|
|
|
|
mpirun -np Q umbrella P in.lj
|
|
|
|
P is the number of procs you want LAMMPS to run on (must be <= Q).
|
|
In.lj is a LAMMPS input script.
|
|
|
|
Umbrella will launch LAMMPS on P procs, read the input
|
|
script a line at a time, and pass each command line to LAMMPS. The
|
|
final line of the script is a "run" command, so LAMMPS will run
|
|
the problem.
|
|
|
|
Umbrella then requests all the atom coordinates from LAMMPS, moves one
|
|
of the atoms a small amount "epsilon", passes the coordinates back to
|
|
LAMMPS, and runs LAMMPS again. If you look at the output, you should
|
|
see a small energy change between runs, due to the moved atom.
|