Nektar++
Functions
Nektar::HexCollectionTests Namespace Reference

Functions

SpatialDomains::SegGeomSharedPtr CreateSegGeom (unsigned int id, SpatialDomains::PointGeomSharedPtr v0, SpatialDomains::PointGeomSharedPtr v1)
 
SpatialDomains::HexGeomSharedPtr CreateHex (SpatialDomains::PointGeomSharedPtr v0, SpatialDomains::PointGeomSharedPtr v1, SpatialDomains::PointGeomSharedPtr v2, SpatialDomains::PointGeomSharedPtr v3, SpatialDomains::PointGeomSharedPtr v4, SpatialDomains::PointGeomSharedPtr v5, SpatialDomains::PointGeomSharedPtr v6, SpatialDomains::PointGeomSharedPtr v7)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_StdMat_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_StdMat_VariableP)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_IterPerExp_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_IterPerExp_VariableP)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_IterPerExp_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_NoCollection_VariableP)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_SumFac_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_SumFac_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_SumFac_VariableP)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_SumFac_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexBwdTrans_MatrixFree_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_StdMat_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_MatrixFree_UniformP_Undeformed)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_MatrixFree_UniformP_Deformed)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_MatrixFree_UniformP_Deformed_OverInt)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_StdMat_VariableP)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_NoCollection_VariableP)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_SumFac_VariableP_CollAll)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_SumFac_VariableP_CollDir02)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_SumFac_VariableP_CollDir12)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_StdMat_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_IterPerExp_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_SumFac_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_SumFac_VariableP)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_SumFac_UniformP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_SumFac_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_SumFac_VariableP_MultiElmt_CollDir02)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTBase_SumFac_VariableP_MultiElmt_CollDir12)
 
 BOOST_AUTO_TEST_CASE (TestHexPhysDeriv_IterPerExp_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexPhysDeriv_MatrixFree_UniformP_Undeformed)
 
 BOOST_AUTO_TEST_CASE (TestHexPhysDeriv_MatrixFree_UniformP_Deformed)
 
 BOOST_AUTO_TEST_CASE (TestHexPhysDeriv_IterPerExp_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexPhysDeriv_NoCollection_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexPhysDeriv_StdMat_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexPhysDeriv_StdMat_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexPhysDeriv_SumFac_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexPhysDeriv_SumFac_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTDerivBase_Iterperexp_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTDerivBase_MatrixFree_UniformP_Undeformed)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTDerivBase_MatrixFree_UniformP_Deformed)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTDerivBase_MatrixFree_UniformP_Deformed_OverInt)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTDerivBase_IterPerExp_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTDerivBase_StdMat_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTDerivBase_StdMat_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTDerivBase_NoCollection_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTDerivBase_SumFac_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexIProductWRTDerivBase_SumFac_VariableP_MultiElmt)
 
 BOOST_AUTO_TEST_CASE (TestHexHelmholtz_NoCollection_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexHelmholtz_IterPerExp_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexHelmholtz_IterPerExp_UniformP_ConstVarDiff)
 
 BOOST_AUTO_TEST_CASE (TestHexHelmholtz_MatrixFree_UniformP)
 
 BOOST_AUTO_TEST_CASE (TestHexHelmholtz_MatrixFree_UniformP_Deformed_OverInt)
 
 BOOST_AUTO_TEST_CASE (TestHexHelmholtz_MatrixFree_UniformP_ConstVarDiff)
 

Function Documentation

◆ BOOST_AUTO_TEST_CASE() [1/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_IterPerExp_UniformP  )

Definition at line 243 of file TestHexCollection.cpp.

244{
246 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
248 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
250 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
252 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
254 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
256 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
258 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
260 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
261
263 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
264
265 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
267 Nektar::LibUtilities::BasisType basisTypeDir1 =
269 unsigned int numQuadPoints = 6;
270 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
271 quadPointsTypeDir1);
272 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
273 quadPointsKeyDir1);
274
277 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
278
281 basisKeyDir1, basisKeyDir1, basisKeyDir1);
282
283 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
284 CollExp.push_back(Exp);
285
287 Collections::CollectionOptimisation colOpt(dummySession, 3,
289 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
290 Collections::Collection c(CollExp, impTypes);
291 c.Initialise(Collections::eBwdTrans);
292
293 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs(), 1.0), tmp;
294 Array<OneD, NekDouble> phys1(Exp->GetTotPoints());
295 Array<OneD, NekDouble> phys2(Exp->GetTotPoints());
296
297 Exp->BwdTrans(coeffs, phys1);
298 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
299
300 double epsilon = 1.0e-8;
301 for (int i = 0; i < phys1.size(); ++i)
302 {
303 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
304 }
305}
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
SpatialDomains::HexGeomSharedPtr CreateHex(SpatialDomains::PointGeomSharedPtr v0, SpatialDomains::PointGeomSharedPtr v1, SpatialDomains::PointGeomSharedPtr v2, SpatialDomains::PointGeomSharedPtr v3, SpatialDomains::PointGeomSharedPtr v4, SpatialDomains::PointGeomSharedPtr v5, SpatialDomains::PointGeomSharedPtr v6, SpatialDomains::PointGeomSharedPtr v7)
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< HexExp > HexExpSharedPtr
Definition: HexExp.h:260
std::shared_ptr< HexGeom > HexGeomSharedPtr
Definition: HexGeom.h:87
std::shared_ptr< PointGeom > PointGeomSharedPtr
Definition: Geometry.h:60
std::shared_ptr< StdHexExp > StdHexExpSharedPtr
Definition: StdHexExp.h:255

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_IterPerExp_VariableP  )

Definition at line 307 of file TestHexCollection.cpp.

308{
310 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
312 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
314 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
316 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
318 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
320 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
322 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
324 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
325
327 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
328
329 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
331 Nektar::LibUtilities::BasisType basisTypeDir1 =
333 unsigned int numQuadPoints = 6;
334 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
335 quadPointsTypeDir1);
336 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
337 quadPointsKeyDir1);
338 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
339 quadPointsKeyDir1);
340 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
341 quadPointsKeyDir1);
342
345 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
346
349 basisKeyDir1, basisKeyDir2, basisKeyDir3);
350
351 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
352 CollExp.push_back(Exp);
353
355 Collections::CollectionOptimisation colOpt(dummySession, 3,
357 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
358 Collections::Collection c(CollExp, impTypes);
359 c.Initialise(Collections::eBwdTrans);
360
361 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs(), 1.0), tmp;
362 Array<OneD, NekDouble> phys1(Exp->GetTotPoints());
363 Array<OneD, NekDouble> phys2(Exp->GetTotPoints());
364
365 Exp->BwdTrans(coeffs, phys1);
366 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
367 c.Initialise(Collections::eBwdTrans);
368
369 double epsilon = 1.0e-8;
370 for (int i = 0; i < phys1.size(); ++i)
371 {
372 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
373 }
374}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [3/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_IterPerExp_VariableP_MultiElmt  )

Definition at line 376 of file TestHexCollection.cpp.

377{
379 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
381 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
383 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
385 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
387 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
389 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
391 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
393 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
394
396 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
397
398 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
400 Nektar::LibUtilities::BasisType basisTypeDir1 =
402 unsigned int numQuadPoints = 6;
403 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
404 quadPointsTypeDir1);
405 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
406 quadPointsKeyDir1);
407 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
408 quadPointsKeyDir1);
409 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
410 quadPointsKeyDir1);
411
414 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
415
418 basisKeyDir1, basisKeyDir2, basisKeyDir3);
419
420 int nelmts = 10;
421
422 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
423 for (int i = 0; i < nelmts; ++i)
424 CollExp.push_back(Exp);
425
427 Collections::CollectionOptimisation colOpt(dummySession, 3,
429 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
430 Collections::Collection c(CollExp, impTypes);
431 c.Initialise(Collections::eBwdTrans);
432
433 Array<OneD, NekDouble> coeffs(nelmts * Exp->GetNcoeffs(), 1.0), tmp;
434 Array<OneD, NekDouble> phys1(nelmts * Exp->GetTotPoints());
435 Array<OneD, NekDouble> phys2(nelmts * Exp->GetTotPoints());
436
437 for (int i = 0; i < nelmts; ++i)
438 {
439 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
440 tmp = phys1 + i * Exp->GetTotPoints());
441 }
442
443 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
444
445 double epsilon = 1.0e-8;
446 for (int i = 0; i < phys1.size(); ++i)
447 {
448 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
449 }
450}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [4/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_MatrixFree_UniformP  )

Definition at line 823 of file TestHexCollection.cpp.

824{
826 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
828 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
830 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
832 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
834 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
836 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
838 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
840 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
841
843 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
844
845 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
847 Nektar::LibUtilities::BasisType basisTypeDir1 =
849 unsigned int numQuadPoints = 6;
850 unsigned int numModes = 4;
851 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
852 quadPointsTypeDir1);
853 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
854 quadPointsKeyDir1);
855
858 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
859
862 basisKeyDir1, basisKeyDir1, basisKeyDir1);
863
864 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
865 CollExp.push_back(Exp);
866
868 Collections::CollectionOptimisation colOpt(dummySession, 2,
870 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
871 Collections::Collection c(CollExp, impTypes);
872 c.Initialise(Collections::eBwdTrans);
873
874 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs(), 1.0), tmp;
875 Array<OneD, NekDouble> physRef(Exp->GetTotPoints());
876 Array<OneD, NekDouble> phys(Exp->GetTotPoints());
877
878 Exp->BwdTrans(coeffs, physRef);
879 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys);
880
881 double epsilon = 1.0e-8;
882 for (int i = 0; i < physRef.size(); ++i)
883 {
884 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
885 }
886}

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

◆ BOOST_AUTO_TEST_CASE() [5/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_NoCollection_VariableP  )

Definition at line 452 of file TestHexCollection.cpp.

453{
455 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
457 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
459 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
461 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
463 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
465 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
467 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
469 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
470
472 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
473
474 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
476 Nektar::LibUtilities::BasisType basisTypeDir1 =
478 unsigned int numQuadPoints = 6;
479 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
480 quadPointsTypeDir1);
481 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
482 quadPointsKeyDir1);
483 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
484 quadPointsKeyDir1);
485 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
486 quadPointsKeyDir1);
487
490 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
491
494 basisKeyDir1, basisKeyDir2, basisKeyDir3);
495
496 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
497 CollExp.push_back(Exp);
498
500 Collections::CollectionOptimisation colOpt(dummySession, 2,
502 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
503 Collections::Collection c(CollExp, impTypes);
504 c.Initialise(Collections::eBwdTrans);
505
506 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs(), 1.0), tmp;
507 Array<OneD, NekDouble> phys1(Exp->GetTotPoints());
508 Array<OneD, NekDouble> phys2(Exp->GetTotPoints());
509
510 Exp->BwdTrans(coeffs, phys1);
511
512 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
513
514 double epsilon = 1.0e-8;
515 for (int i = 0; i < phys1.size(); ++i)
516 {
517 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
518 }
519}

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

◆ BOOST_AUTO_TEST_CASE() [6/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_StdMat_UniformP  )

Definition at line 112 of file TestHexCollection.cpp.

113{
115 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
117 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
119 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
121 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
123 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
125 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
127 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
129 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
130
132 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
133
134 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
136 Nektar::LibUtilities::BasisType basisTypeDir1 =
138 unsigned int numQuadPoints = 6;
139 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
140 quadPointsTypeDir1);
141 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
142 quadPointsKeyDir1);
143
146 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
147
148 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
149 CollExp.push_back(Exp);
150
152 Collections::CollectionOptimisation colOpt(dummySession, 3,
154 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(Exp);
155 Collections::Collection c(CollExp, impTypes);
156 c.Initialise(Collections::eBwdTrans);
157
158 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs(), 1.0), tmp;
159 Array<OneD, NekDouble> phys1(Exp->GetTotPoints());
160 Array<OneD, NekDouble> phys2(Exp->GetTotPoints());
161
162 Exp->BwdTrans(coeffs, phys1);
163 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
164
165 double epsilon = 1.0e-8;
166 for (int i = 0; i < phys1.size(); ++i)
167 {
168 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
169 }
170}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [7/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_StdMat_VariableP  )

Definition at line 172 of file TestHexCollection.cpp.

173{
175 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
177 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
179 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
181 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
183 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
185 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
187 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
189 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
190
192 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
193
194 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
196 Nektar::LibUtilities::BasisType basisTypeDir1 =
198 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
199 quadPointsTypeDir1);
200 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(7,
201 quadPointsTypeDir1);
202 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(9,
203 quadPointsTypeDir1);
204 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
205 quadPointsKeyDir1);
206 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
207 quadPointsKeyDir2);
208 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
209 quadPointsKeyDir3);
210
213 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
214
217 basisKeyDir1, basisKeyDir2, basisKeyDir3);
218
219 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
220 CollExp.push_back(Exp);
221
223 Collections::CollectionOptimisation colOpt(dummySession, 3,
225 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
226 Collections::Collection c(CollExp, impTypes);
227 c.Initialise(Collections::eBwdTrans);
228
229 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs(), 1.0), tmp;
230 Array<OneD, NekDouble> phys1(Exp->GetTotPoints());
231 Array<OneD, NekDouble> phys2(Exp->GetTotPoints());
232
233 Exp->BwdTrans(coeffs, phys1);
234 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
235
236 double epsilon = 1.0e-8;
237 for (int i = 0; i < phys1.size(); ++i)
238 {
239 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
240 }
241}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [8/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_SumFac_UniformP  )

Definition at line 521 of file TestHexCollection.cpp.

