1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS Development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "library.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
const char pickle[] = "python create_pickle here \"\"\"\n"
"import lammps\n"
"import lammps.mliap\n"
"from lammps.mliap.mliap_unified_lj import MLIAPUnifiedLJ\n"
"def create_pickle():\n"
" unified = MLIAPUnifiedLJ(['Ar'])\n"
" unified.pickle('mliap_unified_lj_Ar.pkl')\n"
"\"\"\"\n";
const char first[] = "units lj\n"
"atom_style atomic\n"
"lattice fcc 0.8442\n"
"region box block 0 2 0 2 0 2\n"
"create_box 1 box\n"
"create_atoms 1 box\n"
"mass 1 1.0\n"
"velocity all create 3.0 87287 loop geom\n";
const char second[] = "neighbor 0.3 bin\n"
"neigh_modify every 20 delay 0 check no\n"
"fix 1 all nve\n"
"run 2 post no\n";
namespace LAMMPS_NS {
TEST(MliapUnified, VersusLJMelt)
{
const char *lmpargv[] = {"melt", "-log", "none", "-nocite"};
int lmpargc = sizeof(lmpargv) / sizeof(const char *);
void *ljmelt = lammps_open_no_mpi(lmpargc, (char **)lmpargv, nullptr);
void *mliap = lammps_open_no_mpi(lmpargc, (char **)lmpargv, nullptr);
lammps_commands_string(ljmelt, first);
lammps_command(ljmelt, "pair_style lj/cut 2.5");
lammps_command(ljmelt, "pair_coeff * * 1.0 1.0");
lammps_commands_string(ljmelt, second);
lammps_command(mliap, pickle);
lammps_command(mliap, "python create_pickle invoke");
lammps_commands_string(mliap, first);
lammps_command(mliap, "pair_style mliap unified mliap_unified_lj_Ar.pkl 0");
lammps_command(mliap, "pair_coeff * * Ar");
lammps_commands_string(mliap, second);
double lj_pe = lammps_get_thermo(ljmelt, "pe");
double ml_pe = lammps_get_thermo(mliap, "pe");
EXPECT_NEAR(lj_pe, ml_pe, 1.0e-14);
double lj_ke = lammps_get_thermo(ljmelt, "ke");
double ml_ke = lammps_get_thermo(mliap, "ke");
EXPECT_NEAR(lj_ke, ml_ke, 1.0e-14);
double lj_press = lammps_get_thermo(ljmelt, "press");
double ml_press = lammps_get_thermo(mliap, "press");
EXPECT_NEAR(lj_press, ml_press, 1.0e-14);
lammps_command(mliap, "shell rm mliap_unified_lj_Ar.pkl");
lammps_close(ljmelt);
lammps_close(mliap);
}
TEST(MliapUnified, VersusLJMeltGhost)
{
const char *lmpargv[] = {"melt", "-log", "none", "-nocite"};
int lmpargc = sizeof(lmpargv) / sizeof(const char *);
void *ljmelt = lammps_open_no_mpi(lmpargc, (char **)lmpargv, nullptr);
void *mliap = lammps_open_no_mpi(lmpargc, (char **)lmpargv, nullptr);
lammps_commands_string(ljmelt, first);
lammps_command(ljmelt, "pair_style lj/cut 2.5");
lammps_command(ljmelt, "pair_coeff * * 1.0 1.0");
lammps_commands_string(ljmelt, second);
lammps_command(mliap, pickle);
lammps_command(mliap, "python create_pickle invoke");
lammps_commands_string(mliap, first);
lammps_command(mliap, "pair_style mliap unified mliap_unified_lj_Ar.pkl 1");
lammps_command(mliap, "pair_coeff * * Ar");
lammps_commands_string(mliap, second);
double lj_pe = lammps_get_thermo(ljmelt, "pe");
double ml_pe = lammps_get_thermo(mliap, "pe");
EXPECT_NEAR(lj_pe, ml_pe, 1.0e-14);
double lj_ke = lammps_get_thermo(ljmelt, "ke");
double ml_ke = lammps_get_thermo(mliap, "ke");
EXPECT_NEAR(lj_ke, ml_ke, 1.0e-14);
double lj_press = lammps_get_thermo(ljmelt, "press");
double ml_press = lammps_get_thermo(mliap, "press");
EXPECT_NEAR(lj_press, ml_press, 1.0e-14);
lammps_command(mliap, "shell rm mliap_unified_lj_Ar.pkl");
lammps_close(ljmelt);
lammps_close(mliap);
}
} // namespace LAMMPS_NS
|