48 #ifndef __INTREPID2_ORIENTATIONTOOLS_DEF_MATRIX_DATA_HPP__
49 #define __INTREPID2_ORIENTATIONTOOLS_DEF_MATRIX_DATA_HPP__
52 #if defined (__clang__) && !defined (__INTEL_COMPILER)
53 #pragma clang system_header
58 template<
typename SpT>
59 template<
typename BasisPtrType>
60 typename OrientationTools<SpT>::CoeffMatrixDataViewType
61 OrientationTools<SpT>::createCoeffMatrixInternal(BasisPtrType basis) {
62 const ordinal_type order(basis->getDegree());
63 const std::string name(basis->getName());
64 CoeffMatrixDataViewType matData;
66 auto ordinalToTag = basis->getAllDofTags();
67 auto tagToOrdinal = basis->getAllDofOrdinal();
73 if (name ==
"Intrepid2_HGRAD_QUAD_Cn_FEM") {
75 const ordinal_type matDim = ordinalToTag(tagToOrdinal(1, 0, 0), 3), numEdges = 4, numOrts = 2;
76 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HGRAD_QUAD_Cn_FEM",
82 init_HGRAD_QUAD_Cn_FEM(matData, order);
85 matData = CoeffMatrixDataViewType();
88 else if (name ==
"Intrepid2_HGRAD_HEX_Cn_FEM") {
90 const ordinal_type matDim = ordinalToTag(tagToOrdinal(2, 0, 0), 3), numSubcells = 18, numOrts = 8;
91 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HGRAD_HEX_Cn_FEM",
97 init_HGRAD_HEX_Cn_FEM(matData, order);
100 matData = CoeffMatrixDataViewType();
103 else if (name ==
"Intrepid2_HGRAD_TRI_Cn_FEM") {
105 const ordinal_type matDim = ordinalToTag(tagToOrdinal(1, 0, 0), 3), numEdges = 3, numOrts = 2;
106 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HGRAD_TRI_Cn_FEM",
112 init_HGRAD_TRI_Cn_FEM(matData, order);
115 matData = CoeffMatrixDataViewType();
118 else if (name ==
"Intrepid2_HGRAD_TET_Cn_FEM") {
120 matDim = max(ordinalToTag(tagToOrdinal(1, 0, 0), 3),
121 ordinalToTag(tagToOrdinal(2, 0, 0), 3)),
122 numSubcells = 10, numOrts = 6;
123 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HGRAD_TET_Cn_FEM",
129 init_HGRAD_TET_Cn_FEM(matData, order);
136 else if (name ==
"Intrepid2_HCURL_QUAD_In_FEM") {
137 const ordinal_type matDim = ordinalToTag(tagToOrdinal(1, 0, 0), 3), numEdges = 4, numOrts = 2;
138 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HCURL_QUAD_In_FEM",
144 init_HCURL_QUAD_In_FEM(matData, order);
146 else if (name ==
"Intrepid2_HCURL_HEX_In_FEM") {
148 const ordinal_type matDim = ordinalToTag(tagToOrdinal((order < 2 ? 1 : 2), 0, 0), 3), numSubcells = 18, numOrts = 8;
149 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HCURL_HEX_In_FEM",
155 init_HCURL_HEX_In_FEM(matData, order);
157 else if (name ==
"Intrepid2_HCURL_TRI_In_FEM") {
158 const ordinal_type matDim = ordinalToTag(tagToOrdinal(1, 0, 0), 3), numEdges = 3, numOrts = 2;
159 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HCURL_TRI_In_FEM",
165 init_HCURL_TRI_In_FEM(matData, order);
167 else if (name ==
"Intrepid2_HCURL_TET_In_FEM") {
168 const ordinal_type matDim = ordinalToTag(tagToOrdinal((order < 2 ? 1 : 2), 0, 0), 3), numSubcells = 10, numOrts = 6;
169 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HCURL_TET_In_FEM",
175 init_HCURL_TET_In_FEM(matData, order);
182 else if (name ==
"Intrepid2_HDIV_QUAD_In_FEM") {
183 const ordinal_type matDim = ordinalToTag(tagToOrdinal(1, 0, 0), 3), numEdges = 4, numOrts = 2;
184 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HDIV_QUAD_In_FEM",
190 init_HDIV_QUAD_In_FEM(matData, order);
192 else if (name ==
"Intrepid2_HDIV_HEX_In_FEM") {
193 const ordinal_type matDim = ordinalToTag(tagToOrdinal(2, 0, 0), 3), numSubcells = 6, numOrts = 8;
194 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HDIV_HEX_In_FEM",
200 init_HDIV_HEX_In_FEM(matData, order);
202 else if (name ==
"Intrepid2_HDIV_TRI_In_FEM") {
203 const ordinal_type matDim = ordinalToTag(tagToOrdinal(1, 0, 0), 3), numEdges = 3, numOrts = 2;
204 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HDIV_TRI_In_FEM",
210 init_HDIV_TRI_In_FEM(matData, order);
212 else if (name ==
"Intrepid2_HDIV_TET_In_FEM") {
213 const ordinal_type matDim = ordinalToTag(tagToOrdinal(2, 0, 0), 3), numSubcells = 4, numOrts = 6;
214 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HDIV_TET_In_FEM",
220 init_HDIV_TET_In_FEM(matData, order);
227 else if (name ==
"Intrepid2_HCURL_QUAD_I1_FEM" ||
228 name ==
"Intrepid2_HDIV_QUAD_I1_FEM") {
229 const ordinal_type matDim = 1, numEdges = 4, numOrts = 2;
230 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HCURL_QUAD_I1_FEM",
235 for (ordinal_type edgeId=0;edgeId<numEdges;++edgeId)
236 init_EDGE_ELEMENT_I1_FEM(matData, edgeId);
238 else if (name ==
"Intrepid2_HCURL_TRI_I1_FEM" ||
239 name ==
"Intrepid2_HDIV_TRI_I1_FEM") {
240 const ordinal_type matDim = 1, numEdges = 3, numOrts = 2;
241 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HCURL_TRI_I1_FEM",
246 for (ordinal_type edgeId=0;edgeId<numEdges;++edgeId)
247 init_EDGE_ELEMENT_I1_FEM(matData, edgeId);
254 else if (name ==
"Intrepid2_HCURL_HEX_I1_FEM") {
255 const ordinal_type matDim = 1, numEdges = 12, numOrts = 2;
256 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HCURL_HEX_I1_FEM",
261 for (ordinal_type edgeId=0;edgeId<numEdges;++edgeId)
262 init_EDGE_ELEMENT_I1_FEM(matData, edgeId);
264 else if (name ==
"Intrepid2_HCURL_TET_I1_FEM") {
265 const ordinal_type matDim = 1, numEdges = 6, numOrts = 2;
266 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HCURL_TET_I1_FEM",
271 for (ordinal_type edgeId=0;edgeId<numEdges;++edgeId)
272 init_EDGE_ELEMENT_I1_FEM(matData, edgeId);
274 else if (name ==
"Intrepid2_HCURL_WEDGE_I1_FEM") {
275 const ordinal_type matDim = 1, numEdges = 9, numOrts = 2;
276 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HCURL_WEDGE_I1_FEM",
281 for (ordinal_type edgeId=0;edgeId<numEdges;++edgeId)
282 init_EDGE_ELEMENT_I1_FEM(matData, edgeId);
289 else if (name ==
"Intrepid2_HDIV_HEX_I1_FEM") {
290 const ordinal_type matDim = 1, numFaces = 6, numOrts = 8;
291 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HDIV_HEX_I1_FEM",
296 for (ordinal_type faceId=0;faceId<numFaces;++faceId)
297 init_QUAD_FACE_ELEMENT_I1_FEM(matData, faceId);
299 else if (name ==
"Intrepid2_HDIV_TET_I1_FEM") {
300 const ordinal_type matDim = 1, numFaces = 4, numOrts = 6;
301 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HDIV_TET_I1_FEM",
306 for (ordinal_type faceId=0;faceId<numFaces;++faceId)
307 init_TRI_FACE_ELEMENT_I1_FEM(matData, faceId);
309 else if (name ==
"Intrepid2_HDIV_WEDGE_I1_FEM") {
310 const ordinal_type matDim = 1, numFaces = 5, numOrts = 8;
311 matData = CoeffMatrixDataViewType(
"Orientation::CoeffMatrix::Intrepid2_HDIV_WEDGE_I1_FEM",
316 ordinal_type faceId = 0;
317 for ( ;faceId<3;++faceId)
318 init_QUAD_FACE_ELEMENT_I1_FEM(matData, faceId);
319 for ( ;faceId<numFaces;++faceId)
320 init_TRI_FACE_ELEMENT_I1_FEM(matData, faceId);
329 template<
typename SpT>
331 OrientationTools<SpT>::
332 init_HGRAD_QUAD_Cn_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
333 const ordinal_type order) {
335 Basis_HGRAD_LINE_Cn_FEM<Kokkos::DefaultHostExecutionSpace> lineBasis(order);
336 Basis_HGRAD_QUAD_Cn_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
338 const ordinal_type numEdge = 4, numOrt = 2;
339 for (ordinal_type edgeId=0;edgeId<numEdge;++edgeId)
340 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
341 auto mat = Kokkos::subview(matData,
343 Kokkos::ALL(), Kokkos::ALL());
345 lineBasis, cellBasis,
351 template<
typename SpT>
353 OrientationTools<SpT>::
354 init_HCURL_QUAD_In_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
355 const ordinal_type order) {
356 Basis_HGRAD_LINE_Cn_FEM<Kokkos::DefaultHostExecutionSpace> bubbleBasis(order-1, POINTTYPE_GAUSS);
357 Basis_HCURL_QUAD_In_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
359 const ordinal_type numEdge = 4, numOrt = 2;
360 for (ordinal_type edgeId=0;edgeId<numEdge;++edgeId)
361 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
362 auto mat = Kokkos::subview(matData,
364 Kokkos::ALL(), Kokkos::ALL());
366 bubbleBasis, cellBasis,
371 template<
typename SpT>
373 OrientationTools<SpT>::
374 init_HDIV_QUAD_In_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
375 const ordinal_type order) {
376 Basis_HGRAD_LINE_Cn_FEM<Kokkos::DefaultHostExecutionSpace> bubbleBasis(order-1, POINTTYPE_GAUSS);
377 Basis_HDIV_QUAD_In_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
379 const ordinal_type numEdge = 4, numOrt = 2;
380 for (ordinal_type edgeId=0;edgeId<numEdge;++edgeId)
381 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
382 auto mat = Kokkos::subview(matData,
384 Kokkos::ALL(), Kokkos::ALL());
386 bubbleBasis, cellBasis,
395 template<
typename SpT>
397 OrientationTools<SpT>::
398 init_HGRAD_HEX_Cn_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
399 const ordinal_type order) {
401 Basis_HGRAD_LINE_Cn_FEM<Kokkos::DefaultHostExecutionSpace> lineBasis(order);
402 Basis_HGRAD_QUAD_Cn_FEM<Kokkos::DefaultHostExecutionSpace> quadBasis(order);
403 Basis_HGRAD_HEX_Cn_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
405 const ordinal_type numEdge = 12, numFace = 6;
407 const ordinal_type numOrt = 2;
408 for (ordinal_type edgeId=0;edgeId<numEdge;++edgeId)
409 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
410 auto mat = Kokkos::subview(matData,
412 Kokkos::ALL(), Kokkos::ALL());
414 lineBasis, cellBasis,
419 const ordinal_type numOrt = 8;
420 for (ordinal_type faceId=0;faceId<numFace;++faceId)
421 for (ordinal_type faceOrt=0;faceOrt<numOrt;++faceOrt) {
422 auto mat = Kokkos::subview(matData,
423 numEdge+faceId, faceOrt,
424 Kokkos::ALL(), Kokkos::ALL());
426 quadBasis, cellBasis,
433 template<
typename SpT>
435 OrientationTools<SpT>::
436 init_HCURL_HEX_In_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
437 const ordinal_type order) {
438 Basis_HGRAD_LINE_Cn_FEM<Kokkos::DefaultHostExecutionSpace> bubbleBasis(order-1, POINTTYPE_GAUSS);
439 Basis_HCURL_QUAD_In_FEM<Kokkos::DefaultHostExecutionSpace> quadBasis(order);
440 Basis_HCURL_HEX_In_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
442 const ordinal_type numEdge = 12, numFace = 6;
444 const ordinal_type numOrt = 2;
445 for (ordinal_type edgeId=0;edgeId<numEdge;++edgeId)
446 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
447 auto mat = Kokkos::subview(matData,
449 Kokkos::ALL(), Kokkos::ALL());
451 bubbleBasis, cellBasis,
456 const ordinal_type numOrt = 8;
457 for (ordinal_type faceId=0;faceId<numFace;++faceId)
458 for (ordinal_type faceOrt=0;faceOrt<numOrt;++faceOrt) {
459 auto mat = Kokkos::subview(matData,
460 numEdge+faceId, faceOrt,
461 Kokkos::ALL(), Kokkos::ALL());
463 quadBasis, cellBasis,
469 template<
typename SpT>
471 OrientationTools<SpT>::
472 init_HDIV_HEX_In_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
473 const ordinal_type order) {
474 Basis_HGRAD_QUAD_Cn_FEM<Kokkos::DefaultHostExecutionSpace> quadBasis(order-1, POINTTYPE_GAUSS);
475 Basis_HDIV_HEX_In_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
477 const ordinal_type numFace = 6;
479 const ordinal_type numOrt = 8;
480 for (ordinal_type faceId=0;faceId<numFace;++faceId)
481 for (ordinal_type faceOrt=0;faceOrt<numOrt;++faceOrt) {
482 auto mat = Kokkos::subview(matData,
484 Kokkos::ALL(), Kokkos::ALL());
486 quadBasis, cellBasis,
496 template<
typename SpT>
498 OrientationTools<SpT>::
499 init_HGRAD_TRI_Cn_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
500 const ordinal_type order) {
502 Basis_HGRAD_LINE_Cn_FEM<Kokkos::DefaultHostExecutionSpace> lineBasis(order);
503 Basis_HGRAD_TRI_Cn_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
505 const ordinal_type numEdge = 3, numOrt = 2;
506 for (ordinal_type edgeId=0;edgeId<numEdge;++edgeId)
507 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
508 auto mat = Kokkos::subview(matData,
510 Kokkos::ALL(), Kokkos::ALL());
512 lineBasis, cellBasis,
519 template<
typename SpT>
521 OrientationTools<SpT>::
522 init_HCURL_TRI_In_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
523 const ordinal_type order) {
524 Basis_HVOL_LINE_Cn_FEM<Kokkos::DefaultHostExecutionSpace> bubbleBasis(order-1);
525 Basis_HCURL_TRI_In_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
527 const ordinal_type numEdge = 3, numOrt = 2;
528 for (ordinal_type edgeId=0;edgeId<numEdge;++edgeId)
529 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
530 auto mat = Kokkos::subview(matData,
532 Kokkos::ALL(), Kokkos::ALL());
534 bubbleBasis, cellBasis,
539 template<
typename SpT>
541 OrientationTools<SpT>::
542 init_HDIV_TRI_In_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
543 const ordinal_type order) {
544 Basis_HVOL_LINE_Cn_FEM<Kokkos::DefaultHostExecutionSpace> bubbleBasis(order-1);
545 Basis_HDIV_TRI_In_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
547 const ordinal_type numEdge = 3, numOrt = 2;
548 for (ordinal_type edgeId=0;edgeId<numEdge;++edgeId)
549 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
550 auto mat = Kokkos::subview(matData,
552 Kokkos::ALL(), Kokkos::ALL());
554 bubbleBasis, cellBasis,
563 template<
typename SpT>
565 OrientationTools<SpT>::
566 init_HGRAD_TET_Cn_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
567 const ordinal_type order) {
569 Basis_HGRAD_LINE_Cn_FEM<Kokkos::DefaultHostExecutionSpace> lineBasis(order);
570 Basis_HGRAD_TRI_Cn_FEM<Kokkos::DefaultHostExecutionSpace> triBasis(order);
571 Basis_HGRAD_TET_Cn_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
573 const ordinal_type numEdge = 6, numFace = 4;
575 const ordinal_type numOrt = 2;
576 for (ordinal_type edgeId=0;edgeId<numEdge;++edgeId)
577 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
578 auto mat = Kokkos::subview(matData,
580 Kokkos::ALL(), Kokkos::ALL());
582 lineBasis, cellBasis,
587 const ordinal_type numOrt = 6;
588 for (ordinal_type faceId=0;faceId<numFace;++faceId)
589 for (ordinal_type faceOrt=0;faceOrt<numOrt;++faceOrt) {
590 auto mat = Kokkos::subview(matData,
591 numEdge+faceId, faceOrt,
592 Kokkos::ALL(), Kokkos::ALL());
601 template<
typename SpT>
603 OrientationTools<SpT>::
604 init_HCURL_TET_In_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
605 const ordinal_type order) {
606 Basis_HVOL_LINE_Cn_FEM<Kokkos::DefaultHostExecutionSpace> bubbleBasis(order-1);
607 Basis_HCURL_TRI_In_FEM<Kokkos::DefaultHostExecutionSpace> triBasis(order);
608 Basis_HCURL_TET_In_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
610 const ordinal_type numEdge = 6, numFace = 4;
612 const ordinal_type numOrt = 2;
613 for (ordinal_type edgeId=0;edgeId<numEdge;++edgeId)
614 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
615 auto mat = Kokkos::subview(matData,
617 Kokkos::ALL(), Kokkos::ALL());
619 bubbleBasis, cellBasis,
624 const ordinal_type numOrt = 6;
625 for (ordinal_type faceId=0;faceId<numFace;++faceId)
626 for (ordinal_type faceOrt=0;faceOrt<numOrt;++faceOrt) {
627 auto mat = Kokkos::subview(matData,
628 numEdge+faceId, faceOrt,
629 Kokkos::ALL(), Kokkos::ALL());
637 template<
typename SpT>
639 OrientationTools<SpT>::
640 init_HDIV_TET_In_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
641 const ordinal_type order) {
642 Basis_HVOL_TRI_Cn_FEM<Kokkos::DefaultHostExecutionSpace> triBasis(order-1);
643 Basis_HDIV_TET_In_FEM<Kokkos::DefaultHostExecutionSpace> cellBasis(order);
645 const ordinal_type numFace = 4, numOrt = 6;
646 for (ordinal_type faceId=0;faceId<numFace;++faceId)
647 for (ordinal_type faceOrt=0;faceOrt<numOrt;++faceOrt) {
648 auto mat = Kokkos::subview(matData,
650 Kokkos::ALL(), Kokkos::ALL());
661 template<
typename SpT>
663 OrientationTools<SpT>::
664 init_EDGE_ELEMENT_I1_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
665 const ordinal_type edgeId) {
666 const ordinal_type numOrt = 2;
667 const double edgeOrtCoeff[2] = { 1.0, -1.0 };
668 for (ordinal_type edgeOrt=0;edgeOrt<numOrt;++edgeOrt) {
669 auto mat = Kokkos::subview(matData,
671 Kokkos::ALL(), Kokkos::ALL());
672 mat(0,0) = edgeOrtCoeff[edgeOrt];
676 template<
typename SpT>
678 OrientationTools<SpT>::
679 init_TRI_FACE_ELEMENT_I1_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
680 const ordinal_type faceId) {
681 const ordinal_type numOrt = 6;
682 const double faceOrtCoeff[6] = { 1.0, 1.0, 1.0,
685 for (ordinal_type faceOrt=0;faceOrt<numOrt;++faceOrt) {
686 auto mat = Kokkos::subview(matData,
688 Kokkos::ALL(), Kokkos::ALL());
689 mat(0,0) = faceOrtCoeff[faceOrt];
693 template<
typename SpT>
695 OrientationTools<SpT>::
696 init_QUAD_FACE_ELEMENT_I1_FEM(
typename OrientationTools<SpT>::CoeffMatrixDataViewType matData,
697 const ordinal_type faceId) {
698 const ordinal_type numOrt = 8;
699 const double faceOrtCoeff[8] = { 1.0, 1.0, 1.0, 1.0,
700 -1.0, -1.0, -1.0, -1.0 };
702 for (ordinal_type faceOrt=0;faceOrt<numOrt;++faceOrt) {
703 auto mat = Kokkos::subview(matData,
705 Kokkos::ALL(), Kokkos::ALL());
706 mat(0,0) = faceOrtCoeff[faceOrt];
710 template<
typename SpT>
711 template<
typename BasisPtrType>
712 typename OrientationTools<SpT>::CoeffMatrixDataViewType
714 #ifdef HAVE_INTREPID2_DEBUG
715 INTREPID2_TEST_FOR_EXCEPTION( !basis->requireOrientation(), std::invalid_argument,
716 ">>> ERROR (OrientationTools::createCoeffMatrix): basis does not require orientations." );
718 Kokkos::push_finalize_hook( [=] {
719 ortCoeffData=std::map<std::pair<std::string,ordinal_type>,
typename OrientationTools<SpT>::CoeffMatrixDataViewType>();
722 const std::pair<std::string,ordinal_type> key(basis->getName(), basis->getDegree());
723 const auto found = ortCoeffData.find(key);
725 CoeffMatrixDataViewType matData;
726 if (found == ortCoeffData.end()) {
727 matData = createCoeffMatrixInternal(basis);
728 ortCoeffData.insert(std::make_pair(key, matData));
730 matData = found->second;
736 template<
typename SpT>
738 ortCoeffData.clear();