522{
524 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
526 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
528 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
530 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
532 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
534 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
536 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
538 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
539
541 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
542
543 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
545 Nektar::LibUtilities::BasisType basisTypeDir1 =
547 unsigned int numQuadPoints = 6;
548 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
549 quadPointsTypeDir1);
550 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
551 quadPointsKeyDir1);
552
555 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
556
559 basisKeyDir1, basisKeyDir1, basisKeyDir1);
560
561 int nelmts = 1;
562
563 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
564 for (int i = 0; i < nelmts; ++i)
565 CollExp.push_back(Exp);
566
568 Collections::CollectionOptimisation colOpt(dummySession, 3,
570 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
571 Collections::Collection c(CollExp, impTypes);
572 c.Initialise(Collections::eBwdTrans);
573
574 Array<OneD, NekDouble> coeffs(nelmts * Exp->GetNcoeffs(), 1.0), tmp;
575 Array<OneD, NekDouble> phys1(nelmts * Exp->GetTotPoints());
576 Array<OneD, NekDouble> phys2(nelmts * Exp->GetTotPoints());
577
578 for (int i = 0; i < nelmts; ++i)
579 {
580 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
581 tmp = phys1 + i * Exp->GetTotPoints());
582 }
583 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
584
585 double epsilon = 1.0e-8;
586 for (int i = 0; i < phys1.size(); ++i)
587 {
588 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
589 }
590}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [9/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_SumFac_UniformP_MultiElmt  )

Definition at line 592 of file TestHexCollection.cpp.

593{
595 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
597 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
599 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
601 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
603 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
605 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
607 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
609 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
610
612 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
613
614 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
616 Nektar::LibUtilities::BasisType basisTypeDir1 =
618 unsigned int numQuadPoints = 6;
619 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
620 quadPointsTypeDir1);
621 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
622 quadPointsKeyDir1);
623
626 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
627
630 basisKeyDir1, basisKeyDir1, basisKeyDir1);
631
632 int nelmts = 10;
633
634 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
635 for (int i = 0; i < nelmts; ++i)
636 CollExp.push_back(Exp);
637
639 Collections::CollectionOptimisation colOpt(dummySession, 3,
641 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
642 Collections::Collection c(CollExp, impTypes);
643 c.Initialise(Collections::eBwdTrans);
644
645 Array<OneD, NekDouble> coeffs(nelmts * Exp->GetNcoeffs(), 1.0), tmp;
646 Array<OneD, NekDouble> phys1(nelmts * Exp->GetTotPoints());
647 Array<OneD, NekDouble> phys2(nelmts * Exp->GetTotPoints());
648
649 for (int i = 0; i < nelmts; ++i)
650 {
651 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
652 tmp = phys1 + i * Exp->GetTotPoints());
653 }
654 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
655
656 double epsilon = 1.0e-8;
657 for (int i = 0; i < phys1.size(); ++i)
658 {
659 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
660 }
661}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [10/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_SumFac_VariableP  )

Definition at line 663 of file TestHexCollection.cpp.

664{
666 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
668 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
670 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
672 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
674 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
676 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
678 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
680 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
681
683 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
684
685 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
687 Nektar::LibUtilities::BasisType basisTypeDir1 =
689 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
690 quadPointsTypeDir1);
691 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(7,
692 quadPointsTypeDir1);
693 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(9,
694 quadPointsTypeDir1);
695 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
696 quadPointsKeyDir1);
697 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
698 quadPointsKeyDir2);
699 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
700 quadPointsKeyDir3);
701
704 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
705
708 basisKeyDir1, basisKeyDir2, basisKeyDir3);
709
710 int nelmts = 1;
711
712 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
713 for (int i = 0; i < nelmts; ++i)
714 {
715 CollExp.push_back(Exp);
716 }
717
719 Collections::CollectionOptimisation colOpt(dummySession, 3,
721 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
722 Collections::Collection c(CollExp, impTypes);
723 c.Initialise(Collections::eBwdTrans);
724
725 Array<OneD, NekDouble> coeffs(nelmts * Exp->GetNcoeffs(), 1.0), tmp;
726 Array<OneD, NekDouble> phys1(nelmts * Exp->GetTotPoints());
727 Array<OneD, NekDouble> phys2(nelmts * Exp->GetTotPoints());
728
729 for (int i = 0; i < nelmts; ++i)
730 {
731 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
732 tmp = phys1 + i * Exp->GetTotPoints());
733 }
734 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
735
736 double epsilon = 1.0e-8;
737 for (int i = 0; i < phys1.size(); ++i)
738 {
739 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
740 }
741}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [11/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexBwdTrans_SumFac_VariableP_MultiElmt  )

Definition at line 743 of file TestHexCollection.cpp.

744{
746 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
748 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
750 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
752 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
754 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
756 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
758 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
760 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
761
763 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
764
765 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
767 Nektar::LibUtilities::BasisType basisTypeDir1 =
769 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
770 quadPointsTypeDir1);
771 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(7,
772 quadPointsTypeDir1);
773 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(9,
774 quadPointsTypeDir1);
775 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
776 quadPointsKeyDir1);
777 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
778 quadPointsKeyDir2);
779 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
780 quadPointsKeyDir3);
781
784 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
785
788 basisKeyDir1, basisKeyDir2, basisKeyDir3);
789
790 int nelmts = 10;
791
792 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
793 for (int i = 0; i < nelmts; ++i)
794 {
795 CollExp.push_back(Exp);
796 }
797
799 Collections::CollectionOptimisation colOpt(dummySession, 3,
801 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
802 Collections::Collection c(CollExp, impTypes);
803 c.Initialise(Collections::eBwdTrans);
804
805 Array<OneD, NekDouble> coeffs(nelmts * Exp->GetNcoeffs(), 1.0), tmp;
806 Array<OneD, NekDouble> phys1(nelmts * Exp->GetTotPoints());
807 Array<OneD, NekDouble> phys2(nelmts * Exp->GetTotPoints());
808
809 for (int i = 0; i < nelmts; ++i)
810 {
811 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
812 tmp = phys1 + i * Exp->GetTotPoints());
813 }
814 c.ApplyOperator(Collections::eBwdTrans, coeffs, phys2);
815
816 double epsilon = 1.0e-8;
817 for (int i = 0; i < phys1.size(); ++i)
818 {
819 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
820 }
821}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [12/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexHelmholtz_IterPerExp_UniformP  )

Definition at line 4151 of file TestHexCollection.cpp.

4152{
4154 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
4156 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
4158 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
4160 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
4162 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
4164 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
4166 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
4168 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
4169
4171 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
4172
4173 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
4175 Nektar::LibUtilities::BasisType basisTypeDir1 =
4177 unsigned int numQuadPoints = 5;
4178 unsigned int numModes = 4;
4179
4180 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
4181 quadPointsTypeDir1);
4182 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
4183 quadPointsKeyDir1);
4184
4187 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
4188
4191 basisKeyDir1, basisKeyDir1, basisKeyDir1);
4192
4193 int nelmts = 10;
4194
4195 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
4196 for (int i = 0; i < nelmts; ++i)
4197 {
4198 CollExp.push_back(Exp);
4199 }
4200
4202 Collections::CollectionOptimisation colOpt(dummySession, 2,
4204 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
4205 Collections::Collection c(CollExp, impTypes);
4208
4209 c.Initialise(Collections::eHelmholtz, factors);
4210
4211 const int nm = Exp->GetNcoeffs();
4212 Array<OneD, NekDouble> coeffsIn(nelmts * nm);
4213 Array<OneD, NekDouble> coeffsRef(nelmts * nm);
4214 Array<OneD, NekDouble> coeffs(nelmts * nm), tmp;
4215
4216 for (int i = 0; i < nm; ++i)
4217 {
4218 coeffsIn[i] = 1.0;
4219 }
4220
4221 for (int i = 1; i < nelmts; ++i)
4222 {
4223 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
4224 }
4225
4226 StdRegions::StdMatrixKey mkey(StdRegions::eHelmholtz, Exp->DetShapeType(),
4227 *Exp, factors);
4228
4229 for (int i = 0; i < nelmts; ++i)
4230 {
4231 // Standard routines
4232 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4233 }
4234
4235 c.ApplyOperator(Collections::eHelmholtz, coeffsIn, coeffs);
4236
4237 double epsilon = 1.0e-8;
4238 for (int i = 0; i < coeffsRef.size(); ++i)
4239 {
4240 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4241 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4242 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
4243 }
4244}
std::map< ConstFactorType, NekDouble > ConstFactorMap
Definition: StdRegions.hpp:408
StdRegions::ConstFactorMap factors
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1191
scalarT< T > abs(scalarT< T > in)
Definition: scalar.hpp:298

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::StdRegions::eFactorLambda, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eHelmholtz, Nektar::StdRegions::eHelmholtz, Nektar::Collections::eIterPerExp, Nektar::LibUtilities::eModified_A, Nektar::VarcoeffHashingTest::factors, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [13/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexHelmholtz_IterPerExp_UniformP_ConstVarDiff  )

Definition at line 4246 of file TestHexCollection.cpp.

4247{
4249 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
4251 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
4253 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
4255 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
4257 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
4259 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
4261 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
4263 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
4264
4266 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
4267
4268 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
4270 Nektar::LibUtilities::BasisType basisTypeDir1 =
4272 unsigned int numQuadPoints = 5;
4273 unsigned int numModes = 4;
4274
4275 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
4276 quadPointsTypeDir1);
4277 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
4278 quadPointsKeyDir1);
4279
4282 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
4283
4286 basisKeyDir1, basisKeyDir1, basisKeyDir1);
4287
4288 int nelmts = 10;
4289
4290 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
4291 for (int i = 0; i < nelmts; ++i)
4292 {
4293 CollExp.push_back(Exp);
4294 }
4295
4297 Collections::CollectionOptimisation colOpt(dummySession, 2,
4299 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
4300 Collections::Collection c(CollExp, impTypes);
4309
4310 c.Initialise(Collections::eHelmholtz, factors);
4311
4312 const int nm = Exp->GetNcoeffs();
4313 Array<OneD, NekDouble> coeffsIn(nelmts * nm);
4314 Array<OneD, NekDouble> coeffsRef(nelmts * nm);
4315 Array<OneD, NekDouble> coeffs(nelmts * nm), tmp;
4316
4317 for (int i = 0; i < nm; ++i)
4318 {
4319 coeffsIn[i] = 1.0;
4320 }
4321
4322 for (int i = 1; i < nelmts; ++i)
4323 {
4324 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
4325 }
4326
4327 StdRegions::StdMatrixKey mkey(StdRegions::eHelmholtz, Exp->DetShapeType(),
4328 *Exp, factors);
4329
4330 for (int i = 0; i < nelmts; ++i)
4331 {
4332 // Standard routines
4333 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4334 }
4335
4336 c.ApplyOperator(Collections::eHelmholtz, coeffsIn, coeffs);
4337
4338 double epsilon = 1.0e-8;
4339 for (int i = 0; i < coeffsRef.size(); ++i)
4340 {
4341 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4342 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4343 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
4344 }
4345}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::StdRegions::eFactorCoeffD00, Nektar::StdRegions::eFactorCoeffD01, Nektar::StdRegions::eFactorCoeffD02, Nektar::StdRegions::eFactorCoeffD11, Nektar::StdRegions::eFactorCoeffD12, Nektar::StdRegions::eFactorCoeffD22, Nektar::StdRegions::eFactorLambda, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eHelmholtz, Nektar::StdRegions::eHelmholtz, Nektar::Collections::eIterPerExp, Nektar::LibUtilities::eModified_A, Nektar::VarcoeffHashingTest::factors, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [14/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexHelmholtz_MatrixFree_UniformP  )

Definition at line 4347 of file TestHexCollection.cpp.

4348{
4350 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
4352 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
4354 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
4356 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
4358 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
4360 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
4362 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
4364 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
4365
4367 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
4368
4369 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
4371 Nektar::LibUtilities::BasisType basisTypeDir1 =
4373 unsigned int numQuadPoints = 5;
4374 unsigned int numModes = 4;
4375
4376 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
4377 quadPointsTypeDir1);
4378 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
4379 quadPointsKeyDir1);
4380
4383 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
4384
4387 basisKeyDir1, basisKeyDir1, basisKeyDir1);
4388
4389 int nelmts = 10;
4390
4391 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
4392 for (int i = 0; i < nelmts; ++i)
4393 {
4394 CollExp.push_back(Exp);
4395 }
4396
4398 Collections::CollectionOptimisation colOpt(dummySession, 2,
4400 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
4401 Collections::Collection c(CollExp, impTypes);
4404
4405 c.Initialise(Collections::eHelmholtz, factors);
4406
4407 const int nm = Exp->GetNcoeffs();
4408 Array<OneD, NekDouble> coeffsIn(nelmts * nm);
4409 Array<OneD, NekDouble> coeffsRef(nelmts * nm);
4410 Array<OneD, NekDouble> coeffs(nelmts * nm), tmp;
4411
4412 for (int i = 0; i < nm; ++i)
4413 {
4414 coeffsIn[i] = 1.0;
4415 }
4416
4417 for (int i = 1; i < nelmts; ++i)
4418 {
4419 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
4420 }
4421
4422 StdRegions::StdMatrixKey mkey(StdRegions::eHelmholtz, Exp->DetShapeType(),
4423 *Exp, factors);
4424
4425 for (int i = 0; i < nelmts; ++i)
4426 {
4427 // Standard routines
4428 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4429 }
4430
4431 c.ApplyOperator(Collections::eHelmholtz, coeffsIn, coeffs);
4432
4433 double epsilon = 1.0e-8;
4434 for (int i = 0; i < coeffsRef.size(); ++i)
4435 {
4436 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4437 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4438 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
4439 }
4440}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::StdRegions::eFactorLambda, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eHelmholtz, Nektar::StdRegions::eHelmholtz, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::VarcoeffHashingTest::factors, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [15/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexHelmholtz_MatrixFree_UniformP_ConstVarDiff  )

Definition at line 4537 of file TestHexCollection.cpp.

