Nektar++
Functions
Nektar::SegCollectionTests Namespace Reference

Functions

SpatialDomains::SegGeomSharedPtr CreateSegGeom (unsigned int id, SpatialDomains::PointGeomSharedPtr v0, SpatialDomains::PointGeomSharedPtr v1, int coordim=1)
 
 BOOST_AUTO_TEST_CASE (TestSegBwdTrans_StdMat_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestSegBwdTrans_StdMat_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegBwdTrans_IterPerExp_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestSegBwdTrans_SumFac_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestSegBwdTrans_SumFac_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegBwdTrans_MatrixFree_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTBase_IterPerExp_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTBase_StdMat_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTBase_SumFac_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTBase_MatrixFree_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegPhysDeriv_IterPerExp_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestSegPhysDeriv_IterPerExp_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegPhysDeriv_StdMat_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestSegPhysDeriv_StdMat_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegPhysDeriv_SumFac_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegPhysDeriv_MatrixFree_UniformP_MultiElmt_1D)
 
 BOOST_AUTO_TEST_CASE (TestSegPhysDeriv_MatrixFree_UniformP_MultiElmt_2D)
 
 BOOST_AUTO_TEST_CASE (TestSegPhysDeriv_MatrixFree_UniformP_MultiElmt_3D)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTDerivBase_IterPerExp_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTDerivBase_IterPerExp_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTDerivBase_StdMat_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTDerivBase_StdMat_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTDerivBase_SumFac_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTDerivBase_SumFac_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTDerivBase_SumFac_UniformP_MultiElmt_CoordimTwo)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTDerivBase_MatrixFree_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestSegIProductWRTDerivBase_MatrixFree_UniformP_MultiElmt_CoordimTwo)
 

Function Documentation

◆ BOOST_AUTO_TEST_CASE() [1/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegBwdTrans_IterPerExp_UniformP  )

Definition at line 159 of file TestSegCollection.cpp.

160{
162 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
164 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
165
167
168 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
170 Nektar::LibUtilities::BasisType basisTypeDir1 =
172 unsigned int numSegPoints = 6;
173 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
174 segPointsTypeDir1);
175 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
176 segPointsKeyDir1);
177
180 basisKeyDir1, segGeom);
181
182 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
183 CollExp.push_back(Exp);
184
186 Collections::CollectionOptimisation colOpt(dummySession, 1,
188 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
189 Collections::Collection c(CollExp, impTypes);
190 c.Initialise(Collections::eBwdTrans);
191
192 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs(), 1.0), tmp;
193 Array<OneD, NekDouble> phys1(Exp->GetTotPoints());
194 Array<OneD, NekDouble> phys2(Exp->GetTotPoints());
195
196 Exp->BwdTrans(coeffs, phys1);
197 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
198
199 double epsilon = 1.0e-8;
200 for (int i = 0; i < phys1.size(); ++i)
201 {
202 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
203 }
204}
Describes the specification for a Basis.
Definition: Basis.h:47
Defines a specification for a set of points.
Definition: Points.h:55
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
std::map< OperatorType, ImplementationType > OperatorImpMap
Definition: Operator.h:112
std::shared_ptr< SessionReader > SessionReaderSharedPtr
@ eGaussLobattoLegendre
1D Gauss-Lobatto-Legendre quadrature points
Definition: PointsType.h:53
@ eModified_A
Principle Modified Functions .
Definition: BasisType.h:50
std::shared_ptr< SegExp > SegExpSharedPtr
Definition: SegExp.h:251
SpatialDomains::SegGeomSharedPtr CreateSegGeom(unsigned int id, SpatialDomains::PointGeomSharedPtr v0, SpatialDomains::PointGeomSharedPtr v1, int coordim=1)
std::shared_ptr< SegGeom > SegGeomSharedPtr
Definition: Geometry2D.h:62
std::shared_ptr< PointGeom > PointGeomSharedPtr
Definition: Geometry.h:60

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::Collections::eBwdTrans, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIterPerExp, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [2/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegBwdTrans_MatrixFree_UniformP_MultiElmt  )

Definition at line 318 of file TestSegCollection.cpp.

319{
321 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
323 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
324
326
327 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
329 Nektar::LibUtilities::BasisType basisTypeDir1 =
331 unsigned int numSegPoints = 6;
332 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
333 segPointsTypeDir1);
334 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
335 segPointsKeyDir1);
336
339 basisKeyDir1, segGeom);
340
341 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
342
343 int nelmts = 10;
344 for (int i = 0; i < nelmts; ++i)
345 {
346 CollExp.push_back(Exp);
347 }
348
350 Collections::CollectionOptimisation colOpt(dummySession, 1,
352 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
354 Collections::Collection c(CollExp, impTypes);
355 c.Initialise(Collections::eBwdTrans);
356
357 Array<OneD, NekDouble> coeffs(nelmts * Exp->GetNcoeffs(), 1.0), tmp;
358 Array<OneD, NekDouble> phys1(nelmts * Exp->GetTotPoints());
359 Array<OneD, NekDouble> phys2(nelmts * Exp->GetTotPoints());
360
361 for (int i = 0; i < nelmts; ++i)
362 {
363 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
364 tmp = phys1 + i * Exp->GetTotPoints());
365 }
366 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
367
368 double epsilon = 1.0e-8;
369 for (int i = 0; i < phys1.size(); ++i)
370 {
371 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
372 }
373}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::Collections::eBwdTrans, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIterPerExp, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [3/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegBwdTrans_StdMat_UniformP  )

Definition at line 56 of file TestSegCollection.cpp.

57{
59 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
61 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
62
64
65 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
69 unsigned int numSegPoints = 6;
70 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
71 segPointsTypeDir1);
72 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
73 segPointsKeyDir1);
74
77 basisKeyDir1, segGeom);
78
79 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
80 CollExp.push_back(Exp);
81
83 Collections::CollectionOptimisation colOpt(dummySession, 1,
85 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
86 Collections::Collection c(CollExp, impTypes);
87 c.Initialise(Collections::eBwdTrans);
88
89 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs(), 1.0), tmp;
90 Array<OneD, NekDouble> phys1(Exp->GetTotPoints());
91 Array<OneD, NekDouble> phys2(Exp->GetTotPoints());
92
93 Exp->BwdTrans(coeffs, phys1);
94 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
95
96 double epsilon = 1.0e-8;
97 for (int i = 0; i < phys1.size(); ++i)
98 {
99 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
100 }
101}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::Collections::eBwdTrans, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eModified_A, Nektar::Collections::eStdMat, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [4/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegBwdTrans_StdMat_UniformP_MultiElmt  )

