PotC is a project to automatically generate LAMMPS pair_syle implementations from a simple DSL.
That DSL specifies the energy expression as well as any parameters or functions used in that expression.
PotC is built using cmake.
It requires GTest.
The final binary is called potc.
mkdir build; cd $_
cmake $POTC_PATH
make
The input can use a number of constructs.
Some ready-made potentials and parametrizations are given in the potentials/ folder.
Here is a quick example (a simple Lennard-Jones potential):
# this reads a file that contains two scalars:
# first epsilon, then sigma
# like so: 1.00 2.00
parameter epsilon = file(1);
parameter sigma = file(2);
energy sum(i : all_atoms) sum(j: neighbors(i, 3 * sigma))
4 * epsilon * ((sigma / r) ^ 12 - (sigma / r) ^ 6);
PotC is invoked from the command line with three parameters:
The input file (see above), the final name of the pair_style and the mode, which can be r for a regular implementation, i for a USER-INTEL implementation or k for a KOKKOS implementation.
./potc $PATH_TO_INPUT $NAME $MODE
It will generate files pair_$NAME_gen.cpp and pair_$NAME_gen.h in the current working directory.
For the accelerated modes, the file names will also have the appropriate suffix.
These files can be dropped into a LAMMPS source tree and build automatically along with LAMMPS.