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();
372 int nq0 =
m_base[0]->GetNumPoints();
373 int nq1 =
m_base[1]->GetNumPoints();
374 int nq2 =
m_base[2]->GetNumPoints();
394 for (
int j=0; j<nq1; j++)
396 Vmath::Vcopy(nq0,&(inarray[0])+(nq0-1)+j*nq0,-1,&(o_tmp[0])+(j*nq0),1);
402 for (
int j=0; j<nq1; j++)
404 Vmath::Vcopy(nq0,&(inarray[0])+nq0*(nq1-1-j),1,&(o_tmp[0])+(j*nq0),1);
410 for(
int j=0; j<nq1; j++)
412 Vmath::Vcopy(nq0,&(inarray[0])+(nq0*nq1-1-j*nq0),-1,&(o_tmp[0])+(j*nq0),1);
418 for (
int i=0; i<nq0; i++)
420 Vmath::Vcopy(nq1,&(inarray[0])+i,nq0,&(o_tmp[0])+(i*nq1),1);
426 for (
int i=0; i<nq0; i++)
428 Vmath::Vcopy(nq1,&(inarray[0])+(nq0-1-i),nq0,&(o_tmp[0])+(i*nq1),1);
434 for (
int i=0; i<nq0; i++)
436 Vmath::Vcopy(nq1,&(inarray[0])+i+nq0*(nq1-1),-nq0,&(o_tmp[0])+(i*nq1),1);
442 for (
int i=0; i<nq0; i++)
444 Vmath::Vcopy(nq1,&(inarray[0])+(nq0*nq1-1-i),-nq0,&(o_tmp[0])+(i*nq1),1);
448 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),outarray);
453 for (
int k = 0; k < nq2; k++)
455 Vmath::Vcopy(nq0,inarray.get()+nq0*nq1*k,1,outarray.get()+k*nq0,1);
458 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
464 Vmath::Vcopy(nq1*nq2,inarray.get()+(nq0-1),nq0,outarray.get(),1);
466 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
472 for (
int k = 0; k < nq2; k++)
474 Vmath::Vcopy(nq0,inarray.get()+nq0*(nq1-1)+nq0*nq1*k,1,outarray.get()+(k*nq0),1);
477 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
482 Vmath::Vcopy(nq1*nq2,inarray.get(),nq0,outarray.get(),1);
484 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
489 ASSERTL0(
false,
"face value (> 4) is out of range");
495 int fnq1 = FaceExp->GetNumPoints(0);
496 int fnq2 = FaceExp->GetNumPoints(1);
498 if ((
int)orient == 7)
500 for (
int j = 0; j < fnq2; ++j)
502 Vmath::Vcopy(fnq1, o_tmp.get()+((j+1)*fnq1-1), -1, outarray.get()+j*fnq1, 1);
507 Vmath::Vcopy(fnq1*fnq2, o_tmp.get(), 1, outarray.get(), 1);
532 for (i = 0; i < vCoordDim; ++i)
547 for(i = 0; i < vCoordDim; ++i)
549 normal[i][0] = -df[3*i+2][0];
555 for(i = 0; i < vCoordDim; ++i)
557 normal[i][0] = -df[3*i+1][0];
563 for(i = 0; i < vCoordDim; ++i)
565 normal[i][0] = df[3*i][0]+df[3*i+2][0];
571 for(i = 0; i < vCoordDim; ++i)
573 normal[i][0] = df[3*i+1][0]+df[3*i+2][0];
579 for(i = 0; i < vCoordDim; ++i)
581 normal[i][0] = -df[3*i][0];
586 ASSERTL0(
false,
"face is out of range (face < 4)");
591 for(i = 0; i < vCoordDim; ++i)
593 fac += normal[i][0]*normal[i][0];
596 for (i = 0; i < vCoordDim; ++i)
606 int nq0 = ptsKeys[0].GetNumPoints();
607 int nq1 = ptsKeys[1].GetNumPoints();
608 int nq2 = ptsKeys[2].GetNumPoints();
617 else if (face == 1 || face == 3)
639 for(j = 0; j < nq01; ++j)
641 normals[j] = -df[2][j]*jac[j];
642 normals[nqtot+j] = -df[5][j]*jac[j];
643 normals[2*nqtot+j] = -df[8][j]*jac[j];
647 points0 = ptsKeys[0];
648 points1 = ptsKeys[1];
654 for (j = 0; j < nq0; ++j)
656 for(k = 0; k < nq2; ++k)
660 -df[1][tmp]*jac[tmp];
661 normals[nqtot+j+k*nq0] =
662 -df[4][tmp]*jac[tmp];
663 normals[2*nqtot+j+k*nq0] =
664 -df[7][tmp]*jac[tmp];
665 faceJac[j+k*nq0] = jac[tmp];
669 points0 = ptsKeys[0];
670 points1 = ptsKeys[2];
676 for (j = 0; j < nq1; ++j)
678 for(k = 0; k < nq2; ++k)
680 int tmp = nq0-1+nq0*j+nq01*k;
682 (df[0][tmp]+df[2][tmp])*jac[tmp];
683 normals[nqtot+j+k*nq1] =
684 (df[3][tmp]+df[5][tmp])*jac[tmp];
685 normals[2*nqtot+j+k*nq1] =
686 (df[6][tmp]+df[8][tmp])*jac[tmp];
687 faceJac[j+k*nq1] = jac[tmp];
691 points0 = ptsKeys[1];
692 points1 = ptsKeys[2];
698 for (j = 0; j < nq0; ++j)
700 for(k = 0; k < nq2; ++k)
702 int tmp = nq0*(nq1-1) + j + nq01*k;
704 (df[1][tmp]+df[2][tmp])*jac[tmp];
705 normals[nqtot+j+k*nq0] =
706 (df[4][tmp]+df[5][tmp])*jac[tmp];
707 normals[2*nqtot+j+k*nq0] =
708 (df[7][tmp]+df[8][tmp])*jac[tmp];
709 faceJac[j+k*nq0] = jac[tmp];
713 points0 = ptsKeys[0];
714 points1 = ptsKeys[2];
720 for (j = 0; j < nq1; ++j)
722 for(k = 0; k < nq2; ++k)
724 int tmp = j*nq0+nq01*k;
726 -df[0][tmp]*jac[tmp];
727 normals[nqtot+j+k*nq1] =
728 -df[3][tmp]*jac[tmp];
729 normals[2*nqtot+j+k*nq1] =
730 -df[6][tmp]*jac[tmp];
731 faceJac[j+k*nq1] = jac[tmp];
735 points0 = ptsKeys[1];
736 points1 = ptsKeys[2];
741 ASSERTL0(
false,
"face is out of range (face < 4)");
750 Vmath::Sdiv(nq_face, 1.0, &work[0], 1, &work[0], 1);
753 for(i = 0; i < vCoordDim; ++i)
760 Vmath::Vmul(nq_face,work,1,normal[i],1,normal[i],1);
767 Vmath::Vvtvp(nq_face,normal[i],1,normal[i],1,work,1,work,1);
775 Vmath::Vmul(nq_face,normal[i],1,work,1,normal[i],1);
799 returnval = StdPyrExp::v_GenMatrix(mkey);
813 return tmp->GetStdMatrix(mkey);
913 int rows = lap00.GetRows();
914 int cols = lap00.GetColumns();
919 (*lap) = gmat[0][0]*lap00
939 int rows = LapMat.GetRows();
940 int cols = LapMat.GetColumns();
944 (*helm) = LapMat + factor*MassMat;
965 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
966 unsigned int exp_size[] = {nbdry, nint};
967 unsigned int nblks = 2;
978 goto UseLocRegionsMatrix;
984 goto UseLocRegionsMatrix;
989 factor = mat->Scale();
990 goto UseStdRegionsMatrix;
1008 UseLocRegionsMatrix:
1024 for(i = 0; i < nbdry; ++i)
1026 for(j = 0; j < nbdry; ++j)
1028 (*A)(i,j) = mat(bmap[i],bmap[j]);
1031 for(j = 0; j < nint; ++j)
1033 (*B)(i,j) = mat(bmap[i],imap[j]);
1037 for(i = 0; i < nint; ++i)
1039 for(j = 0; j < nbdry; ++j)
1041 (*C)(i,j) = mat(imap[i],bmap[j]);
1044 for(j = 0; j < nint; ++j)
1046 (*D)(i,j) = mat(imap[i],imap[j]);
1055 (*A) = (*A) - (*B)*(*C);
1079 const unsigned int dim = 3;
1086 for (
unsigned int i = 0; i < dim; ++i)
1088 for (
unsigned int j = i; j < dim; ++j)
1119 const unsigned int nquad0 =
m_base[0]->GetNumPoints();
1120 const unsigned int nquad1 =
m_base[1]->GetNumPoints();
1121 const unsigned int nquad2 =
m_base[2]->GetNumPoints();
1124 for(j = 0; j < nquad2; ++j)
1126 for(i = 0; i < nquad1; ++i)
1128 Vmath::Fill(nquad0, 2.0/(1.0-z2[j]), &h0[0]+i*nquad0 + j*nquad0*nquad1,1);
1129 Vmath::Fill(nquad0, 1.0/(1.0-z2[j]), &h1[0]+i*nquad0 + j*nquad0*nquad1,1);
1130 Vmath::Fill(nquad0, (1.0+z1[i])/(1.0-z2[j]), &h2[0]+i*nquad0 + j*nquad0*nquad1,1);
1133 for(i = 0; i < nquad0; i++)
1135 Blas::Dscal(nquad1*nquad2, 1+z0[i], &h1[0]+i, nquad0);
1144 Vmath::Vvtvvtp(nqtot, &df[0][0], 1, &h0[0], 1, &df[2][0], 1, &h1[0], 1, &wsp1[0], 1);
1145 Vmath::Vvtvvtp(nqtot, &df[3][0], 1, &h0[0], 1, &df[5][0], 1, &h1[0], 1, &wsp2[0], 1);
1146 Vmath::Vvtvvtp(nqtot, &df[6][0], 1, &h0[0], 1, &df[8][0], 1, &h1[0], 1, &wsp3[0], 1);
1149 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1150 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1153 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp1[0], 1, &df[5][0], 1, &wsp2[0], 1, &g4[0], 1);
1154 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1157 Vmath::Vvtvvtp(nqtot, &df[1][0], 1, &h0[0], 1, &df[2][0], 1, &h2[0], 1, &wsp4[0], 1);
1158 Vmath::Vvtvvtp(nqtot, &df[4][0], 1, &h0[0], 1, &df[5][0], 1, &h2[0], 1, &wsp5[0], 1);
1159 Vmath::Vvtvvtp(nqtot, &df[7][0], 1, &h0[0], 1, &df[8][0], 1, &h2[0], 1, &wsp6[0], 1);
1162 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1163 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1166 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1167 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1170 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp4[0], 1, &df[5][0], 1, &wsp5[0], 1, &g5[0], 1);
1171 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1174 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &df[2][0], 1, &df[5][0], 1, &df[5][0], 1, &g2[0], 1);
1175 Vmath::Vvtvp (nqtot, &df[8][0], 1, &df[8][0], 1, &g2[0], 1, &g2[0], 1);
1180 Vmath::Svtsvtp(nqtot, df[0][0], &h0[0], 1, df[2][0], &h1[0], 1, &wsp1[0], 1);
1181 Vmath::Svtsvtp(nqtot, df[3][0], &h0[0], 1, df[5][0], &h1[0], 1, &wsp2[0], 1);
1182 Vmath::Svtsvtp(nqtot, df[6][0], &h0[0], 1, df[8][0], &h1[0], 1, &wsp3[0], 1);
1185 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1186 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1189 Vmath::Svtsvtp(nqtot, df[2][0], &wsp1[0], 1, df[5][0], &wsp2[0], 1, &g4[0], 1);
1190 Vmath::Svtvp (nqtot, df[8][0], &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1193 Vmath::Svtsvtp(nqtot, df[1][0], &h0[0], 1, df[2][0], &h2[0], 1, &wsp4[0], 1);
1194 Vmath::Svtsvtp(nqtot, df[4][0], &h0[0], 1, df[5][0], &h2[0], 1, &wsp5[0], 1);
1195 Vmath::Svtsvtp(nqtot, df[7][0], &h0[0], 1, df[8][0], &h2[0], 1, &wsp6[0], 1);
1198 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1199 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1202 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1203 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1206 Vmath::Svtsvtp(nqtot, df[2][0], &wsp4[0], 1, df[5][0], &wsp5[0], 1, &g5[0], 1);
1207 Vmath::Svtvp (nqtot, df[8][0], &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1210 Vmath::Fill(nqtot, df[2][0]*df[2][0] + df[5][0]*df[5][0] + df[8][0]*df[8][0], &g2[0], 1);
1213 for (
unsigned int i = 0; i < dim; ++i)
1215 for (
unsigned int j = i; j < dim; ++j)
1236 int nquad0 =
m_base[0]->GetNumPoints();
1237 int nquad1 =
m_base[1]->GetNumPoints();
1238 int nq2 =
m_base[2]->GetNumPoints();
1239 int nqtot = nquad0*nquad1*nq2;
1241 ASSERTL1(wsp.num_elements() >= 6*nqtot,
1242 "Insufficient workspace size.");
1244 "Workspace not set up for ncoeffs > nqtot");
1271 StdExpansion3D::PhysTensorDeriv(inarray,wsp0,wsp1,wsp2);
1277 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
1278 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
1279 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
1280 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
1281 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
1282 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)
int GetFaceNumPoints(const int i) const
This function returns the number of quadrature points belonging to the i-th face. ...
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)
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
StdRegions::Orientation GetForient(int face)
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
virtual void v_GetFacePhysVals(const int face, const StdRegions::StdExpansionSharedPtr &FaceExp, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, StdRegions::Orientation orient)
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.