diff --git a/unittest/force-styles/test_angle_style.cpp b/unittest/force-styles/test_angle_style.cpp index 010fabd6e2..683ce48877 100644 --- a/unittest/force-styles/test_angle_style.cpp +++ b/unittest/force-styles/test_angle_style.cpp @@ -138,8 +138,9 @@ LAMMPS *init_lammps(LAMMPS::argv &args, const TestConfig &cfg, const bool newton } command("run 0 post no"); + command("variable write_data_pair index ii"); command("write_restart " + cfg.basename + ".restart"); - command("write_data " + cfg.basename + ".data"); + command("write_data " + cfg.basename + ".data pair ${write_data_pair}"); command("write_coeff " + cfg.basename + "-coeffs.in"); return lmp; @@ -529,6 +530,126 @@ TEST(AngleStyle, omp) if (!verbose) ::testing::internal::GetCapturedStdout(); }; +TEST(AngleStyle, kokkos_omp) +{ + if (!LAMMPS::is_installed_pkg("KOKKOS")) GTEST_SKIP(); + if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); + if (!Info::has_accelerator_feature("KOKKOS", "api", "openmp")) GTEST_SKIP(); + + LAMMPS::argv args = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite", + "-k", "on", "t", "4", "-sf", "kk"}; + + ::testing::internal::CaptureStdout(); + LAMMPS *lmp = init_lammps(args, test_config, true); + + std::string output = ::testing::internal::GetCapturedStdout(); + if (verbose) std::cout << output; + + if (!lmp) { + std::cerr << "One or more prerequisite styles with /kk suffix\n" + "are not available in this LAMMPS configuration:\n"; + for (auto &prerequisite : test_config.prerequisites) { + std::cerr << prerequisite.first << "_style " << prerequisite.second << "\n"; + } + GTEST_SKIP(); + } + + EXPECT_THAT(output, StartsWith("LAMMPS (")); + EXPECT_THAT(output, HasSubstr("Loop time")); + + // abort if running in parallel and not all atoms are local + const int nlocal = lmp->atom->nlocal; + ASSERT_EQ(lmp->atom->natoms, nlocal); + + // relax error a bit for KOKKOS package + double epsilon = 5.0 * test_config.epsilon; + + ErrorStats stats; + auto angle = lmp->force->angle; + + EXPECT_FORCES("init_forces (newton on)", lmp->atom, test_config.init_forces, epsilon); + EXPECT_STRESS("init_stress (newton on)", angle->virial, test_config.init_stress, epsilon); + + stats.reset(); + EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); + if (print_stats) std::cerr << "init_energy stats, newton on: " << stats << std::endl; + + if (!verbose) ::testing::internal::CaptureStdout(); + run_lammps(lmp); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + EXPECT_FORCES("run_forces (newton on)", lmp->atom, test_config.run_forces, 10 * epsilon); + EXPECT_STRESS("run_stress (newton on)", angle->virial, test_config.run_stress, epsilon); + + stats.reset(); + int id = lmp->modify->find_compute("sum"); + double energy = lmp->modify->compute[id]->compute_scalar(); + EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.run_energy, epsilon); + EXPECT_FP_LE_WITH_EPS(angle->energy, energy, epsilon); + if (print_stats) std::cerr << "run_energy stats, newton on: " << stats << std::endl; + + if (!verbose) ::testing::internal::CaptureStdout(); + cleanup_lammps(lmp, test_config); + lmp = init_lammps(args, test_config, false); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + // skip over these tests if newton bond is forced to be on + if (lmp->force->newton_bond == 0) { + angle = lmp->force->angle; + + EXPECT_FORCES("init_forces (newton off)", lmp->atom, test_config.init_forces, epsilon); + EXPECT_STRESS("init_stress (newton off)", angle->virial, test_config.init_stress, + 2 * epsilon); + + stats.reset(); + EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); + if (print_stats) std::cerr << "init_energy stats, newton off:" << stats << std::endl; + + if (!verbose) ::testing::internal::CaptureStdout(); + run_lammps(lmp); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + EXPECT_FORCES("run_forces (newton off)", lmp->atom, test_config.run_forces, 10 * epsilon); + EXPECT_STRESS("run_stress (newton off)", angle->virial, test_config.run_stress, epsilon); + + stats.reset(); + id = lmp->modify->find_compute("sum"); + energy = lmp->modify->compute[id]->compute_scalar(); + EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.run_energy, epsilon); + EXPECT_FP_LE_WITH_EPS(angle->energy, energy, epsilon); + if (print_stats) std::cerr << "run_energy stats, newton off:" << stats << std::endl; + } + + if (!verbose) ::testing::internal::CaptureStdout(); + restart_lammps(lmp, test_config); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + angle = lmp->force->angle; + EXPECT_FORCES("restart_forces", lmp->atom, test_config.init_forces, epsilon); + EXPECT_STRESS("restart_stress", angle->virial, test_config.init_stress, epsilon); + + stats.reset(); + EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); + if (print_stats) std::cerr << "restart_energy stats:" << stats << std::endl; + + if (!verbose) ::testing::internal::CaptureStdout(); + data_lammps(lmp, test_config); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + angle = lmp->force->angle; + EXPECT_FORCES("data_forces", lmp->atom, test_config.init_forces, epsilon); + EXPECT_STRESS("data_stress", angle->virial, test_config.init_stress, epsilon); + + stats.reset(); + EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); + if (print_stats) std::cerr << "data_energy stats:" << stats << std::endl; + + if (!verbose) ::testing::internal::CaptureStdout(); + cleanup_lammps(lmp, test_config); + if (!verbose) ::testing::internal::GetCapturedStdout(); +}; + + TEST(AngleStyle, numdiff) { if (!LAMMPS::is_installed_pkg("EXTRA-FIX")) GTEST_SKIP(); @@ -586,6 +707,9 @@ TEST(AngleStyle, single) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); + // angle-spica test not compatible with pair zero + if (utils::strmatch(test_config.angle_style, "^spica")) GTEST_SKIP(); + LAMMPS::argv args = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite"}; // create a LAMMPS instance with standard settings to detect the number of atom types diff --git a/unittest/force-styles/tests/fix-timestep-gravity.yaml b/unittest/force-styles/tests/fix-timestep-gravity.yaml new file mode 100644 index 0000000000..0fad7548ce --- /dev/null +++ b/unittest/force-styles/tests/fix-timestep-gravity.yaml @@ -0,0 +1,77 @@ +--- +lammps_version: 17 Apr 2024 +tags: generated +date_generated: Fri Jun 7 18:18:25 2024 +epsilon: 2e-14 +skip_tests: +prerequisites: ! | + atom full + fix gravity +pre_commands: ! "" +post_commands: ! | + fix move all nve + fix test solute gravity 1.0 chute 24.0 +input_file: in.fourmol +natoms: 29 +global_scalar: -186.21588194703688 +run_pos: ! |2 + 1 -2.7011524053324809e-01 2.4912159905686591e+00 -1.6772297284757851e-01 + 2 3.1038065295954353e-01 2.9612354631097353e+00 -8.5542808521697811e-01 + 3 -7.0364515675550809e-01 1.2305509956066307e+00 -6.2853972432728245e-01 + 4 -1.5814755764271355e+00 1.4837407818930601e+00 -1.2546355384456112e+00 + 5 -9.0685727950632855e-01 9.2652103885643056e-01 3.9877765004406607e-01 + 6 2.4865756250605056e-01 2.8313021504286667e-01 -1.2321877880510159e+00 + 7 3.4177563359756546e-01 -2.2646551100204085e-02 -2.5299935962974427e+00 + 8 1.1746955801477847e+00 -4.8863228562722372e-01 -6.3859878398896053e-01 + 9 1.3803927801722946e+00 -2.5274721030710312e-01 2.8277540402938711e-01 + 10 2.0514168793021708e+00 -1.4604063740395892e+00 -9.8400190568066226e-01 + 11 1.7881435516754824e+00 -1.9921863273005540e+00 -1.8898246996050880e+00 + 12 3.0066410611543031e+00 -4.9013350496741503e-01 -1.6239542655936290e+00 + 13 4.0518806531445115e+00 -8.9202011608041198e-01 -1.6407650078368909e+00 + 14 2.6070366917787502e+00 -4.1789253965818390e-01 -2.6641648157184719e+00 + 15 2.9698690757945712e+00 5.5422613165076606e-01 -1.2349666570200868e+00 + 16 2.6750433267807354e+00 -2.4124119054731139e+00 -2.4200201031436729e-02 + 17 2.2156981357736640e+00 -2.0897985186874832e+00 1.1955506246002150e+00 + 18 2.1369701703650730e+00 3.0158507412663567e+00 -3.5179348336329874e+00 + 19 1.5355837136010813e+00 2.6255292355230471e+00 -4.2353987779638791e+00 + 20 2.7727573005632222e+00 3.6923910449548529e+00 -3.9330842459074575e+00 + 21 4.9040128072602780e+00 -4.0752348172210793e+00 -3.6210314709290508e+00 + 22 4.3582355554422358e+00 -4.2126119427251041e+00 -4.4612844196275327e+00 + 23 5.7439382849267391e+00 -3.5821957939245763e+00 -3.8766361295905272e+00 + 24 2.0689243582926142e+00 3.1513346907679298e+00 3.1550389755253740e+00 + 25 1.3045351331996820e+00 3.2665125706102396e+00 2.5111855257988016e+00 + 26 2.5809237402745016e+00 4.0117602605510552e+00 3.2212060529110351e+00 + 27 -1.9611343130738399e+00 -4.3563411931703371e+00 2.1098293115633115e+00 + 28 -2.7473562684531423e+00 -4.0200819932397094e+00 1.5830052163438753e+00 + 29 -1.3126000191413181e+00 -3.5962518039538049e+00 2.2746342468776262e+00 +run_vel: ! |2 + 1 8.5109316362519602e-03 1.6516406178041225e-02 4.0257714026516490e-03 + 2 5.7905065636750398e-03 5.1791699425406436e-03 -2.2017480092926239e-03 + 3 -7.8894719894931995e-03 -1.2926551567076078e-02 -4.8628730461282299e-03 + 4 -3.4295470362380558e-03 -6.5722892097571746e-03 -1.8829188761635013e-03 + 5 -1.0681603783771049e-02 -9.8906780943397981e-03 -3.6055286238584373e-03 + 6 -3.9336305872108561e-02 4.6817061595703827e-02 3.6384037056681029e-02 + 7 1.2506966720148773e-03 -1.0128524534170577e-02 -5.2332706579662443e-02 + 8 8.2468284595410245e-03 -3.3507253921233483e-03 3.3792643567964936e-02 + 9 1.9047748330960573e-03 3.7365546038062030e-03 1.4282953976985591e-02 + 10 2.9541804094488457e-02 -2.9249578764884845e-02 -1.5782532313799533e-02 + 11 -4.4432389113943276e-03 -3.7481385250923384e-03 -3.1108652606538687e-03 + 12 2.6100024018558595e-03 -3.4774153956887568e-04 -3.8285319045691822e-03 + 13 3.0935312727166267e-03 5.8171061330117716e-03 -1.5591293903673509e-03 + 14 3.8649754630719264e-03 -5.7939995647665818e-03 -4.7122979565915029e-03 + 15 -1.5144371403513141e-03 -5.8554729975123223e-03 5.5293936706684987e-03 + 16 1.9021857268539524e-02 -1.3262466239526659e-02 -4.6403106382465122e-02 + 17 -1.2555912712280654e-02 9.7527665332939554e-03 3.6532080503688211e-02 + 18 -8.0065804266645272e-04 -8.6270492707191733e-04 -1.4483038883094412e-03 + 19 1.2452390676359983e-03 -2.5061097417265706e-03 7.2998631503948365e-03 + 20 3.5930060125155812e-03 3.6938860172789413e-03 3.2322732818512918e-03 + 21 -1.4689221613126495e-03 -2.7352114343278191e-04 7.0581636636453274e-04 + 22 -7.0694199291104270e-03 -4.2577148850801560e-03 2.8079118466590249e-04 + 23 6.0446963030489327e-03 -1.4000131557522955e-03 2.5819754912914830e-03 + 24 3.1926378195318940e-04 -9.9445656410519171e-04 1.5000005630965910e-04 + 25 1.3789764900432326e-04 -4.4335894352437377e-03 -8.1808125296921569e-04 + 26 2.0485904111190159e-03 2.7813358701245998e-03 4.3245727192292643e-03 + 27 4.5604112517415882e-04 -1.0305523728567508e-03 2.1188060606882085e-04 + 28 -6.2544520903728557e-03 1.4127711133453905e-03 -1.8429821874182827e-03 + 29 6.4110630400058470e-04 3.1273432599821832e-03 3.7253671183308450e-03 +... diff --git a/unittest/force-styles/tests/fix-timestep-wall_reflect.yaml b/unittest/force-styles/tests/fix-timestep-wall_reflect.yaml new file mode 100644 index 0000000000..ed9ac69350 --- /dev/null +++ b/unittest/force-styles/tests/fix-timestep-wall_reflect.yaml @@ -0,0 +1,78 @@ +--- +lammps_version: 17 Apr 2024 +tags: generated +date_generated: Fri Jun 7 18:23:44 2024 +epsilon: 4e-14 +skip_tests: +prerequisites: ! | + atom full + fix nve + fix wall/reflect +pre_commands: ! | + boundary f f f +post_commands: ! | + fix move all nve + fix test solute wall/reflect xlo EDGE xhi EDGE ylo EDGE yhi EDGE zlo EDGE zhi EDGE units box +input_file: in.fourmol +natoms: 29 +run_pos: ! |2 + 1 -2.7045559775384026e-01 2.4912159905679729e+00 -1.6695851791541885e-01 + 2 3.1004029573899528e-01 2.9612354631094391e+00 -8.5466363037021464e-01 + 3 -7.0398551400789466e-01 1.2305509955830618e+00 -6.2777526944456274e-01 + 4 -1.5818159336499285e+00 1.4837407818929933e+00 -1.2538710836062004e+00 + 5 -9.0719763672789266e-01 9.2652103885675297e-01 3.9954210488374786e-01 + 6 2.4831720524855988e-01 2.8313021497871271e-01 -1.2314233331711453e+00 + 7 3.4143527641386412e-01 -2.2646551041391422e-02 -2.5292291414903052e+00 + 8 1.1743552229100009e+00 -4.8863228565853944e-01 -6.3783432910825522e-01 + 9 1.3800524229500313e+00 -2.5274721030406683e-01 2.8353985887095157e-01 + 10 2.0510765220543883e+00 -1.4604063740302866e+00 -9.8323745081712954e-01 + 11 1.7878031944442556e+00 -1.9921863272948861e+00 -1.8890602447625777e+00 + 12 3.0063007039340053e+00 -4.9013350496963298e-01 -1.6231898107386231e+00 + 13 4.0515402959192999e+00 -8.9202011606653986e-01 -1.6400005529924957e+00 + 14 2.6066963345543819e+00 -4.1789253965514156e-01 -2.6634003608794394e+00 + 15 2.9695287185712913e+00 5.5422613165234036e-01 -1.2342022021790127e+00 + 16 2.6747029695228521e+00 -2.4124119054564295e+00 -2.3435746150616152e-02 + 17 2.2153577785283796e+00 -2.0897985186907717e+00 1.1963150794479436e+00 + 18 2.1369701704094664e+00 3.0158507413593139e+00 -3.5179348337135590e+00 + 19 1.5355837135395243e+00 2.6255292354730009e+00 -4.2353987771401354e+00 + 20 2.7727573003748263e+00 3.6923910441179069e+00 -3.9330842453167185e+00 + 21 4.9040128073837339e+00 -4.0752348170758461e+00 -3.6210314709795299e+00 + 22 4.3582355554510048e+00 -4.2126119427061379e+00 -4.4612844196307497e+00 + 23 5.7439382849366911e+00 -3.5821957939240279e+00 -3.8766361295959513e+00 + 24 2.0689243582454213e+00 3.1513346907303501e+00 3.1550389751128463e+00 + 25 1.3045351331414130e+00 3.2665125705869009e+00 2.5111855257365274e+00 + 26 2.5809237402714267e+00 4.0117602605512728e+00 3.2212060528800821e+00 + 27 -1.9611343130357228e+00 -4.3563411931359752e+00 2.1098293115523705e+00 + 28 -2.7473562684513411e+00 -4.0200819932379330e+00 1.5830052163433954e+00 + 29 -1.3126000191359855e+00 -3.5962518039482929e+00 2.2746342468737835e+00 +run_vel: ! |2 + 1 8.1705744183262832e-03 1.6516406176274298e-02 4.7902264318913203e-03 + 2 5.4501493445687828e-03 5.1791699408496447e-03 -1.4372931530376549e-03 + 3 -8.2298292722385574e-03 -1.2926551614621364e-02 -4.0984181178163699e-03 + 4 -3.7699042590093523e-03 -6.5722892098813894e-03 -1.1184640360133299e-03 + 5 -1.1021961004346582e-02 -9.8906780939336091e-03 -2.8410737829284408e-03 + 6 -3.9676663166400027e-02 4.6817061464710263e-02 3.7148491979476131e-02 + 7 9.1033953013898742e-04 -1.0128524411938794e-02 -5.1568251805019748e-02 + 8 7.9064712058855742e-03 -3.3507254552631576e-03 3.4557098492564650e-02 + 9 1.5644176117320932e-03 3.7365546102722212e-03 1.5047408822037651e-02 + 10 2.9201446820573192e-02 -2.9249578745486147e-02 -1.5018077424322544e-02 + 11 -4.7835961513517542e-03 -3.7481385134185202e-03 -2.3464104142290089e-03 + 12 2.2696451841920694e-03 -3.4774154398129690e-04 -3.0640770327796979e-03 + 13 2.7531740451953164e-03 5.8171061612840493e-03 -7.9467454022160377e-04 + 14 3.5246182371994183e-03 -5.7939995585585503e-03 -3.9478431172751344e-03 + 15 -1.8547943640122972e-03 -5.8554729942777778e-03 6.2938485140538692e-03 + 16 1.8681499973445252e-02 -1.3262466204585332e-02 -4.5638651457003250e-02 + 17 -1.2896269981100378e-02 9.7527665265956451e-03 3.7296535360836762e-02 + 18 -8.0065795274987550e-04 -8.6270473974390605e-04 -1.4483040536385806e-03 + 19 1.2452390067376805e-03 -2.5061097800836356e-03 7.2998639311871892e-03 + 20 3.5930058460518109e-03 3.6938852051849871e-03 3.2322738480194770e-03 + 21 -1.4689219756961604e-03 -2.7352107824530231e-04 7.0581625180892046e-04 + 22 -7.0694199165145140e-03 -4.2577148692717554e-03 2.8079117911323815e-04 + 23 6.0446963236685256e-03 -1.4000131545098772e-03 2.5819754799379755e-03 + 24 3.1926368451268056e-04 -9.9445664487428712e-04 1.4999960207062358e-04 + 25 1.3789752933078488e-04 -4.4335894831520773e-03 -8.1808138106080109e-04 + 26 2.0485904023410002e-03 2.7813358660936120e-03 4.3245726853349290e-03 + 27 4.5604120293369819e-04 -1.0305523026921102e-03 2.1188058381358391e-04 + 28 -6.2544520861855151e-03 1.4127711176146864e-03 -1.8429821884794260e-03 + 29 6.4110631534402261e-04 3.1273432719593807e-03 3.7253671105656745e-03 +...