Definition at line 103 of file TestSegCollection.cpp.

104{
106 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
108 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
109
111
112 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
114 Nektar::LibUtilities::BasisType basisTypeDir1 =
116 unsigned int numSegPoints = 6;
117 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
118 segPointsTypeDir1);
119 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
120 segPointsKeyDir1);
121
124 basisKeyDir1, segGeom);
125
126 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
127
128 int nelmts = 10;
129 for (int i = 0; i < nelmts; ++i)
130 {
131 CollExp.push_back(Exp);
132 }
133
135 Collections::CollectionOptimisation colOpt(dummySession, 1,
137 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
138 Collections::Collection c(CollExp, impTypes);
139 c.Initialise(Collections::eBwdTrans);
140
141 Array<OneD, NekDouble> coeffs(nelmts * Exp->GetNcoeffs(), 1.0), tmp;
142 Array<OneD, NekDouble> phys1(nelmts * Exp->GetTotPoints());
143 Array<OneD, NekDouble> phys2(nelmts * Exp->GetTotPoints());
144
145 for (int i = 0; i < nelmts; ++i)
146 {
147 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
148 tmp = phys1 + i * Exp->GetTotPoints());
149 }
150 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
151
152 double epsilon = 1.0e-8;
153 for (int i = 0; i < phys1.size(); ++i)
154 {
155 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
156 }
157}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::Collections::eBwdTrans, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eModified_A, Nektar::Collections::eStdMat, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [5/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegBwdTrans_SumFac_UniformP  )

Definition at line 206 of file TestSegCollection.cpp.

207{
209 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
211 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
212
214
215 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
217 Nektar::LibUtilities::BasisType basisTypeDir1 =
219 unsigned int numSegPoints = 6;
220 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
221 segPointsTypeDir1);
222 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
223 segPointsKeyDir1);
224
227 basisKeyDir1, segGeom);
228
229 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
230
231 int nelmts = 1;
232 for (int i = 0; i < nelmts; ++i)
233 {
234 CollExp.push_back(Exp);
235 }
236
238 Collections::CollectionOptimisation colOpt(dummySession, 1,
240 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
241 Collections::Collection c(CollExp, impTypes);
242 c.Initialise(Collections::eBwdTrans);
243
244 Array<OneD, NekDouble> coeffs(nelmts * Exp->GetNcoeffs(), 1.0), tmp;
245 Array<OneD, NekDouble> phys1(nelmts * Exp->GetTotPoints());
246 Array<OneD, NekDouble> phys2(nelmts * Exp->GetTotPoints());
247
248 for (int i = 0; i < nelmts; ++i)
249 {
250 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
251 tmp = phys1 + i * Exp->GetTotPoints());
252 }
253 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
254
255 double epsilon = 1.0e-8;
256 for (int i = 0; i < phys1.size(); ++i)
257 {
258 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
259 }
260}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::Collections::eBwdTrans, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eModified_A, Nektar::Collections::eSumFac, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [6/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegBwdTrans_SumFac_UniformP_MultiElmt  )

Definition at line 262 of file TestSegCollection.cpp.

263{
265 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
267 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
268
270
271 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
273 Nektar::LibUtilities::BasisType basisTypeDir1 =
275 unsigned int numSegPoints = 6;
276 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
277 segPointsTypeDir1);
278 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
279 segPointsKeyDir1);
280
283 basisKeyDir1, segGeom);
284
285 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
286
287 int nelmts = 10;
288 for (int i = 0; i < nelmts; ++i)
289 {
290 CollExp.push_back(Exp);
291 }
292
294 Collections::CollectionOptimisation colOpt(dummySession, 1,
296 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
297 Collections::Collection c(CollExp, impTypes);
298 c.Initialise(Collections::eBwdTrans);
299
300 Array<OneD, NekDouble> coeffs(nelmts * Exp->GetNcoeffs(), 1.0), tmp;
301 Array<OneD, NekDouble> phys1(nelmts * Exp->GetTotPoints());
302 Array<OneD, NekDouble> phys2(nelmts * Exp->GetTotPoints());
303
304 for (int i = 0; i < nelmts; ++i)
305 {
306 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
307 tmp = phys1 + i * Exp->GetTotPoints());
308 }
309 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
310
311 double epsilon = 1.0e-8;
312 for (int i = 0; i < phys1.size(); ++i)
313 {
314 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
315 }
316}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::Collections::eBwdTrans, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eModified_A, Nektar::Collections::eSumFac, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [7/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTBase_IterPerExp_UniformP_MultiElmt  )

Definition at line 375 of file TestSegCollection.cpp.

376{
378 new SpatialDomains::PointGeom(1u, 0u, -1.5, 0.0, 0.0));
380 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
381
383
384 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
386 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
387 segPointsTypeDir1);
388 Nektar::LibUtilities::BasisType basisTypeDir1 =
390 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
391 segPointsKeyDir1);
392
395 basisKeyDir1, segGeom);
396
397 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
398
399 int nelmts = 10;
400 for (int i = 0; i < nelmts; ++i)
401 {
402 CollExp.push_back(Exp);
403 }
404
406 Collections::CollectionOptimisation colOpt(dummySession, 1,
408 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
409 Collections::Collection c(CollExp, impTypes);
410 c.Initialise(Collections::eIProductWRTBase);
411
412 const int nq = Exp->GetTotPoints();
413 const int nc = Exp->GetNcoeffs();
414 Array<OneD, NekDouble> xc(nq), yc(nq);
415 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
416 Array<OneD, NekDouble> coeffs1(nelmts * nc);
417 Array<OneD, NekDouble> coeffs2(nelmts * nc);
418
419 Exp->GetCoords(xc, yc);
420
421 for (int i = 0; i < nq; ++i)
422 {
423 phys[i] = sin(xc[i]);
424 }
425 Exp->IProductWRTBase(phys, coeffs1);
426
427 for (int i = 1; i < nelmts; ++i)
428 {
429 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
430 Exp->IProductWRTBase(phys + i * nq, tmp = coeffs1 + i * nc);
431 }
432 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
433
434 double epsilon = 1.0e-8;
435 for (int i = 0; i < coeffs1.size(); ++i)
436 {
437 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
438 }
439}
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1191

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTBase, Nektar::Collections::eIterPerExp, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [8/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTBase_MatrixFree_UniformP_MultiElmt  )

