45 namespace LocalRegions
64 StdExpansion (Ba.GetNumModes()*Bb.GetNumModes()*Bc.GetNumModes(),3,Ba,Bb,Bc),
65 StdExpansion3D(Ba.GetNumModes()*Bb.GetNumModes()*Bc.GetNumModes(),Ba,Bb,Bc),
70 std::bind(&
HexExp::CreateMatrix, this, std::placeholders::_1),
71 std::string(
"HexExpMatrix")),
72 m_staticCondMatrixManager(
73 std::bind(&
HexExp::CreateStaticCondMatrix, this, std::placeholders::_1),
74 std::string(
"HexExpStaticCondMatrix"))
90 m_matrixManager(T.m_matrixManager),
91 m_staticCondMatrixManager(T.m_staticCondMatrixManager)
120 int nquad0 =
m_base[0]->GetNumPoints();
121 int nquad1 =
m_base[1]->GetNumPoints();
122 int nquad2 =
m_base[2]->GetNumPoints();
141 returnVal = StdHexExp::v_Integral(tmp);
166 int nquad0 =
m_base[0]->GetNumPoints();
167 int nquad1 =
m_base[1]->GetNumPoints();
168 int nquad2 =
m_base[2]->GetNumPoints();
169 int ntot = nquad0 * nquad1 * nquad2;
177 StdHexExp::v_PhysDeriv(inarray, Diff0, Diff1, Diff2);
181 if(out_d0.num_elements())
183 Vmath::Vmul (ntot,&df[0][0],1,&Diff0[0],1, &out_d0[0], 1);
184 Vmath::Vvtvp(ntot,&df[1][0],1,&Diff1[0],1, &out_d0[0], 1,
186 Vmath::Vvtvp(ntot,&df[2][0],1,&Diff2[0],1, &out_d0[0], 1,
190 if(out_d1.num_elements())
192 Vmath::Vmul (ntot,&df[3][0],1,&Diff0[0],1, &out_d1[0], 1);
193 Vmath::Vvtvp(ntot,&df[4][0],1,&Diff1[0],1, &out_d1[0], 1,
195 Vmath::Vvtvp(ntot,&df[5][0],1,&Diff2[0],1, &out_d1[0], 1,
199 if(out_d2.num_elements())
201 Vmath::Vmul (ntot,&df[6][0],1,&Diff0[0],1, &out_d2[0], 1);
202 Vmath::Vvtvp(ntot,&df[7][0],1,&Diff1[0],1, &out_d2[0], 1,
204 Vmath::Vvtvp(ntot,&df[8][0],1,&Diff2[0],1, &out_d2[0], 1,
210 if(out_d0.num_elements())
212 Vmath::Smul (ntot,df[0][0],&Diff0[0],1, &out_d0[0], 1);
213 Blas::Daxpy (ntot,df[1][0],&Diff1[0],1, &out_d0[0], 1);
214 Blas::Daxpy (ntot,df[2][0],&Diff2[0],1, &out_d0[0], 1);
217 if(out_d1.num_elements())
219 Vmath::Smul (ntot,df[3][0],&Diff0[0],1, &out_d1[0], 1);
220 Blas::Daxpy (ntot,df[4][0],&Diff1[0],1, &out_d1[0], 1);
221 Blas::Daxpy (ntot,df[5][0],&Diff2[0],1, &out_d1[0], 1);
224 if(out_d2.num_elements())
226 Vmath::Smul (ntot,df[6][0],&Diff0[0],1, &out_d2[0], 1);
227 Blas::Daxpy (ntot,df[7][0],&Diff1[0],1, &out_d2[0], 1);
228 Blas::Daxpy (ntot,df[8][0],&Diff2[0],1, &out_d2[0], 1);
270 ASSERTL1(
false,
"input dir is out of range");
284 int nquad0 =
m_base[0]->GetNumPoints();
285 int nquad1 =
m_base[1]->GetNumPoints();
286 int nquad2 =
m_base[2]->GetNumPoints();
287 int ntot = nquad0 * nquad1 * nquad2;
295 StdHexExp::v_PhysDeriv(inarray, Diff0, Diff1, Diff2);
329 if(
m_base[0]->Collocation() &&
m_base[1]->Collocation()
330 &&
m_base[2]->Collocation())
405 bool multiplybyweights)
407 int nquad0 =
m_base[0]->GetNumPoints();
408 int nquad1 =
m_base[1]->GetNumPoints();
409 int nquad2 =
m_base[2]->GetNumPoints();
410 int order0 =
m_base[0]->GetNumModes();
411 int order1 =
m_base[1]->GetNumModes();
414 order0*order1*nquad2);
416 if(multiplybyweights)
432 inarray,outarray,wsp,
472 ASSERTL1((dir==0)||(dir==1)||(dir==2),
"Invalid direction.");
474 const int nq0 =
m_base[0]->GetNumPoints();
475 const int nq1 =
m_base[1]->GetNumPoints();
476 const int nq2 =
m_base[2]->GetNumPoints();
477 const int nq = nq0*nq1*nq2;
478 const int nm0 =
m_base[0]->GetNumModes();
479 const int nm1 =
m_base[1]->GetNumModes();
496 Vmath::Vmul(nq,&df[3*dir][0], 1,tmp1.get(),1,tmp2.get(),1);
497 Vmath::Vmul(nq,&df[3*dir+1][0],1,tmp1.get(),1,tmp3.get(),1);
498 Vmath::Vmul(nq,&df[3*dir+2][0],1,tmp1.get(),1,tmp4.get(),1);
502 Vmath::Smul(nq, df[3*dir][0], tmp1.get(),1,tmp2.get(), 1);
503 Vmath::Smul(nq, df[3*dir+1][0],tmp1.get(),1,tmp3.get(), 1);
504 Vmath::Smul(nq, df[3*dir+2][0],tmp1.get(),1,tmp4.get(), 1);
556 ASSERTL1(
false,
"input dir is out of range");
565 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
581 const int nq0 =
m_base[0]->GetNumPoints();
582 const int nq1 =
m_base[1]->GetNumPoints();
583 const int nq2 =
m_base[2]->GetNumPoints();
584 const int nq = nq0*nq1*nq2;
585 const int nm0 =
m_base[0]->GetNumModes();
586 const int nm1 =
m_base[1]->GetNumModes();
604 Vmath::Vmul(nq,&dfdir[0][0],1,tmp1.get(),1,tmp2.get(),1);
605 Vmath::Vmul(nq,&dfdir[1][0],1,tmp1.get(),1,tmp3.get(),1);
606 Vmath::Vmul(nq,&dfdir[2][0],1,tmp1.get(),1,tmp4.get(),1);
647 return StdHexExp::v_PhysEvaluate(Lcoord,physvals);
657 m_geom->GetLocCoords(coord,Lcoord);
658 return StdHexExp::v_PhysEvaluate(Lcoord, physvals);
666 m_base[2]->GetBasisKey());
673 2,
m_base[0]->GetPointsKey());
675 2,
m_base[1]->GetPointsKey());
677 2,
m_base[2]->GetPointsKey());
696 ASSERTL1(Lcoords[0] >= -1.0 && Lcoords[0] <= 1.0 &&
697 Lcoords[1] >= -1.0 && Lcoords[1] <= 1.0 &&
698 Lcoords[2] >= -1.0 && Lcoords[2] <= 1.0,
699 "Local coordinates are not in region [-1,1]");
703 for(i = 0; i <
m_geom->GetCoordim(); ++i)
705 coords[i] =
m_geom->GetCoord(i,Lcoords);
730 const std::vector<unsigned int > &nummodes,
731 const int mode_offset,
733 std::vector<LibUtilities::BasisType> &fromType)
735 int data_order0 = nummodes[mode_offset];
736 int fillorder0 = min(
m_base[0]->GetNumModes(),data_order0);
737 int data_order1 = nummodes[mode_offset+1];
738 int order1 =
m_base[1]->GetNumModes();
739 int fillorder1 = min(order1,data_order1);
740 int data_order2 = nummodes[mode_offset+2];
741 int order2 =
m_base[2]->GetNumModes();
742 int fillorder2 = min(order2,data_order2);
754 fromType[0], data_order0,
m_base[0]->GetPointsKey()),
756 fromType[1], data_order1,
m_base[1]->GetPointsKey()),
758 fromType[2], data_order2,
m_base[2]->GetPointsKey()));
761 m_base[2]->GetBasisKey());
769 Vmath::Vcopy(tmpOut.num_elements(), &tmpOut[0], 1, coeffs, 1);
784 "Extraction routine not set up for this basis");
787 "Extraction routine not set up for this basis");
790 for(j = 0; j < fillorder0; ++j)
792 for(i = 0; i < fillorder1; ++i)
801 for(i = fillorder1; i < data_order1; ++i)
806 for(i = fillorder1; i < order1; ++i)
834 ASSERTL0(
false,
"basis is either not set up or not "
852 int nquad0 =
m_base[0]->GetNumPoints();
853 int nquad1 =
m_base[1]->GetNumPoints();
854 int nquad2 =
m_base[2]->GetNumPoints();
866 if(outarray.num_elements()!=nq0*nq1)
871 for (
int i = 0; i < nquad0*nquad1; ++i)
881 if(outarray.num_elements()!=nq0*nq1)
887 for (
int k = 0; k < nquad2; k++)
889 for(
int i = 0; i < nquad0; ++i)
891 outarray[k*nquad0 + i] = nquad0*nquad1*k + i;
900 if(outarray.num_elements()!=nq0*nq1)
905 for (
int i = 0; i < nquad1*nquad2; i++)
907 outarray[i] = nquad0-1 + i*nquad0;
915 if(outarray.num_elements()!=nq0*nq1)
920 for (
int k = 0; k < nquad2; k++)
922 for (
int i = 0; i < nquad0; i++)
924 outarray[k*nquad0 + i] = (nquad0*(nquad1-1))+(k*nquad0*nquad1) + i;
933 if(outarray.num_elements()!=nq0*nq1)
938 for (
int i = 0; i < nquad1*nquad2; i++)
940 outarray[i] = i*nquad0;
947 if(outarray.num_elements()!=nq0*nq1)
952 for (
int i = 0; i < nquad0*nquad1; i++)
954 outarray[i] = nquad0*nquad1*(nquad2-1) + i;
959 ASSERTL0(
false,
"face value (> 5) is out of range");
973 for(i = 0; i < ptsKeys.size(); ++i)
996 for (i = 0; i < vCoordDim; ++i)
1008 for(i = 0; i < vCoordDim; ++i)
1010 normal[i][0] = -df[3*i+2][0];
1014 for(i = 0; i < vCoordDim; ++i)
1016 normal[i][0] = -df[3*i+1][0];
1020 for(i = 0; i < vCoordDim; ++i)
1022 normal[i][0] = df[3*i][0];
1026 for(i = 0; i < vCoordDim; ++i)
1028 normal[i][0] = df[3*i+1][0];
1032 for(i = 0; i < vCoordDim; ++i)
1034 normal[i][0] = -df[3*i][0];
1038 for(i = 0; i < vCoordDim; ++i)
1040 normal[i][0] = df[3*i+2][0];
1044 ASSERTL0(
false,
"face is out of range (edge < 5)");
1049 for(i =0 ; i < vCoordDim; ++i)
1051 fac += normal[i][0]*normal[i][0];
1053 fac = 1.0/sqrt(fac);
1054 for (i = 0; i < vCoordDim; ++i)
1056 Vmath::Fill(nq_face,fac*normal[i][0],normal[i],1);
1064 int nqe0 = ptsKeys[0].GetNumPoints();
1065 int nqe1 = ptsKeys[0].GetNumPoints();
1066 int nqe2 = ptsKeys[0].GetNumPoints();
1067 int nqe01 = nqe0*nqe1;
1068 int nqe02 = nqe0*nqe2;
1069 int nqe12 = nqe1*nqe2;
1072 if (face == 0 || face == 5)
1076 else if (face == 1 || face == 3)
1097 for(j = 0; j < nqe; ++j)
1099 normals[j] = -df[2][j]*jac[j];
1100 normals[nqe+j] = -df[5][j]*jac[j];
1101 normals[2*nqe+j] = -df[8][j]*jac[j];
1102 faceJac[j] = jac[j];
1105 points0 = ptsKeys[0];
1106 points1 = ptsKeys[1];
1109 for (j = 0; j < nqe0; ++j)
1111 for(k = 0; k < nqe2; ++k)
1113 int idx = j + nqe01*k;
1114 normals[j+k*nqe0] = -df[1][idx]*jac[idx];
1115 normals[nqe+j+k*nqe0] = -df[4][idx]*jac[idx];
1116 normals[2*nqe+j+k*nqe0] = -df[7][idx]*jac[idx];
1117 faceJac[j+k*nqe0] = jac[idx];
1120 points0 = ptsKeys[0];
1121 points1 = ptsKeys[2];
1124 for (j = 0; j < nqe1; ++j)
1126 for(k = 0; k < nqe2; ++k)
1128 int idx = nqe0-1+nqe0*j+nqe01*k;
1129 normals[j+k*nqe1] = df[0][idx]*jac[idx];
1130 normals[nqe+j+k*nqe1] = df[3][idx]*jac[idx];
1131 normals[2*nqe+j+k*nqe1] = df[6][idx]*jac[idx];
1132 faceJac[j+k*nqe1] = jac[idx];
1135 points0 = ptsKeys[1];
1136 points1 = ptsKeys[2];
1139 for (j = 0; j < nqe0; ++j)
1141 for(k = 0; k < nqe2; ++k)
1143 int idx = nqe0*(nqe1-1)+j+nqe01*k;
1144 normals[j+k*nqe0] = df[1][idx]*jac[idx];
1145 normals[nqe+j+k*nqe0] = df[4][idx]*jac[idx];
1146 normals[2*nqe+j+k*nqe0] = df[7][idx]*jac[idx];
1147 faceJac[j+k*nqe0] = jac[idx];
1150 points0 = ptsKeys[0];
1151 points1 = ptsKeys[2];
1154 for (j = 0; j < nqe1; ++j)
1156 for(k = 0; k < nqe2; ++k)
1158 int idx = j*nqe0+nqe01*k;
1159 normals[j+k*nqe1] = -df[0][idx]*jac[idx];
1160 normals[nqe+j+k*nqe1] = -df[3][idx]*jac[idx];
1161 normals[2*nqe+j+k*nqe1] = -df[6][idx]*jac[idx];
1162 faceJac[j+k*nqe1] = jac[idx];
1165 points0 = ptsKeys[1];
1166 points1 = ptsKeys[2];
1169 for (j = 0; j < nqe01; ++j)
1171 int idx = j+nqe01*(nqe2-1);
1172 normals[j] = df[2][idx]*jac[idx];
1173 normals[nqe+j] = df[5][idx]*jac[idx];
1174 normals[2*nqe+j] = df[8][idx]*jac[idx];
1175 faceJac[j] = jac[idx];
1177 points0 = ptsKeys[0];
1178 points1 = ptsKeys[1];
1181 ASSERTL0(
false,
"face is out of range (face < 5)");
1201 Vmath::Vmul(nq_face,work,1,normal[i],1,normal[i],1);
1208 Vmath::Vvtvp(nq_face,normal[i],1, normal[i],1,work,1,work,1);
1216 Vmath::Vmul(nq_face,normal[i],1,work,1,normal[i],1);
1229 StdExpansion::MassMatrixOp_MatFree(inarray,outarray,mkey);
1247 StdExpansion::LaplacianMatrixOp_MatFree(k1,k2,inarray,outarray,
1257 StdExpansion::WeakDerivMatrixOp_MatFree(i,inarray,outarray,mkey);
1265 StdExpansion::WeakDirectionalDerivMatrixOp_MatFree(inarray,
1274 StdExpansion::MassLevelCurvatureMatrixOp_MatFree(inarray,
1320 if(inarray.get() == outarray.get())
1326 m_ncoeffs, tmp.get(), 1, 0.0, outarray.get(), 1);
1331 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
1351 int n_coeffs = inarray.num_elements();
1352 int nmodes0 =
m_base[0]->GetNumModes();
1353 int nmodes1 =
m_base[1]->GetNumModes();
1354 int nmodes2 =
m_base[2]->GetNumModes();
1355 int numMax = nmodes0;
1385 b0, b1, b2, coeff_tmp2,
1386 bortho0, bortho1, bortho2, coeff);
1390 int cnt = 0, cnt2 = 0;
1392 for (
int u = 0; u < numMin+1; ++u)
1394 for (
int i = 0; i < numMin; ++i)
1397 tmp = coeff+cnt+cnt2,1,
1398 tmp2 = coeff_tmp1+cnt,1);
1404 tmp3 = coeff_tmp1,1,
1405 tmp4 = coeff_tmp2+cnt2,1);
1407 cnt2 = u*nmodes0*nmodes1;
1411 bortho0, bortho1, bortho2, coeff_tmp2,
1412 b0, b1, b2, outarray);
1438 StdHexExp::v_SVVLaplacianFilter( array, mkey);
1464 returnval = StdHexExp::v_GenMatrix(mkey);
1481 return tmp->GetStdMatrix(mkey);
1491 "Geometric information is not set up");
1584 int rows = deriv0.GetRows();
1585 int cols = deriv1.GetColumns();
1590 (*WeakDeriv) = df[3*dir ][0]*deriv0
1591 + df[3*dir+1][0]*deriv1
1592 + df[3*dir+2][0]*deriv2;
1638 int rows = lap00.GetRows();
1639 int cols = lap00.GetColumns();
1644 (*lap) = gmat[0][0]*lap00
1649 + gmat[7][0]*(lap12 +
Transpose(lap12));
1666 int rows = LapMat.GetRows();
1667 int cols = LapMat.GetColumns();
1672 (*helm) = LapMat + lambda*MassMat;
1792 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
1793 unsigned int exp_size[] = {nbdry,nint};
1794 unsigned int nblks = 2;
1805 goto UseLocRegionsMatrix;
1812 goto UseLocRegionsMatrix;
1817 factor = mat->Scale();
1818 goto UseStdRegionsMatrix;
1821 UseStdRegionsMatrix:
1835 UseLocRegionsMatrix:
1851 for(i = 0; i < nbdry; ++i)
1853 for(j = 0; j < nbdry; ++j)
1855 (*A)(i,j) = mat(bmap[i],bmap[j]);
1858 for(j = 0; j < nint; ++j)
1860 (*B)(i,j) = mat(bmap[i],imap[j]);
1864 for(i = 0; i < nint; ++i)
1866 for(j = 0; j < nbdry; ++j)
1868 (*C)(i,j) = mat(imap[i],bmap[j]);
1871 for(j = 0; j < nint; ++j)
1873 (*D)(i,j) = mat(imap[i],imap[j]);
1882 (*A) = (*A) - (*B)*(*C);
1927 int nquad0 =
m_base[0]->GetNumPoints();
1928 int nquad1 =
m_base[1]->GetNumPoints();
1929 int nquad2 =
m_base[2]->GetNumPoints();
1930 int nqtot = nquad0*nquad1*nquad2;
1932 ASSERTL1(wsp.num_elements() >= 6*nqtot,
1933 "Insufficient workspace size.");
1956 StdExpansion3D::PhysTensorDeriv(inarray,wsp0,wsp1,wsp2);
1962 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
1963 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
1964 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
1965 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
1966 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
1967 Vmath::Vvtvp (nqtot,&metric22[0],1,&wsp2[0],1,&wsp5[0],1,&wsp5[0],1);
1988 const unsigned int dim = 3;
1994 for (
unsigned int i = 0; i < dim; ++i)
1996 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::Geometry3DSharedPtr GetGeom3D() const
SpatialDomains::GeometrySharedPtr GetGeom() const
SpatialDomains::GeometrySharedPtr m_geom
DNekMatSharedPtr BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
void ComputeLaplacianMetric()
void ComputeGmatcdotMF(const Array< TwoD, const NekDouble > &df, const Array< OneD, const NekDouble > &direction, Array< OneD, Array< OneD, NekDouble > > &dfdir)
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)
void IProductWRTDerivBase_MatOp(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
void IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Calculates the inner product .
virtual NekDouble v_PhysEvaluate(const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &physvals)
This function evaluates the expansion at a single (arbitrary) point of the domain.
virtual void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp)
virtual NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &Lcoord, const Array< OneD, const NekDouble > &physvals)
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)
virtual void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual void v_WeakDirectionalDerivMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
virtual void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true)
Calculate the inner product of inarray with respect to the given basis B = base0 * base1 * base2.
virtual LibUtilities::ShapeType v_DetShapeType() const
Return the region shape using the enum-list of ShapeType.
void v_DropLocStaticCondMatrix(const MatrixKey &mkey)
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
void IProductWRTDirectionalDerivBase_SumFac(const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
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)
Calculate the derivative of the physical points.
void v_ComputeFaceNormal(const int face)
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdRegions::StdMatrixKey &mkey)
DNekScalBlkMatSharedPtr CreateStaticCondMatrix(const MatrixKey &mkey)
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 DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey)
virtual void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const
virtual void v_ComputeLaplacianMetric()
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const
virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey)
void v_GeneralMatrixOp_MatOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual void v_MassLevelCurvatureMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, 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 elements basis.
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
void v_PhysDirectionalDeriv(const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &direction, Array< OneD, NekDouble > &out)
Physical derivative along a direction vector.
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey)
virtual void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_GetFacePhysMap(const int face, Array< OneD, int > &outarray)
DNekScalMatSharedPtr CreateMatrix(const MatrixKey &mkey)
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrate the physical point list inarray over region.
virtual bool v_GetFaceDGForwards(const int i) const
virtual void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords)
Retrieves the physical coordinates of a given set of reference coordinates.
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...
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
void GetInteriorMap(Array< OneD, unsigned int > &outarray)
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Backward transformation from coefficient space to physical space.
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.
void FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Forward transformation from physical space to coefficient space.
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
void PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1=NullNekDouble1DArray, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray)
Array< OneD, LibUtilities::BasisSharedPtr > m_base
Class representing a hexehedral element in reference space.
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
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 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 Interp3D(const BasisKey &fbasis0, const BasisKey &fbasis1, const BasisKey &fbasis2, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, const BasisKey &tbasis2, Array< OneD, NekDouble > &to)
this function interpolates a 3D function evaluated at the quadrature points of the 3D basis,...
void InterpCoeff3D(const BasisKey &fbasis0, const BasisKey &fbasis1, const BasisKey &fbasis2, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, const BasisKey &tbasis2, Array< OneD, NekDouble > &to)
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
@ eGaussLobattoLegendre
1D Gauss-Lobatto-Legendre quadrature points
@ eOrtho_A
Principle Orthogonal Functions .
@ eGLL_Lagrange
Lagrange for SEM basis .
@ 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< HexGeom > HexGeomSharedPtr
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
@ eInvLaplacianWithUnityMean
std::shared_ptr< StdHexExp > StdHexExpSharedPtr
@ eDir1FwdDir1_Dir2FwdDir2
@ eDir1BwdDir1_Dir2BwdDir2
@ eDir1BwdDir2_Dir2FwdDir1
@ eDir1FwdDir2_Dir2BwdDir1
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
static Array< OneD, NekDouble > NullNekDouble1DArray
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 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 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)