4538{
4540 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
4542 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
4544 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
4546 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
4548 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
4550 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
4552 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
4554 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
4555
4557 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
4558
4559 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
4561 Nektar::LibUtilities::BasisType basisTypeDir1 =
4563 unsigned int numQuadPoints = 5;
4564 unsigned int numModes = 4;
4565
4566 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
4567 quadPointsTypeDir1);
4568 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
4569 quadPointsKeyDir1);
4570
4573 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
4574
4577 basisKeyDir1, basisKeyDir1, basisKeyDir1);
4578
4579 int nelmts = 10;
4580
4581 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
4582 for (int i = 0; i < nelmts; ++i)
4583 {
4584 CollExp.push_back(Exp);
4585 }
4586
4588 Collections::CollectionOptimisation colOpt(dummySession, 2,
4590 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
4591 Collections::Collection c(CollExp, impTypes);
4600
4601 c.Initialise(Collections::eHelmholtz, factors);
4602
4603 const int nm = Exp->GetNcoeffs();
4604 Array<OneD, NekDouble> coeffsIn(nelmts * nm);
4605 Array<OneD, NekDouble> coeffsRef(nelmts * nm);
4606 Array<OneD, NekDouble> coeffs(nelmts * nm), tmp;
4607
4608 for (int i = 0; i < nm; ++i)
4609 {
4610 coeffsIn[i] = 1.0;
4611 }
4612
4613 for (int i = 1; i < nelmts; ++i)
4614 {
4615 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
4616 }
4617
4618 StdRegions::StdMatrixKey mkey(StdRegions::eHelmholtz, Exp->DetShapeType(),
4619 *Exp, factors);
4620
4621 for (int i = 0; i < nelmts; ++i)
4622 {
4623 // Standard routines
4624 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4625 }
4626
4627 c.ApplyOperator(Collections::eHelmholtz, coeffsIn, coeffs);
4628
4629 double epsilon = 1.0e-8;
4630 for (int i = 0; i < coeffsRef.size(); ++i)
4631 {
4632 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4633 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4634 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
4635 }
4636}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::StdRegions::eFactorCoeffD00, Nektar::StdRegions::eFactorCoeffD01, Nektar::StdRegions::eFactorCoeffD02, Nektar::StdRegions::eFactorCoeffD11, Nektar::StdRegions::eFactorCoeffD12, Nektar::StdRegions::eFactorCoeffD22, Nektar::StdRegions::eFactorLambda, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eHelmholtz, Nektar::StdRegions::eHelmholtz, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::VarcoeffHashingTest::factors, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [16/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexHelmholtz_MatrixFree_UniformP_Deformed_OverInt  )

Definition at line 4442 of file TestHexCollection.cpp.

4443{
4445 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
4447 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
4449 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
4451 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
4453 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
4455 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
4457 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
4459 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
4460
4462 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
4463
4464 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
4466 Nektar::LibUtilities::BasisType basisTypeDir1 =
4468 unsigned int numQuadPoints = 8;
4469 unsigned int numModes = 4;
4470
4471 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
4472 quadPointsTypeDir1);
4473 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
4474 quadPointsKeyDir1);
4475
4478 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
4479
4482 basisKeyDir1, basisKeyDir1, basisKeyDir1);
4483
4484 int nelmts = 10;
4485
4486 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
4487 for (int i = 0; i < nelmts; ++i)
4488 {
4489 CollExp.push_back(Exp);
4490 }
4491
4493 Collections::CollectionOptimisation colOpt(dummySession, 2,
4495 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
4496 Collections::Collection c(CollExp, impTypes);
4499
4500 c.Initialise(Collections::eHelmholtz, factors);
4501
4502 const int nm = Exp->GetNcoeffs();
4503 Array<OneD, NekDouble> coeffsIn(nelmts * nm);
4504 Array<OneD, NekDouble> coeffsRef(nelmts * nm);
4505 Array<OneD, NekDouble> coeffs(nelmts * nm), tmp;
4506
4507 for (int i = 0; i < nm; ++i)
4508 {
4509 coeffsIn[i] = 1.0;
4510 }
4511
4512 for (int i = 1; i < nelmts; ++i)
4513 {
4514 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
4515 }
4516
4517 StdRegions::StdMatrixKey mkey(StdRegions::eHelmholtz, Exp->DetShapeType(),
4518 *Exp, factors);
4519
4520 for (int i = 0; i < nelmts; ++i)
4521 {
4522 // Standard routines
4523 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4524 }
4525
4526 c.ApplyOperator(Collections::eHelmholtz, coeffsIn, coeffs);
4527
4528 double epsilon = 1.0e-8;
4529 for (int i = 0; i < coeffsRef.size(); ++i)
4530 {
4531 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4532 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4533 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
4534 }
4535}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::StdRegions::eFactorLambda, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eHelmholtz, Nektar::StdRegions::eHelmholtz, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::VarcoeffHashingTest::factors, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [17/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexHelmholtz_NoCollection_UniformP  )

Definition at line 4056 of file TestHexCollection.cpp.

4057{
4059 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
4061 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
4063 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
4065 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
4067 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
4069 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
4071 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
4073 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
4074
4076 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
4077
4078 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
4080 Nektar::LibUtilities::BasisType basisTypeDir1 =
4082 unsigned int numQuadPoints = 5;
4083 unsigned int numModes = 4;
4084
4085 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
4086 quadPointsTypeDir1);
4087 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
4088 quadPointsKeyDir1);
4089
4092 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
4093
4096 basisKeyDir1, basisKeyDir1, basisKeyDir1);
4097
4098 int nelmts = 10;
4099
4100 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
4101 for (int i = 0; i < nelmts; ++i)
4102 {
4103 CollExp.push_back(Exp);
4104 }
4105
4107 Collections::CollectionOptimisation colOpt(dummySession, 2,
4109 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
4110 Collections::Collection c(CollExp, impTypes);
4113
4114 c.Initialise(Collections::eHelmholtz, factors);
4115
4116 const int nm = Exp->GetNcoeffs();
4117 Array<OneD, NekDouble> coeffsIn(nelmts * nm);
4118 Array<OneD, NekDouble> coeffsRef(nelmts * nm);
4119 Array<OneD, NekDouble> coeffs(nelmts * nm), tmp;
4120
4121 for (int i = 0; i < nm; ++i)
4122 {
4123 coeffsIn[i] = 1.0;
4124 }
4125
4126 for (int i = 1; i < nelmts; ++i)
4127 {
4128 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
4129 }
4130
4131 StdRegions::StdMatrixKey mkey(StdRegions::eHelmholtz, Exp->DetShapeType(),
4132 *Exp, factors);
4133
4134 for (int i = 0; i < nelmts; ++i)
4135 {
4136 // Standard routines
4137 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4138 }
4139
4140 c.ApplyOperator(Collections::eHelmholtz, coeffsIn, coeffs);
4141
4142 double epsilon = 1.0e-8;
4143 for (int i = 0; i < coeffsRef.size(); ++i)
4144 {
4145 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4146 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4147 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
4148 }
4149}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::StdRegions::eFactorLambda, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eHelmholtz, Nektar::StdRegions::eHelmholtz, Nektar::LibUtilities::eModified_A, Nektar::Collections::eNoCollection, Nektar::VarcoeffHashingTest::factors, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vcopy().

◆ BOOST_AUTO_TEST_CASE() [18/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_IterPerExp_VariableP_MultiElmt  )

Definition at line 1694 of file TestHexCollection.cpp.

1695{
1697 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
1699 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1701 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1703 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1705 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1707 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1709 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
1711 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1712
1714 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1715
1716 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1718 Nektar::LibUtilities::BasisType basisTypeDir1 =
1720 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
1721 quadPointsTypeDir1);
1722 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(7,
1723 quadPointsTypeDir1);
1724 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(9,
1725 quadPointsTypeDir1);
1726 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1727 quadPointsKeyDir1);
1728 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
1729 quadPointsKeyDir2);
1730 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
1731 quadPointsKeyDir3);
1732
1735 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
1736
1739 basisKeyDir1, basisKeyDir2, basisKeyDir3);
1740
1741 int nelmts = 10;
1742
1743 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1744 for (int i = 0; i < nelmts; ++i)
1745 {
1746 CollExp.push_back(Exp);
1747 }
1748
1750 Collections::CollectionOptimisation colOpt(dummySession, 3,
1752 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1753 Collections::Collection c(CollExp, impTypes);
1754 c.Initialise(Collections::eIProductWRTBase);
1755
1756 const int nq = Exp->GetTotPoints();
1757 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
1758 Array<OneD, NekDouble> coeffs1(nelmts * Exp->GetNcoeffs());
1759 Array<OneD, NekDouble> coeffs2(nelmts * Exp->GetNcoeffs());
1760
1761 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1762
1763 Exp->GetCoords(xc, yc, zc);
1764
1765 for (int i = 0; i < nq; ++i)
1766 {
1767 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1768 }
1769 Exp->IProductWRTBase(phys, coeffs1);
1770
1771 for (int i = 1; i < nelmts; ++i)
1772 {
1773 Vmath::Vcopy(nq, &phys[0], 1, &phys[i * nq], 1);
1774 Exp->IProductWRTBase(phys + i * nq,
1775 tmp = coeffs1 + i * Exp->GetNcoeffs());
1776 }
1777
1778 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
1779
1780 double epsilon = 1.0e-8;
1781 for (int i = 0; i < coeffs1.size(); ++i)
1782 {
1783 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1784 }
1785}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [19/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_MatrixFree_UniformP_Deformed  )

Definition at line 1039 of file TestHexCollection.cpp.

1040{
1042 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
1044 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1046 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1048 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1050 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1052 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1054 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
1056 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1057
1059 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1060
1061 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1063 Nektar::LibUtilities::BasisType basisTypeDir1 =
1065 unsigned int numQuadPoints = 5;
1066 unsigned int numModes = 4;
1067 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
1068 quadPointsTypeDir1);
1069 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
1070 quadPointsKeyDir1);
1071
1074 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
1075
1078 basisKeyDir1, basisKeyDir1, basisKeyDir1);
1079
1080 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1081 CollExp.push_back(Exp);
1082
1084 Collections::CollectionOptimisation colOpt(dummySession, 2,
1086 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1087 Collections::Collection c(CollExp, impTypes);
1088 c.Initialise(Collections::eIProductWRTBase);
1089
1090 const int nq = Exp->GetTotPoints();
1091 Array<OneD, NekDouble> phys(nq);
1092 Array<OneD, NekDouble> coeffsRef(Exp->GetNcoeffs());
1093 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs());
1094
1095 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1096
1097 Exp->GetCoords(xc, yc, zc);
1098
1099 for (int i = 0; i < nq; ++i)
1100 {
1101 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1102 }
1103
1104 Exp->IProductWRTBase(phys, coeffsRef);
1105 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs);
1106
1107 double epsilon = 1.0e-8;
1108 for (int i = 0; i < coeffsRef.size(); ++i)
1109 {
1110 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1111 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1112 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1113 }
1114}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTBase, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [20/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_MatrixFree_UniformP_Deformed_OverInt  )

Definition at line 1116 of file TestHexCollection.cpp.

1118{
1120 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
1122 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1124 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1126 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1128 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1130 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1132 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
1134 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1135
1137 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1138
1139 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1141 Nektar::LibUtilities::BasisType basisTypeDir1 =
1143 unsigned int numQuadPoints = 8;
1144 unsigned int numModes = 4;
1145 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
1146 quadPointsTypeDir1);
1147 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
1148 quadPointsKeyDir1);
1149
1152 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
1153
1156 basisKeyDir1, basisKeyDir1, basisKeyDir1);
1157
1158 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1159 CollExp.push_back(Exp);
1160
1162 Collections::CollectionOptimisation colOpt(dummySession, 2,
1164 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1165 Collections::Collection c(CollExp, impTypes);
1166 c.Initialise(Collections::eIProductWRTBase);
1167
1168 const int nq = Exp->GetTotPoints();
1169 Array<OneD, NekDouble> phys(nq);
1170 Array<OneD, NekDouble> coeffsRef(Exp->GetNcoeffs());
1171 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs());
1172
1173 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1174
1175 Exp->GetCoords(xc, yc, zc);
1176
1177 for (int i = 0; i < nq; ++i)
1178 {
1179 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1180 }
1181
1182 Exp->IProductWRTBase(phys, coeffsRef);
1183 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs);
1184
1185 double epsilon = 1.0e-8;
1186 for (int i = 0; i < coeffsRef.size(); ++i)
1187 {
1188 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1189 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1190 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1191 }
1192}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTBase, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [21/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_MatrixFree_UniformP_Undeformed  )

Definition at line 962 of file TestHexCollection.cpp.

963{
965 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
967 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
969 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
971 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
973 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
975 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
977 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
979 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
980
982 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
983
984 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
986 Nektar::LibUtilities::BasisType basisTypeDir1 =
988 unsigned int numQuadPoints = 5;
989 unsigned int numModes = 4;
990 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
991 quadPointsTypeDir1);
992 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
993 quadPointsKeyDir1);
994
997 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
998
1001 basisKeyDir1, basisKeyDir1, basisKeyDir1);
1002
1003 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1004 CollExp.push_back(Exp);
1005
1007 Collections::CollectionOptimisation colOpt(dummySession, 2,
1009 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1010 Collections::Collection c(CollExp, impTypes);
1011 c.Initialise(Collections::eIProductWRTBase);
1012
1013 const int nq = Exp->GetTotPoints();
1014 Array<OneD, NekDouble> phys(nq);
1015 Array<OneD, NekDouble> coeffsRef(Exp->GetNcoeffs());
1016 Array<OneD, NekDouble> coeffs(Exp->GetNcoeffs());
1017
1018 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1019
1020 Exp->GetCoords(xc, yc, zc);
1021
1022 for (int i = 0; i < nq; ++i)
1023 {
1024 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1025 }
1026
1027 Exp->IProductWRTBase(phys, coeffsRef);
1028 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs);
1029
1030 double epsilon = 1.0e-8;
1031 for (int i = 0; i < coeffsRef.size(); ++i)
1032 {
1033 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1034 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1035 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1036 }
1037}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTBase, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [22/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_NoCollection_VariableP  )

Definition at line 1276 of file TestHexCollection.cpp.