Definition at line 573 of file TestSegCollection.cpp.

574{
576 new SpatialDomains::PointGeom(1u, 0u, -1.5, 0.0, 0.0));
578 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
579
581
582 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
584 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
585 segPointsTypeDir1);
586 Nektar::LibUtilities::BasisType basisTypeDir1 =
588 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
589 segPointsKeyDir1);
590
593 basisKeyDir1, segGeom);
594
595 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
596
597 int nelmts = 10;
598 for (int i = 0; i < nelmts; ++i)
599 {
600 CollExp.push_back(Exp);
601 }
602
604 Collections::CollectionOptimisation colOpt(dummySession, 1,
606 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
608 Collections::Collection c(CollExp, impTypes);
609 c.Initialise(Collections::eIProductWRTBase);
610
611 const int nq = Exp->GetTotPoints();
612 const int nc = Exp->GetNcoeffs();
613 Array<OneD, NekDouble> xc(nq), yc(nq);
614 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
615 Array<OneD, NekDouble> coeffs1(nelmts * nc);
616 Array<OneD, NekDouble> coeffs2(nelmts * nc);
617
618 Exp->GetCoords(xc, yc);
619
620 for (int i = 0; i < nq; ++i)
621 {
622 phys[i] = sin(xc[i]);
623 }
624 Exp->IProductWRTBase(phys, coeffs1);
625
626 for (int i = 1; i < nelmts; ++i)
627 {
628 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
629 Exp->IProductWRTBase(phys + i * nq, tmp = coeffs1 + i * nc);
630 }
631 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
632
633 double epsilon = 1.0e-8;
634 for (int i = 0; i < coeffs1.size(); ++i)
635 {
636 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
637 }
638}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTBase, Nektar::Collections::eIterPerExp, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [9/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTBase_StdMat_UniformP_MultiElmt  )

Definition at line 441 of file TestSegCollection.cpp.

442{
444 new SpatialDomains::PointGeom(1u, 0u, -1.5, 0.0, 0.0));
446 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
447
449
450 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
452 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
453 segPointsTypeDir1);
454 Nektar::LibUtilities::BasisType basisTypeDir1 =
456 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
457 segPointsKeyDir1);
458
461 basisKeyDir1, segGeom);
462
463 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
464
465 int nelmts = 10;
466 for (int i = 0; i < nelmts; ++i)
467 {
468 CollExp.push_back(Exp);
469 }
470
472 Collections::CollectionOptimisation colOpt(dummySession, 1,
474 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
475 Collections::Collection c(CollExp, impTypes);
476 c.Initialise(Collections::eIProductWRTBase);
477
478 const int nq = Exp->GetTotPoints();
479 const int nc = Exp->GetNcoeffs();
480 Array<OneD, NekDouble> xc(nq), yc(nq);
481 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
482 Array<OneD, NekDouble> coeffs1(nelmts * nc);
483 Array<OneD, NekDouble> coeffs2(nelmts * nc);
484
485 Exp->GetCoords(xc, yc);
486
487 for (int i = 0; i < nq; ++i)
488 {
489 phys[i] = sin(xc[i]);
490 }
491 Exp->IProductWRTBase(phys, coeffs1);
492
493 for (int i = 1; i < nelmts; ++i)
494 {
495 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
496 Exp->IProductWRTBase(phys + i * nq, tmp = coeffs1 + i * nc);
497 }
498 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
499
500 double epsilon = 1.0e-8;
501 for (int i = 0; i < coeffs1.size(); ++i)
502 {
503 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
504 }
505}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTBase, Nektar::LibUtilities::eModified_A, Nektar::Collections::eStdMat, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [10/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTBase_SumFac_UniformP_MultiElmt  )

Definition at line 507 of file TestSegCollection.cpp.

508{
510 new SpatialDomains::PointGeom(1u, 0u, -1.5, 0.0, 0.0));
512 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
513
515
516 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
518 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
519 segPointsTypeDir1);
520 Nektar::LibUtilities::BasisType basisTypeDir1 =
522 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
523 segPointsKeyDir1);
524
527 basisKeyDir1, segGeom);
528
529 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
530
531 int nelmts = 10;
532 for (int i = 0; i < nelmts; ++i)
533 {
534 CollExp.push_back(Exp);
535 }
536
538 Collections::CollectionOptimisation colOpt(dummySession, 1,
540 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
541 Collections::Collection c(CollExp, impTypes);
542 c.Initialise(Collections::eIProductWRTBase);
543
544 const int nq = Exp->GetTotPoints();
545 const int nc = Exp->GetNcoeffs();
546 Array<OneD, NekDouble> xc(nq), yc(nq);
547 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
548 Array<OneD, NekDouble> coeffs1(nelmts * nc);
549 Array<OneD, NekDouble> coeffs2(nelmts * nc);
550
551 Exp->GetCoords(xc, yc);
552
553 for (int i = 0; i < nq; ++i)
554 {
555 phys[i] = sin(xc[i]);
556 }
557 Exp->IProductWRTBase(phys, coeffs1);
558
559 for (int i = 1; i < nelmts; ++i)
560 {
561 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
562 Exp->IProductWRTBase(phys + i * nq, tmp = coeffs1 + i * nc);
563 }
564 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
565
566 double epsilon = 1.0e-8;
567 for (int i = 0; i < coeffs1.size(); ++i)
568 {
569 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
570 }
571}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTBase, Nektar::LibUtilities::eModified_A, Nektar::Collections::eSumFac, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [11/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTDerivBase_IterPerExp_UniformP  )

Definition at line 1167 of file TestSegCollection.cpp.

1168{
1170 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
1172 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
1173
1175
1176 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1178 Nektar::LibUtilities::BasisType basisTypeDir1 =
1180 unsigned int numSegPoints = 6;
1181 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
1182 segPointsTypeDir1);
1183 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1184 segPointsKeyDir1);
1185
1188 basisKeyDir1, segGeom);
1189
1190 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1191 CollExp.push_back(Exp);
1192
1194 Collections::CollectionOptimisation colOpt(dummySession, 1,
1196 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1197 Collections::Collection c(CollExp, impTypes);
1199
1200 const int nq = Exp->GetTotPoints();
1201 const int nm = Exp->GetNcoeffs();
1202 Array<OneD, NekDouble> phys1(nq);
1203 Array<OneD, NekDouble> coeffs1(nm);
1204 Array<OneD, NekDouble> coeffs2(nm);
1205
1207
1208 Exp->GetCoords(xc);
1209
1210 for (int i = 0; i < nq; ++i)
1211 {
1212 phys1[i] = sin(xc[i]);
1213 }
1214
1215 // Standard routines
1216 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
1217
1218 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, coeffs2);
1219
1220 double epsilon = 1.0e-8;
1221 for (int i = 0; i < coeffs1.size(); ++i)
1222 {
1223 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1224 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1225 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1226 }
1227}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTDerivBase, Nektar::Collections::eIterPerExp, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [12/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTDerivBase_IterPerExp_UniformP_MultiElmt  )

