Skip to content

Commit 4bc0e42

Browse files
committed
Create test_deepspin_model_devi_hpp.cc
1 parent 8fb6498 commit 4bc0e42

File tree

1 file changed

+166
-0
lines changed

1 file changed

+166
-0
lines changed
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
// SPDX-License-Identifier: LGPL-3.0-or-later
2+
#include <gtest/gtest.h>
3+
4+
#include <algorithm>
5+
#include <cmath>
6+
#include <fstream>
7+
#include <vector>
8+
9+
#include "deepmd.hpp"
10+
#include "test_utils.h"
11+
12+
template <class VALUETYPE>
13+
class TestInferDeepSpinModeDevi : public ::testing::Test {
14+
protected:
15+
std::vector<VALUETYPE> coord = {12.83, 2.56, 2.18, 12.09, 2.87, 2.74,
16+
3.51, 2.51, 2.60, 4.27, 3.22, 1.56};
17+
std::vector<VALUETYPE> spin = {0., 0., 1.2737, 0., 0., 1.2737,
18+
0., 0., 0., 0., 0., 0.};
19+
std::vector<int> atype = {0, 0, 1, 1};
20+
std::vector<VALUETYPE> box = {13., 0., 0., 0., 13., 0., 0., 0., 13.};
21+
int natoms;
22+
23+
deepmd::hpp::DeepSpin dp0;
24+
deepmd::hpp::DeepSpin dp1;
25+
deepmd::hpp::DeepSpinModelDevi dp_md;
26+
27+
void SetUp() override {
28+
{
29+
std::string file_name = "../../tests/infer/deepspin_nlist.pbtxt";
30+
deepmd::hpp::convert_pbtxt_to_pb("../../tests/infer/deepspin_nlist.pbtxt",
31+
"deepspin_nlist.pb");
32+
dp0.init("deepspin_nlist.pb");
33+
}
34+
{
35+
std::string file_name = "../../tests/infer/deepspin_nlist-2.pbtxt";
36+
deepmd::hpp::convert_pbtxt_to_pb(
37+
"../../tests/infer/deepspin_nlist-2.pbtxt", "deepspin_nlist-2.pb");
38+
dp1.init("deepspin_nlist-2.pb");
39+
}
40+
dp_md.init(
41+
std::vector<std::string>({"deepspin_nlist.pb", "deepspin_nlist-2.pb"}));
42+
};
43+
44+
void TearDown() override {};
45+
};
46+
47+
TYPED_TEST_SUITE(TestInferDeepSpinModeDevi, ValueTypes);
48+
49+
TYPED_TEST(TestInferDeepSpinModeDevi, attrs) {
50+
using VALUETYPE = TypeParam;
51+
std::vector<VALUETYPE>& coord = this->coord;
52+
std::vector<VALUETYPE>& spin = this->spin;
53+
std::vector<int>& atype = this->atype;
54+
std::vector<VALUETYPE>& box = this->box;
55+
int& natoms = this->natoms;
56+
deepmd::hpp::DeepSpin& dp0 = this->dp0;
57+
deepmd::hpp::DeepSpin& dp1 = this->dp1;
58+
deepmd::hpp::DeepSpinModelDevi& dp_md = this->dp_md;
59+
EXPECT_EQ(dp0.cutoff(), dp_md.cutoff());
60+
EXPECT_EQ(dp0.numb_types(), dp_md.numb_types());
61+
// EXPECT_EQ(dp0.dim_fparam(), dp_md.dim_fparam());
62+
// EXPECT_EQ(dp0.dim_aparam(), dp_md.dim_aparam());
63+
EXPECT_EQ(dp1.cutoff(), dp_md.cutoff());
64+
EXPECT_EQ(dp1.numb_types(), dp_md.numb_types());
65+
// EXPECT_EQ(dp1.dim_fparam(), dp_md.dim_fparam());
66+
// EXPECT_EQ(dp1.dim_aparam(), dp_md.dim_aparam());
67+
}
68+
69+
TYPED_TEST(TestInferDeepSpinModeDevi, cpu_build_nlist) {
70+
using VALUETYPE = TypeParam;
71+
std::vector<VALUETYPE>& coord = this->coord;
72+
std::vector<VALUETYPE>& spin = this->spin;
73+
std::vector<int>& atype = this->atype;
74+
std::vector<VALUETYPE>& box = this->box;
75+
int& natoms = this->natoms;
76+
deepmd::hpp::DeepSpin& dp0 = this->dp0;
77+
deepmd::hpp::DeepSpin& dp1 = this->dp1;
78+
deepmd::hpp::DeepSpinModelDevi& dp_md = this->dp_md;
79+
float rc = dp_md.cutoff();
80+
int nloc = coord.size() / 3;
81+
82+
int nmodel = 2;
83+
std::vector<double> edir(nmodel), emd;
84+
std::vector<std::vector<VALUETYPE> > fdir(nmodel), fmagdir(nmodel),
85+
vdir(nmodel), fmd(nmodel), fmmagd(nmodel), vmd;
86+
dp0.compute(edir[0], fdir[0], fmagdir[0], vdir[0], coord, spin, atype, box);
87+
dp1.compute(edir[1], fdir[1], fmagdir[1], vdir[1], coord, spin, atype, box);
88+
dp_md.compute(emd, fmd, fmmagd, vmd, coord, spin, atype, box);
89+
90+
EXPECT_EQ(edir.size(), emd.size());
91+
EXPECT_EQ(fdir.size(), fmd.size());
92+
EXPECT_EQ(fmagdir.size(), fmmagd.size());
93+
// EXPECT_EQ(vdir.size(), vmd.size());
94+
for (int kk = 0; kk < nmodel; ++kk) {
95+
EXPECT_EQ(fdir[kk].size(), fmd[kk].size());
96+
EXPECT_EQ(fmagdir[kk].size(), fmmagd[kk].size());
97+
// EXPECT_EQ(vdir[kk].size(), vmd[kk].size());
98+
}
99+
for (int kk = 0; kk < nmodel; ++kk) {
100+
EXPECT_LT(fabs(edir[kk] - emd[kk]), EPSILON);
101+
for (int ii = 0; ii < fdir[0].size(); ++ii) {
102+
EXPECT_LT(fabs(fdir[kk][ii] - fmd[kk][ii]), EPSILON);
103+
}
104+
for (int ii = 0; ii < fmagdir[0].size(); ++ii) {
105+
EXPECT_LT(fabs(fmagdir[kk][ii] - fmmagd[kk][ii]), EPSILON);
106+
}
107+
// for (int ii = 0; ii < vdir[0].size(); ++ii) {
108+
// EXPECT_LT(fabs(vdir[kk][ii] - vmd[kk][ii]), EPSILON);
109+
// }
110+
}
111+
}
112+
113+
TYPED_TEST(TestInferDeepSpinModeDevi, cpu_build_nlist_atomic) {
114+
using VALUETYPE = TypeParam;
115+
std::vector<VALUETYPE>& coord = this->coord;
116+
std::vector<VALUETYPE>& spin = this->spin;
117+
std::vector<int>& atype = this->atype;
118+
std::vector<VALUETYPE>& box = this->box;
119+
int& natoms = this->natoms;
120+
deepmd::hpp::DeepSpin& dp0 = this->dp0;
121+
deepmd::hpp::DeepSpin& dp1 = this->dp1;
122+
deepmd::hpp::DeepSpinModelDevi& dp_md = this->dp_md;
123+
124+
int nmodel = 2;
125+
std::vector<double> edir(nmodel), emd;
126+
std::vector<std::vector<VALUETYPE> > fdir(nmodel), fmagdir(nmodel),
127+
vdir(nmodel), fmd(nmodel), fmmagd(nmodel), vmd, aedir(nmodel), aemd,
128+
avdir(nmodel), avmd(nmodel);
129+
dp0.compute(edir[0], fdir[0], fmagdir[0], vdir[0], aedir[0], avdir[0], coord,
130+
spin, atype, box);
131+
dp1.compute(edir[1], fdir[1], fmagdir[1], vdir[1], aedir[1], avdir[1], coord,
132+
spin, atype, box);
133+
dp_md.compute(emd, fmd, fmmagd, vmd, aemd, avmd, coord, spin, atype, box);
134+
135+
EXPECT_EQ(edir.size(), emd.size());
136+
EXPECT_EQ(fdir.size(), fmd.size());
137+
EXPECT_EQ(fmagdir.size(), fmmagd.size());
138+
// EXPECT_EQ(vdir.size(), vmd.size());
139+
EXPECT_EQ(aedir.size(), aemd.size());
140+
// EXPECT_EQ(avdir.size(), avmd.size());
141+
for (int kk = 0; kk < nmodel; ++kk) {
142+
EXPECT_EQ(fdir[kk].size(), fmd[kk].size());
143+
EXPECT_EQ(fmagdir[kk].size(), fmmagd[kk].size());
144+
// EXPECT_EQ(vdir[kk].size(), vmd[kk].size());
145+
EXPECT_EQ(aedir[kk].size(), aemd[kk].size());
146+
// EXPECT_EQ(avdir[kk].size(), avmd[kk].size());
147+
}
148+
for (int kk = 0; kk < nmodel; ++kk) {
149+
EXPECT_LT(fabs(edir[kk] - emd[kk]), EPSILON);
150+
for (int ii = 0; ii < fdir[0].size(); ++ii) {
151+
EXPECT_LT(fabs(fdir[kk][ii] - fmd[kk][ii]), EPSILON);
152+
}
153+
for (int ii = 0; ii < fmagdir[0].size(); ++ii) {
154+
EXPECT_LT(fabs(fmagdir[kk][ii] - fmmagd[kk][ii]), EPSILON);
155+
}
156+
// for (int ii = 0; ii < vdir[0].size(); ++ii) {
157+
// EXPECT_LT(fabs(vdir[kk][ii] - vmd[kk][ii]), EPSILON);
158+
// }
159+
for (int ii = 0; ii < aedir[0].size(); ++ii) {
160+
EXPECT_LT(fabs(aedir[kk][ii] - aemd[kk][ii]), EPSILON);
161+
}
162+
// for (int ii = 0; ii < avdir[0].size(); ++ii) {
163+
// EXPECT_LT(fabs(avdir[kk][ii] - avmd[kk][ii]), EPSILON);
164+
// }
165+
}
166+
}

0 commit comments

Comments
 (0)