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"))
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)
int GetNumPoints() const
Return points order at which basis is defined.
void ComputeLaplacianMetric()
virtual DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey)
const VarCoeffMap & GetVarCoeffs() const
DNekMatSharedPtr GenMatrix(const StdMatrixKey &mkey)
#define ASSERTL0(condition, msg)
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrate the physical point list inarray over region.
void GeneralMatrixOp_MatOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
std::vector< PointsKey > PointsKeyVector
Principle Modified Functions .
DNekMatSharedPtr BuildTransformationMatrix(const DNekScalMatSharedPtr &r_bnd, const StdRegions::MatrixType matrixType)
virtual void v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
int GetNumPoints(const int dir) const
This function returns the number of quadrature points in the dir direction.
void Vsqrt(int n, const T *x, const int incx, T *y, const int incy)
sqrt y = sqrt(x)
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
void MultiplyByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
int NumBndryCoeffs(void) const
std::shared_ptr< TetGeom > TetGeomSharedPtr
SpatialDomains::GeometrySharedPtr GetGeom() const
std::shared_ptr< GeomFactors > GeomFactorsSharedPtr
Pointer to a GeomFactors object.
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
virtual NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &Lcoord, const Array< OneD, const NekDouble > &physvals)
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 Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
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
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const
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
Principle Modified Functions .
SpatialDomains::GeomFactorsSharedPtr m_metricinfo
void Sdiv(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha/y.
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...
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
DNekMatSharedPtr BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
LibUtilities::ShapeType DetShapeType() const
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...
std::shared_ptr< DNekMat > DNekMatSharedPtr
virtual void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
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.
SpatialDomains::GeometrySharedPtr m_geom
MatrixType GetMatrixType() const
DNekScalBlkMatSharedPtr GetLocStaticCondMatrix(const LocalRegions::MatrixKey &mkey)
PointsKey GetPointsKey() const
Return distribution of points.
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
std::shared_ptr< StdTetExp > StdTetExpSharedPtr
DNekScalBlkMatSharedPtr CreateStaticCondMatrix(const MatrixKey &mkey)
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
const LibUtilities::PointsKeyVector GetPointsKeys() const
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::shared_ptr< StdExpansion > StdExpansionSharedPtr
DNekBlkMatSharedPtr GetStdStaticCondMatrix(const 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 DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey)
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
int getNumberOfCoefficients(int Na)
Principle Modified Functions .
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
virtual void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true)
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
void GetInteriorMap(Array< OneD, unsigned int > &outarray)
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
Defines a specification for a set of points.
void v_ComputeFaceNormal(const int face)
Compute the normal of a triangular face.
virtual void v_GetFacePhysMap(const int face, Array< OneD, int > &outarray)
Returns the physical values at the quadrature points of a face.
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].
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdRegions::StdMatrixKey &mkey)
std::map< int, NormalVector > m_faceNormals
virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey)
NekDouble GetConstFactor(const ConstFactorType &factor) const
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
virtual void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp)
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
virtual NekDouble v_PhysEvaluate(const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &physvals)
const ConstFactorMap & GetConstFactors() const
virtual int v_GetCoordim()
virtual void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int mode_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
LibUtilities::PointsType GetPointsType(const int dir) const
This function returns the type of quadrature points used in the dir direction.
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
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):
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Calculates the inner product .
bool ConstFactorExists(const ConstFactorType &factor) const
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
Geometry is straight-sided with constant geometric factors.
LibUtilities::BasisType GetBasisType(const int dir) const
This function returns the type of basis used in the dir direction.
const LibUtilities::BasisKey DetFaceBasisKey(const int i, const int k) const
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const
void ComputeQuadratureMetric()
virtual void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords)
Get the coordinates "coords" at the local coordinates "Lcoords".
DNekScalMatSharedPtr CreateMatrix(const MatrixKey &mkey)
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):
virtual LibUtilities::ShapeType v_DetShapeType() const
Return Shape of region, using ShapeType enum list.
StdExpansion()
Default Constructor.
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
GeomType
Indicates the type of element geometry.
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.
void Zero(int n, T *x, const int incx)
Zero vector.
virtual void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Array< OneD, LibUtilities::BasisSharedPtr > m_base
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)
Geometry is curved or has non-constant factors.
LibUtilities::ShapeType GetShapeType() const
void GetBoundaryMap(Array< OneD, unsigned int > &outarray)
void v_DropLocStaticCondMatrix(const MatrixKey &mkey)
Describes the specification for a Basis.
virtual void v_ComputeLaplacianMetric()
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
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 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.