Definition at line 1229 of file TestSegCollection.cpp.

1230{
1232 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
1234 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
1235
1237
1238 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1240 Nektar::LibUtilities::BasisType basisTypeDir1 =
1242 unsigned int numSegPoints = 6;
1243 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
1244 segPointsTypeDir1);
1245 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1246 segPointsKeyDir1);
1247
1250 basisKeyDir1, segGeom);
1251
1252 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1253
1254 int nelmts = 10;
1255 for (int i = 0; i < nelmts; ++i)
1256 {
1257 CollExp.push_back(Exp);
1258 }
1259
1261 Collections::CollectionOptimisation colOpt(dummySession, 1,
1263 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1264 Collections::Collection c(CollExp, impTypes);
1266
1267 const int nq = Exp->GetTotPoints();
1268 const int nm = Exp->GetNcoeffs();
1269 Array<OneD, NekDouble> xc(nq), tmp, tmp1;
1270 Array<OneD, NekDouble> phys1(nelmts * nq);
1271 Array<OneD, NekDouble> coeffs1(nelmts * nm);
1272 Array<OneD, NekDouble> coeffs2(nelmts * nm);
1273
1274 Exp->GetCoords(xc);
1275
1276 for (int i = 0; i < nq; ++i)
1277 {
1278 phys1[i] = sin(xc[i]);
1279 }
1280 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
1281
1282 for (int i = 1; i < nelmts; ++i)
1283 {
1284 Vmath::Vcopy(nq, phys1, 1, tmp = phys1 + i * nq, 1);
1285
1286 // Standard routines
1287 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
1288 }
1289
1290 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, coeffs2);
1291
1292 double epsilon = 1.0e-8;
1293 for (int i = 0; i < coeffs1.size(); ++i)
1294 {
1295 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1296 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1297 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1298 }
1299}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTDerivBase, Nektar::Collections::eIterPerExp, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [13/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTDerivBase_MatrixFree_UniformP_MultiElmt  )

Definition at line 1648 of file TestSegCollection.cpp.

1649{
1651 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
1653 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
1654
1656
1657 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1659 Nektar::LibUtilities::BasisType basisTypeDir1 =
1661 unsigned int numSegPoints = 6;
1662 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
1663 segPointsTypeDir1);
1664 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1665 segPointsKeyDir1);
1666
1669 basisKeyDir1, segGeom);
1670
1671 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1672
1673 int nelmts = 10;
1674 for (int i = 0; i < nelmts; ++i)
1675 {
1676 CollExp.push_back(Exp);
1677 }
1678
1680 Collections::CollectionOptimisation colOpt(dummySession, 1,
1682 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1684 Collections::Collection c(CollExp, impTypes);
1686
1687 const int nq = Exp->GetTotPoints();
1688 const int nm = Exp->GetNcoeffs();
1689 Array<OneD, NekDouble> xc(nq), tmp, tmp1;
1690 Array<OneD, NekDouble> phys1(nelmts * nq);
1691 Array<OneD, NekDouble> coeffs1(nelmts * nm);
1692 Array<OneD, NekDouble> coeffs2(nelmts * nm);
1693
1694 Exp->GetCoords(xc);
1695
1696 for (int i = 0; i < nq; ++i)
1697 {
1698 phys1[i] = sin(xc[i]);
1699 }
1700 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
1701
1702 for (int i = 1; i < nelmts; ++i)
1703 {
1704 Vmath::Vcopy(nq, phys1, 1, tmp = phys1 + i * nq, 1);
1705
1706 // Standard routines
1707 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
1708 }
1709
1710 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, coeffs2);
1711
1712 double epsilon = 1.0e-8;
1713 for (int i = 0; i < coeffs1.size(); ++i)
1714 {
1715 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1716 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1717 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1718 }
1719}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTDerivBase, Nektar::Collections::eIterPerExp, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [14/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTDerivBase_MatrixFree_UniformP_MultiElmt_CoordimTwo  )

Definition at line 1721 of file TestSegCollection.cpp.

