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);
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,
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,
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,
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);
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);
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();
524 ASSERTL1((dir==0)||(dir==1)||(dir==2),
"Invalid direction.");
526 const int nq0 =
m_base[0]->GetNumPoints();
527 const int nq1 =
m_base[1]->GetNumPoints();
528 const int nq2 =
m_base[2]->GetNumPoints();
529 const int nq = nq0*nq1*nq2;
544 Vmath::Vmul(nq,&df[3*dir][0], 1,tmp1.get(),1,tmp2.get(),1);
545 Vmath::Vmul(nq,&df[3*dir+1][0],1,tmp1.get(),1,tmp3.get(),1);
546 Vmath::Vmul(nq,&df[3*dir+2][0],1,tmp1.get(),1,tmp4.get(),1);
550 Vmath::Smul(nq, df[3*dir][0], tmp1.get(),1,tmp2.get(), 1);
551 Vmath::Smul(nq, df[3*dir+1][0],tmp1.get(),1,tmp3.get(), 1);
552 Vmath::Smul(nq, df[3*dir+2][0],tmp1.get(),1,tmp4.get(), 1);
584 ASSERTL1(
false,
"input dir is out of range");
593 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
609 const int nq0 =
m_base[0]->GetNumPoints();
610 const int nq1 =
m_base[1]->GetNumPoints();
611 const int nq2 =
m_base[2]->GetNumPoints();
612 const int nq = nq0*nq1*nq2;
613 const int nm0 =
m_base[0]->GetNumModes();
614 const int nm1 =
m_base[1]->GetNumModes();
632 Vmath::Vmul(nq,&dfdir[0][0],1,tmp1.get(),1,tmp2.get(),1);
633 Vmath::Vmul(nq,&dfdir[1][0],1,tmp1.get(),1,tmp3.get(),1);
634 Vmath::Vmul(nq,&dfdir[2][0],1,tmp1.get(),1,tmp4.get(),1);
675 return StdHexExp::v_PhysEvaluate(Lcoord,physvals);
685 m_geom->GetLocCoords(coord,Lcoord);
686 return StdHexExp::v_PhysEvaluate(Lcoord, physvals);
694 m_base[2]->GetBasisKey());
701 2,
m_base[0]->GetPointsKey());
703 2,
m_base[1]->GetPointsKey());
705 2,
m_base[2]->GetPointsKey());
724 ASSERTL1(Lcoords[0] >= -1.0 && Lcoords[0] <= 1.0 &&
725 Lcoords[1] >= -1.0 && Lcoords[1] <= 1.0 &&
726 Lcoords[2] >= -1.0 && Lcoords[2] <= 1.0,
727 "Local coordinates are not in region [-1,1]");
731 for(i = 0; i <
m_geom->GetCoordim(); ++i)
733 coords[i] =
m_geom->GetCoord(i,Lcoords);
758 const std::vector<unsigned int > &nummodes,
759 const int mode_offset,
761 std::vector<LibUtilities::BasisType> &fromType)
763 int data_order0 = nummodes[mode_offset];
764 int fillorder0 = min(
m_base[0]->GetNumModes(),data_order0);
765 int data_order1 = nummodes[mode_offset+1];
766 int order1 =
m_base[1]->GetNumModes();
767 int fillorder1 = min(order1,data_order1);
768 int data_order2 = nummodes[mode_offset+2];
769 int order2 =
m_base[2]->GetNumModes();
770 int fillorder2 = min(order2,data_order2);
782 fromType[0], data_order0,
m_base[0]->GetPointsKey()),
784 fromType[1], data_order1,
m_base[1]->GetPointsKey()),
786 fromType[2], data_order2,
m_base[2]->GetPointsKey()));
789 m_base[2]->GetBasisKey());
812 "Extraction routine not set up for this basis");
815 "Extraction routine not set up for this basis");
818 for(j = 0; j < fillorder0; ++j)
820 for(i = 0; i < fillorder1; ++i)
829 for(i = fillorder1; i < data_order1; ++i)
834 for(i = fillorder1; i < order1; ++i)
862 ASSERTL0(
false,
"basis is either not set up or not "
880 int nquad0 =
m_base[0]->GetNumPoints();
881 int nquad1 =
m_base[1]->GetNumPoints();
882 int nquad2 =
m_base[2]->GetNumPoints();
894 if(outarray.size()!=nq0*nq1)
899 for (
int i = 0; i < nquad0*nquad1; ++i)
909 if(outarray.size()!=nq0*nq1)
915 for (
int k = 0; k < nquad2; k++)
917 for(
int i = 0; i < nquad0; ++i)
919 outarray[k*nquad0 + i] = nquad0*nquad1*k + i;
928 if(outarray.size()!=nq0*nq1)
933 for (
int i = 0; i < nquad1*nquad2; i++)
935 outarray[i] = nquad0-1 + i*nquad0;
943 if(outarray.size()!=nq0*nq1)
948 for (
int k = 0; k < nquad2; k++)
950 for (
int i = 0; i < nquad0; i++)
952 outarray[k*nquad0 + i] = (nquad0*(nquad1-1))+(k*nquad0*nquad1) + i;
961 if(outarray.size()!=nq0*nq1)
966 for (
int i = 0; i < nquad1*nquad2; i++)
968 outarray[i] = i*nquad0;
975 if(outarray.size()!=nq0*nq1)
980 for (
int i = 0; i < nquad0*nquad1; i++)
982 outarray[i] = nquad0*nquad1*(nquad2-1) + i;
987 ASSERTL0(
false,
"face value (> 5) is out of range");
1001 for(i = 0; i < ptsKeys.size(); ++i)
1024 for (i = 0; i < vCoordDim; ++i)
1029 size_t nqb = nq_face;
1042 for(i = 0; i < vCoordDim; ++i)
1044 normal[i][0] = -df[3*i+2][0];
1048 for(i = 0; i < vCoordDim; ++i)
1050 normal[i][0] = -df[3*i+1][0];
1054 for(i = 0; i < vCoordDim; ++i)
1056 normal[i][0] = df[3*i][0];
1060 for(i = 0; i < vCoordDim; ++i)
1062 normal[i][0] = df[3*i+1][0];
1066 for(i = 0; i < vCoordDim; ++i)
1068 normal[i][0] = -df[3*i][0];
1072 for(i = 0; i < vCoordDim; ++i)
1074 normal[i][0] = df[3*i+2][0];
1078 ASSERTL0(
false,
"face is out of range (edge < 5)");
1083 for(i =0 ; i < vCoordDim; ++i)
1085 fac += normal[i][0]*normal[i][0];
1087 fac = 1.0/
sqrt(fac);
1090 for (i = 0; i < vCoordDim; ++i)
1092 Vmath::Fill(nq_face, fac*normal[i][0], normal[i], 1);
1100 int nqe0 = ptsKeys[0].GetNumPoints();
1101 int nqe1 = ptsKeys[0].GetNumPoints();
1102 int nqe2 = ptsKeys[0].GetNumPoints();
1103 int nqe01 = nqe0*nqe1;
1104 int nqe02 = nqe0*nqe2;
1105 int nqe12 = nqe1*nqe2;
1108 if (face == 0 || face == 5)
1112 else if (face == 1 || face == 3)
1133 for(j = 0; j < nqe; ++j)
1135 normals[j] = -df[2][j]*jac[j];
1136 normals[nqe+j] = -df[5][j]*jac[j];
1137 normals[2*nqe+j] = -df[8][j]*jac[j];
1138 faceJac[j] = jac[j];
1141 points0 = ptsKeys[0];
1142 points1 = ptsKeys[1];
1145 for (j = 0; j < nqe0; ++j)
1147 for(k = 0; k < nqe2; ++k)
1149 int idx = j + nqe01*k;
1150 normals[j+k*nqe0] = -df[1][idx]*jac[idx];
1151 normals[nqe+j+k*nqe0] = -df[4][idx]*jac[idx];
1152 normals[2*nqe+j+k*nqe0] = -df[7][idx]*jac[idx];
1153 faceJac[j+k*nqe0] = jac[idx];
1156 points0 = ptsKeys[0];
1157 points1 = ptsKeys[2];
1160 for (j = 0; j < nqe1; ++j)
1162 for(k = 0; k < nqe2; ++k)
1164 int idx = nqe0-1+nqe0*j+nqe01*k;
1165 normals[j+k*nqe1] = df[0][idx]*jac[idx];
1166 normals[nqe+j+k*nqe1] = df[3][idx]*jac[idx];
1167 normals[2*nqe+j+k*nqe1] = df[6][idx]*jac[idx];
1168 faceJac[j+k*nqe1] = jac[idx];
1171 points0 = ptsKeys[1];
1172 points1 = ptsKeys[2];
1175 for (j = 0; j < nqe0; ++j)
1177 for(k = 0; k < nqe2; ++k)
1179 int idx = nqe0*(nqe1-1)+j+nqe01*k;
1180 normals[j+k*nqe0] = df[1][idx]*jac[idx];
1181 normals[nqe+j+k*nqe0] = df[4][idx]*jac[idx];
1182 normals[2*nqe+j+k*nqe0] = df[7][idx]*jac[idx];
1183 faceJac[j+k*nqe0] = jac[idx];
1186 points0 = ptsKeys[0];
1187 points1 = ptsKeys[2];
1190 for (j = 0; j < nqe1; ++j)
1192 for(k = 0; k < nqe2; ++k)
1194 int idx = j*nqe0+nqe01*k;
1195 normals[j+k*nqe1] = -df[0][idx]*jac[idx];
1196 normals[nqe+j+k*nqe1] = -df[3][idx]*jac[idx];
1197 normals[2*nqe+j+k*nqe1] = -df[6][idx]*jac[idx];
1198 faceJac[j+k*nqe1] = jac[idx];
1201 points0 = ptsKeys[1];
1202 points1 = ptsKeys[2];
1205 for (j = 0; j < nqe01; ++j)
1207 int idx = j+nqe01*(nqe2-1);
1208 normals[j] = df[2][idx]*jac[idx];
1209 normals[nqe+j] = df[5][idx]*jac[idx];
1210 normals[2*nqe+j] = df[8][idx]*jac[idx];
1211 faceJac[j] = jac[idx];
1213 points0 = ptsKeys[0];
1214 points1 = ptsKeys[1];
1217 ASSERTL0(
false,
"face is out of range (face < 5)");
1237 Vmath::Vmul(nq_face,work,1,normal[i],1,normal[i],1);
1244 Vmath::Vvtvp(nq_face,normal[i],1, normal[i],1,work,1,work,1);
1254 Vmath::Vmul(nq_face,normal[i],1,work,1,normal[i],1);
1267 StdExpansion::MassMatrixOp_MatFree(inarray,outarray,mkey);
1285 StdExpansion::LaplacianMatrixOp_MatFree(k1,k2,inarray,outarray,
1295 StdExpansion::WeakDerivMatrixOp_MatFree(i,inarray,outarray,mkey);
1303 StdExpansion::WeakDirectionalDerivMatrixOp_MatFree(inarray,
1312 StdExpansion::MassLevelCurvatureMatrixOp_MatFree(inarray,
1358 if(inarray.get() == outarray.get())
1364 m_ncoeffs, tmp.get(), 1, 0.0, outarray.get(), 1);
1369 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
1389 int n_coeffs = inarray.size();
1390 int nmodes0 =
m_base[0]->GetNumModes();
1391 int nmodes1 =
m_base[1]->GetNumModes();
1392 int nmodes2 =
m_base[2]->GetNumModes();
1393 int numMax = nmodes0;
1423 b0, b1, b2, coeff_tmp2,
1424 bortho0, bortho1, bortho2, coeff);
1428 int cnt = 0, cnt2 = 0;
1430 for (
int u = 0; u < numMin+1; ++u)
1432 for (
int i = 0; i < numMin; ++i)
1435 tmp = coeff+cnt+cnt2,1,
1436 tmp2 = coeff_tmp1+cnt,1);
1442 tmp3 = coeff_tmp1,1,
1443 tmp4 = coeff_tmp2+cnt2,1);
1445 cnt2 = u*nmodes0*nmodes1;
1449 bortho0, bortho1, bortho2, coeff_tmp2,
1450 b0, b1, b2, outarray);
1476 StdHexExp::v_SVVLaplacianFilter( array, mkey);
1502 returnval = StdHexExp::v_GenMatrix(mkey);
1519 return tmp->GetStdMatrix(mkey);
1529 "Geometric information is not set up");
1622 int rows = deriv0.GetRows();
1623 int cols = deriv1.GetColumns();
1628 (*WeakDeriv) = df[3*dir ][0]*deriv0
1629 + df[3*dir+1][0]*deriv1
1630 + df[3*dir+2][0]*deriv2;
1676 int rows = lap00.GetRows();
1677 int cols = lap00.GetColumns();
1682 (*lap) = gmat[0][0]*lap00
1687 + gmat[7][0]*(lap12 +
Transpose(lap12));
1704 int rows = LapMat.GetRows();
1705 int cols = LapMat.GetColumns();
1710 (*helm) = LapMat + lambda*MassMat;
1830 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
1831 unsigned int exp_size[] = {nbdry,nint};
1832 unsigned int nblks = 2;
1843 goto UseLocRegionsMatrix;
1850 goto UseLocRegionsMatrix;
1855 factor = mat->Scale();
1856 goto UseStdRegionsMatrix;
1859 UseStdRegionsMatrix:
1873 UseLocRegionsMatrix:
1889 for(i = 0; i < nbdry; ++i)
1891 for(j = 0; j < nbdry; ++j)
1893 (*A)(i,j) = mat(bmap[i],bmap[j]);
1896 for(j = 0; j < nint; ++j)
1898 (*B)(i,j) = mat(bmap[i],imap[j]);
1902 for(i = 0; i < nint; ++i)
1904 for(j = 0; j < nbdry; ++j)
1906 (*C)(i,j) = mat(imap[i],bmap[j]);
1909 for(j = 0; j < nint; ++j)
1911 (*D)(i,j) = mat(imap[i],imap[j]);
1920 (*A) = (*A) - (*B)*(*C);
1965 int nquad0 =
m_base[0]->GetNumPoints();
1966 int nquad1 =
m_base[1]->GetNumPoints();
1967 int nquad2 =
m_base[2]->GetNumPoints();
1968 int nqtot = nquad0*nquad1*nquad2;
1971 "Insufficient workspace size.");
1994 StdExpansion3D::PhysTensorDeriv(inarray,wsp0,wsp1,wsp2);
2000 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
2001 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
2002 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
2003 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
2004 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
2005 Vmath::Vvtvp (nqtot,&metric22[0],1,&wsp2[0],1,&wsp5[0],1,&wsp5[0],1);
2026 const unsigned int dim = 3;
2032 for (
unsigned int i = 0; i < dim; ++i)
2034 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)
SpatialDomains::Geometry3DSharedPtr GetGeom3D() const
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 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 void v_GetTracePhysMap(const int face, Array< OneD, int > &outarray)
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)
virtual void v_AlignVectorToCollapsedDir(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, 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.
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)
void v_ComputeTraceNormal(const int face)
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)
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)
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...
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)
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
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
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*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)