diff --git a/unittest/formats/test_atom_styles.cpp b/unittest/formats/test_atom_styles.cpp index 15a6ed4adc..378bed5585 100644 --- a/unittest/formats/test_atom_styles.cpp +++ b/unittest/formats/test_atom_styles.cpp @@ -12,13 +12,17 @@ ------------------------------------------------------------------------- */ #include "atom.h" +#include "atom_vec_body.h" #include "atom_vec_ellipsoid.h" +#include "atom_vec_line.h" +#include "atom_vec_tri.h" #include "input.h" #include "lammps.h" #include "utils.h" #include "gmock/gmock.h" #include "gtest/gtest.h" +#include #include #include #include @@ -1360,27 +1364,34 @@ TEST_F(AtomStyleTest, ellipsoid) ASSERT_EQ(lmp->atom->map_tag_max, -1); if (!verbose) ::testing::internal::CaptureStdout(); - lmp->input->one("create_box 2 box"); + lmp->input->one("create_box 3 box"); lmp->input->one("create_atoms 1 single -2.0 2.0 0.1"); lmp->input->one("create_atoms 1 single -2.0 -2.0 -0.1"); lmp->input->one("create_atoms 2 single 2.0 2.0 -0.1"); lmp->input->one("create_atoms 2 single 2.0 -2.0 0.1"); + lmp->input->one("create_atoms 3 single 2.0 2.0 -2.1"); + lmp->input->one("create_atoms 3 single 2.0 -2.0 2.1"); lmp->input->one("set type 1 mass 4.0"); lmp->input->one("set type 2 mass 2.4"); + lmp->input->one("set type 3 mass 4.4"); lmp->input->one("set type 1 shape 1.0 1.0 1.0"); lmp->input->one("set type 2 shape 3.0 0.8 1.1"); + lmp->input->one("set atom 1 quat 1.0 0.0 0.0 0.0"); + lmp->input->one("set atom 2 quat 0.0 1.0 0.0 90.0"); + lmp->input->one("set atom 3 quat 1.0 0.0 1.0 30.0"); + lmp->input->one("set atom 4 quat 1.0 1.0 1.0 60.0"); lmp->input->one("pair_coeff * *"); if (!verbose) ::testing::internal::GetCapturedStdout(); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("ellipsoid")); ASSERT_NE(lmp->atom->avec, nullptr); - ASSERT_EQ(lmp->atom->natoms, 4); + ASSERT_EQ(lmp->atom->natoms, 6); ASSERT_EQ(lmp->atom->nellipsoids, 4); - ASSERT_EQ(lmp->atom->nlocal, 4); + ASSERT_EQ(lmp->atom->nlocal, 6); ASSERT_EQ(lmp->atom->nghost, 0); ASSERT_NE(lmp->atom->nmax, -1); ASSERT_EQ(lmp->atom->tag_enable, 1); ASSERT_EQ(lmp->atom->molecular, 0); - ASSERT_EQ(lmp->atom->ntypes, 2); + ASSERT_EQ(lmp->atom->ntypes, 3); ASSERT_EQ(lmp->atom->mass, nullptr); ASSERT_NE(lmp->atom->rmass, nullptr); @@ -1399,25 +1410,27 @@ TEST_F(AtomStyleTest, ellipsoid) if (!verbose) ::testing::internal::GetCapturedStdout(); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("ellipsoid")); ASSERT_NE(lmp->atom->avec, nullptr); - ASSERT_EQ(lmp->atom->natoms, 4); - ASSERT_EQ(lmp->atom->nlocal, 4); + ASSERT_EQ(lmp->atom->natoms, 6); + ASSERT_EQ(lmp->atom->nlocal, 6); ASSERT_EQ(lmp->atom->nellipsoids, 4); ASSERT_EQ(lmp->atom->nghost, 0); ASSERT_NE(lmp->atom->nmax, -1); ASSERT_EQ(lmp->atom->tag_enable, 1); ASSERT_EQ(lmp->atom->molecular, 0); - ASSERT_EQ(lmp->atom->ntypes, 2); + ASSERT_EQ(lmp->atom->ntypes, 3); ASSERT_EQ(lmp->atom->ellipsoid_flag, 1); ASSERT_NE(lmp->atom->ellipsoid, nullptr); ASSERT_NE(lmp->atom->sametag, nullptr); ASSERT_EQ(lmp->atom->tag_consecutive(), 1); ASSERT_EQ(lmp->atom->map_style, 1); ASSERT_EQ(lmp->atom->map_user, 1); - ASSERT_EQ(lmp->atom->map_tag_max, 4); + ASSERT_EQ(lmp->atom->map_tag_max, 6); auto x = lmp->atom->x; auto v = lmp->atom->v; + auto type = lmp->atom->type; auto ellipsoid = lmp->atom->ellipsoid; + auto rmass = lmp->atom->rmass; auto avec = (AtomVecEllipsoid *)lmp->atom->avec; auto bonus = avec->bonus; ASSERT_DOUBLE_EQ(x[GETIDX(1)][0], -2.0); @@ -1432,6 +1445,12 @@ TEST_F(AtomStyleTest, ellipsoid) ASSERT_DOUBLE_EQ(x[GETIDX(4)][0], 2.0); ASSERT_DOUBLE_EQ(x[GETIDX(4)][1], -2.0); ASSERT_DOUBLE_EQ(x[GETIDX(4)][2], 0.1); + ASSERT_DOUBLE_EQ(x[GETIDX(5)][0], 2.0); + ASSERT_DOUBLE_EQ(x[GETIDX(5)][1], 2.0); + ASSERT_DOUBLE_EQ(x[GETIDX(5)][2], -2.1); + ASSERT_DOUBLE_EQ(x[GETIDX(6)][0], 2.0); + ASSERT_DOUBLE_EQ(x[GETIDX(6)][1], -2.0); + ASSERT_DOUBLE_EQ(x[GETIDX(6)][2], 2.1); ASSERT_DOUBLE_EQ(v[GETIDX(1)][0], 0.0); ASSERT_DOUBLE_EQ(v[GETIDX(1)][1], 0.0); ASSERT_DOUBLE_EQ(v[GETIDX(1)][2], 0.0); @@ -1444,10 +1463,31 @@ TEST_F(AtomStyleTest, ellipsoid) ASSERT_DOUBLE_EQ(v[GETIDX(4)][0], 0.0); ASSERT_DOUBLE_EQ(v[GETIDX(4)][1], 0.0); ASSERT_DOUBLE_EQ(v[GETIDX(4)][2], 0.0); + ASSERT_DOUBLE_EQ(v[GETIDX(5)][0], 0.0); + ASSERT_DOUBLE_EQ(v[GETIDX(5)][1], 0.0); + ASSERT_DOUBLE_EQ(v[GETIDX(5)][2], 0.0); + ASSERT_DOUBLE_EQ(v[GETIDX(6)][0], 0.0); + ASSERT_DOUBLE_EQ(v[GETIDX(6)][1], 0.0); + ASSERT_DOUBLE_EQ(v[GETIDX(6)][2], 0.0); + ASSERT_EQ(type[GETIDX(1)], 1); + ASSERT_EQ(type[GETIDX(2)], 1); + ASSERT_EQ(type[GETIDX(3)], 2); + ASSERT_EQ(type[GETIDX(4)], 2); + ASSERT_EQ(type[GETIDX(5)], 3); + ASSERT_EQ(type[GETIDX(6)], 3); ASSERT_EQ(ellipsoid[GETIDX(1)], 0); ASSERT_EQ(ellipsoid[GETIDX(2)], 1); ASSERT_EQ(ellipsoid[GETIDX(3)], 2); ASSERT_EQ(ellipsoid[GETIDX(4)], 3); + ASSERT_EQ(ellipsoid[GETIDX(5)], -1); + ASSERT_EQ(ellipsoid[GETIDX(6)], -1); + ASSERT_DOUBLE_EQ(rmass[GETIDX(1)], 4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(2)], 4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(3)], 2.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(4)], 2.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(5)], 4.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(6)], 4.4); + ASSERT_DOUBLE_EQ(bonus[0].shape[0], 0.5); ASSERT_DOUBLE_EQ(bonus[0].shape[1], 0.5); ASSERT_DOUBLE_EQ(bonus[0].shape[2], 0.5); @@ -1460,51 +1500,168 @@ TEST_F(AtomStyleTest, ellipsoid) ASSERT_DOUBLE_EQ(bonus[3].shape[0], 1.5); ASSERT_DOUBLE_EQ(bonus[3].shape[1], 0.4); ASSERT_DOUBLE_EQ(bonus[3].shape[2], 0.55); - -#if 0 + ASSERT_DOUBLE_EQ(bonus[0].quat[0], 1.0); + ASSERT_DOUBLE_EQ(bonus[0].quat[1], 0.0); + ASSERT_DOUBLE_EQ(bonus[0].quat[2], 0.0); + ASSERT_DOUBLE_EQ(bonus[0].quat[3], 0.0); + ASSERT_DOUBLE_EQ(bonus[1].quat[0], sqrt(0.5)); + ASSERT_DOUBLE_EQ(bonus[1].quat[1], 0.0); + ASSERT_DOUBLE_EQ(bonus[1].quat[2], sqrt(0.5)); + ASSERT_DOUBLE_EQ(bonus[1].quat[3], 0.0); + ASSERT_DOUBLE_EQ(bonus[2].quat[0], 0.9351131265310294); + ASSERT_DOUBLE_EQ(bonus[2].quat[1], 0.25056280708573159); + ASSERT_DOUBLE_EQ(bonus[2].quat[2], 0.0); + ASSERT_DOUBLE_EQ(bonus[2].quat[3], 0.25056280708573159); + ASSERT_DOUBLE_EQ(bonus[3].quat[0], sqrt(0.5)); + ASSERT_DOUBLE_EQ(bonus[3].quat[1], sqrt(5.0 / 30.0)); + ASSERT_DOUBLE_EQ(bonus[3].quat[2], sqrt(5.0 / 30.0)); + ASSERT_DOUBLE_EQ(bonus[3].quat[3], sqrt(5.0 / 30.0)); if (!verbose) ::testing::internal::CaptureStdout(); lmp->input->one("pair_coeff * *"); lmp->input->one("group two id 2:4:2"); lmp->input->one("delete_atoms group two compress no"); - lmp->input->one("write_restart test_atom_styles.restart"); - lmp->input->one("clear"); - EXPECT_THAT(std::string(lmp->atom->atom_style), Eq("atomic")); - lmp->input->one("read_restart test_atom_styles.restart"); + // lmp->input->one("write_restart test_atom_styles.restart"); + // lmp->input->one("clear"); + // lmp->input->one("read_restart test_atom_styles.restart"); lmp->input->one("replicate 1 1 2"); - lmp->input->one("reset_ids"); if (!verbose) ::testing::internal::GetCapturedStdout(); - ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("sphere")); + ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("ellipsoid")); ASSERT_NE(lmp->atom->avec, nullptr); - ASSERT_EQ(lmp->atom->natoms, 4); - ASSERT_EQ(lmp->atom->nlocal, 4); + ASSERT_EQ(lmp->atom->natoms, 8); + ASSERT_EQ(lmp->atom->nlocal, 8); ASSERT_EQ(lmp->atom->nghost, 0); + ASSERT_EQ(lmp->atom->nellipsoids, 4); ASSERT_NE(lmp->atom->nmax, -1); ASSERT_EQ(lmp->atom->tag_enable, 1); ASSERT_EQ(lmp->atom->molecular, 0); - ASSERT_EQ(lmp->atom->ntypes, 2); - ASSERT_EQ(lmp->atom->tag_consecutive(), 1); - ASSERT_EQ(lmp->atom->map_tag_max, 4); + ASSERT_EQ(lmp->atom->ntypes, 3); + ASSERT_EQ(lmp->atom->tag_consecutive(), 0); + ASSERT_EQ(lmp->atom->map_tag_max, 12); - rmass = lmp->atom->rmass; - omega = lmp->atom->omega; - ASSERT_DOUBLE_EQ(rmass[GETIDX(1)], 4.0); - ASSERT_DOUBLE_EQ(rmass[GETIDX(2)], 2.4); - ASSERT_DOUBLE_EQ(rmass[GETIDX(3)], 4.0); - ASSERT_DOUBLE_EQ(rmass[GETIDX(4)], 2.4); - ASSERT_DOUBLE_EQ(omega[GETIDX(1)][0], -0.5); - ASSERT_DOUBLE_EQ(omega[GETIDX(1)][1], 0.1); - ASSERT_DOUBLE_EQ(omega[GETIDX(1)][2], 0.1); - ASSERT_DOUBLE_EQ(omega[GETIDX(2)][0], -1.0); - ASSERT_DOUBLE_EQ(omega[GETIDX(2)][1], 0.0); - ASSERT_DOUBLE_EQ(omega[GETIDX(2)][2], 0.0); - ASSERT_DOUBLE_EQ(omega[GETIDX(3)][0], -0.5); - ASSERT_DOUBLE_EQ(omega[GETIDX(3)][1], 0.1); - ASSERT_DOUBLE_EQ(omega[GETIDX(3)][2], 0.1); - ASSERT_DOUBLE_EQ(omega[GETIDX(4)][0], -1.0); - ASSERT_DOUBLE_EQ(omega[GETIDX(4)][1], 0.0); - ASSERT_DOUBLE_EQ(omega[GETIDX(4)][2], 0.0); -#endif + type = lmp->atom->type; + ellipsoid = lmp->atom->ellipsoid; + rmass = lmp->atom->rmass; + avec = (AtomVecEllipsoid *)lmp->atom->avec; + bonus = avec->bonus; + ASSERT_EQ(type[GETIDX(1)], 1); + ASSERT_EQ(type[GETIDX(3)], 2); + ASSERT_EQ(type[GETIDX(5)], 3); + ASSERT_EQ(type[GETIDX(6)], 3); + ASSERT_EQ(type[GETIDX(7)], 1); + ASSERT_EQ(type[GETIDX(9)], 2); + ASSERT_EQ(type[GETIDX(11)], 3); + ASSERT_EQ(type[GETIDX(12)], 3); + ASSERT_EQ(ellipsoid[GETIDX(1)], 0); + ASSERT_EQ(ellipsoid[GETIDX(3)], 1); + ASSERT_EQ(ellipsoid[GETIDX(5)], -1); + ASSERT_EQ(ellipsoid[GETIDX(6)], -1); + ASSERT_EQ(ellipsoid[GETIDX(7)], 2); + ASSERT_EQ(ellipsoid[GETIDX(9)], 3); + ASSERT_EQ(ellipsoid[GETIDX(11)], -1); + ASSERT_EQ(ellipsoid[GETIDX(12)], -1); + ASSERT_DOUBLE_EQ(rmass[GETIDX(1)], 4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(3)], 2.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(5)], 4.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(6)], 4.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(7)], 4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(9)], 2.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(11)], 4.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(12)], 4.4); + + ASSERT_DOUBLE_EQ(bonus[0].shape[0], 0.5); + ASSERT_DOUBLE_EQ(bonus[0].shape[1], 0.5); + ASSERT_DOUBLE_EQ(bonus[0].shape[2], 0.5); + ASSERT_DOUBLE_EQ(bonus[1].shape[0], 1.5); + ASSERT_DOUBLE_EQ(bonus[1].shape[1], 0.4); + ASSERT_DOUBLE_EQ(bonus[1].shape[2], 0.55); + ASSERT_DOUBLE_EQ(bonus[2].shape[0], 0.5); + ASSERT_DOUBLE_EQ(bonus[2].shape[1], 0.5); + ASSERT_DOUBLE_EQ(bonus[2].shape[2], 0.5); + ASSERT_DOUBLE_EQ(bonus[3].shape[0], 1.5); + ASSERT_DOUBLE_EQ(bonus[3].shape[1], 0.4); + ASSERT_DOUBLE_EQ(bonus[3].shape[2], 0.55); + ASSERT_DOUBLE_EQ(bonus[0].quat[0], 1.0); + ASSERT_DOUBLE_EQ(bonus[0].quat[1], 0.0); + ASSERT_DOUBLE_EQ(bonus[0].quat[2], 0.0); + ASSERT_DOUBLE_EQ(bonus[0].quat[3], 0.0); + ASSERT_DOUBLE_EQ(bonus[1].quat[0], 0.9351131265310294); + ASSERT_DOUBLE_EQ(bonus[1].quat[1], 0.25056280708573159); + ASSERT_DOUBLE_EQ(bonus[1].quat[2], 0.0); + ASSERT_DOUBLE_EQ(bonus[1].quat[3], 0.25056280708573159); + ASSERT_DOUBLE_EQ(bonus[2].quat[0], 1.0); + ASSERT_DOUBLE_EQ(bonus[2].quat[1], 0.0); + ASSERT_DOUBLE_EQ(bonus[2].quat[2], 0.0); + ASSERT_DOUBLE_EQ(bonus[2].quat[3], 0.0); + ASSERT_DOUBLE_EQ(bonus[3].quat[0], 0.9351131265310294); + ASSERT_DOUBLE_EQ(bonus[3].quat[1], 0.25056280708573159); + ASSERT_DOUBLE_EQ(bonus[3].quat[2], 0.0); + ASSERT_DOUBLE_EQ(bonus[3].quat[3], 0.25056280708573159); + + if (!verbose) ::testing::internal::CaptureStdout(); + lmp->input->one("reset_ids"); + if (!verbose) ::testing::internal::GetCapturedStdout(); + ASSERT_EQ(lmp->atom->nellipsoids, 4); + ASSERT_EQ(lmp->atom->tag_consecutive(), 1); + ASSERT_EQ(lmp->atom->map_tag_max, 8); + + ellipsoid = lmp->atom->ellipsoid; + rmass = lmp->atom->rmass; + avec = (AtomVecEllipsoid *)lmp->atom->avec; + bonus = avec->bonus; + ASSERT_EQ(type[GETIDX(1)], 1); + ASSERT_EQ(type[GETIDX(2)], 3); + ASSERT_EQ(type[GETIDX(3)], 2); + ASSERT_EQ(type[GETIDX(4)], 3); + ASSERT_EQ(type[GETIDX(5)], 1); + ASSERT_EQ(type[GETIDX(6)], 3); + ASSERT_EQ(type[GETIDX(7)], 2); + ASSERT_EQ(type[GETIDX(8)], 3); + ASSERT_EQ(ellipsoid[GETIDX(1)], 0); + ASSERT_EQ(ellipsoid[GETIDX(2)], -1); + ASSERT_EQ(ellipsoid[GETIDX(3)], 1); + ASSERT_EQ(ellipsoid[GETIDX(4)], -1); + ASSERT_EQ(ellipsoid[GETIDX(5)], 2); + ASSERT_EQ(ellipsoid[GETIDX(6)], -1); + ASSERT_EQ(ellipsoid[GETIDX(7)], 3); + ASSERT_EQ(ellipsoid[GETIDX(8)], -1); + ASSERT_DOUBLE_EQ(rmass[GETIDX(1)], 4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(2)], 4.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(3)], 2.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(4)], 4.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(5)], 4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(6)], 4.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(7)], 2.4); + ASSERT_DOUBLE_EQ(rmass[GETIDX(8)], 4.4); + + ASSERT_DOUBLE_EQ(bonus[0].shape[0], 0.5); + ASSERT_DOUBLE_EQ(bonus[0].shape[1], 0.5); + ASSERT_DOUBLE_EQ(bonus[0].shape[2], 0.5); + ASSERT_DOUBLE_EQ(bonus[1].shape[0], 1.5); + ASSERT_DOUBLE_EQ(bonus[1].shape[1], 0.4); + ASSERT_DOUBLE_EQ(bonus[1].shape[2], 0.55); + ASSERT_DOUBLE_EQ(bonus[2].shape[0], 0.5); + ASSERT_DOUBLE_EQ(bonus[2].shape[1], 0.5); + ASSERT_DOUBLE_EQ(bonus[2].shape[2], 0.5); + ASSERT_DOUBLE_EQ(bonus[3].shape[0], 1.5); + ASSERT_DOUBLE_EQ(bonus[3].shape[1], 0.4); + ASSERT_DOUBLE_EQ(bonus[3].shape[2], 0.55); + ASSERT_DOUBLE_EQ(bonus[0].quat[0], 1.0); + ASSERT_DOUBLE_EQ(bonus[0].quat[1], 0.0); + ASSERT_DOUBLE_EQ(bonus[0].quat[2], 0.0); + ASSERT_DOUBLE_EQ(bonus[0].quat[3], 0.0); + ASSERT_DOUBLE_EQ(bonus[1].quat[0], 0.9351131265310294); + ASSERT_DOUBLE_EQ(bonus[1].quat[1], 0.25056280708573159); + ASSERT_DOUBLE_EQ(bonus[1].quat[2], 0.0); + ASSERT_DOUBLE_EQ(bonus[1].quat[3], 0.25056280708573159); + ASSERT_DOUBLE_EQ(bonus[2].quat[0], 1.0); + ASSERT_DOUBLE_EQ(bonus[2].quat[1], 0.0); + ASSERT_DOUBLE_EQ(bonus[2].quat[2], 0.0); + ASSERT_DOUBLE_EQ(bonus[2].quat[3], 0.0); + ASSERT_DOUBLE_EQ(bonus[3].quat[0], 0.9351131265310294); + ASSERT_DOUBLE_EQ(bonus[3].quat[1], 0.25056280708573159); + ASSERT_DOUBLE_EQ(bonus[3].quat[2], 0.0); + ASSERT_DOUBLE_EQ(bonus[3].quat[3], 0.25056280708573159); } } // namespace LAMMPS_NS