101 lines
4.0 KiB
C++
101 lines
4.0 KiB
C++
/* ----------------------------------------------------------------------
|
|
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 parms[] = "print \"\"\"\n"
|
|
"1 2 lj126 0.3 3.5 4.0\n"
|
|
"2 3 lj126 0.3 3.5 5.0\n"
|
|
"1 4 harmonic 10.0 7.0\n"
|
|
"2 4 harmonic 10.0 7.0\n"
|
|
"3 4 morse 10.0 0.3 6.5\n"
|
|
"\"\"\" file list.param\n";
|
|
|
|
const char first[] = "units real\n"
|
|
"atom_style bond\n"
|
|
"atom_modify map array\n"
|
|
"boundary f f f\n"
|
|
"special_bonds lj/coul 0.0 1.0 1.0\n"
|
|
"region box block -5 5 -5 5 -5 5\n"
|
|
"create_box 1 box bond/types 2 extra/bond/per/atom 4\n"
|
|
"create_atoms 1 single -2.0 0.0 0.0\n"
|
|
"create_atoms 1 single 0.0 1.0 0.0\n"
|
|
"create_atoms 1 single 4.0 1.0 0.0\n"
|
|
"create_atoms 1 single 4.0 -4.0 -4.0\n"
|
|
"create_bonds single/bond 1 1 4\n"
|
|
"create_bonds single/bond 1 2 4\n"
|
|
"create_bonds single/bond 2 3 4\n"
|
|
"mass 1 10.0\n"
|
|
"velocity all create 10.0 87287 loop geom\n";
|
|
|
|
const char second[] = "timestep 0.2\n"
|
|
"fix 1 all nve\n"
|
|
"run 2 post no\n";
|
|
|
|
static constexpr double EPSILON = 1.0e-10;
|
|
|
|
namespace LAMMPS_NS {
|
|
|
|
TEST(PairList, ListVsPairBond)
|
|
{
|
|
if (!lammps_config_has_package("MOLECULE")) GTEST_SKIP();
|
|
if (!lammps_config_has_package("MISC")) GTEST_SKIP();
|
|
|
|
const char *lmpargv[] = {"melt", "-log", "none", "-nocite"};
|
|
int lmpargc = sizeof(lmpargv) / sizeof(const char *);
|
|
|
|
::testing::internal::CaptureStdout();
|
|
void *ljmelt = lammps_open_no_mpi(lmpargc, (char **)lmpargv, nullptr);
|
|
lmpargv[0] = "plist";
|
|
void *plist = lammps_open_no_mpi(lmpargc, (char **)lmpargv, nullptr);
|
|
|
|
lammps_commands_string(ljmelt, first);
|
|
lammps_command(ljmelt, "pair_style lj/cut 5.0");
|
|
lammps_command(ljmelt, "pair_coeff * * 0.3 3.5");
|
|
lammps_command(ljmelt, "bond_style hybrid harmonic morse");
|
|
lammps_command(ljmelt, "bond_coeff 1 harmonic 10.0 7.0");
|
|
lammps_command(ljmelt, "bond_coeff 2 morse 10.0 0.3 6.5");
|
|
|
|
lammps_commands_string(ljmelt, second);
|
|
|
|
lammps_command(plist, parms);
|
|
lammps_commands_string(plist, first);
|
|
lammps_command(plist, "pair_style list list.param 10.0");
|
|
lammps_command(plist, "pair_coeff * *");
|
|
lammps_command(plist, "bond_style zero");
|
|
lammps_command(plist, "bond_coeff * 2.0");
|
|
lammps_commands_string(plist, second);
|
|
::testing::internal::GetCapturedStdout();
|
|
|
|
double lj_pe = lammps_get_thermo(ljmelt, "pe");
|
|
double ml_pe = lammps_get_thermo(plist, "pe");
|
|
EXPECT_NEAR(lj_pe, ml_pe, EPSILON);
|
|
double lj_ke = lammps_get_thermo(ljmelt, "ke");
|
|
double ml_ke = lammps_get_thermo(plist, "ke");
|
|
EXPECT_NEAR(lj_ke, ml_ke, EPSILON);
|
|
double lj_press = lammps_get_thermo(ljmelt, "press");
|
|
double ml_press = lammps_get_thermo(plist, "press");
|
|
EXPECT_NEAR(lj_press, ml_press, EPSILON);
|
|
|
|
::testing::internal::CaptureStdout();
|
|
lammps_command(plist, "shell rm list.param");
|
|
lammps_close(ljmelt);
|
|
lammps_close(plist);
|
|
::testing::internal::GetCapturedStdout();
|
|
}
|
|
|
|
} // namespace LAMMPS_NS
|