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());
321 ASSERTL1(Lcoords[0] <= -1.0 && Lcoords[0] >= 1.0 &&
322 Lcoords[1] <= -1.0 && Lcoords[1] >= 1.0 &&
323 Lcoords[2] <= -1.0 && Lcoords[2] >= 1.0,
324 "Local coordinates are not in region [-1,1]");
328 for(i = 0; i <
m_geom->GetCoordim(); ++i)
330 coords[i] =
m_geom->GetCoord(i,Lcoords);
350 m_geom->GetLocCoords(coord, Lcoord);
352 return StdPyrExp::v_PhysEvaluate(Lcoord, physvals);
362 return m_geom->GetCoordim();
368 int nquad0 =
m_base[0]->GetNumPoints();
369 int nquad1 =
m_base[1]->GetNumPoints();
370 int nquad2 =
m_base[2]->GetNumPoints();
380 if(outarray.num_elements()!=nq0*nq1)
386 for(
int i = 0; i < nquad0*nquad1; ++i)
395 if(outarray.num_elements()!=nq0*nq1)
401 for (
int k=0; k<nquad2; k++)
403 for(
int i = 0; i < nquad0; ++i)
405 outarray[k*nquad0+i] = (nquad0*nquad1*k)+i;
413 if(outarray.num_elements()!=nq0*nq1)
419 for(
int j = 0; j < nquad1*nquad2; ++j)
421 outarray[j] = nquad0-1 + j*nquad0;
429 if(outarray.num_elements()!=nq0*nq1)
435 for (
int k=0; k<nquad2; k++)
437 for(
int i = 0; i < nquad0; ++i)
439 outarray[k*nquad0+i] = nquad0*(nquad1-1) + (nquad0*nquad1*k)+i;
447 if(outarray.num_elements()!=nq0*nq1)
453 for(
int j = 0; j < nquad1*nquad2; ++j)
455 outarray[j] = j*nquad0;
460 ASSERTL0(
false,
"face value (> 4) is out of range");
485 for (i = 0; i < vCoordDim; ++i)
500 for(i = 0; i < vCoordDim; ++i)
502 normal[i][0] = -df[3*i+2][0];
508 for(i = 0; i < vCoordDim; ++i)
510 normal[i][0] = -df[3*i+1][0];
516 for(i = 0; i < vCoordDim; ++i)
518 normal[i][0] = df[3*i][0]+df[3*i+2][0];
524 for(i = 0; i < vCoordDim; ++i)
526 normal[i][0] = df[3*i+1][0]+df[3*i+2][0];
532 for(i = 0; i < vCoordDim; ++i)
534 normal[i][0] = -df[3*i][0];
539 ASSERTL0(
false,
"face is out of range (face < 4)");
544 for(i = 0; i < vCoordDim; ++i)
546 fac += normal[i][0]*normal[i][0];
549 for (i = 0; i < vCoordDim; ++i)
559 int nq0 = ptsKeys[0].GetNumPoints();
560 int nq1 = ptsKeys[1].GetNumPoints();
561 int nq2 = ptsKeys[2].GetNumPoints();
570 else if (face == 1 || face == 3)
592 for(j = 0; j < nq01; ++j)
594 normals[j] = -df[2][j]*jac[j];
595 normals[nqtot+j] = -df[5][j]*jac[j];
596 normals[2*nqtot+j] = -df[8][j]*jac[j];
600 points0 = ptsKeys[0];
601 points1 = ptsKeys[1];
607 for (j = 0; j < nq0; ++j)
609 for(k = 0; k < nq2; ++k)
613 -df[1][tmp]*jac[tmp];
614 normals[nqtot+j+k*nq0] =
615 -df[4][tmp]*jac[tmp];
616 normals[2*nqtot+j+k*nq0] =
617 -df[7][tmp]*jac[tmp];
618 faceJac[j+k*nq0] = jac[tmp];
622 points0 = ptsKeys[0];
623 points1 = ptsKeys[2];
629 for (j = 0; j < nq1; ++j)
631 for(k = 0; k < nq2; ++k)
633 int tmp = nq0-1+nq0*j+nq01*k;
635 (df[0][tmp]+df[2][tmp])*jac[tmp];
636 normals[nqtot+j+k*nq1] =
637 (df[3][tmp]+df[5][tmp])*jac[tmp];
638 normals[2*nqtot+j+k*nq1] =
639 (df[6][tmp]+df[8][tmp])*jac[tmp];
640 faceJac[j+k*nq1] = jac[tmp];
644 points0 = ptsKeys[1];
645 points1 = ptsKeys[2];
651 for (j = 0; j < nq0; ++j)
653 for(k = 0; k < nq2; ++k)
655 int tmp = nq0*(nq1-1) + j + nq01*k;
657 (df[1][tmp]+df[2][tmp])*jac[tmp];
658 normals[nqtot+j+k*nq0] =
659 (df[4][tmp]+df[5][tmp])*jac[tmp];
660 normals[2*nqtot+j+k*nq0] =
661 (df[7][tmp]+df[8][tmp])*jac[tmp];
662 faceJac[j+k*nq0] = jac[tmp];
666 points0 = ptsKeys[0];
667 points1 = ptsKeys[2];
673 for (j = 0; j < nq1; ++j)
675 for(k = 0; k < nq2; ++k)
677 int tmp = j*nq0+nq01*k;
679 -df[0][tmp]*jac[tmp];
680 normals[nqtot+j+k*nq1] =
681 -df[3][tmp]*jac[tmp];
682 normals[2*nqtot+j+k*nq1] =
683 -df[6][tmp]*jac[tmp];
684 faceJac[j+k*nq1] = jac[tmp];
688 points0 = ptsKeys[1];
689 points1 = ptsKeys[2];
694 ASSERTL0(
false,
"face is out of range (face < 4)");
703 Vmath::Sdiv(nq_face, 1.0, &work[0], 1, &work[0], 1);
706 for(i = 0; i < vCoordDim; ++i)
713 Vmath::Vmul(nq_face,work,1,normal[i],1,normal[i],1);
720 Vmath::Vvtvp(nq_face,normal[i],1,normal[i],1,work,1,work,1);
728 Vmath::Vmul(nq_face,normal[i],1,work,1,normal[i],1);
752 returnval = StdPyrExp::v_GenMatrix(mkey);
766 return tmp->GetStdMatrix(mkey);
866 int rows = lap00.GetRows();
867 int cols = lap00.GetColumns();
872 (*lap) = gmat[0][0]*lap00
892 int rows = LapMat.GetRows();
893 int cols = LapMat.GetColumns();
897 (*helm) = LapMat + factor*MassMat;
918 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
919 unsigned int exp_size[] = {nbdry, nint};
920 unsigned int nblks = 2;
931 goto UseLocRegionsMatrix;
937 goto UseLocRegionsMatrix;
942 factor = mat->Scale();
943 goto UseStdRegionsMatrix;
977 for(i = 0; i < nbdry; ++i)
979 for(j = 0; j < nbdry; ++j)
981 (*A)(i,j) = mat(bmap[i],bmap[j]);
984 for(j = 0; j < nint; ++j)
986 (*B)(i,j) = mat(bmap[i],imap[j]);
990 for(i = 0; i < nint; ++i)
992 for(j = 0; j < nbdry; ++j)
994 (*C)(i,j) = mat(imap[i],bmap[j]);
997 for(j = 0; j < nint; ++j)
999 (*D)(i,j) = mat(imap[i],imap[j]);
1008 (*A) = (*A) - (*B)*(*C);
1032 const unsigned int dim = 3;
1039 for (
unsigned int i = 0; i < dim; ++i)
1041 for (
unsigned int j = i; j < dim; ++j)
1072 const unsigned int nquad0 =
m_base[0]->GetNumPoints();
1073 const unsigned int nquad1 =
m_base[1]->GetNumPoints();
1074 const unsigned int nquad2 =
m_base[2]->GetNumPoints();
1077 for(j = 0; j < nquad2; ++j)
1079 for(i = 0; i < nquad1; ++i)
1081 Vmath::Fill(nquad0, 2.0/(1.0-z2[j]), &h0[0]+i*nquad0 + j*nquad0*nquad1,1);
1082 Vmath::Fill(nquad0, 1.0/(1.0-z2[j]), &h1[0]+i*nquad0 + j*nquad0*nquad1,1);
1083 Vmath::Fill(nquad0, (1.0+z1[i])/(1.0-z2[j]), &h2[0]+i*nquad0 + j*nquad0*nquad1,1);
1086 for(i = 0; i < nquad0; i++)
1088 Blas::Dscal(nquad1*nquad2, 1+z0[i], &h1[0]+i, nquad0);
1097 Vmath::Vvtvvtp(nqtot, &df[0][0], 1, &h0[0], 1, &df[2][0], 1, &h1[0], 1, &wsp1[0], 1);
1098 Vmath::Vvtvvtp(nqtot, &df[3][0], 1, &h0[0], 1, &df[5][0], 1, &h1[0], 1, &wsp2[0], 1);
1099 Vmath::Vvtvvtp(nqtot, &df[6][0], 1, &h0[0], 1, &df[8][0], 1, &h1[0], 1, &wsp3[0], 1);
1102 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1103 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1106 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp1[0], 1, &df[5][0], 1, &wsp2[0], 1, &g4[0], 1);
1107 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1110 Vmath::Vvtvvtp(nqtot, &df[1][0], 1, &h0[0], 1, &df[2][0], 1, &h2[0], 1, &wsp4[0], 1);
1111 Vmath::Vvtvvtp(nqtot, &df[4][0], 1, &h0[0], 1, &df[5][0], 1, &h2[0], 1, &wsp5[0], 1);
1112 Vmath::Vvtvvtp(nqtot, &df[7][0], 1, &h0[0], 1, &df[8][0], 1, &h2[0], 1, &wsp6[0], 1);
1115 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1116 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1119 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1120 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1123 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp4[0], 1, &df[5][0], 1, &wsp5[0], 1, &g5[0], 1);
1124 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1127 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &df[2][0], 1, &df[5][0], 1, &df[5][0], 1, &g2[0], 1);
1128 Vmath::Vvtvp (nqtot, &df[8][0], 1, &df[8][0], 1, &g2[0], 1, &g2[0], 1);
1133 Vmath::Svtsvtp(nqtot, df[0][0], &h0[0], 1, df[2][0], &h1[0], 1, &wsp1[0], 1);
1134 Vmath::Svtsvtp(nqtot, df[3][0], &h0[0], 1, df[5][0], &h1[0], 1, &wsp2[0], 1);
1135 Vmath::Svtsvtp(nqtot, df[6][0], &h0[0], 1, df[8][0], &h1[0], 1, &wsp3[0], 1);
1138 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1139 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1142 Vmath::Svtsvtp(nqtot, df[2][0], &wsp1[0], 1, df[5][0], &wsp2[0], 1, &g4[0], 1);
1143 Vmath::Svtvp (nqtot, df[8][0], &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1146 Vmath::Svtsvtp(nqtot, df[1][0], &h0[0], 1, df[2][0], &h2[0], 1, &wsp4[0], 1);
1147 Vmath::Svtsvtp(nqtot, df[4][0], &h0[0], 1, df[5][0], &h2[0], 1, &wsp5[0], 1);
1148 Vmath::Svtsvtp(nqtot, df[7][0], &h0[0], 1, df[8][0], &h2[0], 1, &wsp6[0], 1);
1151 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1152 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1155 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1156 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1159 Vmath::Svtsvtp(nqtot, df[2][0], &wsp4[0], 1, df[5][0], &wsp5[0], 1, &g5[0], 1);
1160 Vmath::Svtvp (nqtot, df[8][0], &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1163 Vmath::Fill(nqtot, df[2][0]*df[2][0] + df[5][0]*df[5][0] + df[8][0]*df[8][0], &g2[0], 1);
1166 for (
unsigned int i = 0; i < dim; ++i)
1168 for (
unsigned int j = i; j < dim; ++j)
1189 int nquad0 =
m_base[0]->GetNumPoints();
1190 int nquad1 =
m_base[1]->GetNumPoints();
1191 int nq2 =
m_base[2]->GetNumPoints();
1192 int nqtot = nquad0*nquad1*nq2;
1194 ASSERTL1(wsp.num_elements() >= 6*nqtot,
1195 "Insufficient workspace size.");
1197 "Workspace not set up for ncoeffs > nqtot");
1224 StdExpansion3D::PhysTensorDeriv(inarray,wsp0,wsp1,wsp2);
1230 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
1231 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
1232 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
1233 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
1234 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
1235 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
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.
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.