1277{
1279 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
1281 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1283 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1285 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1287 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1289 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1291 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
1293 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1294
1296 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1297
1298 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1300 Nektar::LibUtilities::BasisType basisTypeDir1 =
1302 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
1303 quadPointsTypeDir1);
1304 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(7,
1305 quadPointsTypeDir1);
1306 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(9,
1307 quadPointsTypeDir1);
1308 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1309 quadPointsKeyDir1);
1310 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
1311 quadPointsKeyDir2);
1312 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
1313 quadPointsKeyDir3);
1314
1317 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
1318
1321 basisKeyDir1, basisKeyDir2, basisKeyDir3);
1322
1323 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1324 CollExp.push_back(Exp);
1325
1327 Collections::CollectionOptimisation colOpt(dummySession, 3,
1329 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1330 Collections::Collection c(CollExp, impTypes);
1331 c.Initialise(Collections::eIProductWRTBase);
1332
1333 const int nq = Exp->GetTotPoints();
1334 Array<OneD, NekDouble> phys(nq);
1335 Array<OneD, NekDouble> coeffs1(Exp->GetNcoeffs());
1336 Array<OneD, NekDouble> coeffs2(Exp->GetNcoeffs());
1337
1338 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1339
1340 Exp->GetCoords(xc, yc, zc);
1341
1342 for (int i = 0; i < nq; ++i)
1343 {
1344 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1345 }
1346
1347 Exp->IProductWRTBase(phys, coeffs1);
1348 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
1349 c.Initialise(Collections::eIProductWRTBase);
1350
1351 double epsilon = 1.0e-8;
1352 for (int i = 0; i < coeffs1.size(); ++i)
1353 {
1354 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1355 }
1356}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTBase, Nektar::LibUtilities::eModified_A, Nektar::Collections::eNoCollection, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [23/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_StdMat_UniformP  )

Definition at line 888 of file TestHexCollection.cpp.

889{
891 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
893 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
895 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
897 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
899 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
901 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
903 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
905 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
906
908 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
909
910 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
912 Nektar::LibUtilities::BasisType basisTypeDir1 =
914 unsigned int numQuadPoints = 6;
915 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
916 quadPointsTypeDir1);
917 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
918 quadPointsKeyDir1);
919
922 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
923
926 basisKeyDir1, basisKeyDir1, basisKeyDir1);
927
928 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
929 CollExp.push_back(Exp);
930
932 Collections::CollectionOptimisation colOpt(dummySession, 3,
934 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
935 Collections::Collection c(CollExp, impTypes);
936 c.Initialise(Collections::eIProductWRTBase);
937
938 const int nq = Exp->GetTotPoints();
939 Array<OneD, NekDouble> phys(nq);
940 Array<OneD, NekDouble> coeffs1(Exp->GetNcoeffs());
941 Array<OneD, NekDouble> coeffs2(Exp->GetNcoeffs());
942
943 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
944
945 Exp->GetCoords(xc, yc, zc);
946
947 for (int i = 0; i < nq; ++i)
948 {
949 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
950 }
951
952 Exp->IProductWRTBase(phys, coeffs1);
953 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
954
955 double epsilon = 1.0e-8;
956 for (int i = 0; i < coeffs1.size(); ++i)
957 {
958 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
959 }
960}

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

◆ BOOST_AUTO_TEST_CASE() [24/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_StdMat_VariableP  )

Definition at line 1194 of file TestHexCollection.cpp.

1195{
1197 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
1199 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1201 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1203 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1205 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1207 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1209 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
1211 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1212
1214 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1215
1216 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1218 Nektar::LibUtilities::BasisType basisTypeDir1 =
1220 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
1221 quadPointsTypeDir1);
1222 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(7,
1223 quadPointsTypeDir1);
1224 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(9,
1225 quadPointsTypeDir1);
1226 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1227 quadPointsKeyDir1);
1228 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
1229 quadPointsKeyDir2);
1230 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
1231 quadPointsKeyDir3);
1232
1235 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
1236
1239 basisKeyDir1, basisKeyDir2, basisKeyDir3);
1240
1241 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1242 CollExp.push_back(Exp);
1243
1245 Collections::CollectionOptimisation colOpt(dummySession, 3,
1247 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1248 Collections::Collection c(CollExp, impTypes);
1249 c.Initialise(Collections::eIProductWRTBase);
1250
1251 const int nq = Exp->GetTotPoints();
1252 Array<OneD, NekDouble> phys(nq);
1253 Array<OneD, NekDouble> coeffs1(Exp->GetNcoeffs());
1254 Array<OneD, NekDouble> coeffs2(Exp->GetNcoeffs());
1255
1256 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1257
1258 Exp->GetCoords(xc, yc, zc);
1259
1260 for (int i = 0; i < nq; ++i)
1261 {
1262 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1263 }
1264
1265 Exp->IProductWRTBase(phys, coeffs1);
1266 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
1267 c.Initialise(Collections::eIProductWRTBase);
1268
1269 double epsilon = 1.0e-8;
1270 for (int i = 0; i < coeffs1.size(); ++i)
1271 {
1272 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1273 }
1274}

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

◆ BOOST_AUTO_TEST_CASE() [25/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_StdMat_VariableP_MultiElmt  )

Definition at line 1601 of file TestHexCollection.cpp.

1602{
1604 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
1606 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1608 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1610 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1612 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1614 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1616 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
1618 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1619
1621 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1622
1623 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1625 Nektar::LibUtilities::BasisType basisTypeDir1 =
1627 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
1628 quadPointsTypeDir1);
1629 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(7,
1630 quadPointsTypeDir1);
1631 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(9,
1632 quadPointsTypeDir1);
1633 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1634 quadPointsKeyDir1);
1635 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
1636 quadPointsKeyDir2);
1637 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
1638 quadPointsKeyDir3);
1639
1642 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
1643
1646 basisKeyDir1, basisKeyDir2, basisKeyDir3);
1647
1648 int nelmts = 10;
1649
1650 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1651 for (int i = 0; i < nelmts; ++i)
1652 {
1653 CollExp.push_back(Exp);
1654 }
1655
1657 Collections::CollectionOptimisation colOpt(dummySession, 3,
1659 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1660 Collections::Collection c(CollExp, impTypes);
1661 c.Initialise(Collections::eIProductWRTBase);
1662
1663 const int nq = Exp->GetTotPoints();
1664 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
1665 Array<OneD, NekDouble> coeffs1(nelmts * Exp->GetNcoeffs());
1666 Array<OneD, NekDouble> coeffs2(nelmts * Exp->GetNcoeffs());
1667
1668 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1669
1670 Exp->GetCoords(xc, yc, zc);
1671
1672 for (int i = 0; i < nq; ++i)
1673 {
1674 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1675 }
1676 Exp->IProductWRTBase(phys, coeffs1);
1677
1678 for (int i = 1; i < nelmts; ++i)
1679 {
1680 Vmath::Vcopy(nq, &phys[0], 1, &phys[i * nq], 1);
1681 Exp->IProductWRTBase(phys + i * nq,
1682 tmp = coeffs1 + i * Exp->GetNcoeffs());
1683 }
1684
1685 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
1686
1687 double epsilon = 1.0e-8;
1688 for (int i = 0; i < coeffs1.size(); ++i)
1689 {
1690 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1691 }
1692}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [26/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_SumFac_UniformP  )

Definition at line 1787 of file TestHexCollection.cpp.

1788{
1790 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
1792 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1794 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1796 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1798 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1800 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1802 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
1804 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1805
1807 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1808
1809 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1811 Nektar::LibUtilities::BasisType basisTypeDir1 =
1813 unsigned int numQuadPoints = 6;
1814 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
1815 quadPointsTypeDir1);
1816 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1817 quadPointsKeyDir1);
1818
1821 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
1822
1825 basisKeyDir1, basisKeyDir1, basisKeyDir1);
1826
1827 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1828 CollExp.push_back(Exp);
1829
1831 Collections::CollectionOptimisation colOpt(dummySession, 3,
1833 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1834 Collections::Collection c(CollExp, impTypes);
1835 c.Initialise(Collections::eIProductWRTBase);
1836
1837 const int nq = Exp->GetTotPoints();
1838 Array<OneD, NekDouble> phys(nq);
1839 Array<OneD, NekDouble> coeffs1(Exp->GetNcoeffs());
1840 Array<OneD, NekDouble> coeffs2(Exp->GetNcoeffs());
1841
1842 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1843
1844 Exp->GetCoords(xc, yc, zc);
1845
1846 for (int i = 0; i < nq; ++i)
1847 {
1848 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1849 }
1850
1851 Exp->IProductWRTBase(phys, coeffs1);
1852 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
1853
1854 double epsilon = 1.0e-6;
1855 for (int i = 0; i < coeffs1.size(); ++i)
1856 {
1857 // clamp values below 1e-16 to zero
1858 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-16) ? 0.0 : coeffs1[i];
1859 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-16) ? 0.0 : coeffs2[i];
1860 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1861 }
1862}

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

◆ BOOST_AUTO_TEST_CASE() [27/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_SumFac_UniformP_MultiElmt  )

Definition at line 1948 of file TestHexCollection.cpp.

1949{
1951 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
1953 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1955 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1957 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1959 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1961 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1963 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
1965 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1966
1968 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1969
1970 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1972 Nektar::LibUtilities::BasisType basisTypeDir1 =
1974 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
1975 quadPointsTypeDir1);
1976 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1977 quadPointsKeyDir1);
1978
1981 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
1982
1985 basisKeyDir1, basisKeyDir1, basisKeyDir1);
1986
1987 int nelmts = 10;
1988
1989 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1990 for (int i = 0; i < nelmts; ++i)
1991 {
1992 CollExp.push_back(Exp);
1993 }
1994
1996 Collections::CollectionOptimisation colOpt(dummySession, 3,
1998 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1999 Collections::Collection c(CollExp, impTypes);
2000 c.Initialise(Collections::eIProductWRTBase);
2001
2002 const int nq = Exp->GetTotPoints();
2003 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
2004 Array<OneD, NekDouble> coeffs1(nelmts * Exp->GetNcoeffs());
2005 Array<OneD, NekDouble> coeffs2(nelmts * Exp->GetNcoeffs());
2006
2007 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2008
2009 Exp->GetCoords(xc, yc, zc);
2010
2011 for (int i = 0; i < nq; ++i)
2012 {
2013 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2014 }
2015 Exp->IProductWRTBase(phys, coeffs1);
2016
2017 for (int i = 1; i < nelmts; ++i)
2018 {
2019 Vmath::Vcopy(nq, &phys[0], 1, &phys[i * nq], 1);
2020 Exp->IProductWRTBase(phys + i * nq,
2021 tmp = coeffs1 + i * Exp->GetNcoeffs());
2022 }
2023 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
2024
2025 double epsilon = 1.0e-6;
2026 for (int i = 0; i < coeffs1.size(); ++i)
2027 {
2028 // clamp values below 1e-16 to zero
2029 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-16) ? 0.0 : coeffs1[i];
2030 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-16) ? 0.0 : coeffs2[i];
2031 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2032 }
2033}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [28/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_SumFac_VariableP  )

Definition at line 1864 of file TestHexCollection.cpp.

1865{
1867 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
1869 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1871 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1873 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1875 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1877 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1879 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
1881 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1882
1884 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1885
1886 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1888 Nektar::LibUtilities::BasisType basisTypeDir1 =
1890 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
1891 quadPointsTypeDir1);
1892 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(7,
1893 quadPointsTypeDir1);
1894 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(9,
1895 quadPointsTypeDir1);
1896 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1897 quadPointsKeyDir1);
1898 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
1899 quadPointsKeyDir2);
1900 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
1901 quadPointsKeyDir3);
1902
1905 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
1906
1909 basisKeyDir1, basisKeyDir2, basisKeyDir3);
1910
1911 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1912 CollExp.push_back(Exp);
1913
1915 Collections::CollectionOptimisation colOpt(dummySession, 3,
1917 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1918 Collections::Collection c(CollExp, impTypes);
1919 c.Initialise(Collections::eIProductWRTBase);
1920
1921 const int nq = Exp->GetTotPoints();
1922 Array<OneD, NekDouble> phys(nq);
1923 Array<OneD, NekDouble> coeffs1(Exp->GetNcoeffs());
1924 Array<OneD, NekDouble> coeffs2(Exp->GetNcoeffs());
1925
1926 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1927
1928 Exp->GetCoords(xc, yc, zc);
1929
1930 for (int i = 0; i < nq; ++i)
1931 {
1932 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1933 }
1934
1935 Exp->IProductWRTBase(phys, coeffs1);
1936 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
1937
1938 double epsilon = 1.0e-6;
1939 for (int i = 0; i < coeffs1.size(); ++i)
1940 {
1941 // clamp values below 1e-16 to zero
1942 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-16) ? 0.0 : coeffs1[i];
1943 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-16) ? 0.0 : coeffs2[i];
1944 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1945 }
1946}

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

◆ BOOST_AUTO_TEST_CASE() [29/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_SumFac_VariableP_CollAll  )

Definition at line 1358 of file TestHexCollection.cpp.

1359{
1361 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
1363 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1365 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1367 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1369 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1371 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1373 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
1375 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1376
1378 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1379
1380 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1382 Nektar::LibUtilities::BasisType basisTypeDir1 =
1384 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(4,
1385 quadPointsTypeDir1);
1386 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
1387 quadPointsTypeDir1);
1388 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
1389 quadPointsTypeDir1);
1390 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1391 quadPointsKeyDir1);
1392 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
1393 quadPointsKeyDir2);
1394 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
1395 quadPointsKeyDir3);
1396
1399 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
1400
1403 basisKeyDir1, basisKeyDir2, basisKeyDir3);
1404
1405 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1406 CollExp.push_back(Exp);
1407
1409 Collections::CollectionOptimisation colOpt(dummySession, 3,
1411 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1412 Collections::Collection c(CollExp, impTypes);
1413 c.Initialise(Collections::eIProductWRTBase);
1414
1415 const int nq = Exp->GetTotPoints();
1416 Array<OneD, NekDouble> phys(nq);
1417 Array<OneD, NekDouble> coeffs1(Exp->GetNcoeffs());
1418 Array<OneD, NekDouble> coeffs2(Exp->GetNcoeffs());
1419
1420 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1421
1422 Exp->GetCoords(xc, yc, zc);
1423
1424 for (int i = 0; i < nq; ++i)
1425 {
1426 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1427 }
1428
1429 Exp->IProductWRTBase(phys, coeffs1);
1430 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
1431
1432 double epsilon = 1.0e-8;
1433 for (int i = 0; i < coeffs1.size(); ++i)
1434 {
1435 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1436 }
1437}
@ eGLL_Lagrange
Lagrange for SEM basis .
Definition: BasisType.h:58

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eGLL_Lagrange, Nektar::Collections::eIProductWRTBase, Nektar::Collections::eSumFac, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [30/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_SumFac_VariableP_CollDir02  )

Definition at line 1439 of file TestHexCollection.cpp.

