12
12
13
13
#include "SIM2D.h"
14
14
#include "SIM3D.h"
15
+ #include "ASMs3D.h"
16
+ #include "ASMmxBase.h"
15
17
#include "IntegrandBase.h"
16
18
17
19
#include "gtest/gtest.h"
18
- #include "tinyxml.h"
19
20
20
21
21
22
template < class Dim > class TestProjectSIM : public Dim
@@ -44,7 +45,7 @@ private:
44
45
const std ::vector < int > & ) const
45
46
{
46
47
s .resize (1 );
47
- s (1 ) = X [ 0 ] + X [ 1 ] + X [ 2 ] ;
48
+ s (1 ) = X . sum () ;
48
49
return true;
49
50
}
50
51
@@ -56,9 +57,9 @@ private:
56
57
class DummyIntegrand : public IntegrandBase {};
57
58
58
59
59
- TEST (TestSIM , UniqueBoundaryNodes )
60
+ TEST (TestSIM2D , UniqueBoundaryNodes )
60
61
{
61
- SIM2D sim (new DummyIntegrand (), 1 );
62
+ SIM2D sim (new DummyIntegrand ());
62
63
ASSERT_TRUE (sim .read ("src/SIM/Test/refdata/boundary_nodes.xinp" ));
63
64
ASSERT_TRUE (sim .preprocess ());
64
65
@@ -74,91 +75,120 @@ TEST(TestSIM2D, ProjectSolution)
74
75
{
75
76
TestProjectSIM < SIM2D > sim ({1 });
76
77
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 ));
79
80
80
81
size_t n = 1 ;
81
82
for (size_t j = 0 ; j < 2 ; ++ j )
82
83
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 );
84
85
}
85
86
86
87
87
88
TEST (TestSIM2D , ProjectSolutionMixed )
88
89
{
89
90
TestProjectSIM < SIM2D > sim ({1 ,1 });
90
91
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 ));
93
94
94
95
size_t n = 1 ;
95
96
for (size_t j = 0 ; j < 3 ; ++ j )
96
97
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 );
98
99
}
99
100
100
101
101
102
TEST (TestSIM3D , ProjectSolution )
102
103
{
103
104
TestProjectSIM < SIM3D > sim ({1 });
104
105
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 ));
107
108
108
109
size_t n = 1 ;
109
110
for (size_t k = 0 ; k < 2 ; ++ k )
110
111
for (size_t j = 0 ; j < 2 ; ++ j )
111
112
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 );
113
114
}
114
115
115
116
116
117
TEST (TestSIM3D , ProjectSolutionMixed )
117
118
{
118
119
TestProjectSIM < SIM3D > sim ({1 ,1 });
119
120
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 ));
122
123
123
124
size_t n = 1 ;
124
125
for (size_t k = 0 ; k < 3 ; ++ k )
125
126
for (size_t j = 0 ; j < 3 ; ++ j )
126
127
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 );
128
129
}
129
130
130
131
131
- TEST (TestSIM , InjectPatchSolution )
132
+ TEST (TestSIM2D , InjectPatchSolution )
132
133
{
133
134
TestProjectSIM < SIM2D > sim ({1 ,1 });
135
+ size_t n1 = sim .getNoNodes (true,1 );
136
+ size_t n2 = sim .getNoNodes (true,2 );
134
137
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 );
137
140
size_t i , ofs ;
138
- for (i = 0 ; i < sim . getNoNodes (true, 1 ) ; i ++ )
141
+ for (i = 0 ; i < n1 ; i ++ )
139
142
lsol [2 * i ] = lsol [2 * i + 1 ] = i + 1 ;
140
143
141
144
ASSERT_TRUE (sim .addMixedMADOF (1 , 2 ));
142
145
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 );
146
149
}
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 );
149
152
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 ++ )
154
156
lsol2 [2 * i ] = lsol2 [2 * i + 1 ] = i + 1 ;
155
157
158
+ ASSERT_TRUE (sim .addMixedMADOF (2 , 2 ));
156
159
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 );
163
165
}
164
166
}
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