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
#include "ASMmxBase.h"
17
19
18
20
#include "gtest/gtest.h"
19
- #include "tinyxml.h"
20
21
21
22
22
23
template < class Dim > class TestProjectSIM : public Dim
@@ -45,7 +46,7 @@ private:
45
46
const std ::vector < int > & ) const
46
47
{
47
48
s .resize (1 );
48
- s (1 ) = X [ 0 ] + X [ 1 ] + X [ 2 ] ;
49
+ s (1 ) = X . sum () ;
49
50
return true;
50
51
}
51
52
@@ -57,7 +58,7 @@ private:
57
58
class DummyIntegrand : public IntegrandBase {};
58
59
59
60
60
- TEST (TestSIM , UniqueBoundaryNodes )
61
+ TEST (TestSIM2D , UniqueBoundaryNodes )
61
62
{
62
63
SIM2D sim (new DummyIntegrand (),1 );
63
64
ASSERT_TRUE (sim .read ("src/SIM/Test/refdata/boundary_nodes.xinp" ));
@@ -75,94 +76,116 @@ TEST(TestSIM2D, ProjectSolution)
75
76
{
76
77
TestProjectSIM < SIM2D > sim ({1 });
77
78
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 ));
80
81
81
82
size_t n = 1 ;
82
83
for (size_t j = 0 ; j < 2 ; ++ j )
83
84
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 );
85
86
}
86
87
87
88
88
89
TEST (TestSIM2D , ProjectSolutionMixed )
89
90
{
90
91
TestProjectSIM < SIM2D > sim ({1 ,1 });
91
92
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 ));
94
95
95
96
size_t n = 1 ;
96
97
for (size_t j = 0 ; j < 3 ; ++ j )
97
98
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 );
99
100
}
100
101
101
102
102
103
TEST (TestSIM3D , ProjectSolution )
103
104
{
104
105
TestProjectSIM < SIM3D > sim ({1 });
105
106
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 ));
108
109
109
110
size_t n = 1 ;
110
111
for (size_t k = 0 ; k < 2 ; ++ k )
111
112
for (size_t j = 0 ; j < 2 ; ++ j )
112
113
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 );
114
115
}
115
116
116
117
117
118
TEST (TestSIM3D , ProjectSolutionMixed )
118
119
{
119
120
TestProjectSIM < SIM3D > sim ({1 ,1 });
120
121
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 ));
123
124
124
125
size_t n = 1 ;
125
126
for (size_t k = 0 ; k < 3 ; ++ k )
126
127
for (size_t j = 0 ; j < 3 ; ++ j )
127
128
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 );
129
130
}
130
131
131
132
132
- TEST (TestSIM , InjectPatchSolution )
133
+ TEST (TestSIM2D , InjectPatchSolution )
133
134
{
134
135
ASMmxBase ::Type = ASMmxBase ::REDUCED_CONT_RAISE_BASIS1 ;
135
136
ASMmxBase ::geoBasis = 2 ;
136
137
TestProjectSIM < SIM2D > sim ({1 ,1 });
137
138
ASMbase * pch = sim .getPatch (1 );
139
+ size_t n1 = sim .getNoNodes (1 );
140
+ size_t n2 = sim .getNoNodes (2 );
138
141
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 );
141
144
size_t i , ofs ;
142
- for (i = 0 ; i < sim . getNoNodes ( 1 ) ; i ++ )
145
+ for (i = 0 ; i < n1 ; i ++ )
143
146
lsol [2 * i ] = lsol [2 * i + 1 ] = i + 1 ;
144
147
145
148
ASSERT_TRUE (sim .addMixedMADOF (1 , 2 ));
146
149
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 );
150
153
}
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 );
153
156
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 ++ )
158
160
lsol2 [2 * i ] = lsol2 [2 * i + 1 ] = i + 1 ;
159
161
162
+ ASSERT_TRUE (sim .addMixedMADOF (2 , 2 ));
160
163
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 );
167
169
}
168
170
}
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