1440{
1442 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
1444 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1446 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1448 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1450 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1452 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1454 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
1456 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1457
1459 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1460
1461 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1463 Nektar::LibUtilities::BasisType basisTypeDir1 =
1465 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(4,
1466 quadPointsTypeDir1);
1467 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(7,
1468 quadPointsTypeDir1);
1469 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
1470 quadPointsTypeDir1);
1471 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1472 quadPointsKeyDir1);
1473 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
1474 quadPointsKeyDir2);
1475 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
1476 quadPointsKeyDir3);
1477
1480 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
1481
1484 basisKeyDir1, basisKeyDir2, basisKeyDir3);
1485
1486 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1487 CollExp.push_back(Exp);
1488
1490 Collections::CollectionOptimisation colOpt(dummySession, 3,
1492 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1493 Collections::Collection c(CollExp, impTypes);
1494 c.Initialise(Collections::eIProductWRTBase);
1495
1496 const int nq = Exp->GetTotPoints();
1497 Array<OneD, NekDouble> phys(nq);
1498 Array<OneD, NekDouble> coeffs1(Exp->GetNcoeffs());
1499 Array<OneD, NekDouble> coeffs2(Exp->GetNcoeffs());
1500
1501 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1502
1503 Exp->GetCoords(xc, yc, zc);
1504
1505 for (int i = 0; i < nq; ++i)
1506 {
1507 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1508 }
1509
1510 Exp->IProductWRTBase(phys, coeffs1);
1511 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
1512
1513 double epsilon = 1.0e-8;
1514 for (int i = 0; i < coeffs1.size(); ++i)
1515 {
1516 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1517 }
1518}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eGLL_Lagrange, Nektar::Collections::eIProductWRTBase, Nektar::Collections::eSumFac, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [31/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_SumFac_VariableP_CollDir12  )

Definition at line 1520 of file TestHexCollection.cpp.

1521{
1523 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
1525 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
1527 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
1529 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
1531 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
1533 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
1535 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
1537 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
1538
1540 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
1541
1542 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
1544 Nektar::LibUtilities::BasisType basisTypeDir1 =
1546 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
1547 quadPointsTypeDir1);
1548 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
1549 quadPointsTypeDir1);
1550 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
1551 quadPointsTypeDir1);
1552 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
1553 quadPointsKeyDir1);
1554 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
1555 quadPointsKeyDir2);
1556 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
1557 quadPointsKeyDir3);
1558
1561 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
1562
1565 basisKeyDir1, basisKeyDir2, basisKeyDir3);
1566
1567 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1568 CollExp.push_back(Exp);
1569
1571 Collections::CollectionOptimisation colOpt(dummySession, 3,
1573 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
1574 Collections::Collection c(CollExp, impTypes);
1575 c.Initialise(Collections::eIProductWRTBase);
1576
1577 const int nq = Exp->GetTotPoints();
1578 Array<OneD, NekDouble> phys(nq);
1579 Array<OneD, NekDouble> coeffs1(Exp->GetNcoeffs());
1580 Array<OneD, NekDouble> coeffs2(Exp->GetNcoeffs());
1581
1582 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
1583
1584 Exp->GetCoords(xc, yc, zc);
1585
1586 for (int i = 0; i < nq; ++i)
1587 {
1588 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1589 }
1590
1591 Exp->IProductWRTBase(phys, coeffs1);
1592 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
1593
1594 double epsilon = 1.0e-8;
1595 for (int i = 0; i < coeffs1.size(); ++i)
1596 {
1597 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1598 }
1599}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eGLL_Lagrange, Nektar::Collections::eIProductWRTBase, Nektar::Collections::eSumFac, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [32/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_SumFac_VariableP_MultiElmt  )

Definition at line 2035 of file TestHexCollection.cpp.

2036{
2038 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
2040 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2042 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2044 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2046 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2048 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2050 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2052 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2053
2055 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2056
2057 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2059 Nektar::LibUtilities::BasisType basisTypeDir1 =
2061 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
2062 quadPointsTypeDir1);
2063 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(7,
2064 quadPointsTypeDir1);
2065 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(9,
2066 quadPointsTypeDir1);
2067 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
2068 quadPointsKeyDir1);
2069 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
2070 quadPointsKeyDir2);
2071 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
2072 quadPointsKeyDir3);
2073
2076 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
2077
2080 basisKeyDir1, basisKeyDir2, basisKeyDir3);
2081
2082 int nelmts = 10;
2083
2084 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2085 for (int i = 0; i < nelmts; ++i)
2086 CollExp.push_back(Exp);
2087
2089 Collections::CollectionOptimisation colOpt(dummySession, 3,
2091 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2092 Collections::Collection c(CollExp, impTypes);
2093 c.Initialise(Collections::eIProductWRTBase);
2094
2095 const int nq = Exp->GetTotPoints();
2096 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
2097 Array<OneD, NekDouble> coeffs1(nelmts * Exp->GetNcoeffs());
2098 Array<OneD, NekDouble> coeffs2(nelmts * Exp->GetNcoeffs());
2099
2100 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2101
2102 Exp->GetCoords(xc, yc, zc);
2103
2104 for (int i = 0; i < nq; ++i)
2105 {
2106 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2107 }
2108 Exp->IProductWRTBase(phys, coeffs1);
2109
2110 for (int i = 1; i < nelmts; ++i)
2111 {
2112 Vmath::Vcopy(nq, &phys[0], 1, &phys[i * nq], 1);
2113 Exp->IProductWRTBase(phys + i * nq,
2114 tmp = coeffs1 + i * Exp->GetNcoeffs());
2115 }
2116 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
2117
2118 double epsilon = 1.0e-4;
2119 for (int i = 0; i < coeffs1.size(); ++i)
2120 {
2121 // clamp values below 1e-14 to zero
2122 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2123 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2124 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2125 }
2126}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [33/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_SumFac_VariableP_MultiElmt_CollDir02  )

Definition at line 2128 of file TestHexCollection.cpp.

2130{
2132 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
2134 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2136 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2138 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2140 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2142 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2144 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2146 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2147
2149 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2150
2151 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2153 Nektar::LibUtilities::BasisType basisTypeDir1 =
2155 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(4,
2156 quadPointsTypeDir1);
2157 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
2158 quadPointsTypeDir1);
2159 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
2160 quadPointsTypeDir1);
2161 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
2162 quadPointsKeyDir1);
2163 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
2164 quadPointsKeyDir2);
2165 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
2166 quadPointsKeyDir3);
2167
2170 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
2171
2174 basisKeyDir1, basisKeyDir2, basisKeyDir3);
2175
2176 int nelmts = 10;
2177
2178 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2179 for (int i = 0; i < nelmts; ++i)
2180 CollExp.push_back(Exp);
2181
2183 Collections::CollectionOptimisation colOpt(dummySession, 3,
2185 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2186 Collections::Collection c(CollExp, impTypes);
2187 c.Initialise(Collections::eIProductWRTBase);
2188
2189 const int nq = Exp->GetTotPoints();
2190 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
2191 Array<OneD, NekDouble> coeffs1(nelmts * Exp->GetNcoeffs());
2192 Array<OneD, NekDouble> coeffs2(nelmts * Exp->GetNcoeffs());
2193
2194 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2195
2196 Exp->GetCoords(xc, yc, zc);
2197
2198 for (int i = 0; i < nq; ++i)
2199 {
2200 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2201 }
2202 Exp->IProductWRTBase(phys, coeffs1);
2203
2204 for (int i = 1; i < nelmts; ++i)
2205 {
2206 Vmath::Vcopy(nq, &phys[0], 1, &phys[i * nq], 1);
2207 Exp->IProductWRTBase(phys + i * nq,
2208 tmp = coeffs1 + i * Exp->GetNcoeffs());
2209 }
2210 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
2211
2212 double epsilon = 1.0e-4;
2213 for (int i = 0; i < coeffs1.size(); ++i)
2214 {
2215 // clamp values below 1e-14 to zero
2216 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2217 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2218 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2219 }
2220}

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

◆ BOOST_AUTO_TEST_CASE() [34/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTBase_SumFac_VariableP_MultiElmt_CollDir12  )

Definition at line 2222 of file TestHexCollection.cpp.

2224{
2226 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
2228 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2230 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2232 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2234 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2236 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2238 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2240 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2241
2243 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2244
2245 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2247 Nektar::LibUtilities::BasisType basisTypeDir1 =
2249 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
2250 quadPointsTypeDir1);
2251 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
2252 quadPointsTypeDir1);
2253 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
2254 quadPointsTypeDir1);
2255 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
2256 quadPointsKeyDir1);
2257 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
2258 quadPointsKeyDir2);
2259 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
2260 quadPointsKeyDir3);
2261
2264 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
2265
2268 basisKeyDir1, basisKeyDir2, basisKeyDir3);
2269
2270 int nelmts = 10;
2271
2272 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2273 for (int i = 0; i < nelmts; ++i)
2274 CollExp.push_back(Exp);
2275
2277 Collections::CollectionOptimisation colOpt(dummySession, 3,
2279 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2280 Collections::Collection c(CollExp, impTypes);
2281 c.Initialise(Collections::eIProductWRTBase);
2282
2283 const int nq = Exp->GetTotPoints();
2284 Array<OneD, NekDouble> phys(nelmts * nq), tmp;
2285 Array<OneD, NekDouble> coeffs1(nelmts * Exp->GetNcoeffs());
2286 Array<OneD, NekDouble> coeffs2(nelmts * Exp->GetNcoeffs());
2287
2288 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2289
2290 Exp->GetCoords(xc, yc, zc);
2291
2292 for (int i = 0; i < nq; ++i)
2293 {
2294 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2295 }
2296 Exp->IProductWRTBase(phys, coeffs1);
2297
2298 for (int i = 1; i < nelmts; ++i)
2299 {
2300 Vmath::Vcopy(nq, &phys[0], 1, &phys[i * nq], 1);
2301 Exp->IProductWRTBase(phys + i * nq,
2302 tmp = coeffs1 + i * Exp->GetNcoeffs());
2303 }
2304 c.ApplyOperator(Collections::eIProductWRTBase, phys, coeffs2);
2305
2306 double epsilon = 1.0e-4;
2307 for (int i = 0; i < coeffs1.size(); ++i)
2308 {
2309 // clamp values below 1e-14 to zero
2310 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2311 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2312 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2313 }
2314}

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

◆ BOOST_AUTO_TEST_CASE() [35/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTDerivBase_Iterperexp_UniformP  )

Definition at line 3069 of file TestHexCollection.cpp.

3070{
3072 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
3074 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
3076 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
3078 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
3080 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
3082 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
3084 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
3086 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
3087
3089 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
3090
3091 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
3093 Nektar::LibUtilities::BasisType basisTypeDir1 =
3095 unsigned int numQuadPoints = 6;
3096 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
3097 quadPointsTypeDir1);
3098 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
3099 quadPointsKeyDir1);
3100
3103 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
3104
3107 basisKeyDir1, basisKeyDir1, basisKeyDir1);
3108
3109 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3110 CollExp.push_back(Exp);
3111
3113 Collections::CollectionOptimisation colOpt(dummySession, 3,
3115 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
3116 Collections::Collection c(CollExp, impTypes);
3118
3119 const int nq = Exp->GetTotPoints();
3120 const int nm = Exp->GetNcoeffs();
3121 Array<OneD, NekDouble> phys1(nq, 0.0);
3122 Array<OneD, NekDouble> phys2(nq, 0.0);
3123 Array<OneD, NekDouble> phys3(nq, 0.0);
3124 Array<OneD, NekDouble> coeffs1(nm, 0.0);
3125 Array<OneD, NekDouble> coeffs2(nm, 0.0);
3126
3127 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
3128
3129 Exp->GetCoords(xc, yc, zc);
3130
3131 for (int i = 0; i < nq; ++i)
3132 {
3133 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3134 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3135 phys2[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3136 }
3137
3138 // Standard routines
3139 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
3140 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
3141 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
3142 Exp->IProductWRTDerivBase(2, phys3, coeffs2);
3143 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
3144
3145 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, phys3,
3146 coeffs2);
3147
3148 double epsilon = 1.0e-8;
3149 for (int i = 0; i < nm; ++i)
3150 {
3151 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3152 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3153 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3154 }
3155}
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 tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eIProductWRTDerivBase, Nektar::Collections::eIterPerExp, Nektar::LibUtilities::eModified_A, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), Nektar::Collections::Collection::Initialise(), and Vmath::Vadd().

◆ BOOST_AUTO_TEST_CASE() [36/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTDerivBase_IterPerExp_VariableP_MultiElmt  )

Definition at line 3425 of file TestHexCollection.cpp.

3426{
3428 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
3430 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
3432 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
3434 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
3436 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
3438 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
3440 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
3442 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
3443
3445 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
3446
3447 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
3449 Nektar::LibUtilities::BasisType basisTypeDir1 =
3451 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
3452 quadPointsTypeDir1);
3453 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
3454 quadPointsTypeDir1);
3455 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
3456 quadPointsTypeDir1);
3457 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
3458 quadPointsKeyDir1);
3459 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
3460 quadPointsKeyDir2);
3461 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
3462 quadPointsKeyDir3);
3463
3466 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
3467
3470 basisKeyDir1, basisKeyDir2, basisKeyDir3);
3471
3472 int nelmts = 10;
3473
3474 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3475 for (int i = 0; i < nelmts; ++i)
3476 {
3477 CollExp.push_back(Exp);
3478 }
3479
3481 Collections::CollectionOptimisation colOpt(dummySession, 3,
3483 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
3484 Collections::Collection c(CollExp, impTypes);
3486
3487 const int nq = Exp->GetTotPoints();
3488 const int nm = Exp->GetNcoeffs();
3489 Array<OneD, NekDouble> phys1(nelmts * nq, 0.0);
3490 Array<OneD, NekDouble> phys2(nelmts * nq, 0.0);
3491 Array<OneD, NekDouble> phys3(nelmts * nq, 0.0);
3492 Array<OneD, NekDouble> coeffs1(nelmts * nm, 0.0);
3493 Array<OneD, NekDouble> coeffs2(nelmts * nm, 0.0);
3495
3496 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
3497
3498 Exp->GetCoords(xc, yc, zc);
3499
3500 for (int i = 0; i < nq; ++i)
3501 {
3502 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3503 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3504 phys2[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3505 }
3506
3507 for (int i = 1; i < nelmts; ++i)
3508 {
3509 Vmath::Vcopy(nq, phys1, 1, tmp = phys1 + i * nq, 1);
3510 Vmath::Vcopy(nq, phys2, 1, tmp = phys2 + i * nq, 1);
3511 Vmath::Vcopy(nq, phys3, 1, tmp = phys3 + i * nq, 1);
3512 }
3513
3514 // Standard routines
3515 for (int i = 0; i < nelmts; ++i)
3516 {
3517
3518 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
3519 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
3520 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3521 tmp = coeffs1 + i * nm, 1);
3522 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
3523 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3524 tmp = coeffs1 + i * nm, 1);
3525 }
3526
3527 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, phys3,
3528 coeffs2);
3529
3530 double epsilon = 1.0e-6;
3531 for (int i = 0; i < coeffs1.size(); ++i)
3532 {
3533 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3534 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3535 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3536 }
3537}

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

