35 #include <boost/core/ignore_unused.hpp> 43 namespace Collections {
72 boost::ignore_unused(output1, output2, wsp);
74 m_mat->GetColumns(), 1.0, m_mat->GetRawPtr(),
75 m_mat->GetRows(), input.get(), m_stdExp->GetNcoeffs(),
76 0.0, output.get(), m_stdExp->GetTotPoints());
85 boost::ignore_unused(dir, input, output, wsp);
86 ASSERTL0(
false,
"Not valid for this operator.");
94 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
99 m_stdExp->DetShapeType(), *m_stdExp);
100 m_mat = m_stdExp->GetStdMatrix(key);
108 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Seg"),
111 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Tri"),
114 BwdTrans_StdMat::create,
"BwdTrans_StdMat_NodalTri"),
117 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Quad"),
120 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Tet"),
123 BwdTrans_StdMat::create,
"BwdTrans_StdMat_NodalTet"),
126 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Pyr"),
129 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Prism"),
132 BwdTrans_StdMat::create,
"BwdTrans_StdMat_NodalPrism"),
135 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Hex"),
138 BwdTrans_StdMat::create,
"BwdTrans_SumFac_Pyr")
162 boost::ignore_unused(output1, output2, wsp);
164 const int nCoeffs = m_stdExp->GetNcoeffs();
165 const int nPhys = m_stdExp->GetTotPoints();
168 for (
int i = 0; i < m_numElmt; ++i)
170 m_stdExp->BwdTrans(input + i*nCoeffs, tmp = output + i*nPhys);
180 boost::ignore_unused(dir, input, output, wsp);
181 ASSERTL0(
false,
"Not valid for this operator.");
186 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
197 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Seg"),
200 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Tri"),
203 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_NodalTri"),
206 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Quad"),
209 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Tet"),
212 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_NodalTet"),
215 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Pyr"),
218 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Prism"),
221 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_NodalPrism"),
224 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Hex"),
247 boost::ignore_unused(output1, output2, wsp);
249 const int nCoeffs = m_expList[0]->GetNcoeffs();
250 const int nPhys = m_expList[0]->GetTotPoints();
253 for (
int i = 0; i < m_numElmt; ++i)
255 m_expList[i]->BwdTrans(input + i*nCoeffs,
256 tmp = output + i*nPhys);
266 boost::ignore_unused(dir, input, output, wsp);
267 ASSERTL0(
false,
"Not valid for this operator.");
275 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
279 m_expList = pCollExp;
287 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Seg"),
290 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Tri"),
293 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_NodalTri"),
296 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Quad"),
299 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Tet"),
302 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_NodalTet"),
305 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Pyr"),
308 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Prism"),
311 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_NodalPrism"),
314 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Hex"),
337 boost::ignore_unused(output1, output2, wsp);
340 Vmath::Vcopy(m_numElmt*m_nmodes0,input.get(),1,output.get(),1);
345 Blas::Dgemm(
'N',
'N', m_nquad0, m_numElmt, m_nmodes0,
346 1.0, m_base0.get(), m_nquad0,
347 &input[0], m_nmodes0, 0.0,
348 &output[0], m_nquad0);
358 boost::ignore_unused(dir, input, output, wsp);
359 ASSERTL0(
false,
"Not valid for this operator.");
371 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
374 m_nquad0 (m_stdExp->GetNumPoints(0)),
375 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
376 m_colldir0(m_stdExp->GetBasis(0)->Collocation()),
377 m_base0 (m_stdExp->GetBasis(0)->GetBdata())
385 RegisterCreatorFunction(
387 BwdTrans_SumFac_Seg::create,
"BwdTrans_SumFac_Seg");
410 boost::ignore_unused(output1, output2);
413 if(m_colldir0 && m_colldir1)
416 input.get(), 1, output.get(), 1);
421 = m_stdExp->GetBasis(1)->GetBdata();
423 for(i = 0; i < m_numElmt; ++i)
425 Blas::Dgemm(
'N',
'T', m_nquad0, m_nquad1, m_nmodes1,
426 1.0, &input[i*m_nquad0*m_nmodes1], m_nquad0,
427 base1.get(), m_nquad1, 0.0,
428 &output[i*m_nquad0*m_nquad1], m_nquad0);
433 Blas::Dgemm(
'N',
'N', m_nquad0, m_nmodes1*m_numElmt, m_nmodes0,
434 1.0, m_base0.get(), m_nquad0,
435 &input[0], m_nmodes0, 0.0,
436 &output[0], m_nquad0);
440 ASSERTL1(wsp.num_elements() == m_wspSize,
441 "Incorrect workspace size");
445 Blas::Dgemm(
'N',
'N', m_nquad0, m_nmodes1*m_numElmt, m_nmodes0,
446 1.0, m_base0.get(), m_nquad0,
447 &input[0], m_nmodes0, 0.0,
450 for(i = 0; i < m_numElmt; ++i)
452 Blas::Dgemm(
'N',
'T', m_nquad0, m_nquad1, m_nmodes1,
453 1.0, &wsp[i*m_nquad0*m_nmodes1], m_nquad0,
454 m_base1.get(), m_nquad1, 0.0,
455 &output[i*m_nquad0*m_nquad1], m_nquad0);
466 boost::ignore_unused(dir, input, output, wsp);
467 ASSERTL0(
false,
"Not valid for this operator.");
482 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
485 m_nquad0 (m_stdExp->GetNumPoints(0)),
486 m_nquad1 (m_stdExp->GetNumPoints(1)),
487 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
488 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
489 m_colldir0(m_stdExp->GetBasis(0)->Collocation()),
490 m_colldir1(m_stdExp->GetBasis(1)->Collocation()),
491 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
492 m_base1 (m_stdExp->GetBasis(1)->GetBdata())
494 m_wspSize = m_nquad0*m_nmodes1*m_numElmt;
500 RegisterCreatorFunction(
502 BwdTrans_SumFac_Quad::create,
"BwdTrans_SumFac_Quad");
524 boost::ignore_unused(output1, output2);
526 ASSERTL1(wsp.num_elements() == m_wspSize,
527 "Incorrect workspace size");
529 int ncoeffs = m_stdExp->GetNcoeffs();
533 for (i = mode = 0; i < m_nmodes0; ++i)
535 Blas::Dgemm(
'N',
'N', m_nquad1, m_numElmt, m_nmodes1-i,
536 1.0, m_base1.get()+mode*m_nquad1, m_nquad1,
537 &input[0]+mode, ncoeffs, 0.0,
538 &wsp[i*m_nquad1*m_numElmt], m_nquad1);
545 for(i = 0; i < m_numElmt; ++i)
548 m_base1.get() + m_nquad1, 1,
549 &wsp[m_nquad1*m_numElmt] + i*m_nquad1, 1);
554 Blas::Dgemm(
'N',
'T', m_nquad0, m_nquad1*m_numElmt, m_nmodes0,
555 1.0, m_base0.get(), m_nquad0,
556 &wsp[0], m_nquad1*m_numElmt, 0.0,
557 &output[0], m_nquad0);
566 boost::ignore_unused(dir, input, output, wsp);
567 ASSERTL0(
false,
"Not valid for this operator.");
582 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
585 m_nquad0 (m_stdExp->GetNumPoints(0)),
586 m_nquad1 (m_stdExp->GetNumPoints(1)),
587 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
588 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
589 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
590 m_base1 (m_stdExp->GetBasis(1)->GetBdata())
592 m_wspSize = m_nquad0 * m_nmodes1 * m_numElmt;
593 if(m_stdExp->GetBasis(0)->GetBasisType()
596 m_sortTopVertex =
true;
600 m_sortTopVertex =
false;
608 RegisterCreatorFunction(
610 BwdTrans_SumFac_Tri::create,
"BwdTrans_SumFac_Tri");
630 boost::ignore_unused(output1, output2);
632 if(m_colldir0 && m_colldir1 && m_colldir2)
634 Vmath::Vcopy(m_numElmt * m_nmodes0 * m_nmodes1 * m_nmodes2,
640 ASSERTL1(wsp.num_elements() == m_wspSize,
641 "Incorrect workspace size");
644 int totmodes = m_nmodes0*m_nmodes1*m_nmodes2;
647 = wsp + m_nmodes0*m_nmodes1*m_nquad2*m_numElmt;
650 for(
int n = 0; n < m_numElmt; ++n)
652 Blas::Dgemm(
'N',
'T', m_nquad2, m_nmodes0*m_nmodes1,
653 m_nmodes2, 1.0, m_base2.get(), m_nquad2,
654 &input[n*totmodes], m_nmodes0*m_nmodes1, 0.0,
655 &wsp[n*m_nquad2], m_nquad2*m_numElmt);
659 Blas::Dgemm(
'N',
'T', m_nquad1, m_nquad2*m_numElmt*m_nmodes0,
660 m_nmodes1, 1.0, m_base1.get(), m_nquad1,
661 wsp.get(), m_nquad2*m_numElmt*m_nmodes0, 0.0,
662 wsp2.get(), m_nquad1);
665 Blas::Dgemm(
'N',
'T', m_nquad0, m_nquad1*m_nquad2*m_numElmt,
666 m_nmodes0, 1.0, m_base0.get(), m_nquad0,
667 wsp2.get(), m_nquad1*m_nquad2*m_numElmt, 0.0,
668 output.get(), m_nquad0);
678 boost::ignore_unused(dir, input, output, wsp);
679 ASSERTL0(
false,
"Not valid for this operator.");
698 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
701 m_nquad0 (pCollExp[0]->GetNumPoints(0)),
702 m_nquad1 (pCollExp[0]->GetNumPoints(1)),
703 m_nquad2 (pCollExp[0]->GetNumPoints(2)),
704 m_nmodes0 (pCollExp[0]->GetBasisNumModes(0)),
705 m_nmodes1 (pCollExp[0]->GetBasisNumModes(1)),
706 m_nmodes2 (pCollExp[0]->GetBasisNumModes(2)),
707 m_base0 (pCollExp[0]->GetBasis(0)->GetBdata()),
708 m_base1 (pCollExp[0]->GetBasis(1)->GetBdata()),
709 m_base2 (pCollExp[0]->GetBasis(2)->GetBdata()),
710 m_colldir0(pCollExp[0]->GetBasis(0)->Collocation()),
711 m_colldir1(pCollExp[0]->GetBasis(1)->Collocation()),
712 m_colldir2(pCollExp[0]->GetBasis(2)->Collocation())
714 m_wspSize = m_numElmt*m_nmodes0*(m_nmodes1*m_nquad2 +
721 RegisterCreatorFunction(
723 BwdTrans_SumFac_Hex::create,
"BwdTrans_SumFac_Hex");
745 boost::ignore_unused(output1, output2);
747 ASSERTL1(wsp.num_elements() == m_wspSize,
748 "Incorrect workspace size");
752 + m_numElmt*m_nquad2*m_nmodes0*(2*m_nmodes1-m_nmodes0+1)/2;
759 int ncoeffs = m_stdExp->GetNcoeffs();
762 for(i = 0; i < m_nmodes0; ++i)
764 for(j = 0; j < m_nmodes1-i; ++j, ++cnt)
766 Blas::Dgemm(
'N',
'N', m_nquad2, m_numElmt, m_nmodes2-i-j,
767 1.0, m_base2.get()+mode*m_nquad2, m_nquad2,
768 input.get()+ mode1, ncoeffs, 0.0,
769 tmp.get() + cnt*m_nquad2*m_numElmt, m_nquad2);
770 mode += m_nmodes2-i-j;
771 mode1 += m_nmodes2-i-j;
775 mode += (m_nmodes2-m_nmodes1)*(m_nmodes2-m_nmodes1+1)/2;
782 for(i = 0; i < m_numElmt; ++i)
787 m_base2.get() + m_nquad2, 1,
788 &tmp[m_nquad2*m_numElmt] + i*m_nquad2, 1);
793 m_base2.get() + m_nquad2, 1,
794 &tmp[m_nmodes1*m_nquad2*m_numElmt]
801 for(i = 0; i < m_nmodes0; ++i)
803 Blas::Dgemm(
'N',
'T', m_nquad1, m_nquad2*m_numElmt, m_nmodes1-i,
804 1.0, m_base1.get()+mode*m_nquad1, m_nquad1,
805 tmp.get() + mode*m_nquad2*m_numElmt,
807 0.0, tmp1.get() + i*m_nquad1*m_nquad2*m_numElmt,
820 for(i = 0; i < m_numElmt; ++i)
824 for(
int j = 0; j < m_nquad2; ++j)
827 tmp[m_nquad2*m_numElmt + i*m_nquad2 + j],
828 m_base1.get() + m_nquad1,1,
829 &tmp1[m_nquad1*m_nquad2*m_numElmt]
830 + i*m_nquad1*m_nquad2 + j*m_nquad1, 1);
836 Blas::Dgemm(
'N',
'T', m_nquad0, m_nquad1*m_nquad2*m_numElmt,
837 m_nmodes0, 1.0, m_base0.get(), m_nquad0,
838 tmp1.get(), m_nquad1*m_nquad2*m_numElmt, 0.0,
839 output.get(), m_nquad0);
849 boost::ignore_unused(dir, input, output, wsp);
850 ASSERTL0(
false,
"Not valid for this operator.");
867 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
870 m_nquad0 (m_stdExp->GetNumPoints(0)),
871 m_nquad1 (m_stdExp->GetNumPoints(1)),
872 m_nquad2 (m_stdExp->GetNumPoints(2)),
873 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
874 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
875 m_nmodes2 (m_stdExp->GetBasisNumModes(2)),
876 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
877 m_base1 (m_stdExp->GetBasis(1)->GetBdata()),
878 m_base2 (m_stdExp->GetBasis(2)->GetBdata())
880 m_wspSize = m_numElmt
881 * (m_nquad2*m_nmodes0*(2*m_nmodes1-m_nmodes0+1)/2
882 + m_nquad2*m_nquad1*m_nmodes0);
884 if(m_stdExp->GetBasis(0)->GetBasisType()
887 m_sortTopEdge =
true;
891 m_sortTopEdge =
false;
898 RegisterCreatorFunction(
900 BwdTrans_SumFac_Tet::create,
"BwdTrans_SumFac_Tet");
922 boost::ignore_unused(output1, output2);
924 ASSERTL1(wsp.num_elements() == m_wspSize,
925 "Incorrect workspace size");
928 int totmodes = m_stdExp->GetNcoeffs();
931 = wsp + m_nmodes0*m_nmodes1*m_nquad2*m_numElmt;
933 Vmath::Zero(m_nmodes0*m_nmodes1*m_nquad2*m_numElmt, wsp, 1);
939 for (i = mode = mode1 = 0; i < m_nmodes0; ++i)
941 cnt = i * m_nquad2 * m_numElmt;
942 for (j = 0; j < m_nmodes1; ++j)
944 Blas::Dgemm(
'N',
'N', m_nquad2, m_numElmt, m_nmodes2-i,
945 1.0, m_base2.get()+mode*m_nquad2, m_nquad2,
946 input.get()+mode1, totmodes, 0.0,
947 &wsp[j*m_nquad2*m_numElmt*m_nmodes0+ cnt],
949 mode1 += m_nmodes2-i;
957 for(j = 0; j < m_nmodes1; ++j)
959 for(i = 0; i < m_numElmt; ++i)
961 Blas::Daxpy(m_nquad2,input[1+i*totmodes+j*m_nmodes2],
962 m_base2.get()+m_nquad2,1,
963 &wsp[j*m_nquad2*m_numElmt*m_nmodes0 +
964 m_nquad2*m_numElmt]+i*m_nquad2,1);
974 Blas::Dgemm(
'N',
'T', m_nquad1, m_nquad2*m_numElmt*m_nmodes0,
975 m_nmodes1,1.0, m_base1.get(), m_nquad1,
976 wsp.get(), m_nquad2*m_numElmt*m_nmodes0,
977 0.0, wsp2.get(), m_nquad1);
981 Blas::Dgemm(
'N',
'T', m_nquad0, m_nquad1*m_nquad2*m_numElmt,
982 m_nmodes0, 1.0, m_base0.get(), m_nquad0,
983 wsp2.get(), m_nquad1*m_nquad2*m_numElmt,
984 0.0, output.get(), m_nquad0);
993 boost::ignore_unused(dir, input, output, wsp);
994 ASSERTL0(
false,
"Not valid for this operator.");
1012 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1015 m_nquad0 (m_stdExp->GetNumPoints(0)),
1016 m_nquad1 (m_stdExp->GetNumPoints(1)),
1017 m_nquad2 (m_stdExp->GetNumPoints(2)),
1018 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
1019 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
1020 m_nmodes2 (m_stdExp->GetBasisNumModes(2)),
1021 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
1022 m_base1 (m_stdExp->GetBasis(1)->GetBdata()),
1023 m_base2 (m_stdExp->GetBasis(2)->GetBdata())
1025 m_wspSize = m_numElmt*m_nmodes0*(m_nmodes1*m_nquad2
1026 + m_nquad1*m_nquad2);
1028 if(m_stdExp->GetBasis(0)->GetBasisType()
1031 m_sortTopVertex =
true;
1035 m_sortTopVertex =
false;
1043 RegisterCreatorFunction(
1045 BwdTrans_SumFac_Prism::create,
"BwdTrans_SumFac_Prism");
1066 boost::ignore_unused(output1, output2);
1068 ASSERTL1(wsp.num_elements() == m_wspSize,
1069 "Incorrect workspace size");
1072 int totmodes = m_stdExp->GetNcoeffs();
1075 = wsp + m_nmodes0*m_nmodes1*m_nquad2*m_numElmt;
1077 Vmath::Zero(m_nmodes0*m_nmodes1*m_nquad2*m_numElmt, wsp, 1);
1083 for (i = 0; i < m_nmodes0; ++i)
1085 for (j = 0; j < m_nmodes1; ++j, ++cnt)
1087 int ijmax = max(i,j);
1088 Blas::Dgemm(
'N',
'N', m_nquad2, m_numElmt, m_nmodes2-ijmax,
1089 1.0, m_base2.get()+mode*m_nquad2, m_nquad2,
1090 input.get()+mode1, totmodes, 0.0,
1091 wsp.get() + cnt*m_nquad2*m_numElmt, m_nquad2);
1092 mode += m_nmodes2-ijmax;
1093 mode1 += m_nmodes2-ijmax;
1097 for(j = m_nmodes1; j < m_nmodes2-i; ++j)
1099 int ijmax = max(i,j);
1100 mode += m_nmodes2-ijmax;
1108 for(i = 0; i < m_numElmt; ++i)
1113 m_base2.get() + m_nquad2, 1,
1114 &wsp[m_nquad2*m_numElmt] + i*m_nquad2, 1);
1119 m_base2.get() + m_nquad2, 1,
1120 &wsp[m_nmodes1*m_nquad2*m_numElmt]
1126 m_base2.get() + m_nquad2, 1,
1127 &wsp[(m_nmodes1+1)*m_nquad2*m_numElmt]
1135 for(i = 0; i < m_nmodes0; ++i)
1137 Blas::Dgemm(
'N',
'T', m_nquad1, m_nquad2*m_numElmt, m_nmodes1,
1138 1.0, m_base1.get(), m_nquad1,
1139 wsp.get() + mode*m_nquad2*m_numElmt,
1141 0.0, wsp2.get() + i*m_nquad1*m_nquad2*m_numElmt,
1147 Blas::Dgemm(
'N',
'T', m_nquad0, m_nquad1*m_nquad2*m_numElmt,
1148 m_nmodes0, 1.0, m_base0.get(), m_nquad0,
1149 wsp2.get(), m_nquad1*m_nquad2*m_numElmt,
1150 0.0, output.get(), m_nquad0);
1159 boost::ignore_unused(dir, input, output, wsp);
1160 ASSERTL0(
false,
"Not valid for this operator.");
1178 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1181 m_nquad0 (m_stdExp->GetNumPoints(0)),
1182 m_nquad1 (m_stdExp->GetNumPoints(1)),
1183 m_nquad2 (m_stdExp->GetNumPoints(2)),
1184 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
1185 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
1186 m_nmodes2 (m_stdExp->GetBasisNumModes(2)),
1187 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
1188 m_base1 (m_stdExp->GetBasis(1)->GetBdata()),
1189 m_base2 (m_stdExp->GetBasis(2)->GetBdata())
1191 m_wspSize = m_numElmt*m_nmodes0*m_nquad2*(m_nmodes1 + m_nquad1);
1193 if(m_stdExp->GetBasis(0)->GetBasisType()
1196 m_sortTopVertex =
true;
1200 m_sortTopVertex =
false;
1208 RegisterCreatorFunction(
1210 BwdTrans_SumFac_Pyr::create,
"BwdTrans_SumFac_Pyr");
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
std::shared_ptr< CoalescedGeomData > CoalescedGeomDataSharedPtr
Array< OneD, const NekDouble > m_base1
#define ASSERTL0(condition, msg)
Array< OneD, const NekDouble > m_base1
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Array< OneD, const NekDouble > m_base2
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Array< OneD, const NekDouble > m_base0
Backward transform operator using sum-factorisation (Tet)
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
std::tuple< LibUtilities::ShapeType, OperatorType, ImplementationType, ExpansionIsNodal > OperatorKey
Key for describing an Operator.
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Backward transform operator using sum-factorisation (Hex)
Principle Modified Functions .
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Array< OneD, const NekDouble > m_base1
Backward transform operator using sum-factorisation (Tri)
std::shared_ptr< DNekMat > DNekMatSharedPtr
static void Dgemm(const char &transa, const char &transb, const int &m, const int &n, const int &k, const double &alpha, const double *a, const int &lda, const double *b, const int &ldb, const double &beta, double *c, const int &ldc)
BLAS level 3: Matrix-matrix multiply C = A x B where A[m x n], B[n x k], C[m x k].
Base class for operators on a collection of elements.
BwdTrans_SumFac_Tri(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
Backward transform operator using sum-factorisation (Prism)
Backward transform operator using sum-factorisation (Segment)
BwdTrans_SumFac_Seg(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Backward transform operator using sum-factorisation (Pyr)
Backward transform operator using LocalRegions implementation.
Array< OneD, const NekDouble > m_base2
BwdTrans_NoCollection(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
vector< StdRegions::StdExpansionSharedPtr > m_expList
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Array< OneD, const NekDouble > m_base0
BwdTrans_SumFac_Quad(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
Array< OneD, const NekDouble > m_base0
BwdTrans_SumFac_Hex(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
OperatorFactory & GetOperatorFactory()
Returns the singleton Operator factory object.
Array< OneD, const NekDouble > m_base1
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Array< OneD, const NekDouble > m_base0
Backward transform operator using default StdRegions operator.
Array< OneD, const NekDouble > m_base2
BwdTrans_SumFac_Pyr(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
#define OPERATOR_CREATE(cname)
Array< OneD, const NekDouble > m_base0
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Backward transform operator using sum-factorisation (Quad)
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Array< OneD, const NekDouble > m_base1
BwdTrans_SumFac_Tet(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Array< OneD, const NekDouble > m_base2
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Array< OneD, const NekDouble > m_base1
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Array< OneD, const NekDouble > m_base0
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
void Zero(int n, T *x, const int incx)
Zero vector.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
static void Daxpy(const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: y = alpha x plus y.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
BwdTrans_SumFac_Prism(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Array< OneD, const NekDouble > m_base0
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Backward transform operator using standard matrix approach.
BwdTrans_IterPerExp(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
BwdTrans_StdMat(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)