1723{
1725 new SpatialDomains::PointGeom(2u, 0u, -1.0, 0.0, 0.0));
1727 new SpatialDomains::PointGeom(2u, 1u, 1.0, 1.0, 0.0));
1728
1729 SpatialDomains::SegGeomSharedPtr segGeom = CreateSegGeom(0, v0, v1, 2);
1730
1731 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1733 Nektar::LibUtilities::BasisType basisTypeDir1 =
1735 unsigned int numSegPoints = 6;
1736 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
1737 segPointsTypeDir1);
1738 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1739 segPointsKeyDir1);
1740
1743 basisKeyDir1, segGeom);
1744
1745 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1746
1747 int nelmts = 10;
1748 for (int i = 0; i < nelmts; ++i)
1749 {
1750 CollExp.push_back(Exp);
1751 }
1752
1754 Collections::CollectionOptimisation colOpt(dummySession, 1,
1756 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1758 Collections::Collection c(CollExp, impTypes);
1760
1761 const int nq = Exp->GetTotPoints();
1762 const int nm = Exp->GetNcoeffs();
1763 Array<OneD, NekDouble> xc(nq), yc(nq), tmp, tmp1;
1764 Array<OneD, NekDouble> phys1(nelmts * nq);
1765 Array<OneD, NekDouble> phys2(nelmts * nq);
1766 Array<OneD, NekDouble> coeffs1(nelmts * nm);
1767 Array<OneD, NekDouble> coeffs2(nelmts * nm);
1768
1769 Exp->GetCoords(xc, yc);
1770
1771 for (int i = 0; i < nq; ++i)
1772 {
1773 phys1[i] = sin(xc[i]);
1774 phys2[i] = cos(yc[i]);
1775 }
1776 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
1777 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
1778
1779 for (int i = 1; i < nelmts; ++i)
1780 {
1781 Vmath::Vcopy(nq, phys1, 1, tmp = phys1 + i * nq, 1);
1782 Vmath::Vcopy(nq, phys2, 1, tmp = phys2 + i * nq, 1);
1783
1784 // Standard routines
1785 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
1786 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
1787 }
1788 Vmath::Vadd(nelmts * nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
1789
1790 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, coeffs2);
1791
1792 double epsilon = 1.0e-8;
1793 for (int i = 0; i < coeffs1.size(); ++i)
1794 {
1795 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1796 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1797 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1798 }
1799}
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
Definition: Vmath.cpp:354

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTDerivBase, Nektar::Collections::eIterPerExp, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), Vmath::Vadd(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [15/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTDerivBase_StdMat_UniformP  )

Definition at line 1301 of file TestSegCollection.cpp.

1302{
1304 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
1306 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
1307
1309
1310 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1312 Nektar::LibUtilities::BasisType basisTypeDir1 =
1314 unsigned int numSegPoints = 6;
1315 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
1316 segPointsTypeDir1);
1317 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1318 segPointsKeyDir1);
1319
1322 basisKeyDir1, segGeom);
1323
1324 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1325 CollExp.push_back(Exp);
1326
1328 Collections::CollectionOptimisation colOpt(dummySession, 1,
1330 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1331 Collections::Collection c(CollExp, impTypes);
1333
1334 const int nq = Exp->GetTotPoints();
1335 const int nm = Exp->GetNcoeffs();
1336 Array<OneD, NekDouble> phys1(nq);
1337 Array<OneD, NekDouble> coeffs1(nm);
1338 Array<OneD, NekDouble> coeffs2(nm);
1339
1341
1342 Exp->GetCoords(xc);
1343
1344 for (int i = 0; i < nq; ++i)
1345 {
1346 phys1[i] = sin(xc[i]);
1347 }
1348
1349 // Standard routines
1350 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
1351
1352 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, coeffs2);
1353
1354 double epsilon = 1.0e-8;
1355 for (int i = 0; i < coeffs1.size(); ++i)
1356 {
1357 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1358 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1359 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1360 }
1361}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTDerivBase, Nektar::LibUtilities::eModified_A, Nektar::Collections::eStdMat, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [16/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTDerivBase_StdMat_UniformP_MultiElmt  )

Definition at line 1363 of file TestSegCollection.cpp.

1364{
1366 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
1368 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
1369
1371
1372 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1374 Nektar::LibUtilities::BasisType basisTypeDir1 =
1376 unsigned int numSegPoints = 6;
1377 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
1378 segPointsTypeDir1);
1379 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1380 segPointsKeyDir1);
1381
1384 basisKeyDir1, segGeom);
1385
1386 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1387
1388 int nelmts = 10;
1389 for (int i = 0; i < nelmts; ++i)
1390 {
1391 CollExp.push_back(Exp);
1392 }
1393
1395 Collections::CollectionOptimisation colOpt(dummySession, 1,
1397 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1398 Collections::Collection c(CollExp, impTypes);
1400
1401 const int nq = Exp->GetTotPoints();
1402 const int nm = Exp->GetNcoeffs();
1403 Array<OneD, NekDouble> xc(nq), tmp, tmp1;
1404 Array<OneD, NekDouble> phys1(nelmts * nq);
1405 Array<OneD, NekDouble> coeffs1(nelmts * nm);
1406 Array<OneD, NekDouble> coeffs2(nelmts * nm);
1407
1408 Exp->GetCoords(xc);
1409
1410 for (int i = 0; i < nq; ++i)
1411 {
1412 phys1[i] = sin(xc[i]);
1413 }
1414 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
1415
1416 for (int i = 1; i < nelmts; ++i)
1417 {
1418 Vmath::Vcopy(nq, phys1, 1, tmp = phys1 + i * nq, 1);
1419
1420 // Standard routines
1421 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
1422 }
1423
1424 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, coeffs2);
1425
1426 double epsilon = 1.0e-8;
1427 for (int i = 0; i < coeffs1.size(); ++i)
1428 {
1429 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1430 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1431 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1432 }
1433}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTDerivBase, Nektar::LibUtilities::eModified_A, Nektar::Collections::eStdMat, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [17/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTDerivBase_SumFac_UniformP  )

Definition at line 1435 of file TestSegCollection.cpp.

1436{
1438 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
1440 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
1441
1443
1444 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1446 Nektar::LibUtilities::BasisType basisTypeDir1 =
1448 unsigned int numSegPoints = 6;
1449 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
1450 segPointsTypeDir1);
1451 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1452 segPointsKeyDir1);
1453
1456 basisKeyDir1, segGeom);
1457
1458 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1459 CollExp.push_back(Exp);
1460
1462 Collections::CollectionOptimisation colOpt(dummySession, 1,
1464 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1465 Collections::Collection c(CollExp, impTypes);
1467
1468 const int nq = Exp->GetTotPoints();
1469 const int nm = Exp->GetNcoeffs();
1470 Array<OneD, NekDouble> phys1(nq);
1471 Array<OneD, NekDouble> coeffs1(nm);
1472 Array<OneD, NekDouble> coeffs2(nm);
1473
1475
1476 Exp->GetCoords(xc);
1477
1478 for (int i = 0; i < nq; ++i)
1479 {
1480 phys1[i] = sin(xc[i]);
1481 }
1482
1483 // Standard routines
1484 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
1485
1486 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, coeffs2);
1487
1488 double epsilon = 1.0e-8;
1489 for (int i = 0; i < coeffs1.size(); ++i)
1490 {
1491 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1492 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1493 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1494 }
1495}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTDerivBase, Nektar::LibUtilities::eModified_A, Nektar::Collections::eSumFac, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [18/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTDerivBase_SumFac_UniformP_MultiElmt  )

Definition at line 1497 of file TestSegCollection.cpp.

