35 #include <boost/core/ignore_unused.hpp>
46 namespace LocalRegions
68 Ba.GetNumModes(), Bb.GetNumModes(), Bc.GetNumModes()),
72 Ba.GetNumModes(), Bb.GetNumModes(), Bc.GetNumModes()),
78 std::bind(&
TetExp::CreateMatrix, this, std::placeholders::_1),
79 std::string(
"TetExpMatrix")),
80 m_staticCondMatrixManager(
81 std::bind(&
TetExp::CreateStaticCondMatrix, this, std::placeholders::_1),
82 std::string(
"TetExpStaticCondMatrix"))
91 StdRegions::StdExpansion(T),
92 StdRegions::StdExpansion3D(T),
93 StdRegions::StdTetExp(T),
96 m_matrixManager(T.m_matrixManager),
97 m_staticCondMatrixManager(T.m_staticCondMatrixManager)
126 int nquad0 =
m_base[0]->GetNumPoints();
127 int nquad1 =
m_base[1]->GetNumPoints();
128 int nquad2 =
m_base[2]->GetNumPoints();
146 retrunVal = StdTetExp::v_Integral(tmp);
170 int TotPts =
m_base[0]->GetNumPoints()*
m_base[1]->GetNumPoints()*
171 m_base[2]->GetNumPoints();
179 StdTetExp::v_PhysDeriv(inarray, Diff0, Diff1, Diff2);
185 Vmath::Vmul (TotPts,&df[0][0],1,&Diff0[0],1, &out_d0[0], 1);
186 Vmath::Vvtvp (TotPts,&df[1][0],1,&Diff1[0],1, &out_d0[0], 1,&out_d0[0],1);
187 Vmath::Vvtvp (TotPts,&df[2][0],1,&Diff2[0],1, &out_d0[0], 1,&out_d0[0],1);
192 Vmath::Vmul (TotPts,&df[3][0],1,&Diff0[0],1, &out_d1[0], 1);
193 Vmath::Vvtvp (TotPts,&df[4][0],1,&Diff1[0],1, &out_d1[0], 1,&out_d1[0],1);
194 Vmath::Vvtvp (TotPts,&df[5][0],1,&Diff2[0],1, &out_d1[0], 1,&out_d1[0],1);
199 Vmath::Vmul (TotPts,&df[6][0],1,&Diff0[0],1, &out_d2[0], 1);
200 Vmath::Vvtvp (TotPts,&df[7][0],1,&Diff1[0],1, &out_d2[0], 1, &out_d2[0],1);
201 Vmath::Vvtvp (TotPts,&df[8][0],1,&Diff2[0],1, &out_d2[0], 1, &out_d2[0],1);
208 Vmath::Smul (TotPts,df[0][0],&Diff0[0],1, &out_d0[0], 1);
209 Blas::Daxpy (TotPts,df[1][0],&Diff1[0],1, &out_d0[0], 1);
210 Blas::Daxpy (TotPts,df[2][0],&Diff2[0],1, &out_d0[0], 1);
215 Vmath::Smul (TotPts,df[3][0],&Diff0[0],1, &out_d1[0], 1);
216 Blas::Daxpy (TotPts,df[4][0],&Diff1[0],1, &out_d1[0], 1);
217 Blas::Daxpy (TotPts,df[5][0],&Diff2[0],1, &out_d1[0], 1);
222 Vmath::Smul (TotPts,df[6][0],&Diff0[0],1, &out_d2[0], 1);
223 Blas::Daxpy (TotPts,df[7][0],&Diff1[0],1, &out_d2[0], 1);
224 Blas::Daxpy (TotPts,df[8][0],&Diff2[0],1, &out_d2[0], 1);
246 if((
m_base[0]->Collocation())&&(
m_base[1]->Collocation())&&(
m_base[2]->Collocation()))
306 bool multiplybyweights)
308 const int nquad0 =
m_base[0]->GetNumPoints();
309 const int nquad1 =
m_base[1]->GetNumPoints();
310 const int nquad2 =
m_base[2]->GetNumPoints();
311 const int order0 =
m_base[0]->GetNumModes();
312 const int order1 =
m_base[1]->GetNumModes();
314 nquad2*order0*(order1+1)/2);
316 if(multiplybyweights)
332 inarray,outarray,wsp,
372 const int nquad0 =
m_base[0]->GetNumPoints();
373 const int nquad1 =
m_base[1]->GetNumPoints();
374 const int nquad2 =
m_base[2]->GetNumPoints();
375 const int order0 =
m_base[0]->GetNumModes ();
376 const int order1 =
m_base[1]->GetNumModes ();
377 const int nqtot = nquad0*nquad1*nquad2;
385 nquad2*order0*(order1+1)/2);
426 const int nquad0 =
m_base[0]->GetNumPoints();
427 const int nquad1 =
m_base[1]->GetNumPoints();
428 const int nquad2 =
m_base[2]->GetNumPoints();
429 const int nqtot = nquad0*nquad1*nquad2;
443 Vmath::Vmul(nqtot,&df[3*dir][0], 1,inarray.get(),1,
445 Vmath::Vmul(nqtot,&df[3*dir+1][0],1,inarray.get(),1,
447 Vmath::Vmul(nqtot,&df[3*dir+2][0],1,inarray.get(),1,
448 outarray[2].get(),1);
457 outarray[2].get(), 1);
463 for(cnt = 0, k = 0; k < nquad2; ++k)
465 for(j = 0; j < nquad1; ++j)
467 g2 = 2.0/(1.0-z2[k]);
470 g3 = (1.0+z1[j])*g2*0.5;
472 for(i = 0; i < nquad0; ++i,++cnt)
476 outarray[0][cnt] = g0*tmp2[cnt] + g1a*(tmp3[cnt] +
479 outarray[1][cnt] = g2*tmp3[cnt] + g3*outarray[2][cnt];
501 return StdTetExp::v_PhysEvaluate(Lcoord,physvals);
517 m_geom->GetLocCoords(coord,Lcoord);
520 return StdTetExp::v_PhysEvaluate(Lcoord,physvals);
532 ASSERTL1(Lcoords[0] <= -1.0 && Lcoords[0] >= 1.0 &&
533 Lcoords[1] <= -1.0 && Lcoords[1] >= 1.0 &&
534 Lcoords[2] <= -1.0 && Lcoords[2] >= 1.0,
535 "Local coordinates are not in region [-1,1]");
539 for(i = 0; i <
m_geom->GetCoordim(); ++i)
541 coords[i] =
m_geom->GetCoord(i,Lcoords);
571 m_base[2]->GetBasisKey());
578 2,
m_base[0]->GetPointsKey());
580 2,
m_base[1]->GetPointsKey());
582 2,
m_base[2]->GetPointsKey());
591 return m_geom->GetCoordim();
596 const std::vector<unsigned int > &nummodes,
597 const int mode_offset,
599 std::vector<LibUtilities::BasisType> &fromType)
601 boost::ignore_unused(fromType);
603 int data_order0 = nummodes[mode_offset];
604 int fillorder0 = min(
m_base[0]->GetNumModes(),data_order0);
605 int data_order1 = nummodes[mode_offset+1];
606 int order1 =
m_base[1]->GetNumModes();
607 int fillorder1 = min(order1,data_order1);
608 int data_order2 = nummodes[mode_offset+2];
609 int order2 =
m_base[2]->GetNumModes();
610 int fillorder2 = min(order2,data_order2);
622 "Extraction routine not set up for this basis");
625 "Extraction routine not set up for this basis");
628 for(j = 0; j < fillorder0; ++j)
630 for(i = 0; i < fillorder1-j; ++i)
634 cnt += data_order2-j-i;
639 for(i = fillorder1-j; i < data_order1-j; ++i)
641 cnt += data_order2-j-i;
644 for(i = fillorder1-j; i < order1-j; ++i)
653 ASSERTL0(
false,
"basis is either not set up or not "
664 int nquad0 =
m_base[0]->GetNumPoints();
665 int nquad1 =
m_base[1]->GetNumPoints();
666 int nquad2 =
m_base[2]->GetNumPoints();
678 if(outarray.size()!=nq0*nq1)
683 for (
int i = 0; i < nquad0*nquad1; ++i)
694 if(outarray.size()!=nq0*nq1)
700 for (
int k=0; k<nquad2; k++)
702 for(
int i = 0; i < nquad0; ++i)
704 outarray[k*nquad0+i] = (nquad0*nquad1*k)+i;
713 if(outarray.size()!=nq0*nq1)
719 for(
int j = 0; j < nquad1*nquad2; ++j)
721 outarray[j] = nquad0-1 + j*nquad0;
729 if(outarray.size() != nq0*nq1)
735 for(
int j = 0; j < nquad1*nquad2; ++j)
737 outarray[j] = j*nquad0;
742 ASSERTL0(
false,
"face value (> 3) is out of range");
758 for(
int i = 0; i < ptsKeys.size(); ++i)
782 for (i = 0; i < vCoordDim; ++i)
787 size_t nqb = nq_face;
803 for (i = 0; i < vCoordDim; ++i)
805 normal[i][0] = -df[3*i+2][0];
812 for (i = 0; i < vCoordDim; ++i)
814 normal[i][0] = -df[3*i+1][0];
821 for (i = 0; i < vCoordDim; ++i)
823 normal[i][0] = df[3*i][0]+df[3*i+1][0]+
831 for(i = 0; i < vCoordDim; ++i)
833 normal[i][0] = -df[3*i][0];
838 ASSERTL0(
false,
"face is out of range (edge < 3)");
843 for (i = 0; i < vCoordDim; ++i)
845 fac += normal[i][0]*normal[i][0];
850 for (i = 0; i < vCoordDim; ++i)
860 int nq0 = ptsKeys[0].GetNumPoints();
861 int nq1 = ptsKeys[1].GetNumPoints();
862 int nq2 = ptsKeys[2].GetNumPoints();
893 for(j = 0; j < nq01; ++j)
895 normals[j] = -df[2][j]*jac[j];
896 normals[nqtot+j] = -df[5][j]*jac[j];
897 normals[2*nqtot+j] = -df[8][j]*jac[j];
901 points0 = ptsKeys[0];
902 points1 = ptsKeys[1];
908 for (j = 0; j < nq0; ++j)
910 for(k = 0; k < nq2; ++k)
914 -df[1][tmp]*jac[tmp];
915 normals[nqtot+j+k*nq0] =
916 -df[4][tmp]*jac[tmp];
917 normals[2*nqtot+j+k*nq0] =
918 -df[7][tmp]*jac[tmp];
919 faceJac[j+k*nq0] = jac[tmp];
923 points0 = ptsKeys[0];
924 points1 = ptsKeys[2];
930 for (j = 0; j < nq1; ++j)
932 for(k = 0; k < nq2; ++k)
934 int tmp = nq0-1+nq0*j+nq01*k;
936 (df[0][tmp]+df[1][tmp]+df[2][tmp])*
938 normals[nqtot+j+k*nq1] =
939 (df[3][tmp]+df[4][tmp]+df[5][tmp])*
941 normals[2*nqtot+j+k*nq1] =
942 (df[6][tmp]+df[7][tmp]+df[8][tmp])*
944 faceJac[j+k*nq1] = jac[tmp];
948 points0 = ptsKeys[1];
949 points1 = ptsKeys[2];
955 for (j = 0; j < nq1; ++j)
957 for(k = 0; k < nq2; ++k)
959 int tmp = j*nq0+nq01*k;
961 -df[0][tmp]*jac[tmp];
962 normals[nqtot+j+k*nq1] =
963 -df[3][tmp]*jac[tmp];
964 normals[2*nqtot+j+k*nq1] =
965 -df[6][tmp]*jac[tmp];
966 faceJac[j+k*nq1] = jac[tmp];
970 points0 = ptsKeys[1];
971 points1 = ptsKeys[2];
976 ASSERTL0(
false,
"face is out of range (face < 3)");
985 Vmath::Sdiv(nq_face, 1.0, &work[0], 1, &work[0], 1);
988 for(i = 0; i < vCoordDim; ++i)
995 Vmath::Vmul(nq_face,work,1,normal[i],1,normal[i],1);
1002 Vmath::Vvtvp(nq_face,normal[i],1,normal[i],1,work,1,work,1);
1012 Vmath::Vmul(nq_face,normal[i],1,work,1,normal[i],1);
1044 StdExpansion::LaplacianMatrixOp_MatFree(k1,k2,inarray,outarray,
1071 StdTetExp::v_SVVLaplacianFilter( array, mkey);
1098 returnval = StdTetExp::v_GenMatrix(mkey);
1196 int rows = deriv0.GetRows();
1197 int cols = deriv1.GetColumns();
1201 (*WeakDeriv) = df[3*dir][0]*deriv0
1202 + df[3*dir+1][0]*deriv1
1203 + df[3*dir+2][0]*deriv2;
1247 int rows = lap00.GetRows();
1248 int cols = lap00.GetColumns();
1253 (*lap) = gmat[0][0]*lap00
1258 + gmat[7][0]*(lap12 +
Transpose(lap12));
1273 int rows = LapMat.GetRows();
1274 int cols = LapMat.GetColumns();
1279 (*helm) = LapMat + factor*MassMat;
1397 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
1398 unsigned int exp_size[] = {nbdry, nint};
1399 unsigned int nblks = 2;
1411 goto UseLocRegionsMatrix;
1418 goto UseLocRegionsMatrix;
1423 factor = mat->Scale();
1424 goto UseStdRegionsMatrix;
1427 UseStdRegionsMatrix:
1442 UseLocRegionsMatrix:
1458 for(i = 0; i < nbdry; ++i)
1460 for(j = 0; j < nbdry; ++j)
1462 (*A)(i,j) = mat(bmap[i],bmap[j]);
1465 for(j = 0; j < nint; ++j)
1467 (*B)(i,j) = mat(bmap[i],imap[j]);
1471 for(i = 0; i < nint; ++i)
1473 for(j = 0; j < nbdry; ++j)
1475 (*C)(i,j) = mat(imap[i],bmap[j]);
1478 for(j = 0; j < nint; ++j)
1480 (*D)(i,j) = mat(imap[i],imap[j]);
1489 (*A) = (*A) - (*B)*(*C);
1514 return tmp->GetStdMatrix(mkey);
1539 if(inarray.get() == outarray.get())
1545 m_ncoeffs, tmp.get(), 1, 0.0, outarray.get(), 1);
1550 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
1567 int nquad0 =
m_base[0]->GetNumPoints();
1568 int nquad1 =
m_base[1]->GetNumPoints();
1569 int nquad2 =
m_base[2]->GetNumPoints();
1570 int nqtot = nquad0*nquad1*nquad2;
1573 "Insufficient workspace size.");
1575 "Workspace not set up for ncoeffs > nqtot");
1602 StdExpansion3D::PhysTensorDeriv(inarray,wsp0,wsp1,wsp2);
1608 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
1609 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
1610 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
1611 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
1612 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
1613 Vmath::Vvtvp (nqtot,&metric22[0],1,&wsp2[0],1,&wsp5[0],1,&wsp5[0],1);
1634 const unsigned int dim = 3;
1640 for (
unsigned int i = 0; i < dim; ++i)
1642 for (
unsigned int j = i; j < dim; ++j)
1675 const unsigned int nquad0 =
m_base[0]->GetNumPoints();
1676 const unsigned int nquad1 =
m_base[1]->GetNumPoints();
1677 const unsigned int nquad2 =
m_base[2]->GetNumPoints();
1679 for(j = 0; j < nquad2; ++j)
1681 for(i = 0; i < nquad1; ++i)
1683 Vmath::Fill(nquad0, 4.0/(1.0-z1[i])/(1.0-z2[j]), &h0[0]+i*nquad0 + j*nquad0*nquad1,1);
1684 Vmath::Fill(nquad0, 2.0/(1.0-z1[i])/(1.0-z2[j]), &h1[0]+i*nquad0 + j*nquad0*nquad1,1);
1685 Vmath::Fill(nquad0, 2.0/(1.0-z2[j]), &h2[0]+i*nquad0 + j*nquad0*nquad1,1);
1686 Vmath::Fill(nquad0, (1.0+z1[i])/(1.0-z2[j]), &h3[0]+i*nquad0 + j*nquad0*nquad1,1);
1689 for(i = 0; i < nquad0; i++)
1691 Blas::Dscal(nquad1*nquad2, 1+z0[i], &h1[0]+i, nquad0);
1700 Vmath::Vadd(nqtot, &df[1][0], 1, &df[2][0], 1, &wsp4[0], 1);
1701 Vmath::Vvtvvtp(nqtot, &df[0][0], 1, &h0[0], 1, &wsp4[0], 1, &h1[0], 1, &wsp4[0], 1);
1703 Vmath::Vadd(nqtot, &df[4][0], 1, &df[5][0], 1, &wsp5[0], 1);
1704 Vmath::Vvtvvtp(nqtot, &df[3][0], 1, &h0[0], 1, &wsp5[0], 1, &h1[0], 1, &wsp5[0], 1);
1706 Vmath::Vadd(nqtot, &df[7][0], 1, &df[8][0], 1, &wsp6[0], 1);
1707 Vmath::Vvtvvtp(nqtot, &df[6][0], 1, &h0[0], 1, &wsp6[0], 1, &h1[0], 1, &wsp6[0], 1);
1710 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g0[0], 1);
1711 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g0[0], 1, &g0[0], 1);
1714 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp4[0], 1, &df[5][0], 1, &wsp5[0], 1, &g4[0], 1);
1715 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp6[0], 1, &g4[0], 1, &g4[0], 1);
1719 Vmath::Vvtvvtp(nqtot, &df[1][0], 1, &h2[0], 1, &df[2][0], 1, &h3[0], 1, &wsp7[0], 1);
1721 Vmath::Vvtvvtp(nqtot, &df[4][0], 1, &h2[0], 1, &df[5][0], 1, &h3[0], 1, &wsp8[0], 1);
1723 Vmath::Vvtvvtp(nqtot, &df[7][0], 1, &h2[0], 1, &df[8][0], 1, &h3[0], 1, &wsp9[0], 1);
1726 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp7[0], 1, &wsp5[0], 1, &wsp8[0], 1, &g3[0], 1);
1727 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp9[0], 1, &g3[0], 1, &g3[0], 1);
1731 Vmath::Vvtvvtp(nqtot, &wsp7[0], 1, &wsp7[0], 1, &wsp8[0], 1, &wsp8[0], 1, &g1[0], 1);
1732 Vmath::Vvtvp (nqtot, &wsp9[0], 1, &wsp9[0], 1, &g1[0], 1, &g1[0], 1);
1735 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp7[0], 1, &df[5][0], 1, &wsp8[0], 1, &g5[0], 1);
1736 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp9[0], 1, &g5[0], 1, &g5[0], 1);
1739 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &df[2][0], 1, &df[5][0], 1, &df[5][0], 1, &g2[0], 1);
1740 Vmath::Vvtvp (nqtot, &df[8][0], 1, &df[8][0], 1, &g2[0], 1, &g2[0], 1);
1745 Vmath::Svtsvtp(nqtot, df[0][0], &h0[0], 1, df[1][0] + df[2][0], &h1[0], 1, &wsp4[0], 1);
1747 Vmath::Svtsvtp(nqtot, df[3][0], &h0[0], 1, df[4][0] + df[5][0], &h1[0], 1, &wsp5[0], 1);
1749 Vmath::Svtsvtp(nqtot, df[6][0], &h0[0], 1, df[7][0] + df[8][0], &h1[0], 1, &wsp6[0], 1);
1752 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g0[0], 1);
1753 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g0[0], 1, &g0[0], 1);
1756 Vmath::Svtsvtp(nqtot, df[2][0], &wsp4[0], 1, df[5][0], &wsp5[0], 1, &g4[0], 1);
1757 Vmath::Svtvp (nqtot, df[8][0], &wsp6[0], 1, &g4[0], 1, &g4[0], 1);
1761 Vmath::Svtsvtp(nqtot, df[1][0], &h2[0], 1, df[2][0], &h3[0], 1, &wsp7[0], 1);
1763 Vmath::Svtsvtp(nqtot, df[4][0], &h2[0], 1, df[5][0], &h3[0], 1, &wsp8[0], 1);
1765 Vmath::Svtsvtp(nqtot, df[7][0], &h2[0], 1, df[8][0], &h3[0], 1, &wsp9[0], 1);
1768 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp7[0], 1, &wsp5[0], 1, &wsp8[0], 1, &g3[0], 1);
1769 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp9[0], 1, &g3[0], 1, &g3[0], 1);
1773 Vmath::Vvtvvtp(nqtot, &wsp7[0], 1, &wsp7[0], 1, &wsp8[0], 1, &wsp8[0], 1, &g1[0], 1);
1774 Vmath::Vvtvp (nqtot, &wsp9[0], 1, &wsp9[0], 1, &g1[0], 1, &g1[0], 1);
1777 Vmath::Svtsvtp(nqtot, df[2][0], &wsp7[0], 1, df[5][0], &wsp8[0], 1, &g5[0], 1);
1778 Vmath::Svtvp (nqtot, df[8][0], &wsp9[0], 1, &g5[0], 1, &g5[0], 1);
1781 Vmath::Fill(nqtot, df[2][0]*df[2][0] + df[5][0]*df[5][0] + df[8][0]*df[8][0], &g2[0], 1);
1784 for (
unsigned int i = 0; i < dim; ++i)
1786 for (
unsigned int j = i; j < dim; ++j)
#define ASSERTL0(condition, msg)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed to...
Describes the specification for a Basis.
int GetNumPoints() const
Return points order at which basis is defined.
PointsKey GetPointsKey() const
Return distribution of points.
Defines a specification for a set of points.
std::map< int, NormalVector > m_faceNormals
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
std::map< int, Array< OneD, NekDouble > > m_elmtBndNormDirElmtLen
the element length in each element boundary(Vertex, edge or face) normal direction calculated based o...
SpatialDomains::GeometrySharedPtr GetGeom() const
SpatialDomains::GeometrySharedPtr m_geom
DNekMatSharedPtr BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
void ComputeLaplacianMetric()
void ComputeQuadratureMetric()
SpatialDomains::GeomFactorsSharedPtr m_metricinfo
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
DNekMatSharedPtr BuildTransformationMatrix(const DNekScalMatSharedPtr &r_bnd, const StdRegions::MatrixType matrixType)
virtual void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords)
Get the coordinates "coords" at the local coordinates "Lcoords".
virtual void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Forward transform from physical quadrature space stored in inarray and evaluate the expansion coeffic...
virtual void v_PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
Differentiate inarray in the three coordinate directions.
virtual void v_ComputeLaplacianMetric()
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
virtual void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int mode_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
DNekScalBlkMatSharedPtr CreateStaticCondMatrix(const MatrixKey &mkey)
virtual int v_GetCoordim()
virtual DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey)
virtual void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrate the physical point list inarray over region.
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey)
virtual void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Calculate the inner product of inarray with respect to the basis B=m_base0*m_base1*m_base2 and put in...
virtual NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &Lcoord, const Array< OneD, const NekDouble > &physvals)
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const
virtual void v_AlignVectorToCollapsedDir(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray)
virtual void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true)
void v_ComputeTraceNormal(const int face)
Compute the normal of a triangular face.
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdRegions::StdMatrixKey &mkey)
virtual LibUtilities::ShapeType v_DetShapeType() const
Return Shape of region, using ShapeType enum list.
virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey)
void GeneralMatrixOp_MatOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Calculates the inner product .
virtual void v_GetTracePhysMap(const int face, Array< OneD, int > &outarray)
Returns the physical values at the quadrature points of a face.
void v_DropLocStaticCondMatrix(const MatrixKey &mkey)
virtual NekDouble v_PhysEvaluate(const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &physvals)
DNekScalMatSharedPtr CreateMatrix(const MatrixKey &mkey)
virtual void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp)
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
virtual void v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
void IProductWRTBase_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &base2, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1, bool doCheckCollDir2)
virtual void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
void GetBoundaryMap(Array< OneD, unsigned int > &outarray)
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
LibUtilities::BasisType GetBasisType(const int dir) const
This function returns the type of basis used in the dir direction.
int NumBndryCoeffs(void) const
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
const LibUtilities::PointsKeyVector GetPointsKeys() const
DNekBlkMatSharedPtr GetStdStaticCondMatrix(const StdMatrixKey &mkey)
DNekScalBlkMatSharedPtr GetLocStaticCondMatrix(const LocalRegions::MatrixKey &mkey)
const LibUtilities::BasisKey GetTraceBasisKey(const int i, int k=-1) const
This function returns the basis key belonging to the i-th trace.
void IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
this function calculates the inner product of a given function f with the different modes of the expa...
void GetInteriorMap(Array< OneD, unsigned int > &outarray)
DNekMatSharedPtr GenMatrix(const StdMatrixKey &mkey)
LibUtilities::PointsType GetPointsType(const int dir) const
This function returns the type of quadrature points used in the dir direction.
int GetNumPoints(const int dir) const
This function returns the number of quadrature points in the dir direction.
void MultiplyByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Array< OneD, LibUtilities::BasisSharedPtr > m_base
const ConstFactorMap & GetConstFactors() const
LibUtilities::ShapeType GetShapeType() const
const VarCoeffMap & GetVarCoeffs() const
MatrixType GetMatrixType() const
NekDouble GetConstFactor(const ConstFactorType &factor) const
bool ConstFactorExists(const ConstFactorType &factor) const
LibUtilities::ShapeType DetShapeType() const
static void Dgemv(const char &trans, const int &m, const int &n, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = A x where A[m x n].
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
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.
int getNumberOfCoefficients(int Na)
void Interp2D(const BasisKey &fbasis0, const BasisKey &fbasis1, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, Array< OneD, NekDouble > &to)
this function interpolates a 2D function evaluated at the quadrature points of the 2D basis,...
std::vector< PointsKey > PointsKeyVector
@ eModified_B
Principle Modified Functions .
@ eModified_C
Principle Modified Functions .
@ eModified_A
Principle Modified Functions .
std::shared_ptr< GeomFactors > GeomFactorsSharedPtr
Pointer to a GeomFactors object.
GeomType
Indicates the type of element geometry.
@ eRegular
Geometry is straight-sided with constant geometric factors.
@ eNoGeomType
No type defined.
@ eMovingRegular
Currently unused.
@ eDeformed
Geometry is curved or has non-constant factors.
std::shared_ptr< TetGeom > TetGeomSharedPtr
std::shared_ptr< StdTetExp > StdTetExpSharedPtr
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
@ eInvLaplacianWithUnityMean
The above copyright notice and this permission notice shall be included.
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
std::shared_ptr< DNekMat > DNekMatSharedPtr
void Vsqrt(int n, const T *x, const int incx, T *y, const int incy)
sqrt y = sqrt(x)
void Svtsvtp(int n, const T alpha, const T *x, int incx, const T beta, const T *y, int incy, T *z, int incz)
vvtvvtp (scalar times vector plus scalar times vector):
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
void Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
svtvp (scalar times vector plus vector): z = alpha*x + y
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y
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.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
void Sdiv(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha/y.
void Vdiv(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x/y.
void Zero(int n, T *x, const int incx)
Zero vector.
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
void Vvtvvtp(int n, const T *v, int incv, const T *w, int incw, const T *x, int incx, const T *y, int incy, T *z, int incz)
vvtvvtp (vector times vector plus vector times vector):
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
scalarT< T > sqrt(scalarT< T > in)