41 namespace LocalRegions
62 boost::bind(&
PyrExp::CreateMatrix, this, _1),
63 std::string(
"PyrExpMatrix")),
64 m_staticCondMatrixManager(
65 boost::bind(&
PyrExp::CreateStaticCondMatrix, this, _1),
66 std::string(
"PyrExpStaticCondMatrix"))
76 m_matrixManager(T.m_matrixManager),
77 m_staticCondMatrixManager(T.m_staticCondMatrixManager)
112 int nquad0 =
m_base[0]->GetNumPoints();
113 int nquad1 =
m_base[1]->GetNumPoints();
114 int nquad2 =
m_base[2]->GetNumPoints();
129 return StdPyrExp::v_Integral(tmp);
142 int nquad0 =
m_base[0]->GetNumPoints();
143 int nquad1 =
m_base[1]->GetNumPoints();
144 int nquad2 =
m_base[2]->GetNumPoints();
151 StdPyrExp::v_PhysDeriv(inarray, diff0, diff1, diff2);
155 if(out_d0.num_elements())
157 Vmath::Vmul (nquad0*nquad1*nquad2,&gmat[0][0],1,&diff0[0],1, &out_d0[0], 1);
158 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[1][0],1,&diff1[0],1, &out_d0[0], 1,&out_d0[0],1);
159 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[2][0],1,&diff2[0],1, &out_d0[0], 1,&out_d0[0],1);
162 if(out_d1.num_elements())
164 Vmath::Vmul (nquad0*nquad1*nquad2,&gmat[3][0],1,&diff0[0],1, &out_d1[0], 1);
165 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[4][0],1,&diff1[0],1, &out_d1[0], 1,&out_d1[0],1);
166 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[5][0],1,&diff2[0],1, &out_d1[0], 1,&out_d1[0],1);
169 if(out_d2.num_elements())
171 Vmath::Vmul (nquad0*nquad1*nquad2,&gmat[6][0],1,&diff0[0],1, &out_d2[0], 1);
172 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[7][0],1,&diff1[0],1, &out_d2[0], 1, &out_d2[0],1);
173 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[8][0],1,&diff2[0],1, &out_d2[0], 1, &out_d2[0],1);
178 if(out_d0.num_elements())
180 Vmath::Smul (nquad0*nquad1*nquad2,gmat[0][0],&diff0[0],1, &out_d0[0], 1);
181 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[1][0],&diff1[0],1, &out_d0[0], 1);
182 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[2][0],&diff2[0],1, &out_d0[0], 1);
185 if(out_d1.num_elements())
187 Vmath::Smul (nquad0*nquad1*nquad2,gmat[3][0],&diff0[0],1, &out_d1[0], 1);
188 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[4][0],&diff1[0],1, &out_d1[0], 1);
189 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[5][0],&diff2[0],1, &out_d1[0], 1);
192 if(out_d2.num_elements())
194 Vmath::Smul (nquad0*nquad1*nquad2,gmat[6][0],&diff0[0],1, &out_d2[0], 1);
195 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[7][0],&diff1[0],1, &out_d2[0], 1);
196 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[8][0],&diff2[0],1, &out_d2[0], 1);
222 if(
m_base[0]->Collocation() &&
223 m_base[1]->Collocation() &&
280 int nquad0 =
m_base[0]->GetNumPoints();
281 int nquad1 =
m_base[1]->GetNumPoints();
282 int nquad2 =
m_base[2]->GetNumPoints();
296 StdPyrExp::v_IProductWRTBase(tmp,outarray);
309 m_base[2]->GetBasisKey());
315 2,
m_base[0]->GetPointsKey());
317 2,
m_base[1]->GetPointsKey());
319 2,
m_base[2]->GetPointsKey());
334 ASSERTL1(Lcoords[0] <= -1.0 && Lcoords[0] >= 1.0 &&
335 Lcoords[1] <= -1.0 && Lcoords[1] >= 1.0 &&
336 Lcoords[2] <= -1.0 && Lcoords[2] >= 1.0,
337 "Local coordinates are not in region [-1,1]");
341 for(i = 0; i <
m_geom->GetCoordim(); ++i)
343 coords[i] =
m_geom->GetCoord(i,Lcoords);
363 m_geom->GetLocCoords(coord, Lcoord);
365 return StdPyrExp::v_PhysEvaluate(Lcoord, physvals);
375 return m_geom->GetCoordim();
381 int nquad0 =
m_base[0]->GetNumPoints();
382 int nquad1 =
m_base[1]->GetNumPoints();
383 int nquad2 =
m_base[2]->GetNumPoints();
393 if(outarray.num_elements()!=nq0*nq1)
399 for(
int i = 0; i < nquad0*nquad1; ++i)
408 if(outarray.num_elements()!=nq0*nq1)
414 for (
int k=0; k<nquad2; k++)
416 for(
int i = 0; i < nquad0; ++i)
418 outarray[k*nquad0+i] = (nquad0*nquad1*k)+i;
426 if(outarray.num_elements()!=nq0*nq1)
432 for(
int j = 0; j < nquad1*nquad2; ++j)
434 outarray[j] = nquad0-1 + j*nquad0;
442 if(outarray.num_elements()!=nq0*nq1)
448 for (
int k=0; k<nquad2; k++)
450 for(
int i = 0; i < nquad0; ++i)
452 outarray[k*nquad0+i] = nquad0*(nquad1-1) + (nquad0*nquad1*k)+i;
460 if(outarray.num_elements()!=nq0*nq1)
466 for(
int j = 0; j < nquad1*nquad2; ++j)
468 outarray[j] = j*nquad0;
473 ASSERTL0(
false,
"face value (> 4) is out of range");
498 for (i = 0; i < vCoordDim; ++i)
513 for(i = 0; i < vCoordDim; ++i)
515 normal[i][0] = -df[3*i+2][0];
521 for(i = 0; i < vCoordDim; ++i)
523 normal[i][0] = -df[3*i+1][0];
529 for(i = 0; i < vCoordDim; ++i)
531 normal[i][0] = df[3*i][0]+df[3*i+2][0];
537 for(i = 0; i < vCoordDim; ++i)
539 normal[i][0] = df[3*i+1][0]+df[3*i+2][0];
545 for(i = 0; i < vCoordDim; ++i)
547 normal[i][0] = -df[3*i][0];
552 ASSERTL0(
false,
"face is out of range (face < 4)");
557 for(i = 0; i < vCoordDim; ++i)
559 fac += normal[i][0]*normal[i][0];
562 for (i = 0; i < vCoordDim; ++i)
572 int nq0 = ptsKeys[0].GetNumPoints();
573 int nq1 = ptsKeys[1].GetNumPoints();
574 int nq2 = ptsKeys[2].GetNumPoints();
583 else if (face == 1 || face == 3)
605 for(j = 0; j < nq01; ++j)
607 normals[j] = -df[2][j]*jac[j];
608 normals[nqtot+j] = -df[5][j]*jac[j];
609 normals[2*nqtot+j] = -df[8][j]*jac[j];
613 points0 = ptsKeys[0];
614 points1 = ptsKeys[1];
620 for (j = 0; j < nq0; ++j)
622 for(k = 0; k < nq2; ++k)
626 -df[1][tmp]*jac[tmp];
627 normals[nqtot+j+k*nq0] =
628 -df[4][tmp]*jac[tmp];
629 normals[2*nqtot+j+k*nq0] =
630 -df[7][tmp]*jac[tmp];
631 faceJac[j+k*nq0] = jac[tmp];
635 points0 = ptsKeys[0];
636 points1 = ptsKeys[2];
642 for (j = 0; j < nq1; ++j)
644 for(k = 0; k < nq2; ++k)
646 int tmp = nq0-1+nq0*j+nq01*k;
648 (df[0][tmp]+df[2][tmp])*jac[tmp];
649 normals[nqtot+j+k*nq1] =
650 (df[3][tmp]+df[5][tmp])*jac[tmp];
651 normals[2*nqtot+j+k*nq1] =
652 (df[6][tmp]+df[8][tmp])*jac[tmp];
653 faceJac[j+k*nq1] = jac[tmp];
657 points0 = ptsKeys[1];
658 points1 = ptsKeys[2];
664 for (j = 0; j < nq0; ++j)
666 for(k = 0; k < nq2; ++k)
668 int tmp = nq0*(nq1-1) + j + nq01*k;
670 (df[1][tmp]+df[2][tmp])*jac[tmp];
671 normals[nqtot+j+k*nq0] =
672 (df[4][tmp]+df[5][tmp])*jac[tmp];
673 normals[2*nqtot+j+k*nq0] =
674 (df[7][tmp]+df[8][tmp])*jac[tmp];
675 faceJac[j+k*nq0] = jac[tmp];
679 points0 = ptsKeys[0];
680 points1 = ptsKeys[2];
686 for (j = 0; j < nq1; ++j)
688 for(k = 0; k < nq2; ++k)
690 int tmp = j*nq0+nq01*k;
692 -df[0][tmp]*jac[tmp];
693 normals[nqtot+j+k*nq1] =
694 -df[3][tmp]*jac[tmp];
695 normals[2*nqtot+j+k*nq1] =
696 -df[6][tmp]*jac[tmp];
697 faceJac[j+k*nq1] = jac[tmp];
701 points0 = ptsKeys[1];
702 points1 = ptsKeys[2];
707 ASSERTL0(
false,
"face is out of range (face < 4)");
716 Vmath::Sdiv(nq_face, 1.0, &work[0], 1, &work[0], 1);
719 for(i = 0; i < vCoordDim; ++i)
726 Vmath::Vmul(nq_face,work,1,normal[i],1,normal[i],1);
733 Vmath::Vvtvp(nq_face,normal[i],1,normal[i],1,work,1,work,1);
741 Vmath::Vmul(nq_face,normal[i],1,work,1,normal[i],1);
765 returnval = StdPyrExp::v_GenMatrix(mkey);
779 return tmp->GetStdMatrix(mkey);
879 int rows = lap00.GetRows();
880 int cols = lap00.GetColumns();
885 (*lap) = gmat[0][0]*lap00
905 int rows = LapMat.GetRows();
906 int cols = LapMat.GetColumns();
910 (*helm) = LapMat + factor*MassMat;
931 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
932 unsigned int exp_size[] = {nbdry, nint};
933 unsigned int nblks = 2;
944 goto UseLocRegionsMatrix;
950 goto UseLocRegionsMatrix;
955 factor = mat->Scale();
956 goto UseStdRegionsMatrix;
990 for(i = 0; i < nbdry; ++i)
992 for(j = 0; j < nbdry; ++j)
994 (*A)(i,j) = mat(bmap[i],bmap[j]);
997 for(j = 0; j < nint; ++j)
999 (*B)(i,j) = mat(bmap[i],imap[j]);
1003 for(i = 0; i < nint; ++i)
1005 for(j = 0; j < nbdry; ++j)
1007 (*C)(i,j) = mat(imap[i],bmap[j]);
1010 for(j = 0; j < nint; ++j)
1012 (*D)(i,j) = mat(imap[i],imap[j]);
1021 (*A) = (*A) - (*B)*(*C);
1045 const unsigned int dim = 3;
1052 for (
unsigned int i = 0; i < dim; ++i)
1054 for (
unsigned int j = i; j < dim; ++j)
1085 const unsigned int nquad0 =
m_base[0]->GetNumPoints();
1086 const unsigned int nquad1 =
m_base[1]->GetNumPoints();
1087 const unsigned int nquad2 =
m_base[2]->GetNumPoints();
1090 for(j = 0; j < nquad2; ++j)
1092 for(i = 0; i < nquad1; ++i)
1094 Vmath::Fill(nquad0, 2.0/(1.0-z2[j]), &h0[0]+i*nquad0 + j*nquad0*nquad1,1);
1095 Vmath::Fill(nquad0, 1.0/(1.0-z2[j]), &h1[0]+i*nquad0 + j*nquad0*nquad1,1);
1096 Vmath::Fill(nquad0, (1.0+z1[i])/(1.0-z2[j]), &h2[0]+i*nquad0 + j*nquad0*nquad1,1);
1099 for(i = 0; i < nquad0; i++)
1101 Blas::Dscal(nquad1*nquad2, 1+z0[i], &h1[0]+i, nquad0);
1110 Vmath::Vvtvvtp(nqtot, &df[0][0], 1, &h0[0], 1, &df[2][0], 1, &h1[0], 1, &wsp1[0], 1);
1111 Vmath::Vvtvvtp(nqtot, &df[3][0], 1, &h0[0], 1, &df[5][0], 1, &h1[0], 1, &wsp2[0], 1);
1112 Vmath::Vvtvvtp(nqtot, &df[6][0], 1, &h0[0], 1, &df[8][0], 1, &h1[0], 1, &wsp3[0], 1);
1115 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1116 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1119 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp1[0], 1, &df[5][0], 1, &wsp2[0], 1, &g4[0], 1);
1120 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1123 Vmath::Vvtvvtp(nqtot, &df[1][0], 1, &h0[0], 1, &df[2][0], 1, &h2[0], 1, &wsp4[0], 1);
1124 Vmath::Vvtvvtp(nqtot, &df[4][0], 1, &h0[0], 1, &df[5][0], 1, &h2[0], 1, &wsp5[0], 1);
1125 Vmath::Vvtvvtp(nqtot, &df[7][0], 1, &h0[0], 1, &df[8][0], 1, &h2[0], 1, &wsp6[0], 1);
1128 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1129 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1132 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1133 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1136 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp4[0], 1, &df[5][0], 1, &wsp5[0], 1, &g5[0], 1);
1137 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1140 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &df[2][0], 1, &df[5][0], 1, &df[5][0], 1, &g2[0], 1);
1141 Vmath::Vvtvp (nqtot, &df[8][0], 1, &df[8][0], 1, &g2[0], 1, &g2[0], 1);
1146 Vmath::Svtsvtp(nqtot, df[0][0], &h0[0], 1, df[2][0], &h1[0], 1, &wsp1[0], 1);
1147 Vmath::Svtsvtp(nqtot, df[3][0], &h0[0], 1, df[5][0], &h1[0], 1, &wsp2[0], 1);
1148 Vmath::Svtsvtp(nqtot, df[6][0], &h0[0], 1, df[8][0], &h1[0], 1, &wsp3[0], 1);
1151 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1152 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1155 Vmath::Svtsvtp(nqtot, df[2][0], &wsp1[0], 1, df[5][0], &wsp2[0], 1, &g4[0], 1);
1156 Vmath::Svtvp (nqtot, df[8][0], &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1159 Vmath::Svtsvtp(nqtot, df[1][0], &h0[0], 1, df[2][0], &h2[0], 1, &wsp4[0], 1);
1160 Vmath::Svtsvtp(nqtot, df[4][0], &h0[0], 1, df[5][0], &h2[0], 1, &wsp5[0], 1);
1161 Vmath::Svtsvtp(nqtot, df[7][0], &h0[0], 1, df[8][0], &h2[0], 1, &wsp6[0], 1);
1164 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1165 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1168 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1169 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1172 Vmath::Svtsvtp(nqtot, df[2][0], &wsp4[0], 1, df[5][0], &wsp5[0], 1, &g5[0], 1);
1173 Vmath::Svtvp (nqtot, df[8][0], &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1176 Vmath::Fill(nqtot, df[2][0]*df[2][0] + df[5][0]*df[5][0] + df[8][0]*df[8][0], &g2[0], 1);
1179 for (
unsigned int i = 0; i < dim; ++i)
1181 for (
unsigned int j = i; j < dim; ++j)
1202 int nquad0 =
m_base[0]->GetNumPoints();
1203 int nquad1 =
m_base[1]->GetNumPoints();
1204 int nq2 =
m_base[2]->GetNumPoints();
1205 int nqtot = nquad0*nquad1*nq2;
1207 ASSERTL1(wsp.num_elements() >= 6*nqtot,
1208 "Insufficient workspace size.");
1210 "Workspace not set up for ncoeffs > nqtot");
1237 StdExpansion3D::PhysTensorDeriv(inarray,wsp0,wsp1,wsp2);
1243 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
1244 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
1245 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
1246 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
1247 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
1248 Vmath::Vvtvp (nqtot,&metric22[0],1,&wsp2[0],1,&wsp5[0],1,&wsp5[0],1);
void ComputeLaplacianMetric()
const LibUtilities::PointsKeyVector GetPointsKeys() const
boost::shared_ptr< PyrGeom > PyrGeomSharedPtr
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
NekDouble GetConstFactor(const ConstFactorType &factor) const
DNekMatSharedPtr GenMatrix(const StdMatrixKey &mkey)
#define ASSERTL0(condition, msg)
const ConstFactorMap & GetConstFactors() const
DNekScalBlkMatSharedPtr CreateStaticCondMatrix(const MatrixKey &mkey)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
const VarCoeffMap & GetVarCoeffs() const
std::vector< PointsKey > PointsKeyVector
void v_ComputeFaceNormal(const int face)
MatrixType GetMatrixType() const
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
virtual void v_ComputeLaplacianMetric()
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
void Vsqrt(int n, const T *x, const int incx, T *y, const int incy)
sqrt y = sqrt(x)
void MultiplyByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
DNekScalMatSharedPtr CreateMatrix(const MatrixKey &mkey)
virtual void v_GetFacePhysMap(const int face, Array< OneD, int > &outarray)
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey)
virtual void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Calculate the inner product of inarray with respect to the basis B=base0*base1*base2 and put into out...
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const
void Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
svtvp (scalar times vector plus vector): z = alpha*x + y
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y
SpatialDomains::GeomFactorsSharedPtr m_metricinfo
virtual int v_GetCoordim()
void Sdiv(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha/y.
LibUtilities::ShapeType GetShapeType() const
SpatialDomains::GeometrySharedPtr m_geom
virtual void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp)
boost::shared_ptr< StdPyrExp > StdPyrExpSharedPtr
boost::shared_ptr< DNekMat > DNekMatSharedPtr
virtual void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords)
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
boost::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
bool ConstFactorExists(const ConstFactorType &factor) const
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrate the physical point list inarray over pyramidic region and return the value.
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
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...
int NumBndryCoeffs(void) 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...
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)
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
int getNumberOfCoefficients(int Na)
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
int GetNumPoints() const
Return points order at which basis is defined.
boost::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
void GetInteriorMap(Array< OneD, unsigned int > &outarray)
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
Defines a specification for a set of points.
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.
std::map< int, NormalVector > m_faceNormals
LibUtilities::BasisType GetBasisType(const int dir) const
This function returns the type of basis used in the dir direction.
void v_DropLocStaticCondMatrix(const MatrixKey &mkey)
boost::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
PointsKey GetPointsKey() const
Return distribution of points.
SpatialDomains::GeometrySharedPtr GetGeom() const
boost::shared_ptr< GeomFactors > GeomFactorsSharedPtr
Pointer to a GeomFactors object.
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):
#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.
void ComputeQuadratureMetric()
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
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 DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey)
const LibUtilities::BasisKey DetFaceBasisKey(const int i, const int k) const
GeomType
Indicates the type of element geometry.
virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey)
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
void Zero(int n, T *x, const int incx)
Zero vector.
boost::shared_ptr< StdExpansion > StdExpansionSharedPtr
virtual NekDouble v_PhysEvaluate(const Array< OneD, const NekDouble > &coord, const Array< OneD, const NekDouble > &physvals)
This function evaluates the expansion at a single (arbitrary) point of the domain.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Array< OneD, LibUtilities::BasisSharedPtr > m_base
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Geometry is curved or has non-constant factors.
void GetBoundaryMap(Array< OneD, unsigned int > &outarray)
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
Describes the specification for a Basis.
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const
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.
PyrExp(const LibUtilities::BasisKey &Ba, const LibUtilities::BasisKey &Bb, const LibUtilities::BasisKey &Bc, const SpatialDomains::PyrGeomSharedPtr &geom)
Constructor using BasisKey class for quadrature points and order definition.