52 #include "Teuchos_oblackholestream.hpp"
53 #include "Teuchos_RCP.hpp"
54 #include "Teuchos_GlobalMPISession.hpp"
55 #include "Teuchos_ScalarTraits.hpp"
56 #include <Kokkos_Core.hpp>
59 using namespace Intrepid;
81 const shards::CellTopology& parentCell,
82 const Kokkos::View<double**>& subcParamVert_A,
83 const Kokkos::View<double**>& subcParamVert_B,
85 const Teuchos::RCP<std::ostream>& outStream);
89 Teuchos::RCP< Basis< double, FieldContainer<double> > >
90 getIntrepidBasis(
const shards::CellTopology &cellTopo)
92 Teuchos::RCP< Basis< double, FieldContainer<double> > > HGRAD_Basis;
94 switch( cellTopo.getKey() ){
97 case shards::Line<2>::key:
101 case shards::Triangle<3>::key:
105 case shards::Quadrilateral<4>::key:
109 case shards::Tetrahedron<4>::key:
113 case shards::Hexahedron<8>::key:
117 case shards::Wedge<6>::key:
121 case shards::Pyramid<5>::key:
126 case shards::Triangle<6>::key:
130 case shards::Quadrilateral<9>::key:
134 case shards::Tetrahedron<10>::key:
138 case shards::Tetrahedron<11>::key:
142 case shards::Hexahedron<20>::key:
146 case shards::Hexahedron<27>::key:
150 case shards::Wedge<15>::key:
154 case shards::Wedge<18>::key:
158 case shards::Pyramid<13>::key:
163 case shards::Quadrilateral<8>::key:
164 TEUCHOS_TEST_FOR_EXCEPTION( (
true), std::invalid_argument,
165 ">>> ERROR (getIntrepidBasis): Cell topology not supported. ");
169 case shards::Line<3>::key:
170 case shards::Beam<2>::key:
171 case shards::Beam<3>::key:
172 case shards::ShellLine<2>::key:
173 case shards::ShellLine<3>::key:
174 case shards::ShellTriangle<3>::key:
175 case shards::ShellTriangle<6>::key:
176 case shards::ShellQuadrilateral<4>::key:
177 case shards::ShellQuadrilateral<8>::key:
178 case shards::ShellQuadrilateral<9>::key:
179 TEUCHOS_TEST_FOR_EXCEPTION( (
true), std::invalid_argument,
180 ">>> ERROR (getIntrepidBasis): Cell topology not supported. ");
183 TEUCHOS_TEST_FOR_EXCEPTION( (
true), std::invalid_argument,
184 ">>> ERROR (getIntrepidBasis): Cell topology not supported.");
190 int main(
int argc,
char *argv[]) {
192 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
193 Kokkos::initialize();
195 typedef shards::CellTopology CellTopology;
198 int iprint = argc - 1;
200 Teuchos::RCP<std::ostream> outStream;
201 Teuchos::oblackholestream bhs;
204 outStream = Teuchos::rcp(&std::cout,
false);
206 outStream = Teuchos::rcp(&bhs,
false);
209 Teuchos::oblackholestream oldFormatState;
210 oldFormatState.copyfmt(std::cout);
213 <<
"===============================================================================\n" \
215 <<
"| Unit Test CellTools |\n" \
217 <<
"| 1) Edge parametrizations |\n" \
218 <<
"| 2) Face parametrizations |\n" \
219 <<
"| 3) Edge tangents |\n" \
220 <<
"| 4) Face tangents and normals |\n" \
222 <<
"| Questions? Contact Pavel Bochev (pbboche@sandia.gov) |\n" \
223 <<
"| Denis Ridzal (dridzal@sandia.gov), or |\n" \
224 <<
"| Kara Peterson (kjpeter@sandia.gov) |\n" \
226 <<
"| Intrepid's website: http://trilinos.sandia.gov/packages/intrepid |\n" \
227 <<
"| Trilinos website: http://trilinos.sandia.gov |\n" \
229 <<
"===============================================================================\n";
235 Kokkos::View<double**> cube_1(
"cube_1",2, 1);
241 Kokkos::View<double**> simplex_2(
"simplex_2",3, 2);
242 simplex_2(0, 0) = 0.0; simplex_2(0, 1) = 0.0;
243 simplex_2(1, 0) = 1.0; simplex_2(1, 1) = 0.0;
244 simplex_2(2, 0) = 0.0; simplex_2(2, 1) = 1.0;
248 Kokkos::View<double**> cube_2(
"cube_2",4, 2);
249 cube_2(0, 0) = -1.0; cube_2(0, 1) = -1.0;
250 cube_2(1, 0) = 1.0; cube_2(1, 1) = -1.0;
251 cube_2(2, 0) = 1.0; cube_2(2, 1) = 1.0;
252 cube_2(3, 0) = -1.0; cube_2(3, 1) = 1.0;
256 std::vector<shards::CellTopology> allTopologies;
257 shards::getTopologies(allTopologies);
267 <<
"===============================================================================\n"\
268 <<
"| Test 1: edge parametrizations: |\n"\
269 <<
"===============================================================================\n\n";
274 for(
int topoOrd = 0; topoOrd < (int)allTopologies.size(); topoOrd++){
277 if(allTopologies[topoOrd].getDimension() > 1 && CellTools::hasReferenceCell(allTopologies[topoOrd]) ){
278 *outStream <<
" Testing edge parametrization for " << allTopologies[topoOrd].getName() <<
"\n";
280 allTopologies[topoOrd],
291 <<
"===============================================================================\n"\
292 <<
"| Test 2: face parametrizations: |\n"\
293 <<
"===============================================================================\n\n";
298 for(
int topoOrd = 0; topoOrd < (int)allTopologies.size(); topoOrd++){
301 if(allTopologies[topoOrd].getDimension() > 2 && CellTools::hasReferenceCell(allTopologies[topoOrd]) ){
302 *outStream <<
" Testing face parametrization for cell topology " << allTopologies[topoOrd].getName() <<
"\n";
304 allTopologies[topoOrd],
320 std::vector<shards::CellTopology> standardBaseTopologies;
321 shards::getTopologies(standardBaseTopologies, 4, shards::STANDARD_CELL, shards::BASE_TOPOLOGY);
324 CellTopology paramEdge (shards::getCellTopologyData<shards::Line<2> >() );
325 CellTopology paramTriFace (shards::getCellTopologyData<shards::Triangle<3> >() );
326 CellTopology paramQuadFace(shards::getCellTopologyData<shards::Quadrilateral<4> >() );
333 <<
"===============================================================================\n"\
334 <<
"| Test 3: edge tangents/normals for stand. cells with base topologies: |\n"\
335 <<
"===============================================================================\n\n";
337 std::vector<shards::CellTopology>::iterator cti;
340 Teuchos::RCP<Cubature<double> > edgeCubature = cubFactory.
create(paramEdge, 6);
341 int cubDim = edgeCubature -> getDimension();
342 int numCubPoints = edgeCubature -> getNumPoints();
347 edgeCubature -> getCubature(paramEdgePoints, paramEdgeWeights);
351 for(cti = standardBaseTopologies.begin(); cti !=standardBaseTopologies.end(); ++cti){
354 if( ( (*cti).getDimension() >= 2) && ( (*cti).getKey() != shards::Pyramid<5>::key) ){
356 int cellDim = (*cti).getDimension();
357 int vCount = (*cti).getVertexCount();
358 Kokkos::View<double**> refCellVertices(
"refCellVertices",vCount, cellDim);
359 CellTools::getReferenceSubcellVertices(refCellVertices, cellDim, 0, (*cti) );
361 *outStream <<
" Testing edge tangents";
362 if(cellDim == 2) { *outStream <<
" and normals"; }
363 *outStream <<
" for cell topology " << (*cti).getName() <<
"\n";
367 Kokkos::View<double***> physCellVertices(
"physCellVertices",1, vCount, cellDim);
371 for(
int v = 0; v < vCount; v++){
372 for(
int d = 0; d < cellDim; d++){
373 double delta = Teuchos::ScalarTraits<double>::random()/8.0;
374 physCellVertices(0, v, d) = refCellVertices(v, d) + delta;
379 Kokkos::View<double**> refEdgePoints(
"refEdgePoints",numCubPoints, cellDim);
380 Kokkos::View<double****> edgePointsJacobians(
"edgePointsJacobians",1, numCubPoints, cellDim, cellDim);
381 Kokkos::View<double***> edgePointTangents(
"edgePointTangents",1, numCubPoints, cellDim);
382 Kokkos::View<double***> edgePointNormals(
"edgePointNormals",1, numCubPoints, cellDim);
385 for(
int edgeOrd = 0; edgeOrd < (int)(*cti).getEdgeCount(); edgeOrd++){
392 CellTools::mapToReferenceSubcell(refEdgePoints, paramEdgePoints, 1, edgeOrd, (*cti) );
393 CellTools::setJacobian(edgePointsJacobians, refEdgePoints, physCellVertices, getIntrepidBasis(*cti) );
394 CellTools::getPhysicalEdgeTangents(edgePointTangents, edgePointsJacobians, edgeOrd, (*cti));
402 int v0ord = (*cti).getNodeMap(1, edgeOrd, 0);
403 int v1ord = (*cti).getNodeMap(1, edgeOrd, 1);
405 for(
int pt = 0; pt < numCubPoints; pt++){
408 Kokkos::View<double*> edgeBenchmarkTangents(
"edgeBenchmarkTangents",3);
410 for(
int d = 0; d < cellDim; d++){
411 edgeBenchmarkTangents(d) = (physCellVertices(0, v1ord, d) - physCellVertices(0, v0ord, d))/2.0;
414 if( abs(edgeBenchmarkTangents(d) - edgePointTangents(0, pt, d)) > INTREPID_THRESHOLD ){
417 << std::setw(70) <<
"^^^^----FAILURE!" <<
"\n"
418 <<
" Edge tangent computation by CellTools failed for: \n"
419 <<
" Cell Topology = " << (*cti).getName() <<
"\n"
420 <<
" Edge ordinal = " << edgeOrd <<
"\n"
421 <<
" Edge point number = " << pt <<
"\n"
422 <<
" Tangent coordinate = " << d <<
"\n"
423 <<
" CellTools value = " << edgePointTangents(0, pt, d) <<
"\n"
424 <<
" Benchmark value = " << edgeBenchmarkTangents(d) <<
"\n\n";
430 CellTools::getPhysicalSideNormals(edgePointNormals, edgePointsJacobians, edgeOrd, (*cti));
431 if( abs(edgeBenchmarkTangents(1) - edgePointNormals(0, pt, 0)) > INTREPID_THRESHOLD ){
434 << std::setw(70) <<
"^^^^----FAILURE!" <<
"\n"
435 <<
" Edge Normal computation by CellTools failed for: \n"
436 <<
" Cell Topology = " << (*cti).getName() <<
"\n"
437 <<
" Edge ordinal = " << edgeOrd <<
"\n"
438 <<
" Edge point number = " << pt <<
"\n"
439 <<
" Normal coordinate = " << 0 <<
"\n"
440 <<
" CellTools value = " << edgePointNormals(0, pt, 0) <<
"\n"
441 <<
" Benchmark value = " << edgeBenchmarkTangents(1) <<
"\n\n";
443 if( abs(edgeBenchmarkTangents(0) + edgePointNormals(0, pt, 1)) > INTREPID_THRESHOLD ){
446 << std::setw(70) <<
"^^^^----FAILURE!" <<
"\n"
447 <<
" Edge Normal computation by CellTools failed for: \n"
448 <<
" Cell Topology = " << (*cti).getName() <<
"\n"
449 <<
" Edge ordinal = " << edgeOrd <<
"\n"
450 <<
" Edge point number = " << pt <<
"\n"
451 <<
" Normal coordinate = " << 1 <<
"\n"
452 <<
" CellTools value = " << edgePointNormals(0, pt, 1) <<
"\n"
453 <<
" Benchmark value = " << -edgeBenchmarkTangents(0) <<
"\n\n";
465 <<
"===============================================================================\n"\
466 <<
"| Test 4: face/side normals for stand. 3D cells with base topologies: | |\n"\
467 <<
"===============================================================================\n\n";
471 Teuchos::RCP<Cubature<double> > triFaceCubature = cubFactory.
create(paramTriFace, 6);
472 Teuchos::RCP<Cubature<double> > quadFaceCubature = cubFactory.
create(paramQuadFace, 6);
474 int faceCubDim = triFaceCubature -> getDimension();
475 int numTriFaceCubPoints = triFaceCubature -> getNumPoints();
476 int numQuadFaceCubPoints = quadFaceCubature -> getNumPoints();
484 triFaceCubature -> getCubature(paramTriFacePointsFC, paramTriFaceWeightsFC);
485 quadFaceCubature -> getCubature(paramQuadFacePointsFC, paramQuadFaceWeightsFC);
486 Kokkos::View<double**> paramTriFacePoints(¶mTriFacePointsFC[0],paramTriFacePointsFC.dimension(0),paramTriFacePointsFC.dimension(1));
487 Kokkos::View<double*> paramTriFaceWeights(¶mTriFaceWeightsFC[0],paramTriFaceWeightsFC.dimension(0));
488 Kokkos::View<double**> paramQuadFacePoints(¶mQuadFacePointsFC[0],paramQuadFacePointsFC.dimension(0),paramQuadFacePointsFC.dimension(1));
489 Kokkos::View<double*> paramQuadFaceWeights(¶mQuadFaceWeightsFC[0],paramQuadFaceWeightsFC.dimension(0));
491 for(cti = standardBaseTopologies.begin(); cti !=standardBaseTopologies.end(); ++cti){
494 if( ( (*cti).getDimension() == 3) && ( (*cti).getKey() != shards::Pyramid<5>::key) ){
496 int cellDim = (*cti).getDimension();
497 int vCount = (*cti).getVertexCount();
498 Kokkos::View<double**> refCellVertices(
"refCellVertices",vCount, cellDim);
499 CellTools::getReferenceSubcellVertices(refCellVertices, cellDim, 0, (*cti) );
501 *outStream <<
" Testing face/side normals for cell topology " << (*cti).getName() <<
"\n";
504 Kokkos::View<double***> physCellVertices(
"physCellVertices",1, vCount, cellDim);
508 for(
int v = 0; v < vCount; v++){
509 for(
int d = 0; d < cellDim; d++){
510 double delta = Teuchos::ScalarTraits<double>::random()/8.0;
511 physCellVertices(0, v, d) = refCellVertices(v, d) + delta;
517 Kokkos::View<double**> refTriFacePoints(
"refTriFacePoints",numTriFaceCubPoints, cellDim);
518 Kokkos::View<double**> refQuadFacePoints(
"refQuadFacePoints",numQuadFaceCubPoints, cellDim);
519 Kokkos::View<double****> triFacePointsJacobians(
"triFacePointsJacobians",1, numTriFaceCubPoints, cellDim, cellDim);
520 Kokkos::View<double****> quadFacePointsJacobians(
"quadFacePointsJacobians",1, numQuadFaceCubPoints, cellDim, cellDim);
521 Kokkos::View<double***> triFacePointNormals(
"triFacePointNormals",1, numTriFaceCubPoints, cellDim);
522 Kokkos::View<double***> triSidePointNormals(
"triSidePointNormals",1, numTriFaceCubPoints, cellDim);
523 Kokkos::View<double***> quadFacePointNormals(
"quadFacePointNormals",1, numQuadFaceCubPoints, cellDim);
524 Kokkos::View<double***> quadSidePointNormals(
"quadSidePointNormals",1, numQuadFaceCubPoints, cellDim);
528 for(
int faceOrd = 0; faceOrd < (int)(*cti).getSideCount(); faceOrd++){
532 switch( (*cti).getCellTopologyData(2, faceOrd) -> key ) {
534 case shards::Triangle<3>::key:
537 CellTools::mapToReferenceSubcell(refTriFacePoints, paramTriFacePoints, 2, faceOrd, (*cti) );
538 CellTools::setJacobian(triFacePointsJacobians, refTriFacePoints, physCellVertices, getIntrepidBasis(*cti) );
539 CellTools::getPhysicalFaceNormals(triFacePointNormals, triFacePointsJacobians, faceOrd, (*cti));
540 CellTools::getPhysicalSideNormals(triSidePointNormals, triFacePointsJacobians, faceOrd, (*cti));
547 int v0ord = (*cti).getNodeMap(2, faceOrd, 0);
548 int v1ord = (*cti).getNodeMap(2, faceOrd, 1);
549 int v2ord = (*cti).getNodeMap(2, faceOrd, 2);
553 for(
int pt = 0; pt < numTriFaceCubPoints; pt++){
554 Kokkos::View<double*> tanX(
"tanX",3), tanY(
"tanY",3), faceNormal(
"faceNormal",3);
555 for(
int d = 0; d < cellDim; d++){
556 tanX(d) = (physCellVertices(0, v1ord, d) - physCellVertices(0, v0ord, d));
557 tanY(d) = (physCellVertices(0, v2ord, d) - physCellVertices(0, v0ord, d));
563 for(
int d = 0; d < cellDim; d++){
566 if( abs(faceNormal(d) - triFacePointNormals(0, pt, d)) > INTREPID_THRESHOLD ){
569 << std::setw(70) <<
"^^^^----FAILURE!" <<
"\n"
570 <<
" Face normal computation by CellTools failed for: \n"
571 <<
" Cell Topology = " << (*cti).getName() <<
"\n"
572 <<
" Face Topology = " << (*cti).getCellTopologyData(2, faceOrd) -> name <<
"\n"
573 <<
" Face ordinal = " << faceOrd <<
"\n"
574 <<
" Face point number = " << pt <<
"\n"
575 <<
" Normal coordinate = " << d <<
"\n"
576 <<
" CellTools value = " << triFacePointNormals(0, pt, d)
577 <<
" Benchmark value = " << faceNormal(d) <<
"\n\n";
580 if( abs(faceNormal(d) - triSidePointNormals(0, pt, d)) > INTREPID_THRESHOLD ){
583 << std::setw(70) <<
"^^^^----FAILURE!" <<
"\n"
584 <<
" Side normal computation by CellTools failed for: \n"
585 <<
" Cell Topology = " << (*cti).getName() <<
"\n"
586 <<
" Side Topology = " << (*cti).getCellTopologyData(2, faceOrd) -> name <<
"\n"
587 <<
" Side ordinal = " << faceOrd <<
"\n"
588 <<
" Side point number = " << pt <<
"\n"
589 <<
" Normal coordinate = " << d <<
"\n"
590 <<
" CellTools value = " << triSidePointNormals(0, pt, d)
591 <<
" Benchmark value = " << faceNormal(d) <<
"\n\n";
598 case shards::Quadrilateral<4>::key:
601 CellTools::mapToReferenceSubcell(refQuadFacePoints, paramQuadFacePoints, 2, faceOrd, (*cti) );
602 CellTools::setJacobian(quadFacePointsJacobians, refQuadFacePoints, physCellVertices, getIntrepidBasis(*cti) );
603 CellTools::getPhysicalFaceNormals(quadFacePointNormals, quadFacePointsJacobians, faceOrd, (*cti));
604 CellTools::getPhysicalSideNormals(quadSidePointNormals, quadFacePointsJacobians, faceOrd, (*cti));
613 int v0ord = (*cti).getNodeMap(2, faceOrd, 0);
614 int v1ord = (*cti).getNodeMap(2, faceOrd, 1);
615 int v2ord = (*cti).getNodeMap(2, faceOrd, 2);
616 int v3ord = (*cti).getNodeMap(2, faceOrd, 3);
619 for(
int pt = 0; pt < numTriFaceCubPoints; pt++){
620 Kokkos::View<double*> tanX(
"tanX",3), tanY(
"tanY",3), faceNormal(
"faceNormal",3);
621 for(
int d = 0; d < cellDim; d++){
622 tanX(d) = (physCellVertices(0, v0ord, d)*(-1.0 + paramQuadFacePoints(pt,1) ) +
623 physCellVertices(0, v1ord, d)*( 1.0 - paramQuadFacePoints(pt,1) ) +
624 physCellVertices(0, v2ord, d)*( 1.0 + paramQuadFacePoints(pt,1) ) +
625 physCellVertices(0, v3ord, d)*(-1.0 - paramQuadFacePoints(pt,1) ) )/4.0;
627 tanY(d) = (physCellVertices(0, v0ord, d)*(-1.0 + paramQuadFacePoints(pt,0) ) +
628 physCellVertices(0, v1ord, d)*(-1.0 - paramQuadFacePoints(pt,0) ) +
629 physCellVertices(0, v2ord, d)*( 1.0 + paramQuadFacePoints(pt,0) ) +
630 physCellVertices(0, v3ord, d)*( 1.0 - paramQuadFacePoints(pt,0) ) )/4.0;
635 for(
int d = 0; d < cellDim; d++){
638 if( abs(faceNormal(d) - quadFacePointNormals(0, pt, d)) > INTREPID_THRESHOLD ){
641 << std::setw(70) <<
"^^^^----FAILURE!" <<
"\n"
642 <<
" Face normal computation by CellTools failed for: \n"
643 <<
" Cell Topology = " << (*cti).getName() <<
"\n"
644 <<
" Face Topology = " << (*cti).getCellTopologyData(2, faceOrd) -> name <<
"\n"
645 <<
" Face ordinal = " << faceOrd <<
"\n"
646 <<
" Face point number = " << pt <<
"\n"
647 <<
" Normal coordinate = " << d <<
"\n"
648 <<
" CellTools value = " << quadFacePointNormals(0, pt, d)
649 <<
" Benchmark value = " << faceNormal(d) <<
"\n\n";
652 if( abs(faceNormal(d) - quadSidePointNormals(0, pt, d)) > INTREPID_THRESHOLD ){
655 << std::setw(70) <<
"^^^^----FAILURE!" <<
"\n"
656 <<
" Side normal computation by CellTools failed for: \n"
657 <<
" Cell Topology = " << (*cti).getName() <<
"\n"
658 <<
" Side Topology = " << (*cti).getCellTopologyData(2, faceOrd) -> name <<
"\n"
659 <<
" Side ordinal = " << faceOrd <<
"\n"
660 <<
" Side point number = " << pt <<
"\n"
661 <<
" Normal coordinate = " << d <<
"\n"
662 <<
" CellTools value = " << quadSidePointNormals(0, pt, d)
663 <<
" Benchmark value = " << faceNormal(d) <<
"\n\n";
671 *outStream <<
" Face normals test failure: face topology not supported \n\n";
681 catch (std::logic_error err) {
682 *outStream << err.what() <<
"\n";
688 std::cout <<
"End Result: TEST FAILED\n";
690 std::cout <<
"End Result: TEST PASSED\n";
693 std::cout.copyfmt(oldFormatState);
701 const shards::CellTopology& parentCell,
702 const Kokkos::View<double**>& subcParamVert_A,
703 const Kokkos::View<double**>& subcParamVert_B,
705 const Teuchos::RCP<std::ostream>& outStream){
708 int cellDim = parentCell.getDimension();
709 int subcCount = parentCell.getSubcellCount(subcDim);
713 for(
int subcOrd = 0; subcOrd < subcCount; subcOrd++){
714 int subcVertexCount = parentCell.getVertexCount(subcDim, subcOrd);
718 Kokkos::View<double**> refSubcellVertices(
"refSubcellVertices",subcVertexCount, cellDim);
719 Kokkos::View<double**> mappedParamVertices(
"mappedParamVertices",subcVertexCount, cellDim);
736 else if(subcDim == 2) {
739 if(subcVertexCount == 3){
747 else if(subcVertexCount == 4){
757 for(
int subcVertOrd = 0; subcVertOrd < subcVertexCount; subcVertOrd++){
758 for(
int dim = 0; dim < cellDim; dim++){
760 if(mappedParamVertices(subcVertOrd, dim) != refSubcellVertices(subcVertOrd, dim) ) {
763 << std::setw(70) <<
"^^^^----FAILURE!" <<
"\n"
764 <<
" Cell Topology = " << parentCell.getName() <<
"\n"
765 <<
" Parametrization of subcell " << subcOrd <<
" which is "
766 << parentCell.getName(subcDim,subcOrd) <<
" failed for vertex " << subcVertOrd <<
":\n"
767 <<
" parametrization map fails to map correctly coordinate " << dim <<
" of that vertex\n\n";
Implementation of the serendipity-family H(grad)-compatible FEM basis of degree 2 on a Hexahedron cel...
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Wedge cell.
Implementation of the default H(grad)-compatible FEM basis of degree 2 on Wedge cell.
Implementation of the default H(grad)-compatible FEM basis of degree 2 on Hexahedron cell...
Header file for utility class to provide multidimensional containers.
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Line cell.
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Triangle cell...
Implementation of an H(grad)-compatible FEM basis of degree 2 on Wedge cell.
Header file for the abstract base class Intrepid::DefaultCubatureFactory.
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Quadrilateral cell...
Implementation of the default H(grad)-compatible FEM basis of degree 2 on Tetrahedron cell...
Implementation of the default H(grad)-compatible FEM basis of degree 2 on Quadrilateral cell...
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Pyramid cell...
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Hexahedron cell...
Implementation of an H(grad)-compatible FEM basis of degree 2 on a Pyramid cell.
A factory class that generates specific instances of cubatures.
Teuchos::RCP< Cubature< Scalar, ArrayPoint, ArrayWeight > > create(const shards::CellTopology &cellTopology, const std::vector< int > °ree)
Factory method.
void testSubcellParametrizations(int &errorFlag, const shards::CellTopology &parentCell, const FieldContainer< double > &subcParamVert_A, const FieldContainer< double > &subcParamVert_B, const int subcDim, const Teuchos::RCP< std::ostream > &outStream)
Maps the vertices of the subcell parametrization domain to that subcell.
Implementation of the default H(grad)-compatible FEM basis of degree 2 on Triangle cell...
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Tetrahedron cell...