◆ BOOST_AUTO_TEST_CASE() [37/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTDerivBase_MatrixFree_UniformP_Deformed  )

Definition at line 3246 of file TestHexCollection.cpp.

3247{
3249 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
3251 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
3253 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
3255 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
3257 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
3259 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
3261 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
3263 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
3264
3266 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
3267
3268 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
3270 Nektar::LibUtilities::BasisType basisTypeDir1 =
3272 unsigned int numQuadPoints = 5;
3273 unsigned int numModes = 4;
3274 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
3275 quadPointsTypeDir1);
3276 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
3277 quadPointsKeyDir1);
3278
3281 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
3282
3285 basisKeyDir1, basisKeyDir1, basisKeyDir1);
3286
3287 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3288 CollExp.push_back(Exp);
3289
3291 Collections::CollectionOptimisation colOpt(dummySession, 2,
3293 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
3294 Collections::Collection c(CollExp, impTypes);
3296
3297 const int nq = Exp->GetTotPoints();
3298 const int nm = Exp->GetNcoeffs();
3299 Array<OneD, NekDouble> phys1(nq, 0.0);
3300 Array<OneD, NekDouble> phys2(nq, 0.0);
3301 Array<OneD, NekDouble> phys3(nq, 0.0);
3302 Array<OneD, NekDouble> coeffsRef(nm, 0.0);
3303 Array<OneD, NekDouble> coeffs(nm, 0.0);
3304
3305 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
3306
3307 Exp->GetCoords(xc, yc, zc);
3308
3309 for (int i = 0; i < nq; ++i)
3310 {
3311 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3312 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3313 phys2[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3314 }
3315
3316 // Standard routines
3317 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
3318 Exp->IProductWRTDerivBase(1, phys2, coeffs);
3319 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
3320 Exp->IProductWRTDerivBase(2, phys3, coeffs);
3321 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
3322
3323 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, phys3,
3324 coeffs);
3325
3326 double epsilon = 1.0e-8;
3327 for (int i = 0; i < nm; ++i)
3328 {
3329 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3330 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3331 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3332 }
3333}

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

◆ BOOST_AUTO_TEST_CASE() [38/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTDerivBase_MatrixFree_UniformP_Deformed_OverInt  )

Definition at line 3335 of file TestHexCollection.cpp.

3337{
3339 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
3341 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
3343 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
3345 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
3347 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
3349 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
3351 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
3353 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
3354
3356 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
3357
3358 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
3360 Nektar::LibUtilities::BasisType basisTypeDir1 =
3362 unsigned int numQuadPoints = 8;
3363 unsigned int numModes = 4;
3364 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
3365 quadPointsTypeDir1);
3366 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
3367 quadPointsKeyDir1);
3368
3371 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
3372
3375 basisKeyDir1, basisKeyDir1, basisKeyDir1);
3376
3377 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3378 CollExp.push_back(Exp);
3379
3381 Collections::CollectionOptimisation colOpt(dummySession, 2,
3383 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
3384 Collections::Collection c(CollExp, impTypes);
3386
3387 const int nq = Exp->GetTotPoints();
3388 const int nm = Exp->GetNcoeffs();
3389 Array<OneD, NekDouble> phys1(nq, 0.0);
3390 Array<OneD, NekDouble> phys2(nq, 0.0);
3391 Array<OneD, NekDouble> phys3(nq, 0.0);
3392 Array<OneD, NekDouble> coeffsRef(nm, 0.0);
3393 Array<OneD, NekDouble> coeffs(nm, 0.0);
3394
3395 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
3396
3397 Exp->GetCoords(xc, yc, zc);
3398
3399 for (int i = 0; i < nq; ++i)
3400 {
3401 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3402 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3403 phys2[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3404 }
3405
3406 // Standard routines
3407 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
3408 Exp->IProductWRTDerivBase(1, phys2, coeffs);
3409 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
3410 Exp->IProductWRTDerivBase(2, phys3, coeffs);
3411 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
3412
3413 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, phys3,
3414 coeffs);
3415
3416 double epsilon = 1.0e-8;
3417 for (int i = 0; i < nm; ++i)
3418 {
3419 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3420 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3421 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3422 }
3423}

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

◆ BOOST_AUTO_TEST_CASE() [39/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTDerivBase_MatrixFree_UniformP_Undeformed  )

Definition at line 3157 of file TestHexCollection.cpp.

3158{
3160 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
3162 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
3164 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
3166 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
3168 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
3170 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
3172 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
3174 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
3175
3177 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
3178
3179 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
3181 Nektar::LibUtilities::BasisType basisTypeDir1 =
3183 unsigned int numQuadPoints = 5;
3184 unsigned int numModes = 4;
3185 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
3186 quadPointsTypeDir1);
3187 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
3188 quadPointsKeyDir1);
3189
3192 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
3193
3196 basisKeyDir1, basisKeyDir1, basisKeyDir1);
3197
3198 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3199 CollExp.push_back(Exp);
3200
3202 Collections::CollectionOptimisation colOpt(dummySession, 2,
3204 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
3205 Collections::Collection c(CollExp, impTypes);
3207
3208 const int nq = Exp->GetTotPoints();
3209 const int nm = Exp->GetNcoeffs();
3210 Array<OneD, NekDouble> phys1(nq, 0.0);
3211 Array<OneD, NekDouble> phys2(nq, 0.0);
3212 Array<OneD, NekDouble> phys3(nq, 0.0);
3213 Array<OneD, NekDouble> coeffsRef(nm, 0.0);
3214 Array<OneD, NekDouble> coeffs(nm, 0.0);
3215
3216 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
3217
3218 Exp->GetCoords(xc, yc, zc);
3219
3220 for (int i = 0; i < nq; ++i)
3221 {
3222 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3223 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3224 phys2[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3225 }
3226
3227 // Standard routines
3228 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
3229 Exp->IProductWRTDerivBase(1, phys2, coeffs);
3230 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
3231 Exp->IProductWRTDerivBase(2, phys3, coeffs);
3232 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
3233
3234 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, phys3,
3235 coeffs);
3236
3237 double epsilon = 1.0e-8;
3238 for (int i = 0; i < nm; ++i)
3239 {
3240 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3241 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3242 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3243 }
3244}

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

◆ BOOST_AUTO_TEST_CASE() [40/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTDerivBase_NoCollection_VariableP_MultiElmt  )

Definition at line 3741 of file TestHexCollection.cpp.

3743{
3745 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
3747 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
3749 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
3751 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
3753 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
3755 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
3757 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
3759 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
3760
3762 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
3763
3764 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
3766 Nektar::LibUtilities::BasisType basisTypeDir1 =
3768 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
3769 quadPointsTypeDir1);
3770 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
3771 quadPointsTypeDir1);
3772 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
3773 quadPointsTypeDir1);
3774 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
3775 quadPointsKeyDir1);
3776 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
3777 quadPointsKeyDir2);
3778 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
3779 quadPointsKeyDir3);
3780
3783 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
3784
3787 basisKeyDir1, basisKeyDir2, basisKeyDir3);
3788
3789 int nelmts = 10;
3790
3791 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3792 for (int i = 0; i < nelmts; ++i)
3793 {
3794 CollExp.push_back(Exp);
3795 }
3796
3798 Collections::CollectionOptimisation colOpt(dummySession, 3,
3800 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
3801 Collections::Collection c(CollExp, impTypes);
3803
3804 const int nq = Exp->GetTotPoints();
3805 const int nm = Exp->GetNcoeffs();
3806 Array<OneD, NekDouble> phys1(nelmts * nq, 0.0);
3807 Array<OneD, NekDouble> phys2(nelmts * nq, 0.0);
3808 Array<OneD, NekDouble> phys3(nelmts * nq, 0.0);
3809 Array<OneD, NekDouble> coeffs1(nelmts * nm, 0.0);
3810 Array<OneD, NekDouble> coeffs2(nelmts * nm, 0.0);
3812 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
3813
3814 Exp->GetCoords(xc, yc, zc);
3815
3816 for (int i = 0; i < nq; ++i)
3817 {
3818 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3819 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3820 phys2[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3821 }
3822
3823 for (int i = 1; i < nelmts; ++i)
3824 {
3825 Vmath::Vcopy(nq, phys1, 1, tmp = phys1 + i * nq, 1);
3826 Vmath::Vcopy(nq, phys2, 1, tmp = phys2 + i * nq, 1);
3827 Vmath::Vcopy(nq, phys3, 1, tmp = phys3 + i * nq, 1);
3828 }
3829
3830 // Standard routines
3831 for (int i = 0; i < nelmts; ++i)
3832 {
3833
3834 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
3835 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
3836 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3837 tmp = coeffs1 + i * nm, 1);
3838 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
3839 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3840 tmp = coeffs1 + i * nm, 1);
3841 }
3842
3843 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, phys3,
3844 coeffs2);
3845
3846 double epsilon = 1.0e-6;
3847 for (int i = 0; i < coeffs1.size(); ++i)
3848 {
3849 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3850 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3851 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3852 }
3853}

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

◆ BOOST_AUTO_TEST_CASE() [41/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTDerivBase_StdMat_UniformP  )

Definition at line 3539 of file TestHexCollection.cpp.

3540{
3542 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
3544 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
3546 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
3548 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
3550 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
3552 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
3554 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
3556 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
3557
3559 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
3560
3561 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
3563 Nektar::LibUtilities::BasisType basisTypeDir1 =
3565 unsigned int numQuadPoints = 6;
3566 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
3567 quadPointsTypeDir1);
3568 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
3569 quadPointsKeyDir1);
3570
3573 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
3574
3577 basisKeyDir1, basisKeyDir1, basisKeyDir1);
3578
3579 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3580 CollExp.push_back(Exp);
3581
3583 Collections::CollectionOptimisation colOpt(dummySession, 3,
3585 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
3586 Collections::Collection c(CollExp, impTypes);
3588
3589 const int nq = Exp->GetTotPoints();
3590 const int nm = Exp->GetNcoeffs();
3591 Array<OneD, NekDouble> phys1(nq, 0.0);
3592 Array<OneD, NekDouble> phys2(nq, 0.0);
3593 Array<OneD, NekDouble> phys3(nq, 0.0);
3594 Array<OneD, NekDouble> coeffs1(nm, 0.0);
3595 Array<OneD, NekDouble> coeffs2(nm, 0.0);
3596
3597 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
3598
3599 Exp->GetCoords(xc, yc, zc);
3600
3601 for (int i = 0; i < nq; ++i)
3602 {
3603 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3604 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3605 phys2[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3606 }
3607
3608 // Standard routines
3609 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
3610 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
3611 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
3612 Exp->IProductWRTDerivBase(2, phys3, coeffs2);
3613 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
3614
3615 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, phys3,
3616 coeffs2);
3617
3618 double epsilon = 1.0e-8;
3619 for (int i = 0; i < coeffs1.size(); ++i)
3620 {
3621 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3622 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3623 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3624 }
3625}

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

◆ BOOST_AUTO_TEST_CASE() [42/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTDerivBase_StdMat_VariableP_MultiElmt  )

Definition at line 3627 of file TestHexCollection.cpp.

3628{
3630 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
3632 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
3634 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
3636 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
3638 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
3640 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
3642 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
3644 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
3645
3647 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
3648
3649 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
3651 Nektar::LibUtilities::BasisType basisTypeDir1 =
3653 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
3654 quadPointsTypeDir1);
3655 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
3656 quadPointsTypeDir1);
3657 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
3658 quadPointsTypeDir1);
3659 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
3660 quadPointsKeyDir1);
3661 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
3662 quadPointsKeyDir2);
3663 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
3664 quadPointsKeyDir3);
3665
3668 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
3669
3672 basisKeyDir1, basisKeyDir2, basisKeyDir3);
3673
3674 int nelmts = 10;
3675
3676 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3677 for (int i = 0; i < nelmts; ++i)
3678 {
3679 CollExp.push_back(Exp);
3680 }
3681
3683 Collections::CollectionOptimisation colOpt(dummySession, 3,
3685 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
3686 Collections::Collection c(CollExp, impTypes);
3688
3689 const int nq = Exp->GetTotPoints();
3690 const int nm = Exp->GetNcoeffs();
3691 Array<OneD, NekDouble> phys1(nelmts * nq, 0.0);
3692 Array<OneD, NekDouble> phys2(nelmts * nq, 0.0);
3693 Array<OneD, NekDouble> phys3(nelmts * nq, 0.0);
3694 Array<OneD, NekDouble> coeffs1(nelmts * nm, 0.0);
3695 Array<OneD, NekDouble> coeffs2(nelmts * nm, 0.0);
3697
3698 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
3699
3700 Exp->GetCoords(xc, yc, zc);
3701
3702 for (int i = 0; i < nq; ++i)
3703 {
3704 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3705 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3706 phys2[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3707 }
3708
3709 for (int i = 1; i < nelmts; ++i)
3710 {
3711 Vmath::Vcopy(nq, phys1, 1, tmp = phys1 + i * nq, 1);
3712 Vmath::Vcopy(nq, phys2, 1, tmp = phys2 + i * nq, 1);
3713 Vmath::Vcopy(nq, phys3, 1, tmp = phys3 + i * nq, 1);
3714 }
3715
3716 // Standard routines
3717 for (int i = 0; i < nelmts; ++i)
3718 {
3719
3720 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
3721 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
3722 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3723 tmp = coeffs1 + i * nm, 1);
3724 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
3725 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3726 tmp = coeffs1 + i * nm, 1);
3727 }
3728
3729 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, phys3,
3730 coeffs2);
3731
3732 double epsilon = 1.0e-8;
3733 for (int i = 0; i < coeffs1.size(); ++i)
3734 {
3735 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3736 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3737 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3738 }
3739}

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

