forked from lijiext/lammps
75 lines
2.9 KiB
Plaintext
75 lines
2.9 KiB
Plaintext
This directory has an application that models grain growth in the
|
|
presence of strain.
|
|
|
|
The grain growth is simulated by a Potts model in a kinetic Monte
|
|
Carlo code SPPARKS. Clusters of like spins on a lattice represent
|
|
grains. The Hamiltonian for the energy due of a collection of spins
|
|
includes a strain term and is described on this page in the SPPARKS
|
|
documentation:
|
|
|
|
http://spparks.sandia.gov/doc/app_potts_strain.html.
|
|
|
|
The strain is computed by the molecular dynamics code LAMMPS as a
|
|
particle displacement where pairs of atoms across a grain boundary are
|
|
of different types and thus push off from each other due to a
|
|
Lennard-Jones sigma between particles of different types that is
|
|
larger than the sigma between particles of the same type (interior to
|
|
grains).
|
|
|
|
lmpspk.cpp main program
|
|
it links LAMMPS and SPPARKS as libraries
|
|
in.spparks SPPARKS input script, without the run command
|
|
lmppath.h contains path to LAMMPS home directory
|
|
spkpath.h contains path to SPPARKS home directory
|
|
|
|
After editing the Makefile, lmppath.h, and spkpath.h to make them
|
|
suitable for your box, type:
|
|
|
|
g++ -f Makefile.g++
|
|
|
|
and you should get the lmpspk executable.
|
|
|
|
NOTE: To build and run this coupled application, you must of course,
|
|
have SPPARKS built on your system. It's WWW site is
|
|
http://www.sandia.gov/~sjplimp/spparks.html. It is an open-source
|
|
code, written by two of the LAMMPS authors.
|
|
|
|
You can run lmpspk in serial or parallel as:
|
|
|
|
% lmpspk Niter Ndelta Sfactor in.spparks
|
|
% mpirun -np 4 lmpspk Niter Ndelta Sfactor in.spparks
|
|
|
|
where
|
|
|
|
Niter = # of outer iterations
|
|
Ndelta = time to run MC in each iteration
|
|
Sfactor = multiplier on strain effect
|
|
in.spparks = SPPARKS input script
|
|
|
|
The log files are for this run:
|
|
|
|
% lmpspk 20 10.0 1 in.spparks
|
|
|
|
This application is an example of a coupling where the driver code
|
|
(lmpspk) alternates back and forth between the 2 applications (LAMMPS
|
|
and SPPARKS). Each outer timestep in the driver code, the following
|
|
tasks are performed. One code (SPPARKS) is invoked for a few Monte
|
|
Carlo steps. Some of its output (spin state) is passed to the other
|
|
code (LAMMPS) as input (atom type). The the other code (LAMMPS) is
|
|
invoked for a few timesteps. Some of its output (atom coords) is
|
|
massaged to become an input (per-atom strain) for the original code
|
|
(SPPARKS).
|
|
|
|
The driver code launches both SPPARKS and LAMMPS in parallel and they
|
|
both decompose their spatial domains in the same manner. The datums
|
|
in SPPARKS (lattice sites) are the same as the datums in LAMMPS
|
|
(coarse-grained particles). If this were not the case, more
|
|
sophisticated inter-code communication could be performed.
|
|
|
|
You can look at the log files in the directory to see sample LAMMPS
|
|
and SPPARKS output for this simulation. Dump files produced by the
|
|
run are stored as dump.mc and dump.md. The image*.png files show
|
|
snapshots from both the LAMMPS and SPPARKS output. Note that the
|
|
in.lammps and data.lammps files are not inputs; they are generated by
|
|
the lmpspk driver.
|