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
2223template < 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:
5758class 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
8889TEST (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
102103TEST (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
117118TEST (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