1498{
1500 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
1502 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
1503
1505
1506 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1508 Nektar::LibUtilities::BasisType basisTypeDir1 =
1510 unsigned int numSegPoints = 6;
1511 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
1512 segPointsTypeDir1);
1513 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1514 segPointsKeyDir1);
1515
1518 basisKeyDir1, segGeom);
1519
1520 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1521
1522 int nelmts = 10;
1523 for (int i = 0; i < nelmts; ++i)
1524 {
1525 CollExp.push_back(Exp);
1526 }
1527
1529 Collections::CollectionOptimisation colOpt(dummySession, 1,
1531 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1532 Collections::Collection c(CollExp, impTypes);
1534
1535 const int nq = Exp->GetTotPoints();
1536 const int nm = Exp->GetNcoeffs();
1537 Array<OneD, NekDouble> xc(nq), tmp, tmp1;
1538 Array<OneD, NekDouble> phys1(nelmts * nq);
1539 Array<OneD, NekDouble> coeffs1(nelmts * nm);
1540 Array<OneD, NekDouble> coeffs2(nelmts * nm);
1541
1542 Exp->GetCoords(xc);
1543
1544 for (int i = 0; i < nq; ++i)
1545 {
1546 phys1[i] = sin(xc[i]);
1547 }
1548 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
1549
1550 for (int i = 1; i < nelmts; ++i)
1551 {
1552 Vmath::Vcopy(nq, phys1, 1, tmp = phys1 + i * nq, 1);
1553
1554 // Standard routines
1555 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
1556 }
1557
1558 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, coeffs2);
1559
1560 double epsilon = 1.0e-8;
1561 for (int i = 0; i < coeffs1.size(); ++i)
1562 {
1563 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1564 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1565 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1566 }
1567}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTDerivBase, Nektar::LibUtilities::eModified_A, Nektar::Collections::eSumFac, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [19/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegIProductWRTDerivBase_SumFac_UniformP_MultiElmt_CoordimTwo  )

Definition at line 1569 of file TestSegCollection.cpp.

1571{
1573 new SpatialDomains::PointGeom(1u, 0u, -1.0, 0.0, 0.0));
1575 new SpatialDomains::PointGeom(1u, 1u, 1.0, 1.0, 0.0));
1576
1577 SpatialDomains::SegGeomSharedPtr segGeom = CreateSegGeom(0, v0, v1, 2);
1578
1579 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1581 Nektar::LibUtilities::BasisType basisTypeDir1 =
1583 unsigned int numSegPoints = 6;
1584 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(numSegPoints,
1585 segPointsTypeDir1);
1586 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1587 segPointsKeyDir1);
1588
1591 basisKeyDir1, segGeom);
1592
1593 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1594
1595 int nelmts = 10;
1596 for (int i = 0; i < nelmts; ++i)
1597 {
1598 CollExp.push_back(Exp);
1599 }
1600
1602 Collections::CollectionOptimisation colOpt(dummySession, 1,
1604 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1605 Collections::Collection c(CollExp, impTypes);
1607
1608 const int nq = Exp->GetTotPoints();
1609 const int nm = Exp->GetNcoeffs();
1610 Array<OneD, NekDouble> xc(nq), yc(nq), tmp, tmp1;
1611 Array<OneD, NekDouble> phys1(nelmts * nq);
1612 Array<OneD, NekDouble> phys2(nelmts * nq);
1613 Array<OneD, NekDouble> coeffs1(nelmts * nm);
1614 Array<OneD, NekDouble> coeffs2(nelmts * nm);
1615
1616 Exp->GetCoords(xc, yc);
1617
1618 for (int i = 0; i < nq; ++i)
1619 {
1620 phys1[i] = sin(xc[i]);
1621 phys2[i] = cos(yc[i]);
1622 }
1623 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
1624 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
1625
1626 for (int i = 1; i < nelmts; ++i)
1627 {
1628 Vmath::Vcopy(nq, phys1, 1, tmp = phys1 + i * nq, 1);
1629 Vmath::Vcopy(nq, phys2, 1, tmp = phys2 + i * nq, 1);
1630
1631 // Standard routines
1632 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
1633 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
1634 }
1635 Vmath::Vadd(nelmts * nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
1636
1637 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, coeffs2);
1638
1639 double epsilon = 1.0e-8;
1640 for (int i = 0; i < coeffs1.size(); ++i)
1641 {
1642 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1643 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1644 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1645 }
1646}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTDerivBase, Nektar::LibUtilities::eModified_A, Nektar::Collections::eSumFac, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), Vmath::Vadd(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [20/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegPhysDeriv_IterPerExp_UniformP  )

Definition at line 640 of file TestSegCollection.cpp.

641{
643 new SpatialDomains::PointGeom(1u, 0u, -1.5, 0.0, 0.0));
645 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
646
648
649 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
651 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
652 segPointsTypeDir1);
653 Nektar::LibUtilities::BasisType basisTypeDir1 =
655 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
656 segPointsKeyDir1);
657
660 basisKeyDir1, segGeom);
661
662 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
663 CollExp.push_back(Exp);
664
666 Collections::CollectionOptimisation colOpt(dummySession, 1,
668 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
669 Collections::Collection c(CollExp, impTypes);
670 c.Initialise(Collections::ePhysDeriv);
671
672 const int nq = Exp->GetTotPoints();
673 Array<OneD, NekDouble> xc(nq), yc(nq);
674 Array<OneD, NekDouble> phys(nq), tmp;
675 Array<OneD, NekDouble> diff1(nq);
676 Array<OneD, NekDouble> diff2(nq);
677
678 Exp->GetCoords(xc, yc);
679
680 for (int i = 0; i < nq; ++i)
681 {
682 phys[i] = sin(xc[i]);
683 }
684
685 Exp->PhysDeriv(phys, diff1);
686 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2);
687
688 double epsilon = 1.0e-8;
689 for (int i = 0; i < diff1.size(); ++i)
690 {
691 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
692 }
693}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIterPerExp, Nektar::LibUtilities::eModified_A, Nektar::Collections::ePhysDeriv, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [21/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegPhysDeriv_IterPerExp_UniformP_MultiElmt  )

Definition at line 695 of file TestSegCollection.cpp.

696{
698 new SpatialDomains::PointGeom(1u, 0u, -1.5, 0.0, 0.0));
700 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
701
703
704 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
706 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
707 segPointsTypeDir1);
708 Nektar::LibUtilities::BasisType basisTypeDir1 =
710 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
711 segPointsKeyDir1);
712
715 basisKeyDir1, segGeom);
716
717 int nelmts = 10;
718
719 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
720 for (int i = 0; i < nelmts; ++i)
721 {
722 CollExp.push_back(Exp);
723 }
724
726 Collections::CollectionOptimisation colOpt(dummySession, 1,
728 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
729 Collections::Collection c(CollExp, impTypes);
730 c.Initialise(Collections::ePhysDeriv);
731
732 const int nq = Exp->GetTotPoints();
734 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
735 Array<OneD, NekDouble> diff1(nelmts * nq);
736 Array<OneD, NekDouble> diff2(nelmts * nq);
737
738 Exp->GetCoords(xc);
739
740 for (int i = 0; i < nq; ++i)
741 {
742 phys[i] = sin(xc[i]);
743 }
744 Exp->PhysDeriv(phys, diff1);
745
746 for (int i = 1; i < nelmts; ++i)
747 {
748 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
749 Exp->PhysDeriv(phys + i * nq, tmp = diff1 + i * nq);
750 }
751
752 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2);
753
754 double epsilon = 1.0e-8;
755 for (int i = 0; i < diff1.size(); ++i)
756 {
757 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
758 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
759 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
760 }
761}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIterPerExp, Nektar::LibUtilities::eModified_A, Nektar::Collections::ePhysDeriv, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [22/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegPhysDeriv_MatrixFree_UniformP_MultiElmt_1D  )

