git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@14072 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp
2015-09-24 22:48:28 +00:00
parent ef4e8f288a
commit d2a2124b56
2 changed files with 21 additions and 28 deletions

View File

@ -20,8 +20,8 @@ make mode=shlib machine
to create the static library liblammps_machine.a or the shared library to create the static library liblammps_machine.a or the shared library
liblammps_machine.so for your code to link against. A soft link liblammps_machine.so for your code to link against. A soft link
(liblammps.a or liblammps.so) is also created that points to the most (liblammps.a or liblammps.so) is also created that points to the most
recently built static or shared library. Your code can simply use the recently built static or shared library. Your code build can simply
soft link if you prefer. use the soft link if you prefer.
The library interface to LAMMPS is in src/library.cpp. Routines can The library interface to LAMMPS is in src/library.cpp. Routines can
be easily added to this file so an external program can perform the be easily added to this file so an external program can perform the

View File

@ -11,36 +11,29 @@ simple.f90 is the Fortran driver
libfwrapper.c is the Fortran-to-C wrapper libfwrapper.c is the Fortran-to-C wrapper
The 3 codes do the same thing, so you can compare them to see how to The 3 codes do the same thing, so you can compare them to see how to
drive LAMMPS in this manner. The C driver is similar in spirit to what drive LAMMPS from each language. See lammps/python/example/simple.py
one could use to write a scripting language interface. See to do something similar from Python. The Fortran driver requires an
python/examples/simple.py for an example of using Python as a wrapper additional wrapper library that interfaces the C interface of the
in that way. The Fortran driver in addition requires a wrapper LAMMPS library to Fortran and also translates the MPI communicator
library that interfaces the C interface of the LAMMPS library to from Fortran to C.
Fortran and also translates the MPI communicator from Fortran to C.
First, you must build LAMMPS as a library, either static or shared. Once you have built LAMMPS as a library (see examples/COUPLE/README),
See http://lammps.sandia.gov/doc/Section_start.html#start_5 for you can then build any of the driver codes with compile lines like
details. To build it as a static library type this from these, which include paths to the LAMMPS library interface, MPI (an
the src directory: installed MPICH in this case), and FFTW (assuming you built LAMMPS as
a library with its PPPM solver).
make makelib
make -f Makefile.lib g++
You can then build either driver code with a compile lines like these,
which include paths to the LAMMPS library interface, MPI, and FFTW
(assuming you built LAMMPS as a library with its PPPM solver).
This builds the C++ driver with the LAMMPS library using a C++ compiler: This builds the C++ driver with the LAMMPS library using a C++ compiler:
g++ -I/home/sjplimp/lammps/src -c simple.cpp g++ -I/home/sjplimp/lammps/src -c simple.cpp
g++ -L/home/sjplimp/lammps/src simple.o \ g++ -L/home/sjplimp/lammps/src simple.o \
-llammps_g++ -lfftw -lmpich -lmpl -lpthread -o simpleCC -llammps -lfftw -lmpich -lmpl -lpthread -o simpleCC
This builds the C driver with the LAMMPS library using a C compiler: This builds the C driver with the LAMMPS library using a C compiler:
gcc -I/home/sjplimp/lammps/src -c simple.c gcc -I/home/sjplimp/lammps/src -c simple.c
gcc -L/home/sjplimp/lammps/src simple.o \ gcc -L/home/sjplimp/lammps/src simple.o \
-llammps_g++ -lfftw -lmpich -lmpl -lpthread -lstdc++ -o simpleC -llammps -lfftw -lmpich -lmpl -lpthread -lstdc++ -o simpleC
This builds the Fortran wrapper and driver with the LAMMPS library This builds the Fortran wrapper and driver with the LAMMPS library
using a Fortran and C compiler, using the wrapper in the fortran using a Fortran and C compiler, using the wrapper in the fortran
@ -50,12 +43,12 @@ cp ../fortran/libfwrapper.c .
gcc -I/home/sjplimp/lammps/src -c libfwrapper.c gcc -I/home/sjplimp/lammps/src -c libfwrapper.c
gfortran -I/home/sjplimp/lammps/src -c simple.f90 gfortran -I/home/sjplimp/lammps/src -c simple.f90
gfortran -L/home/sjplimp/lammps/src simple.o libfwrapper.o \ gfortran -L/home/sjplimp/lammps/src simple.o libfwrapper.o \
-llammps_g++ -lfftw -lfmpich -lmpich -lpthread -lstdc++ -o simpleF -llammps -lfftw -lfmpich -lmpich -lpthread -lstdc++ -o simpleF
You then run simpleCC, simpleC, or simpleF on a parallel machine You then run simpleCC, simpleC, or simpleF on a parallel machine
on some number of processors Q with 2 arguments: on some number of processors Q with 2 arguments:
mpirun -np Q simpleCC P in.lj % mpirun -np Q simpleCC P in.lj
P is the number of procs you want LAMMPS to run on (must be <= Q) and P is the number of procs you want LAMMPS to run on (must be <= Q) and
in.lj is a LAMMPS input script. in.lj is a LAMMPS input script.
@ -80,8 +73,8 @@ extend the wrapper if desired.
The C++ driver does the same thing, except that it instantiates LAMMPS The C++ driver does the same thing, except that it instantiates LAMMPS
as an object first. Some of the functions in src/library.cpp can be as an object first. Some of the functions in src/library.cpp can be
invoked directly as methods within appropriate LAMMPS classes, which by-passed and invoked directly as methods within appropriate LAMMPS
is what the driver does. Any public LAMMPS class method could be classes, which is what the driver does. Any public LAMMPS class
called from the driver this way. However the get/put functions are method could be called from the driver this way. However the get/put
only implemented in src/library.cpp, so the C++ driver calls them as functions are only implemented in src/library.cpp, so the C++ driver
C-style functions. calls them as C-style functions.