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"))
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)
int GetNumPoints() const
Return points order at which basis is defined.
void ComputeLaplacianMetric()
void IProductWRTDirectionalDerivBase_SumFac(const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
const VarCoeffMap & GetVarCoeffs() const
DNekMatSharedPtr GenMatrix(const StdMatrixKey &mkey)
#define ASSERTL0(condition, msg)
virtual void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
std::vector< PointsKey > PointsKeyVector
DNekMatSharedPtr BuildTransformationMatrix(const DNekScalMatSharedPtr &r_bnd, const StdRegions::MatrixType matrixType)
static Array< OneD, NekDouble > NullNekDouble1DArray
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
virtual void v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const
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
SpatialDomains::GeometrySharedPtr GetGeom() const
void v_ComputeFaceNormal(const int face)
void IProductWRTDerivBase_MatOp(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
std::shared_ptr< GeomFactors > GeomFactorsSharedPtr
Pointer to a GeomFactors object.
virtual void v_ComputeLaplacianMetric()
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
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 DNekScalMatSharedPtr v_GetLocMatrix(const 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 Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrate the physical point list inarray over region.
void v_DropLocStaticCondMatrix(const MatrixKey &mkey)
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 .
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.
SpatialDomains::GeomFactorsSharedPtr m_metricinfo
virtual LibUtilities::ShapeType v_DetShapeType() const
Return the region shape using the enum-list of ShapeType.
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_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
DNekMatSharedPtr BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
void IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Calculates the inner product .
std::shared_ptr< StdHexExp > StdHexExpSharedPtr
std::shared_ptr< DNekMat > DNekMatSharedPtr
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
virtual void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
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.
DNekScalBlkMatSharedPtr GetLocStaticCondMatrix(const LocalRegions::MatrixKey &mkey)
PointsKey GetPointsKey() const
Return distribution of points.
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey)
virtual void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
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)
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, 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.
void v_GeneralMatrixOp_MatOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual void v_GetFacePhysMap(const int face, Array< OneD, int > &outarray)
const LibUtilities::PointsKeyVector GetPointsKeys() const
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const
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 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...
virtual void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int mode_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
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)
DNekScalMatSharedPtr CreateMatrix(const MatrixKey &mkey)
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
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.
virtual bool v_GetFaceDGForwards(const int i) const
Class representing a hexehedral element in reference space.
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
void GetInteriorMap(Array< OneD, unsigned int > &outarray)
Principle Orthogonal Functions .
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
Defines a specification for a set of points.
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_WeakDirectionalDerivMatrixOp(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 void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp)
std::map< int, NormalVector > m_faceNormals
NekDouble GetConstFactor(const ConstFactorType &factor) const
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
virtual NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &Lcoord, const Array< OneD, const NekDouble > &physvals)
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
const ConstFactorMap & GetConstFactors() const
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...
SpatialDomains::Geometry3DSharedPtr GetGeom3D() const
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 ComputeGmatcdotMF(const Array< TwoD, const NekDouble > &df, const Array< OneD, const NekDouble > &direction, Array< OneD, Array< OneD, NekDouble > > &dfdir)
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):
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.
std::shared_ptr< HexGeom > HexGeomSharedPtr
DNekScalBlkMatSharedPtr CreateStaticCondMatrix(const MatrixKey &mkey)
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
const LibUtilities::BasisKey DetFaceBasisKey(const int i, const int k) const
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Backward transformation from coefficient space to physical space...
void ComputeQuadratureMetric()
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey)
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
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.
void Zero(int n, T *x, const int incx)
Zero vector.
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)
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)
Describes the specification for a Basis.
1D Gauss-Lobatto-Legendre quadrature points
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...
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.
virtual void v_MassLevelCurvatureMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
void FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Forward transformation from physical space to coefficient space...