add Kokkos/OpenMP version of mliap unified test

This commit is contained in:
Axel Kohlmeyer
2025-04-07 18:06:31 -04:00
parent c505bfbdfe
commit 99b484a0cc

View File

@ -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