150 lines
5.3 KiB
Plaintext
150 lines
5.3 KiB
Plaintext
Sample LAMMPS MD wrapper on VASP quantum DFT via client/server
|
|
coupling
|
|
|
|
See the MESSAGE package (doc/Section_messages.html#MESSAGE) and
|
|
Section_howto.html#howto10 for more details on how client/server
|
|
coupling works in LAMMPS.
|
|
|
|
In this dir, the vasp_wrap.py is a wrapper on the VASP quantum DFT
|
|
code so it can work as a "server" code which LAMMPS drives as a
|
|
"client" code to perform ab initio MD. LAMMPS performs the MD
|
|
timestepping, sends VASP a current set of coordinates each timestep,
|
|
VASP computes forces and energy and virial and returns that info to
|
|
LAMMPS.
|
|
|
|
Messages are exchanged between MC and LAMMPS via a client/server
|
|
library (CSlib), which is included in the LAMMPS distribution in
|
|
lib/message. As explained below you can choose to exchange data
|
|
between the two programs either via files or sockets (ZMQ). If the
|
|
vasp_wrap.py program became parallel, or the CSlib library calls were
|
|
integrated into VASP directly, then data could also be exchanged via
|
|
MPI.
|
|
|
|
----------------
|
|
|
|
Build LAMMPS with its MESSAGE package installed:
|
|
|
|
See the Build extras doc page and its MESSAGE package
|
|
section for details.
|
|
|
|
CMake:
|
|
|
|
-D PKG_MESSAGE=yes # include the MESSAGE package
|
|
-D MESSAGE_ZMQ=value # build with ZeroMQ support, value = no (default) or yes
|
|
|
|
Traditional make:
|
|
|
|
cd lammps/lib/message
|
|
python Install.py -m -z # build CSlib with MPI and ZMQ support
|
|
cd lammps/src
|
|
make yes-message
|
|
make mpi
|
|
|
|
You can leave off the -z if you do not have ZMQ on your system.
|
|
|
|
----------------
|
|
|
|
Build the CSlib in a form usable by the vasp_wrapper.py script:
|
|
|
|
% cd lammps/lib/message/cslib/src
|
|
% make shlib # build serial and parallel shared lib with ZMQ support
|
|
% make shlib zmq=no # build serial and parallel shared lib w/out ZMQ support
|
|
|
|
This will make a shared library versions of the CSlib, which Python
|
|
requires. Python must be able to find both the cslib.py script and
|
|
the libcsnompi.so library in your lammps/lib/message/cslib/src
|
|
directory. If it is not able to do this, you will get an error when
|
|
you run vasp_wrapper.py.
|
|
|
|
You can do this by augmenting two environment variables, either
|
|
from the command line, or in your shell start-up script.
|
|
Here is the sample syntax for the csh or tcsh shells:
|
|
|
|
setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/lib/message/cslib/src
|
|
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/lib/message/cslib/src
|
|
|
|
----------------
|
|
|
|
Prepare to use VASP and the vasp_wrapper.py script
|
|
|
|
You can run the vasp_wrap.py script as-is to test that the coupling
|
|
between it and LAMMPS is functional. This will use the included
|
|
vasprun.xml file output by a previous VASP run.
|
|
|
|
But note that the as-is version of vasp_wrap.py will not attempt to
|
|
run VASP.
|
|
|
|
To do this, you must edit the 1st vaspcmd line at the top of
|
|
vasp_wrapper.py to be the launch command needed to run VASP on your
|
|
system. It can be a command to run VASP in serial or in parallel,
|
|
e.g. an mpirun command. Then comment out the 2nd vaspcmd line
|
|
immediately following it.
|
|
|
|
Insure you have the necessary VASP input files in this
|
|
directory, suitable for the VASP calculation you want to perform:
|
|
|
|
INCAR
|
|
KPOINTS
|
|
POSCAR_template
|
|
POTCAR
|
|
|
|
Examples of all but the POTCAR file are provided. As explained below,
|
|
POSCAR_W is an input file for a 2-atom unit cell of tungsten and can
|
|
be used to test the LAMMPS/VASP coupling. The POTCAR file is a
|
|
proprietary VASP file, so use one from your VASP installation.
|
|
|
|
Note that the POSCAR_template file should be matched to the LAMMPS
|
|
input script (# of atoms and atom types, box size, etc). The provided
|
|
POSCAR_W matches in.client.W.
|
|
|
|
Once you run VASP yourself, the vasprun.xml file will be overwritten.
|
|
|
|
----------------
|
|
|
|
To run in client/server mode:
|
|
|
|
NOTE: The vasp_wrap.py script must be run with Python version 2, not
|
|
3. This is because it used the CSlib python wrapper, which only
|
|
supports version 2. We plan to upgrade CSlib to support Python 3.
|
|
|
|
Both the client (LAMMPS) and server (vasp_wrap.py) must use the same
|
|
messaging mode, namely file or zmq. This is an argument to the
|
|
vasp_wrap.py code; it can be selected by setting the "mode" variable
|
|
when you run LAMMPS. The default mode = file.
|
|
|
|
Here we assume LAMMPS was built to run in parallel, and the MESSAGE
|
|
package was installed with socket (ZMQ) support. This means either of
|
|
the messaging modes can be used and LAMMPS can be run in serial or
|
|
parallel. The vasp_wrap.py code is always run in serial, but it
|
|
launches VASP from Python via an mpirun command which can run VASP
|
|
itself in parallel.
|
|
|
|
When you run, the server should print out thermodynamic info every
|
|
timestep which corresponds to the forces and virial computed by VASP.
|
|
VASP will also generate output files each timestep. The vasp_wrapper.py
|
|
script could be generalized to archive these.
|
|
|
|
The examples below are commands you should use in two different
|
|
terminal windows. The order of the two commands (client or server
|
|
launch) does not matter. You can run them both in the same window if
|
|
you append a "&" character to the first one to run it in the
|
|
background.
|
|
|
|
--------------
|
|
|
|
File mode of messaging:
|
|
|
|
% mpirun -np 1 lmp_mpi -v mode file < in.client.W
|
|
% python vasp_wrap.py file POSCAR_W
|
|
|
|
% mpirun -np 2 lmp_mpi -v mode file < in.client.W
|
|
% python vasp_wrap.py file POSCAR_W
|
|
|
|
ZMQ mode of messaging:
|
|
|
|
% mpirun -np 1 lmp_mpi -v mode zmq < in.client.W
|
|
% python vasp_wrap.py zmq POSCAR_W
|
|
|
|
% mpirun -np 2 lmp_mpi -v mode zmq < in.client.W
|
|
% python vasp_wrap.py zmq POSCAR_W
|