Skip to content

Commit 3eed8b5

Browse files
committed
Added: Unit test that provokes the mixed/periodicity failure.
Changed: Using EXPECT instead of ASSERT to catch all errors.
1 parent e6c1292 commit 3eed8b5

File tree

1 file changed

+65
-35
lines changed

1 file changed

+65
-35
lines changed

src/SIM/Test/TestSIM.C

+65-35
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212

1313
#include "SIM2D.h"
1414
#include "SIM3D.h"
15+
#include "ASMs3D.h"
16+
#include "ASMmxBase.h"
1517
#include "IntegrandBase.h"
1618

1719
#include "gtest/gtest.h"
18-
#include "tinyxml.h"
1920

2021

2122
template<class Dim> class TestProjectSIM : public Dim
@@ -44,7 +45,7 @@ private:
4445
const std::vector<int>&) const
4546
{
4647
s.resize(1);
47-
s(1) = X[0] + X[1] + X[2];
48+
s(1) = X.sum();
4849
return true;
4950
}
5051

@@ -56,9 +57,9 @@ private:
5657
class DummyIntegrand : public IntegrandBase {};
5758

5859

59-
TEST(TestSIM, UniqueBoundaryNodes)
60+
TEST(TestSIM2D, UniqueBoundaryNodes)
6061
{
61-
SIM2D sim(new DummyIntegrand(),1);
62+
SIM2D sim(new DummyIntegrand());
6263
ASSERT_TRUE(sim.read("src/SIM/Test/refdata/boundary_nodes.xinp"));
6364
ASSERT_TRUE(sim.preprocess());
6465

@@ -74,91 +75,120 @@ TEST(TestSIM2D, ProjectSolution)
7475
{
7576
TestProjectSIM<SIM2D> sim({1});
7677

77-
Matrix ssol;
78-
ASSERT_TRUE(sim.project(ssol, Vector(sim.getNoDOFs())));
78+
Vector ssol, psol(sim.getNoDOFs());
79+
ASSERT_TRUE(sim.project(ssol,psol));
7980

8081
size_t n = 1;
8182
for (size_t j = 0; j < 2; ++j)
8283
for (size_t i = 0; i < 2; ++i)
83-
ASSERT_FLOAT_EQ(ssol(1, n++), i + j);
84+
EXPECT_FLOAT_EQ(ssol(n++), i + j);
8485
}
8586

8687

8788
TEST(TestSIM2D, ProjectSolutionMixed)
8889
{
8990
TestProjectSIM<SIM2D> sim({1,1});
9091

91-
Matrix ssol;
92-
ASSERT_TRUE(sim.project(ssol, Vector(sim.getNoDOFs())));
92+
Vector ssol, psol(sim.getNoDOFs());
93+
ASSERT_TRUE(sim.project(ssol,psol));
9394

9495
size_t n = 1;
9596
for (size_t j = 0; j < 3; ++j)
9697
for (size_t i = 0; i < 3; ++i)
97-
ASSERT_FLOAT_EQ(ssol(1, n++), i/2.0 + j/2.0);
98+
EXPECT_FLOAT_EQ(ssol(n++), i/2.0 + j/2.0);
9899
}
99100

100101

101102
TEST(TestSIM3D, ProjectSolution)
102103
{
103104
TestProjectSIM<SIM3D> sim({1});
104105

105-
Matrix ssol;
106-
ASSERT_TRUE(sim.project(ssol, Vector(sim.getNoDOFs())));
106+
Vector ssol, psol(sim.getNoDOFs());
107+
ASSERT_TRUE(sim.project(ssol,psol));
107108

108109
size_t n = 1;
109110
for (size_t k = 0; k < 2; ++k)
110111
for (size_t j = 0; j < 2; ++j)
111112
for (size_t i = 0; i < 2; ++i)
112-
ASSERT_FLOAT_EQ(ssol(1, n++), i + j + k);
113+
EXPECT_FLOAT_EQ(ssol(n++), i + j + k);
113114
}
114115

115116

116117
TEST(TestSIM3D, ProjectSolutionMixed)
117118
{
118119
TestProjectSIM<SIM3D> sim({1,1});
119120

120-
Matrix ssol;
121-
ASSERT_TRUE(sim.project(ssol, Vector(sim.getNoDOFs())));
121+
Vector ssol, psol(sim.getNoDOFs());
122+
ASSERT_TRUE(sim.project(ssol,psol));
122123

123124
size_t n = 1;
124125
for (size_t k = 0; k < 3; ++k)
125126
for (size_t j = 0; j < 3; ++j)
126127
for (size_t i = 0; i < 3; ++i)
127-
ASSERT_FLOAT_EQ(ssol(1, n++), i/2.0 + j/2.0 + k/2.0);
128+
EXPECT_FLOAT_EQ(ssol(n++), i/2.0 + j/2.0 + k/2.0);
128129
}
129130

130131

131-
TEST(TestSIM, InjectPatchSolution)
132+
TEST(TestSIM2D, InjectPatchSolution)
132133
{
133134
TestProjectSIM<SIM2D> sim({1,1});
135+
size_t n1 = sim.getNoNodes(true,1);
136+
size_t n2 = sim.getNoNodes(true,2);
134137

135-
Vector sol(2*sim.getNoNodes(true, 1) + sim.getNoNodes(true, 2));
136-
Vector lsol(2*sim.getNoNodes(true, 1));
138+
Vector sol(2*n1 + n2);
139+
Vector lsol(2*n1);
137140
size_t i, ofs;
138-
for (i = 0; i < sim.getNoNodes(true,1); i++)
141+
for (i = 0; i < n1; i++)
139142
lsol[2*i] = lsol[2*i+1] = i+1;
140143

141144
ASSERT_TRUE(sim.addMixedMADOF(1, 2));
142145
sim.injectPatchSolution(sol, lsol, 0, 2, 1);
143-
for (i = ofs = 0; i < sim.getNoNodes(true,1); i++, ofs += 2) {
144-
ASSERT_FLOAT_EQ(sol[ofs], i+1);
145-
ASSERT_FLOAT_EQ(sol[ofs+1], i+1);
146+
for (i = ofs = 0; i < n1; i++) {
147+
EXPECT_FLOAT_EQ(sol[ofs++], i+1);
148+
EXPECT_FLOAT_EQ(sol[ofs++], i+1);
146149
}
147-
for (i = 0; i < sim.getNoNodes(true,2); i++, ofs++)
148-
ASSERT_FLOAT_EQ(sol[ofs], 0);
150+
for (i = 0; i < n2; i++)
151+
EXPECT_FLOAT_EQ(sol[ofs++], 0);
149152

150-
ASSERT_TRUE(sim.addMixedMADOF(2, 2));
151-
Vector sol2(sim.getNoNodes(true, 1) + 2*sim.getNoNodes(true, 2));
152-
Vector lsol2(2*sim.getNoNodes(true, 2));
153-
for (i = 0; i < sim.getNoNodes(true,2); i++)
153+
Vector sol2(n1 + 2*n2);
154+
Vector lsol2(2*n2);
155+
for (i = 0; i < n2; i++)
154156
lsol2[2*i] = lsol2[2*i+1] = i+1;
155157

158+
ASSERT_TRUE(sim.addMixedMADOF(2, 2));
156159
sim.injectPatchSolution(sol2, lsol2, 0, 2, 2);
157-
for (i = ofs = 0; i < sim.getNoNodes(true,1); i++, ofs++)
158-
ASSERT_FLOAT_EQ(sol2[ofs], 0);
159-
160-
for (i = 0; i < sim.getNoNodes(true,2); i++, ofs += 2) {
161-
ASSERT_FLOAT_EQ(sol2[ofs], i+1);
162-
ASSERT_FLOAT_EQ(sol2[ofs+1], i+1);
160+
for (i = ofs = 0; i < n1; i++)
161+
EXPECT_FLOAT_EQ(sol2[ofs++], 0);
162+
for (i = 0; i < n2; i++) {
163+
EXPECT_FLOAT_EQ(sol2[ofs++], i+1);
164+
EXPECT_FLOAT_EQ(sol2[ofs++], i+1);
163165
}
164166
}
167+
168+
169+
class TestSIM3Dmx : public SIM3D
170+
{
171+
public:
172+
TestSIM3Dmx() : SIM3D({3,1}) { myProblem = new DummyIntegrand(); }
173+
};
174+
175+
176+
TEST(TestSIM3D, Periodic)
177+
{
178+
ASMmxBase::Type = ASMmxBase::REDUCED_CONT_RAISE_BASIS1;
179+
180+
TestSIM3Dmx sim;
181+
ASSERT_TRUE(sim.createDefaultModel());
182+
183+
ASMs3D* pch = dynamic_cast<ASMs3D*>(sim.getPatch(1));
184+
ASSERT_TRUE(pch != nullptr);
185+
ASSERT_TRUE(pch->uniformRefine(0,1));
186+
ASSERT_TRUE(pch->uniformRefine(1,1));
187+
ASSERT_TRUE(pch->uniformRefine(2,1));
188+
ASSERT_TRUE(sim.createFEMmodel());
189+
190+
pch->closeFaces(1);
191+
pch->closeFaces(3);
192+
193+
ASSERT_TRUE(sim.preprocess());
194+
}

0 commit comments

Comments
 (0)