Definition at line 954 of file TestSegCollection.cpp.

955{
957 new SpatialDomains::PointGeom(1u, 0u, -1.5, 0.0, 0.0));
959 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
960
962
963 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
965 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
966 segPointsTypeDir1);
967 Nektar::LibUtilities::BasisType basisTypeDir1 =
969 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
970 segPointsKeyDir1);
971
974 basisKeyDir1, segGeom);
975
976 int nelmts = 10;
977
978 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
979 for (int i = 0; i < nelmts; ++i)
980 {
981 CollExp.push_back(Exp);
982 }
983
985 Collections::CollectionOptimisation colOpt(dummySession, 1,
987 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
989 Collections::Collection c(CollExp, impTypes);
990 c.Initialise(Collections::ePhysDeriv);
991
992 const int nq = Exp->GetTotPoints();
994 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
995 Array<OneD, NekDouble> diff1(nelmts * nq);
996 Array<OneD, NekDouble> diff2(nelmts * nq);
997
998 Exp->GetCoords(xc);
999
1000 for (int i = 0; i < nq; ++i)
1001 {
1002 phys[i] = sin(xc[i]);
1003 }
1004 Exp->PhysDeriv(phys, diff1);
1005
1006 for (int i = 1; i < nelmts; ++i)
1007 {
1008 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
1009 Exp->PhysDeriv(phys + i * nq, tmp = diff1 + i * nq);
1010 }
1011
1012 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2);
1013
1014 double epsilon = 1.0e-8;
1015 for (int i = 0; i < diff1.size(); ++i)
1016 {
1017 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1018 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1019 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1020 }
1021}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIterPerExp, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::ePhysDeriv, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [23/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegPhysDeriv_MatrixFree_UniformP_MultiElmt_2D  )

Definition at line 1023 of file TestSegCollection.cpp.

1024{
1026 new SpatialDomains::PointGeom(2u, 0u, -1.5, 0.0, 0.0));
1028 new SpatialDomains::PointGeom(2u, 1u, 1.0, 1.0, 0.0));
1029
1030 SpatialDomains::SegGeomSharedPtr segGeom = CreateSegGeom(0, v0, v1, 2u);
1031
1032 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1034 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
1035 segPointsTypeDir1);
1036 Nektar::LibUtilities::BasisType basisTypeDir1 =
1038 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1039 segPointsKeyDir1);
1040
1043 basisKeyDir1, segGeom);
1044
1045 int nelmts = 10;
1046
1047 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1048 for (int i = 0; i < nelmts; ++i)
1049 {
1050 CollExp.push_back(Exp);
1051 }
1052
1054 Collections::CollectionOptimisation colOpt(dummySession, 1,
1056 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1058 Collections::Collection c(CollExp, impTypes);
1059 c.Initialise(Collections::ePhysDeriv);
1060
1061 const int nq = Exp->GetTotPoints();
1062 Array<OneD, NekDouble> xc(nq), yc(nq);
1063 Array<OneD, NekDouble> phys(nelmts * nq), tmp, tmp1;
1064 Array<OneD, NekDouble> diff1(2 * nelmts * nq);
1065 Array<OneD, NekDouble> diff2(2 * nelmts * nq);
1066
1067 Exp->GetCoords(xc, yc);
1068
1069 for (int i = 0; i < nq; ++i)
1070 {
1071 phys[i] = sin(xc[i]) * cos(yc[i]);
1072 }
1073 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nelmts * nq);
1074
1075 for (int i = 1; i < nelmts; ++i)
1076 {
1077 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
1078 Exp->PhysDeriv(phys + i * nq, tmp = diff1 + i * nq,
1079 tmp1 = diff1 + (nelmts + i) * nq);
1080 }
1081
1082 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2,
1083 tmp = diff2 + nelmts * nq);
1084
1085 double epsilon = 1.0e-8;
1086 for (int i = 0; i < diff1.size(); ++i)
1087 {
1088 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1089 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1090 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1091 }
1092}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIterPerExp, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::ePhysDeriv, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [24/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegPhysDeriv_MatrixFree_UniformP_MultiElmt_3D  )

Definition at line 1094 of file TestSegCollection.cpp.

1095{
1097 new SpatialDomains::PointGeom(3u, 0u, -1.5, 0.0, 0.0));
1099 new SpatialDomains::PointGeom(3u, 1u, 1.0, 1.0, 1.0));
1100
1101 SpatialDomains::SegGeomSharedPtr segGeom = CreateSegGeom(0, v0, v1, 3u);
1102
1103 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
1105 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
1106 segPointsTypeDir1);
1107 Nektar::LibUtilities::BasisType basisTypeDir1 =
1109 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1110 segPointsKeyDir1);
1111
1114 basisKeyDir1, segGeom);
1115
1116 int nelmts = 10;
1117
1118 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1119 for (int i = 0; i < nelmts; ++i)
1120 {
1121 CollExp.push_back(Exp);
1122 }
1123
1125 Collections::CollectionOptimisation colOpt(dummySession, 1,
1127 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
1129 Collections::Collection c(CollExp, impTypes);
1130 c.Initialise(Collections::ePhysDeriv);
1131
1132 const int nq = Exp->GetTotPoints();
1133 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1134 Array<OneD, NekDouble> phys(nelmts * nq), tmp, tmp1, tmp2;
1135 Array<OneD, NekDouble> diff1(3 * nelmts * nq);
1136 Array<OneD, NekDouble> diff2(3 * nelmts * nq);
1137
1138 Exp->GetCoords(xc, yc, zc);
1139
1140 for (int i = 0; i < nq; ++i)
1141 {
1142 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1143 }
1144 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nelmts * nq,
1145 tmp1 = diff1 + 2 * nelmts * nq);
1146
1147 for (int i = 1; i < nelmts; ++i)
1148 {
1149 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
1150 Exp->PhysDeriv(phys + i * nq, tmp = diff1 + i * nq,
1151 tmp1 = diff1 + (nelmts + i) * nq,
1152 tmp2 = diff1 + (2 * nelmts + i) * nq);
1153 }
1154
1155 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2,
1156 tmp = diff2 + nelmts * nq, tmp1 = diff2 + 2 * nelmts * nq);
1157
1158 double epsilon = 1.0e-8;
1159 for (int i = 0; i < diff1.size(); ++i)
1160 {
1161 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1162 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1163 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1164 }
1165}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIterPerExp, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::ePhysDeriv, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [25/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegPhysDeriv_StdMat_UniformP  )

