Skip to content

Commit f672dbd

Browse files
committed
Added: Unit test that provokes the mixed/periodicity failure.
Changed: Mainly cosmetics in TestSIM2D::InjectPatchSolution.
1 parent c2162ab commit f672dbd

File tree

1 file changed

+57
-34
lines changed

1 file changed

+57
-34
lines changed

src/SIM/Test/TestSIM.C

+57-34
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@
1212

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

1820
#include "gtest/gtest.h"
19-
#include "tinyxml.h"
2021

2122

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

@@ -57,7 +58,7 @@ private:
5758
class DummyIntegrand : public IntegrandBase {};
5859

5960

60-
TEST(TestSIM, UniqueBoundaryNodes)
61+
TEST(TestSIM2D, UniqueBoundaryNodes)
6162
{
6263
SIM2D sim(new DummyIntegrand(),1);
6364
ASSERT_TRUE(sim.read("src/SIM/Test/refdata/boundary_nodes.xinp"));
@@ -75,94 +76,116 @@ TEST(TestSIM2D, ProjectSolution)
7576
{
7677
TestProjectSIM<SIM2D> sim({1});
7778

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

8182
size_t n = 1;
8283
for (size_t j = 0; j < 2; ++j)
8384
for (size_t i = 0; i < 2; ++i)
84-
EXPECT_FLOAT_EQ(ssol(1, n++), i + j);
85+
EXPECT_FLOAT_EQ(ssol(n++), i + j);
8586
}
8687

8788

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

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

9596
size_t n = 1;
9697
for (size_t j = 0; j < 3; ++j)
9798
for (size_t i = 0; i < 3; ++i)
98-
EXPECT_FLOAT_EQ(ssol(1, n++), i/2.0 + j/2.0);
99+
EXPECT_FLOAT_EQ(ssol(n++), i/2.0 + j/2.0);
99100
}
100101

101102

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

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

109110
size_t n = 1;
110111
for (size_t k = 0; k < 2; ++k)
111112
for (size_t j = 0; j < 2; ++j)
112113
for (size_t i = 0; i < 2; ++i)
113-
EXPECT_FLOAT_EQ(ssol(1, n++), i + j + k);
114+
EXPECT_FLOAT_EQ(ssol(n++), i + j + k);
114115
}
115116

116117

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

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

124125
size_t n = 1;
125126
for (size_t k = 0; k < 3; ++k)
126127
for (size_t j = 0; j < 3; ++j)
127128
for (size_t i = 0; i < 3; ++i)
128-
EXPECT_FLOAT_EQ(ssol(1, n++), i/2.0 + j/2.0 + k/2.0);
129+
EXPECT_FLOAT_EQ(ssol(n++), i/2.0 + j/2.0 + k/2.0);
129130
}
130131

131132

132-
TEST(TestSIM, InjectPatchSolution)
133+
TEST(TestSIM2D, InjectPatchSolution)
133134
{
134135
ASMmxBase::Type = ASMmxBase::REDUCED_CONT_RAISE_BASIS1;
135136
ASMmxBase::geoBasis = 2;
136137
TestProjectSIM<SIM2D> sim({1,1});
137138
ASMbase* pch = sim.getPatch(1);
139+
size_t n1 = sim.getNoNodes(1);
140+
size_t n2 = sim.getNoNodes(2);
138141

139-
Vector sol(2*sim.getNoNodes(1) + sim.getNoNodes(2));
140-
Vector lsol(2*sim.getNoNodes(1));
142+
Vector sol(2*n1 + n2);
143+
Vector lsol(2*n1);
141144
size_t i, ofs;
142-
for (i = 0; i < sim.getNoNodes(1); i++)
145+
for (i = 0; i < n1; i++)
143146
lsol[2*i] = lsol[2*i+1] = i+1;
144147

145148
ASSERT_TRUE(sim.addMixedMADOF(1, 2));
146149
sim.injectPatchSolution(sol, lsol, pch, 2, 1);
147-
for (i = ofs = 0; i < sim.getNoNodes(1); i++, ofs += 2) {
148-
EXPECT_FLOAT_EQ(sol[ofs], i+1);
149-
EXPECT_FLOAT_EQ(sol[ofs+1], i+1);
150+
for (i = ofs = 0; i < n1; i++) {
151+
EXPECT_FLOAT_EQ(sol[ofs++], i+1);
152+
EXPECT_FLOAT_EQ(sol[ofs++], i+1);
150153
}
151-
for (i = 0; i < sim.getNoNodes(2); i++, ofs++)
152-
EXPECT_FLOAT_EQ(sol[ofs], 0);
154+
for (i = 0; i < n2; i++)
155+
EXPECT_FLOAT_EQ(sol[ofs++], 0);
153156

154-
ASSERT_TRUE(sim.addMixedMADOF(2, 2));
155-
Vector sol2(sim.getNoNodes(1) + 2*sim.getNoNodes(2));
156-
Vector lsol2(2*sim.getNoNodes(2));
157-
for (i = 0; i < sim.getNoNodes(2); i++)
157+
Vector sol2(n1 + 2*n2);
158+
Vector lsol2(2*n2);
159+
for (i = 0; i < n2; i++)
158160
lsol2[2*i] = lsol2[2*i+1] = i+1;
159161

162+
ASSERT_TRUE(sim.addMixedMADOF(2, 2));
160163
sim.injectPatchSolution(sol2, lsol2, pch, 2, 2);
161-
for (i = ofs = 0; i < sim.getNoNodes(1); i++, ofs++)
162-
EXPECT_FLOAT_EQ(sol2[ofs], 0);
163-
164-
for (i = 0; i < sim.getNoNodes(2); i++, ofs += 2) {
165-
EXPECT_FLOAT_EQ(sol2[ofs], i+1);
166-
EXPECT_FLOAT_EQ(sol2[ofs+1], i+1);
164+
for (i = ofs = 0; i < n1; i++)
165+
EXPECT_FLOAT_EQ(sol2[ofs++], 0);
166+
for (i = 0; i < n2; i++) {
167+
EXPECT_FLOAT_EQ(sol2[ofs++], i+1);
168+
EXPECT_FLOAT_EQ(sol2[ofs++], i+1);
167169
}
168170
}
171+
172+
173+
TEST(TestSIM3D, Periodic)
174+
{
175+
ASMmxBase::Type = ASMmxBase::REDUCED_CONT_RAISE_BASIS1;
176+
177+
SIM3D sim({3,1});
178+
ASSERT_TRUE(sim.createDefaultModel());
179+
180+
ASMs3D* pch = dynamic_cast<ASMs3D*>(sim.getPatch(1));
181+
ASSERT_TRUE(pch != nullptr);
182+
ASSERT_TRUE(pch->uniformRefine(0,1));
183+
ASSERT_TRUE(pch->uniformRefine(1,1));
184+
ASSERT_TRUE(pch->uniformRefine(2,1));
185+
ASSERT_TRUE(sim.createFEMmodel());
186+
187+
pch->closeBoundaries(1,0,1);
188+
pch->closeBoundaries(3,0,1);
189+
190+
ASSERT_TRUE(sim.preprocess());
191+
}

0 commit comments

Comments
 (0)