◆ BOOST_AUTO_TEST_CASE() [43/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTDerivBase_SumFac_UniformP  )

Definition at line 3855 of file TestHexCollection.cpp.

3856{
3858 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
3860 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
3862 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
3864 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
3866 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
3868 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
3870 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
3872 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
3873
3875 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
3876
3877 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
3879 Nektar::LibUtilities::BasisType basisTypeDir1 =
3881 unsigned int numQuadPoints = 6;
3882 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
3883 quadPointsTypeDir1);
3884 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
3885 quadPointsKeyDir1);
3886
3889 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
3890
3893 basisKeyDir1, basisKeyDir1, basisKeyDir1);
3894
3895 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3896 CollExp.push_back(Exp);
3897
3899 Collections::CollectionOptimisation colOpt(dummySession, 3,
3901 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
3902 Collections::Collection c(CollExp, impTypes);
3904
3905 const int nq = Exp->GetTotPoints();
3906 const int nm = Exp->GetNcoeffs();
3907 Array<OneD, NekDouble> phys1(nq, 0.0);
3908 Array<OneD, NekDouble> phys2(nq, 0.0);
3909 Array<OneD, NekDouble> phys3(nq, 0.0);
3910 Array<OneD, NekDouble> coeffs1(nm, 0.0);
3911 Array<OneD, NekDouble> coeffs2(nm, 0.0);
3912
3913 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
3914
3915 Exp->GetCoords(xc, yc, zc);
3916
3917 for (int i = 0; i < nq; ++i)
3918 {
3919 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3920 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3921 phys2[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3922 }
3923
3924 // Standard routines
3925 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
3926 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
3927 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
3928 Exp->IProductWRTDerivBase(2, phys3, coeffs2);
3929 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
3930
3931 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, phys3,
3932 coeffs2);
3933
3934 double epsilon = 1.0e-8;
3935 for (int i = 0; i < coeffs1.size(); ++i)
3936 {
3937 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3938 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3939 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3940 }
3941}

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

◆ BOOST_AUTO_TEST_CASE() [44/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexIProductWRTDerivBase_SumFac_VariableP_MultiElmt  )

Definition at line 3943 of file TestHexCollection.cpp.

3944{
3946 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
3948 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
3950 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
3952 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
3954 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
3956 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
3958 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
3960 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
3961
3963 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
3964
3965 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
3967 Nektar::LibUtilities::BasisType basisTypeDir1 =
3969 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
3970 quadPointsTypeDir1);
3971 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
3972 quadPointsTypeDir1);
3973 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
3974 quadPointsTypeDir1);
3975 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
3976 quadPointsKeyDir1);
3977 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
3978 quadPointsKeyDir2);
3979 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
3980 quadPointsKeyDir3);
3981
3984 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
3985
3988 basisKeyDir1, basisKeyDir2, basisKeyDir3);
3989
3990 int nelmts = 10;
3991
3992 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3993 for (int i = 0; i < nelmts; ++i)
3994 {
3995 CollExp.push_back(Exp);
3996 }
3997
3999 Collections::CollectionOptimisation colOpt(dummySession, 3,
4001 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
4002 Collections::Collection c(CollExp, impTypes);
4004
4005 const int nq = Exp->GetTotPoints();
4006 const int nm = Exp->GetNcoeffs();
4007 Array<OneD, NekDouble> phys1(nelmts * nq, 0.0);
4008 Array<OneD, NekDouble> phys2(nelmts * nq, 0.0);
4009 Array<OneD, NekDouble> phys3(nelmts * nq, 0.0);
4010 Array<OneD, NekDouble> coeffs1(nelmts * nm, 0.0);
4011 Array<OneD, NekDouble> coeffs2(nelmts * nm, 0.0);
4013
4014 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
4015
4016 Exp->GetCoords(xc, yc, zc);
4017
4018 for (int i = 0; i < nq; ++i)
4019 {
4020 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
4021 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
4022 phys2[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
4023 }
4024
4025 for (int i = 1; i < nelmts; ++i)
4026 {
4027 Vmath::Vcopy(nq, phys1, 1, tmp = phys1 + i * nq, 1);
4028 Vmath::Vcopy(nq, phys2, 1, tmp = phys2 + i * nq, 1);
4029 Vmath::Vcopy(nq, phys3, 1, tmp = phys3 + i * nq, 1);
4030 }
4031
4032 // Standard routines
4033 for (int i = 0; i < nelmts; ++i)
4034 {
4035 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
4036 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
4037 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
4038 tmp = coeffs1 + i * nm, 1);
4039 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
4040 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
4041 tmp = coeffs1 + i * nm, 1);
4042 }
4043
4044 c.ApplyOperator(Collections::eIProductWRTDerivBase, phys1, phys2, phys3,
4045 coeffs2);
4046
4047 double epsilon = 1.0e-8;
4048 for (int i = 0; i < coeffs1.size(); ++i)
4049 {
4050 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
4051 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
4052 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
4053 }
4054}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [45/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexPhysDeriv_IterPerExp_UniformP  )

Definition at line 2316 of file TestHexCollection.cpp.

2317{
2319 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
2321 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2323 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2325 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2327 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2329 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2331 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2333 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2334
2336 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2337
2338 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2340 Nektar::LibUtilities::BasisType basisTypeDir1 =
2342 unsigned int numQuadPoints = 6;
2343 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
2344 quadPointsTypeDir1);
2345 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
2346 quadPointsKeyDir1);
2347
2350 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
2351
2354 basisKeyDir1, basisKeyDir1, basisKeyDir1);
2355
2356 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2357 CollExp.push_back(Exp);
2358
2360 Collections::CollectionOptimisation colOpt(dummySession, 3,
2362 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2363 Collections::Collection c(CollExp, impTypes);
2364 c.Initialise(Collections::ePhysDeriv);
2365
2366 const int nq = Exp->GetTotPoints();
2367 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2368 Array<OneD, NekDouble> phys(nq), tmp, tmp1, tmp2;
2369 Array<OneD, NekDouble> diff1(3 * nq);
2370 Array<OneD, NekDouble> diff2(3 * nq);
2371
2372 Exp->GetCoords(xc, yc, zc);
2373
2374 for (int i = 0; i < nq; ++i)
2375 {
2376 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2377 }
2378
2379 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq, tmp1 = diff1 + 2 * nq);
2380 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2, tmp = diff2 + nq,
2381 tmp2 = diff2 + 2 * nq);
2382
2383 double epsilon = 1.0e-8;
2384 for (int i = 0; i < diff1.size(); ++i)
2385 {
2386 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2387 }
2388}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [46/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexPhysDeriv_IterPerExp_VariableP_MultiElmt  )

Definition at line 2544 of file TestHexCollection.cpp.

2545{
2547 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
2549 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2551 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2553 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2555 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2557 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2559 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2561 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2562
2564 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2565
2566 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2568 Nektar::LibUtilities::BasisType basisTypeDir1 =
2570 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
2571 quadPointsTypeDir1);
2572 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
2573 quadPointsTypeDir1);
2574 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
2575 quadPointsTypeDir1);
2576 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
2577 quadPointsKeyDir1);
2578 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
2579 quadPointsKeyDir2);
2580 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
2581 quadPointsKeyDir3);
2582
2585 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
2586
2589 basisKeyDir1, basisKeyDir2, basisKeyDir3);
2590
2591 int nelmts = 10;
2592
2593 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2594 for (int i = 0; i < nelmts; ++i)
2595 {
2596 CollExp.push_back(Exp);
2597 }
2598
2600 Collections::CollectionOptimisation colOpt(dummySession, 3,
2602 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2603 Collections::Collection c(CollExp, impTypes);
2604 c.Initialise(Collections::ePhysDeriv);
2605
2606 const int nq = Exp->GetTotPoints();
2607 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2608 Array<OneD, NekDouble> phys(nelmts * nq), tmp, tmp1, tmp2;
2609 Array<OneD, NekDouble> diff1(3 * nelmts * nq);
2610 Array<OneD, NekDouble> diff2(3 * nelmts * nq);
2611
2612 Exp->GetCoords(xc, yc, zc);
2613
2614 for (int i = 0; i < nq; ++i)
2615 {
2616 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2617 }
2618 Exp->PhysDeriv(phys, tmp = diff1, tmp1 = diff1 + (nelmts)*nq,
2619 tmp2 = diff1 + (2 * nelmts) * nq);
2620 for (int i = 1; i < nelmts; ++i)
2621 {
2622 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
2623 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2624 tmp1 = diff1 + (nelmts + i) * nq,
2625 tmp2 = diff1 + (2 * nelmts + i) * nq);
2626 }
2627
2628 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2,
2629 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
2630
2631 double epsilon = 1.0e-8;
2632 for (int i = 0; i < diff1.size(); ++i)
2633 {
2634 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2635 }
2636}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [47/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexPhysDeriv_MatrixFree_UniformP_Deformed  )

Definition at line 2467 of file TestHexCollection.cpp.

2468{
2470 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
2472 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2474 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2476 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2478 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2480 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2482 new SpatialDomains::PointGeom(3u, 6u, 2.0, 3.0, 4.0));
2484 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2485
2487 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2488
2489 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2491 Nektar::LibUtilities::BasisType basisTypeDir1 =
2493 unsigned int numQuadPoints = 5;
2494 unsigned int numModes = 2;
2495 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
2496 quadPointsTypeDir1);
2497 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
2498 quadPointsKeyDir1);
2499
2502 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
2503
2506 basisKeyDir1, basisKeyDir1, basisKeyDir1);
2507
2508 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2509 CollExp.push_back(Exp);
2510
2512 Collections::CollectionOptimisation colOpt(dummySession, 2,
2514 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2515 Collections::Collection c(CollExp, impTypes);
2516 c.Initialise(Collections::ePhysDeriv);
2517
2518 const int nq = Exp->GetTotPoints();
2519 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2520 Array<OneD, NekDouble> phys(nq), tmp, tmp1, tmp2;
2521 Array<OneD, NekDouble> diffRef(3 * nq);
2522 Array<OneD, NekDouble> diff(3 * nq);
2523
2524 Exp->GetCoords(xc, yc, zc);
2525
2526 for (int i = 0; i < nq; ++i)
2527 {
2528 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2529 }
2530
2531 Exp->PhysDeriv(phys, diffRef, tmp = diffRef + nq, tmp1 = diffRef + 2 * nq);
2532 c.ApplyOperator(Collections::ePhysDeriv, phys, diff, tmp = diff + nq,
2533 tmp2 = diff + 2 * nq);
2534
2535 double epsilon = 1.0e-8;
2536 for (int i = 0; i < diffRef.size(); ++i)
2537 {
2538 diffRef[i] = (std::abs(diffRef[i]) < 1e-14) ? 0.0 : diffRef[i];
2539 diff[i] = (std::abs(diff[i]) < 1e-14) ? 0.0 : diff[i];
2540 BOOST_CHECK_CLOSE(diffRef[i], diff[i], epsilon);
2541 }
2542}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::ePhysDeriv, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [48/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexPhysDeriv_MatrixFree_UniformP_Undeformed  )

Definition at line 2390 of file TestHexCollection.cpp.

2391{
2393 new SpatialDomains::PointGeom(3u, 0u, -1.0, -1.0, -1.0));
2395 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2397 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2399 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2401 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2403 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2405 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2407 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2408
2410 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2411
2412 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2414 Nektar::LibUtilities::BasisType basisTypeDir1 =
2416 unsigned int numQuadPoints = 6;
2417 unsigned int numModes = 2;
2418 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
2419 quadPointsTypeDir1);
2420 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, numModes,
2421 quadPointsKeyDir1);
2422
2425 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
2426
2429 basisKeyDir1, basisKeyDir1, basisKeyDir1);
2430
2431 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2432 CollExp.push_back(Exp);
2433
2435 Collections::CollectionOptimisation colOpt(dummySession, 2,
2437 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2438 Collections::Collection c(CollExp, impTypes);
2439 c.Initialise(Collections::ePhysDeriv);
2440
2441 const int nq = Exp->GetTotPoints();
2442 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2443 Array<OneD, NekDouble> phys(nq), tmp, tmp1, tmp2;
2444 Array<OneD, NekDouble> diffRef(3 * nq);
2445 Array<OneD, NekDouble> diff(3 * nq);
2446
2447 Exp->GetCoords(xc, yc, zc);
2448
2449 for (int i = 0; i < nq; ++i)
2450 {
2451 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2452 }
2453
2454 Exp->PhysDeriv(phys, diffRef, tmp = diffRef + nq, tmp1 = diffRef + 2 * nq);
2455 c.ApplyOperator(Collections::ePhysDeriv, phys, diff, tmp = diff + nq,
2456 tmp2 = diff + 2 * nq);
2457
2458 double epsilon = 1.0e-8;
2459 for (int i = 0; i < diffRef.size(); ++i)
2460 {
2461 diffRef[i] = (std::abs(diffRef[i]) < 1e-14) ? 0.0 : diffRef[i];
2462 diff[i] = (std::abs(diff[i]) < 1e-14) ? 0.0 : diff[i];
2463 BOOST_CHECK_CLOSE(diffRef[i], diff[i], epsilon);
2464 }
2465}

