add Kokkos/OpenMP version of mliap unified test
This commit is contained in:
@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
#include "library.h"
|
#include "library.h"
|
||||||
|
|
||||||
|
#include "info.h"
|
||||||
|
|
||||||
#include "gmock/gmock.h"
|
#include "gmock/gmock.h"
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
@ -112,4 +114,94 @@ TEST(MliapUnified, VersusLJMeltGhost)
|
|||||||
lammps_close(ljmelt);
|
lammps_close(ljmelt);
|
||||||
lammps_close(mliap);
|
lammps_close(mliap);
|
||||||
}
|
}
|
||||||
|
TEST(MliapUnified, VersusLJMeltKokkos)
|
||||||
|
{
|
||||||
|
if (!LAMMPS::is_installed_pkg("KOKKOS")) GTEST_SKIP();
|
||||||
|
if (!Info::has_accelerator_feature("KOKKOS", "api", "openmp")) GTEST_SKIP();
|
||||||
|
// if KOKKOS has GPU support enabled, it *must* be used. We cannot test OpenMP only.
|
||||||
|
if (Info::has_accelerator_feature("KOKKOS", "api", "cuda") ||
|
||||||
|
Info::has_accelerator_feature("KOKKOS", "api", "hip") ||
|
||||||
|
Info::has_accelerator_feature("KOKKOS", "api", "sycl")) {
|
||||||
|
GTEST_SKIP() << "Cannot test KOKKOS/OpenMP with GPU support enabled";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *lmpargv[] = {"melt", "-log", "none", "-echo", "screen", "-nocite",
|
||||||
|
"-k", "on", "t", "4", "-sf", "kk"};
|
||||||
|
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, VersusLJMeltGhostKokkos)
|
||||||
|
{
|
||||||
|
if (!LAMMPS::is_installed_pkg("KOKKOS")) GTEST_SKIP();
|
||||||
|
if (!Info::has_accelerator_feature("KOKKOS", "api", "openmp")) GTEST_SKIP();
|
||||||
|
// if KOKKOS has GPU support enabled, it *must* be used. We cannot test OpenMP only.
|
||||||
|
if (Info::has_accelerator_feature("KOKKOS", "api", "cuda") ||
|
||||||
|
Info::has_accelerator_feature("KOKKOS", "api", "hip") ||
|
||||||
|
Info::has_accelerator_feature("KOKKOS", "api", "sycl")) {
|
||||||
|
GTEST_SKIP() << "Cannot test KOKKOS/OpenMP with GPU support enabled";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *lmpargv[] = {"melt", "-log", "none", "-echo", "screen", "-nocite",
|
||||||
|
"-k", "on", "t", "4", "-sf", "kk"};
|
||||||
|
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
|
} // namespace LAMMPS_NS
|
||||||
|
|||||||
Reference in New Issue
Block a user