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);
183 if(out_d0.num_elements())
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);
190 if(out_d1.num_elements())
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);
197 if(out_d2.num_elements())
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);
206 if(out_d0.num_elements())
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);
213 if(out_d1.num_elements())
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);
220 if(out_d2.num_elements())
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;
395 nquad2*order0*(order1+1)/2);
404 Vmath::Vmul(nqtot,&df[3*dir][0], 1,tmp1.get(),1,tmp2.get(),1);
405 Vmath::Vmul(nqtot,&df[3*dir+1][0],1,tmp1.get(),1,tmp3.get(),1);
406 Vmath::Vmul(nqtot,&df[3*dir+2][0],1,tmp1.get(),1,tmp4.get(),1);
410 Vmath::Smul(nqtot, df[3*dir ][0],tmp1.get(),1,tmp2.get(), 1);
411 Vmath::Smul(nqtot, df[3*dir+1][0],tmp1.get(),1,tmp3.get(), 1);
412 Vmath::Smul(nqtot, df[3*dir+2][0],tmp1.get(),1,tmp4.get(), 1);
415 const int nq01 = nquad0*nquad1;
416 const int nq12 = nquad1*nquad2;
418 for(j = 0; j < nquad2; ++j)
420 for(i = 0; i < nquad1; ++i)
423 &h0[0]+i*nquad0 + j*nq01,1);
425 &h1[0]+i*nquad0 + j*nq01,1);
427 &h2[0]+i*nquad0 + j*nq01,1);
429 &h3[0]+i*nquad0 + j*nq01,1);
433 for(i = 0; i < nquad0; i++)
440 &tmp3[0], 1, &h1[0], 1,
443 &tmp5[0], 1, &tmp5[0], 1);
453 &tmp4[0], 1, &h3[0], 1,
489 return StdTetExp::v_PhysEvaluate(Lcoord,physvals);
505 m_geom->GetLocCoords(coord,Lcoord);
508 return StdTetExp::v_PhysEvaluate(Lcoord,physvals);
520 ASSERTL1(Lcoords[0] <= -1.0 && Lcoords[0] >= 1.0 &&
521 Lcoords[1] <= -1.0 && Lcoords[1] >= 1.0 &&
522 Lcoords[2] <= -1.0 && Lcoords[2] >= 1.0,
523 "Local coordinates are not in region [-1,1]");
527 for(i = 0; i <
m_geom->GetCoordim(); ++i)
529 coords[i] =
m_geom->GetCoord(i,Lcoords);
559 m_base[2]->GetBasisKey());
566 2,
m_base[0]->GetPointsKey());
568 2,
m_base[1]->GetPointsKey());
570 2,
m_base[2]->GetPointsKey());
579 return m_geom->GetCoordim();
584 const std::vector<unsigned int > &nummodes,
585 const int mode_offset,
587 std::vector<LibUtilities::BasisType> &fromType)
589 boost::ignore_unused(fromType);
591 int data_order0 = nummodes[mode_offset];
592 int fillorder0 = min(
m_base[0]->GetNumModes(),data_order0);
593 int data_order1 = nummodes[mode_offset+1];
594 int order1 =
m_base[1]->GetNumModes();
595 int fillorder1 = min(order1,data_order1);
596 int data_order2 = nummodes[mode_offset+2];
597 int order2 =
m_base[2]->GetNumModes();
598 int fillorder2 = min(order2,data_order2);
610 "Extraction routine not set up for this basis");
613 "Extraction routine not set up for this basis");
616 for(j = 0; j < fillorder0; ++j)
618 for(i = 0; i < fillorder1-j; ++i)
622 cnt += data_order2-j-i;
627 for(i = fillorder1-j; i < data_order1-j; ++i)
629 cnt += data_order2-j-i;
632 for(i = fillorder1-j; i < order1-j; ++i)
641 ASSERTL0(
false,
"basis is either not set up or not "
652 int nquad0 =
m_base[0]->GetNumPoints();
653 int nquad1 =
m_base[1]->GetNumPoints();
654 int nquad2 =
m_base[2]->GetNumPoints();
666 if(outarray.num_elements()!=nq0*nq1)
671 for (
int i = 0; i < nquad0*nquad1; ++i)
682 if(outarray.num_elements()!=nq0*nq1)
688 for (
int k=0; k<nquad2; k++)
690 for(
int i = 0; i < nquad0; ++i)
692 outarray[k*nquad0+i] = (nquad0*nquad1*k)+i;
701 if(outarray.num_elements()!=nq0*nq1)
707 for(
int j = 0; j < nquad1*nquad2; ++j)
709 outarray[j] = nquad0-1 + j*nquad0;
717 if(outarray.num_elements() != nq0*nq1)
723 for(
int j = 0; j < nquad1*nquad2; ++j)
725 outarray[j] = j*nquad0;
730 ASSERTL0(
false,
"face value (> 3) is out of range");
746 for(
int i = 0; i < ptsKeys.size(); ++i)
770 for (i = 0; i < vCoordDim; ++i)
786 for (i = 0; i < vCoordDim; ++i)
788 normal[i][0] = -df[3*i+2][0];
795 for (i = 0; i < vCoordDim; ++i)
797 normal[i][0] = -df[3*i+1][0];
804 for (i = 0; i < vCoordDim; ++i)
806 normal[i][0] = df[3*i][0]+df[3*i+1][0]+
814 for(i = 0; i < vCoordDim; ++i)
816 normal[i][0] = -df[3*i][0];
821 ASSERTL0(
false,
"face is out of range (edge < 3)");
826 for (i = 0; i < vCoordDim; ++i)
828 fac += normal[i][0]*normal[i][0];
832 for (i = 0; i < vCoordDim; ++i)
842 int nq0 = ptsKeys[0].GetNumPoints();
843 int nq1 = ptsKeys[1].GetNumPoints();
844 int nq2 = ptsKeys[2].GetNumPoints();
875 for(j = 0; j < nq01; ++j)
877 normals[j] = -df[2][j]*jac[j];
878 normals[nqtot+j] = -df[5][j]*jac[j];
879 normals[2*nqtot+j] = -df[8][j]*jac[j];
883 points0 = ptsKeys[0];
884 points1 = ptsKeys[1];
890 for (j = 0; j < nq0; ++j)
892 for(k = 0; k < nq2; ++k)
896 -df[1][tmp]*jac[tmp];
897 normals[nqtot+j+k*nq0] =
898 -df[4][tmp]*jac[tmp];
899 normals[2*nqtot+j+k*nq0] =
900 -df[7][tmp]*jac[tmp];
901 faceJac[j+k*nq0] = jac[tmp];
905 points0 = ptsKeys[0];
906 points1 = ptsKeys[2];
912 for (j = 0; j < nq1; ++j)
914 for(k = 0; k < nq2; ++k)
916 int tmp = nq0-1+nq0*j+nq01*k;
918 (df[0][tmp]+df[1][tmp]+df[2][tmp])*
920 normals[nqtot+j+k*nq1] =
921 (df[3][tmp]+df[4][tmp]+df[5][tmp])*
923 normals[2*nqtot+j+k*nq1] =
924 (df[6][tmp]+df[7][tmp]+df[8][tmp])*
926 faceJac[j+k*nq1] = jac[tmp];
930 points0 = ptsKeys[1];
931 points1 = ptsKeys[2];
937 for (j = 0; j < nq1; ++j)
939 for(k = 0; k < nq2; ++k)
941 int tmp = j*nq0+nq01*k;
943 -df[0][tmp]*jac[tmp];
944 normals[nqtot+j+k*nq1] =
945 -df[3][tmp]*jac[tmp];
946 normals[2*nqtot+j+k*nq1] =
947 -df[6][tmp]*jac[tmp];
948 faceJac[j+k*nq1] = jac[tmp];
952 points0 = ptsKeys[1];
953 points1 = ptsKeys[2];
958 ASSERTL0(
false,
"face is out of range (face < 3)");
967 Vmath::Sdiv(nq_face, 1.0, &work[0], 1, &work[0], 1);
970 for(i = 0; i < vCoordDim; ++i)
977 Vmath::Vmul(nq_face,work,1,normal[i],1,normal[i],1);
984 Vmath::Vvtvp(nq_face,normal[i],1,normal[i],1,work,1,work,1);
992 Vmath::Vmul(nq_face,normal[i],1,work,1,normal[i],1);
1024 StdExpansion::LaplacianMatrixOp_MatFree(k1,k2,inarray,outarray,
1051 StdTetExp::v_SVVLaplacianFilter( array, mkey);
1078 returnval = StdTetExp::v_GenMatrix(mkey);
1176 int rows = deriv0.GetRows();
1177 int cols = deriv1.GetColumns();
1181 (*WeakDeriv) = df[3*dir][0]*deriv0
1182 + df[3*dir+1][0]*deriv1
1183 + df[3*dir+2][0]*deriv2;
1227 int rows = lap00.GetRows();
1228 int cols = lap00.GetColumns();
1233 (*lap) = gmat[0][0]*lap00
1238 + gmat[7][0]*(lap12 +
Transpose(lap12));
1253 int rows = LapMat.GetRows();
1254 int cols = LapMat.GetColumns();
1259 (*helm) = LapMat + factor*MassMat;
1377 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
1378 unsigned int exp_size[] = {nbdry, nint};
1379 unsigned int nblks = 2;
1391 goto UseLocRegionsMatrix;
1398 goto UseLocRegionsMatrix;
1403 factor = mat->Scale();
1404 goto UseStdRegionsMatrix;
1407 UseStdRegionsMatrix:
1422 UseLocRegionsMatrix:
1438 for(i = 0; i < nbdry; ++i)
1440 for(j = 0; j < nbdry; ++j)
1442 (*A)(i,j) = mat(bmap[i],bmap[j]);
1445 for(j = 0; j < nint; ++j)
1447 (*B)(i,j) = mat(bmap[i],imap[j]);
1451 for(i = 0; i < nint; ++i)
1453 for(j = 0; j < nbdry; ++j)
1455 (*C)(i,j) = mat(imap[i],bmap[j]);
1458 for(j = 0; j < nint; ++j)
1460 (*D)(i,j) = mat(imap[i],imap[j]);
1469 (*A) = (*A) - (*B)*(*C);
1494 return tmp->GetStdMatrix(mkey);
1519 if(inarray.get() == outarray.get())
1525 m_ncoeffs, tmp.get(), 1, 0.0, outarray.get(), 1);
1530 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
1547 int nquad0 =
m_base[0]->GetNumPoints();
1548 int nquad1 =
m_base[1]->GetNumPoints();
1549 int nquad2 =
m_base[2]->GetNumPoints();
1550 int nqtot = nquad0*nquad1*nquad2;
1552 ASSERTL1(wsp.num_elements() >= 6*nqtot,
1553 "Insufficient workspace size.");
1555 "Workspace not set up for ncoeffs > nqtot");
1582 StdExpansion3D::PhysTensorDeriv(inarray,wsp0,wsp1,wsp2);
1588 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
1589 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
1590 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
1591 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
1592 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
1593 Vmath::Vvtvp (nqtot,&metric22[0],1,&wsp2[0],1,&wsp5[0],1,&wsp5[0],1);
1614 const unsigned int dim = 3;
1620 for (
unsigned int i = 0; i < dim; ++i)
1622 for (
unsigned int j = i; j < dim; ++j)
1655 const unsigned int nquad0 =
m_base[0]->GetNumPoints();
1656 const unsigned int nquad1 =
m_base[1]->GetNumPoints();
1657 const unsigned int nquad2 =
m_base[2]->GetNumPoints();
1659 for(j = 0; j < nquad2; ++j)
1661 for(i = 0; i < nquad1; ++i)
1663 Vmath::Fill(nquad0, 4.0/(1.0-z1[i])/(1.0-z2[j]), &h0[0]+i*nquad0 + j*nquad0*nquad1,1);
1664 Vmath::Fill(nquad0, 2.0/(1.0-z1[i])/(1.0-z2[j]), &h1[0]+i*nquad0 + j*nquad0*nquad1,1);
1665 Vmath::Fill(nquad0, 2.0/(1.0-z2[j]), &h2[0]+i*nquad0 + j*nquad0*nquad1,1);
1666 Vmath::Fill(nquad0, (1.0+z1[i])/(1.0-z2[j]), &h3[0]+i*nquad0 + j*nquad0*nquad1,1);
1669 for(i = 0; i < nquad0; i++)
1671 Blas::Dscal(nquad1*nquad2, 1+z0[i], &h1[0]+i, nquad0);
1680 Vmath::Vadd(nqtot, &df[1][0], 1, &df[2][0], 1, &wsp4[0], 1);
1681 Vmath::Vvtvvtp(nqtot, &df[0][0], 1, &h0[0], 1, &wsp4[0], 1, &h1[0], 1, &wsp4[0], 1);
1683 Vmath::Vadd(nqtot, &df[4][0], 1, &df[5][0], 1, &wsp5[0], 1);
1684 Vmath::Vvtvvtp(nqtot, &df[3][0], 1, &h0[0], 1, &wsp5[0], 1, &h1[0], 1, &wsp5[0], 1);
1686 Vmath::Vadd(nqtot, &df[7][0], 1, &df[8][0], 1, &wsp6[0], 1);
1687 Vmath::Vvtvvtp(nqtot, &df[6][0], 1, &h0[0], 1, &wsp6[0], 1, &h1[0], 1, &wsp6[0], 1);
1690 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g0[0], 1);
1691 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g0[0], 1, &g0[0], 1);
1694 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp4[0], 1, &df[5][0], 1, &wsp5[0], 1, &g4[0], 1);
1695 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp6[0], 1, &g4[0], 1, &g4[0], 1);
1699 Vmath::Vvtvvtp(nqtot, &df[1][0], 1, &h2[0], 1, &df[2][0], 1, &h3[0], 1, &wsp7[0], 1);
1701 Vmath::Vvtvvtp(nqtot, &df[4][0], 1, &h2[0], 1, &df[5][0], 1, &h3[0], 1, &wsp8[0], 1);
1703 Vmath::Vvtvvtp(nqtot, &df[7][0], 1, &h2[0], 1, &df[8][0], 1, &h3[0], 1, &wsp9[0], 1);
1706 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp7[0], 1, &wsp5[0], 1, &wsp8[0], 1, &g3[0], 1);
1707 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp9[0], 1, &g3[0], 1, &g3[0], 1);
1711 Vmath::Vvtvvtp(nqtot, &wsp7[0], 1, &wsp7[0], 1, &wsp8[0], 1, &wsp8[0], 1, &g1[0], 1);
1712 Vmath::Vvtvp (nqtot, &wsp9[0], 1, &wsp9[0], 1, &g1[0], 1, &g1[0], 1);
1715 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp7[0], 1, &df[5][0], 1, &wsp8[0], 1, &g5[0], 1);
1716 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp9[0], 1, &g5[0], 1, &g5[0], 1);
1719 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &df[2][0], 1, &df[5][0], 1, &df[5][0], 1, &g2[0], 1);
1720 Vmath::Vvtvp (nqtot, &df[8][0], 1, &df[8][0], 1, &g2[0], 1, &g2[0], 1);
1725 Vmath::Svtsvtp(nqtot, df[0][0], &h0[0], 1, df[1][0] + df[2][0], &h1[0], 1, &wsp4[0], 1);
1727 Vmath::Svtsvtp(nqtot, df[3][0], &h0[0], 1, df[4][0] + df[5][0], &h1[0], 1, &wsp5[0], 1);
1729 Vmath::Svtsvtp(nqtot, df[6][0], &h0[0], 1, df[7][0] + df[8][0], &h1[0], 1, &wsp6[0], 1);
1732 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g0[0], 1);
1733 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g0[0], 1, &g0[0], 1);
1736 Vmath::Svtsvtp(nqtot, df[2][0], &wsp4[0], 1, df[5][0], &wsp5[0], 1, &g4[0], 1);
1737 Vmath::Svtvp (nqtot, df[8][0], &wsp6[0], 1, &g4[0], 1, &g4[0], 1);
1741 Vmath::Svtsvtp(nqtot, df[1][0], &h2[0], 1, df[2][0], &h3[0], 1, &wsp7[0], 1);
1743 Vmath::Svtsvtp(nqtot, df[4][0], &h2[0], 1, df[5][0], &h3[0], 1, &wsp8[0], 1);
1745 Vmath::Svtsvtp(nqtot, df[7][0], &h2[0], 1, df[8][0], &h3[0], 1, &wsp9[0], 1);
1748 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp7[0], 1, &wsp5[0], 1, &wsp8[0], 1, &g3[0], 1);
1749 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp9[0], 1, &g3[0], 1, &g3[0], 1);
1753 Vmath::Vvtvvtp(nqtot, &wsp7[0], 1, &wsp7[0], 1, &wsp8[0], 1, &wsp8[0], 1, &g1[0], 1);
1754 Vmath::Vvtvp (nqtot, &wsp9[0], 1, &wsp9[0], 1, &g1[0], 1, &g1[0], 1);
1757 Vmath::Svtsvtp(nqtot, df[2][0], &wsp7[0], 1, df[5][0], &wsp8[0], 1, &g5[0], 1);
1758 Vmath::Svtvp (nqtot, df[8][0], &wsp9[0], 1, &g5[0], 1, &g5[0], 1);
1761 Vmath::Fill(nqtot, df[2][0]*df[2][0] + df[5][0]*df[5][0] + df[8][0]*df[8][0], &g2[0], 1);
1764 for (
unsigned int i = 0; i < dim; ++i)
1766 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.
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
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_GetFacePhysMap(const int face, Array< OneD, int > &outarray)
Returns the physical values at the quadrature points of a face.
void v_ComputeFaceNormal(const int face)
Compute the normal of a triangular face.
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_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true)
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 .
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)
std::map< int, NormalVector > m_faceNormals
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)
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)
const LibUtilities::BasisKey DetFaceBasisKey(const int i, const int k) const
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
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*y.
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)