Definition at line 763 of file TestSegCollection.cpp.

764{
766 new SpatialDomains::PointGeom(1u, 0u, -1.5, 0.0, 0.0));
768 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
769
771
772 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
774 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
775 segPointsTypeDir1);
776 Nektar::LibUtilities::BasisType basisTypeDir1 =
778 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
779 segPointsKeyDir1);
780
783 basisKeyDir1, segGeom);
784
785 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
786 CollExp.push_back(Exp);
787
789 Collections::CollectionOptimisation colOpt(dummySession, 1,
791 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
792 Collections::Collection c(CollExp, impTypes);
793 c.Initialise(Collections::ePhysDeriv);
794
795 const int nq = Exp->GetTotPoints();
797 Array<OneD, NekDouble> phys(nq), tmp;
798 Array<OneD, NekDouble> diff1(nq);
799 Array<OneD, NekDouble> diff2(nq);
800
801 Exp->GetCoords(xc);
802
803 for (int i = 0; i < nq; ++i)
804 {
805 phys[i] = sin(xc[i]);
806 }
807
808 Exp->PhysDeriv(phys, diff1);
809 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2);
810
811 double epsilon = 1.0e-8;
812 for (int i = 0; i < diff1.size(); ++i)
813 {
814 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
815 }
816}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eModified_A, Nektar::Collections::ePhysDeriv, Nektar::Collections::eStdMat, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [26/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegPhysDeriv_StdMat_UniformP_MultiElmt  )

Definition at line 818 of file TestSegCollection.cpp.

819{
821 new SpatialDomains::PointGeom(1u, 0u, -1.5, 0.0, 0.0));
823 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
824
826
827 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
829 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
830 segPointsTypeDir1);
831 Nektar::LibUtilities::BasisType basisTypeDir1 =
833 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
834 segPointsKeyDir1);
835
838 basisKeyDir1, segGeom);
839
840 int nelmts = 10;
841
842 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
843 for (int i = 0; i < nelmts; ++i)
844 {
845 CollExp.push_back(Exp);
846 }
847
849 Collections::CollectionOptimisation colOpt(dummySession, 1,
851 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
852 Collections::Collection c(CollExp, impTypes);
853 c.Initialise(Collections::ePhysDeriv);
854
855 const int nq = Exp->GetTotPoints();
857 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
858 Array<OneD, NekDouble> diff1(nelmts * nq);
859 Array<OneD, NekDouble> diff2(nelmts * nq);
860
861 Exp->GetCoords(xc);
862
863 for (int i = 0; i < nq; ++i)
864 {
865 phys[i] = sin(xc[i]);
866 }
867 Exp->PhysDeriv(phys, diff1);
868
869 for (int i = 1; i < nelmts; ++i)
870 {
871 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
872 Exp->PhysDeriv(phys + i * nq, tmp = diff1 + i * nq);
873 }
874
875 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2);
876
877 double epsilon = 1.0e-8;
878 for (int i = 0; i < diff1.size(); ++i)
879 {
880 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
881 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
882 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
883 }
884}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eModified_A, Nektar::Collections::ePhysDeriv, Nektar::Collections::eStdMat, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [27/27]

Nektar::SegCollectionTests::BOOST_AUTO_TEST_CASE ( TestSegPhysDeriv_SumFac_UniformP_MultiElmt  )

Definition at line 886 of file TestSegCollection.cpp.

887{
889 new SpatialDomains::PointGeom(1u, 0u, -1.5, 0.0, 0.0));
891 new SpatialDomains::PointGeom(1u, 1u, 1.0, 0.0, 0.0));
892
894
895 Nektar::LibUtilities::PointsType segPointsTypeDir1 =
897 const Nektar::LibUtilities::PointsKey segPointsKeyDir1(5,
898 segPointsTypeDir1);
899 Nektar::LibUtilities::BasisType basisTypeDir1 =
901 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
902 segPointsKeyDir1);
903
906 basisKeyDir1, segGeom);
907
908 int nelmts = 10;
909
910 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
911 for (int i = 0; i < nelmts; ++i)
912 {
913 CollExp.push_back(Exp);
914 }
915
917 Collections::CollectionOptimisation colOpt(dummySession, 1,
919 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
920 Collections::Collection c(CollExp, impTypes);
921 c.Initialise(Collections::ePhysDeriv);
922
923 const int nq = Exp->GetTotPoints();
925 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
926 Array<OneD, NekDouble> diff1(nelmts * nq);
927 Array<OneD, NekDouble> diff2(nelmts * nq);
928
929 Exp->GetCoords(xc);
930
931 for (int i = 0; i < nq; ++i)
932 {
933 phys[i] = sin(xc[i]);
934 }
935 Exp->PhysDeriv(phys, diff1);
936
937 for (int i = 1; i < nelmts; ++i)
938 {
939 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
940 Exp->PhysDeriv(phys + i * nq, tmp = diff1 + i * nq);
941 }
942
943 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2);
944
945 double epsilon = 1.0e-8;
946 for (int i = 0; i < diff1.size(); ++i)
947 {
948 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
949 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
950 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
951 }
952}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateSegGeom(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eModified_A, Nektar::Collections::ePhysDeriv, Nektar::Collections::eSumFac, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ CreateSegGeom()

SpatialDomains::SegGeomSharedPtr Nektar::SegCollectionTests::CreateSegGeom ( unsigned int  id,
SpatialDomains::PointGeomSharedPtr  v0,
SpatialDomains::PointGeomSharedPtr  v1,
int  coordim = 1 
)

Definition at line 46 of file TestSegCollection.cpp.

49{
50 SpatialDomains::PointGeomSharedPtr vertices[] = {v0, v1};
52 new SpatialDomains::SegGeom(id, coordim, vertices));
53 return result;
54}

Referenced by BOOST_AUTO_TEST_CASE().