References tinysimd::abs(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::Collections::eMatrixFree, Nektar::LibUtilities::eModified_A, Nektar::Collections::ePhysDeriv, Nektar::Collections::CollectionOptimisation::GetOperatorImpMap(), and Nektar::Collections::Collection::Initialise().

◆ BOOST_AUTO_TEST_CASE() [49/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexPhysDeriv_NoCollection_VariableP_MultiElmt  )

Definition at line 2638 of file TestHexCollection.cpp.

2639{
2641 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
2643 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2645 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2647 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2649 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2651 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2653 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2655 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2656
2658 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2659
2660 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2662 Nektar::LibUtilities::BasisType basisTypeDir1 =
2664 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
2665 quadPointsTypeDir1);
2666 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
2667 quadPointsTypeDir1);
2668 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
2669 quadPointsTypeDir1);
2670 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
2671 quadPointsKeyDir1);
2672 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
2673 quadPointsKeyDir2);
2674 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
2675 quadPointsKeyDir3);
2676
2679 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
2680
2683 basisKeyDir1, basisKeyDir2, basisKeyDir3);
2684
2685 int nelmts = 10;
2686
2687 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2688 for (int i = 0; i < nelmts; ++i)
2689 {
2690 CollExp.push_back(Exp);
2691 }
2692
2694 Collections::CollectionOptimisation colOpt(dummySession, 3,
2696 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2697 Collections::Collection c(CollExp, impTypes);
2698 c.Initialise(Collections::ePhysDeriv);
2699
2700 const int nq = Exp->GetTotPoints();
2701 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2702 Array<OneD, NekDouble> phys(nelmts * nq), tmp, tmp1, tmp2;
2703 Array<OneD, NekDouble> diff1(3 * nelmts * nq);
2704 Array<OneD, NekDouble> diff2(3 * nelmts * nq);
2705
2706 Exp->GetCoords(xc, yc, zc);
2707
2708 for (int i = 0; i < nq; ++i)
2709 {
2710 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2711 }
2712 Exp->PhysDeriv(phys, tmp = diff1, tmp1 = diff1 + (nelmts)*nq,
2713 tmp2 = diff1 + (2 * nelmts) * nq);
2714
2715 for (int i = 1; i < nelmts; ++i)
2716 {
2717 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
2718 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2719 tmp1 = diff1 + (nelmts + i) * nq,
2720 tmp2 = diff1 + (2 * nelmts + i) * nq);
2721 }
2722
2723 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2,
2724 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
2725
2726 double epsilon = 1.0e-8;
2727 for (int i = 0; i < diff1.size(); ++i)
2728 {
2729 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2730 }
2731}

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

◆ BOOST_AUTO_TEST_CASE() [50/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexPhysDeriv_StdMat_UniformP  )

Definition at line 2733 of file TestHexCollection.cpp.

2734{
2736 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
2738 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2740 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2742 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2744 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2746 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2748 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2750 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2751
2753 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2754
2755 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2757 Nektar::LibUtilities::BasisType basisTypeDir1 =
2759 unsigned int numQuadPoints = 4;
2760 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
2761 quadPointsTypeDir1);
2762 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 3,
2763 quadPointsKeyDir1);
2764
2767 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
2768
2771 basisKeyDir1, basisKeyDir1, basisKeyDir1);
2772
2773 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2774 CollExp.push_back(Exp);
2775
2777 Collections::CollectionOptimisation colOpt(dummySession, 3,
2779 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2780 Collections::Collection c(CollExp, impTypes);
2781 c.Initialise(Collections::ePhysDeriv);
2782
2783 const int nq = Exp->GetTotPoints();
2784 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2785 Array<OneD, NekDouble> phys(nq), tmp, tmp1, tmp2;
2786 Array<OneD, NekDouble> diff1(3 * nq);
2787 Array<OneD, NekDouble> diff2(3 * nq);
2788
2789 Exp->GetCoords(xc, yc, zc);
2790
2791 for (int i = 0; i < nq; ++i)
2792 {
2793 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2794 }
2795
2796 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq, tmp1 = diff1 + 2 * nq);
2797 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2, tmp = diff2 + nq,
2798 tmp2 = diff2 + 2 * nq);
2799
2800 double epsilon = 1.0e-8;
2801 for (int i = 0; i < diff1.size(); ++i)
2802 {
2803 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2804 }
2805}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [51/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexPhysDeriv_StdMat_VariableP_MultiElmt  )

Definition at line 2807 of file TestHexCollection.cpp.

2808{
2810 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
2812 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2814 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2816 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2818 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2820 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2822 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2824 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2825
2827 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2828
2829 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2831 Nektar::LibUtilities::BasisType basisTypeDir1 =
2833 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
2834 quadPointsTypeDir1);
2835 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
2836 quadPointsTypeDir1);
2837 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
2838 quadPointsTypeDir1);
2839 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
2840 quadPointsKeyDir1);
2841 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
2842 quadPointsKeyDir2);
2843 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
2844 quadPointsKeyDir3);
2845
2848 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
2849
2852 basisKeyDir1, basisKeyDir2, basisKeyDir3);
2853
2854 int nelmts = 10;
2855
2856 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2857 for (int i = 0; i < nelmts; ++i)
2858 {
2859 CollExp.push_back(Exp);
2860 }
2861
2863 Collections::CollectionOptimisation colOpt(dummySession, 3,
2865 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2866 Collections::Collection c(CollExp, impTypes);
2867 c.Initialise(Collections::ePhysDeriv);
2868
2869 const int nq = Exp->GetTotPoints();
2870 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2871 Array<OneD, NekDouble> phys(nelmts * nq), tmp, tmp1, tmp2;
2872 Array<OneD, NekDouble> diff1(3 * nelmts * nq);
2873 Array<OneD, NekDouble> diff2(3 * nelmts * nq);
2874
2875 Exp->GetCoords(xc, yc, zc);
2876
2877 for (int i = 0; i < nq; ++i)
2878 {
2879 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2880 }
2881 Exp->PhysDeriv(phys, tmp = diff1, tmp1 = diff1 + (nelmts)*nq,
2882 tmp2 = diff1 + (2 * nelmts) * nq);
2883 for (int i = 1; i < nelmts; ++i)
2884 {
2885 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
2886 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2887 tmp1 = diff1 + (nelmts + i) * nq,
2888 tmp2 = diff1 + (2 * nelmts + i) * nq);
2889 }
2890
2891 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2,
2892 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
2893
2894 double epsilon = 1.0e-8;
2895 for (int i = 0; i < diff1.size(); ++i)
2896 {
2897 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2898 }
2899}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::Collections::Collection::ApplyOperator(), CreateHex(), 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() [52/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexPhysDeriv_SumFac_UniformP  )

Definition at line 2901 of file TestHexCollection.cpp.

2902{
2904 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
2906 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2908 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2910 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2912 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2914 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2916 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2918 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2919
2921 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2922
2923 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2925 Nektar::LibUtilities::BasisType basisTypeDir1 =
2927 unsigned int numQuadPoints = 6;
2928 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(numQuadPoints,
2929 quadPointsTypeDir1);
2930 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
2931 quadPointsKeyDir1);
2932
2935 basisKeyDir1, basisKeyDir1, basisKeyDir1, hexGeom);
2936
2939 basisKeyDir1, basisKeyDir1, basisKeyDir1);
2940
2941 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2942 CollExp.push_back(Exp);
2943
2945 Collections::CollectionOptimisation colOpt(dummySession, 3,
2947 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
2948 Collections::Collection c(CollExp, impTypes);
2949 c.Initialise(Collections::ePhysDeriv);
2950
2951 const int nq = Exp->GetTotPoints();
2952 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
2953 Array<OneD, NekDouble> phys(nq), tmp, tmp1, tmp2;
2954 Array<OneD, NekDouble> diff1(3 * nq);
2955 Array<OneD, NekDouble> diff2(3 * nq);
2956
2957 Exp->GetCoords(xc, yc, zc);
2958
2959 for (int i = 0; i < nq; ++i)
2960 {
2961 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2962 }
2963
2964 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq, tmp1 = diff1 + 2 * nq);
2965 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2, tmp = diff2 + nq,
2966 tmp2 = diff2 + 2 * nq);
2967
2968 double epsilon = 1.0e-8;
2969 for (int i = 0; i < diff1.size(); ++i)
2970 {
2971 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2972 }
2973}

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

◆ BOOST_AUTO_TEST_CASE() [53/53]

Nektar::HexCollectionTests::BOOST_AUTO_TEST_CASE ( TestHexPhysDeriv_SumFac_VariableP_MultiElmt  )

Definition at line 2975 of file TestHexCollection.cpp.

2976{
2978 new SpatialDomains::PointGeom(3u, 0u, -1.5, -1.5, -1.5));
2980 new SpatialDomains::PointGeom(3u, 1u, 1.0, -1.0, -1.0));
2982 new SpatialDomains::PointGeom(3u, 2u, 1.0, 1.0, -1.0));
2984 new SpatialDomains::PointGeom(3u, 3u, -1.0, 1.0, -1.0));
2986 new SpatialDomains::PointGeom(3u, 4u, -1.0, -1.0, 1.0));
2988 new SpatialDomains::PointGeom(3u, 5u, 1.0, -1.0, 1.0));
2990 new SpatialDomains::PointGeom(3u, 6u, 1.0, 1.0, 1.0));
2992 new SpatialDomains::PointGeom(3u, 7u, -1.0, 1.0, 1.0));
2993
2995 CreateHex(v0, v1, v2, v3, v4, v5, v6, v7);
2996
2997 Nektar::LibUtilities::PointsType quadPointsTypeDir1 =
2999 Nektar::LibUtilities::BasisType basisTypeDir1 =
3001 const Nektar::LibUtilities::PointsKey quadPointsKeyDir1(5,
3002 quadPointsTypeDir1);
3003 const Nektar::LibUtilities::PointsKey quadPointsKeyDir2(6,
3004 quadPointsTypeDir1);
3005 const Nektar::LibUtilities::PointsKey quadPointsKeyDir3(8,
3006 quadPointsTypeDir1);
3007 const Nektar::LibUtilities::BasisKey basisKeyDir1(basisTypeDir1, 4,
3008 quadPointsKeyDir1);
3009 const Nektar::LibUtilities::BasisKey basisKeyDir2(basisTypeDir1, 6,
3010 quadPointsKeyDir2);
3011 const Nektar::LibUtilities::BasisKey basisKeyDir3(basisTypeDir1, 8,
3012 quadPointsKeyDir3);
3013
3016 basisKeyDir1, basisKeyDir2, basisKeyDir3, hexGeom);
3017
3020 basisKeyDir1, basisKeyDir2, basisKeyDir3);
3021
3022 int nelmts = 10;
3023
3024 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3025 for (int i = 0; i < nelmts; ++i)
3026 {
3027 CollExp.push_back(Exp);
3028 }
3029
3031 Collections::CollectionOptimisation colOpt(dummySession, 3,
3033 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(stdExp);
3034 Collections::Collection c(CollExp, impTypes);
3035 c.Initialise(Collections::ePhysDeriv);
3036
3037 const int nq = Exp->GetTotPoints();
3038 Array<OneD, NekDouble> xc(nq), yc(nq), zc(nq);
3039 Array<OneD, NekDouble> phys(nelmts * nq), tmp, tmp1, tmp2;
3040 Array<OneD, NekDouble> diff1(3 * nelmts * nq);
3041 Array<OneD, NekDouble> diff2(3 * nelmts * nq);
3042
3043 Exp->GetCoords(xc, yc, zc);
3044
3045 for (int i = 0; i < nq; ++i)
3046 {
3047 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3048 }
3049 Exp->PhysDeriv(phys, tmp = diff1, tmp1 = diff1 + (nelmts)*nq,
3050 tmp2 = diff1 + (2 * nelmts) * nq);
3051 for (int i = 1; i < nelmts; ++i)
3052 {
3053 Vmath::Vcopy(nq, phys, 1, tmp = phys + i * nq, 1);
3054 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
3055 tmp1 = diff1 + (nelmts + i) * nq,
3056 tmp2 = diff1 + (2 * nelmts + i) * nq);
3057 }
3058
3059 c.ApplyOperator(Collections::ePhysDeriv, phys, diff2,
3060 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
3061
3062 double epsilon = 1.0e-8;
3063 for (int i = 0; i < diff1.size(); ++i)
3064 {
3065 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
3066 }
3067}

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

◆ CreateHex()

Definition at line 56 of file TestHexCollection.cpp.

65{
78
80 edgesF0[Nektar::SpatialDomains::QuadGeom::kNedges] = {e0, e1, e2, e3};
82 edgesF1[Nektar::SpatialDomains::QuadGeom::kNedges] = {e0, e5, e8, e4};
84 edgesF2[Nektar::SpatialDomains::QuadGeom::kNedges] = {e1, e6, e9, e5};
86 edgesF3[Nektar::SpatialDomains::QuadGeom::kNedges] = {e2, e6, e10, e7};
88 edgesF4[Nektar::SpatialDomains::QuadGeom::kNedges] = {e3, e7, e11, e4};
90 edgesF5[Nektar::SpatialDomains::QuadGeom::kNedges] = {e8, e9, e10, e11};
91
93 new SpatialDomains::QuadGeom(0, edgesF0));
95 new SpatialDomains::QuadGeom(1, edgesF1));
97 new SpatialDomains::QuadGeom(2, edgesF2));
99 new SpatialDomains::QuadGeom(3, edgesF3));
101 new SpatialDomains::QuadGeom(4, edgesF4));
103 new SpatialDomains::QuadGeom(5, edgesF5));
104
105 Nektar::SpatialDomains::QuadGeomSharedPtr qfaces[] = {face0, face1, face2,
106 face3, face4, face5};
108 new SpatialDomains::HexGeom(0, qfaces));
109 return hexGeom;
110}
static const int kNedges
Definition: QuadGeom.h:76
SpatialDomains::SegGeomSharedPtr CreateSegGeom(unsigned int id, SpatialDomains::PointGeomSharedPtr v0, SpatialDomains::PointGeomSharedPtr v1)
std::shared_ptr< QuadGeom > QuadGeomSharedPtr
Definition: HexGeom.h:47
std::shared_ptr< SegGeom > SegGeomSharedPtr
Definition: Geometry2D.h:62

References CreateSegGeom(), and Nektar::SpatialDomains::QuadGeom::kNedges.

Referenced by BOOST_AUTO_TEST_CASE().

◆ CreateSegGeom()

SpatialDomains::SegGeomSharedPtr Nektar::HexCollectionTests::CreateSegGeom ( unsigned int  id,
SpatialDomains::PointGeomSharedPtr  v0,
SpatialDomains::PointGeomSharedPtr  v1 
)

Definition at line 46 of file TestHexCollection.cpp.

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

Referenced by CreateHex().