42 namespace LocalRegions
63 std::bind(&
PyrExp::CreateMatrix, this, std::placeholders::_1),
64 std::string(
"PyrExpMatrix")),
65 m_staticCondMatrixManager(
66 std::bind(&
PyrExp::CreateStaticCondMatrix, this, std::placeholders::_1),
67 std::string(
"PyrExpStaticCondMatrix"))
77 m_matrixManager(T.m_matrixManager),
78 m_staticCondMatrixManager(T.m_staticCondMatrixManager)
113 int nquad0 =
m_base[0]->GetNumPoints();
114 int nquad1 =
m_base[1]->GetNumPoints();
115 int nquad2 =
m_base[2]->GetNumPoints();
130 return StdPyrExp::v_Integral(tmp);
143 int nquad0 =
m_base[0]->GetNumPoints();
144 int nquad1 =
m_base[1]->GetNumPoints();
145 int nquad2 =
m_base[2]->GetNumPoints();
152 StdPyrExp::v_PhysDeriv(inarray, diff0, diff1, diff2);
156 if(out_d0.num_elements())
158 Vmath::Vmul (nquad0*nquad1*nquad2,&gmat[0][0],1,&diff0[0],1, &out_d0[0], 1);
159 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[1][0],1,&diff1[0],1, &out_d0[0], 1,&out_d0[0],1);
160 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[2][0],1,&diff2[0],1, &out_d0[0], 1,&out_d0[0],1);
163 if(out_d1.num_elements())
165 Vmath::Vmul (nquad0*nquad1*nquad2,&gmat[3][0],1,&diff0[0],1, &out_d1[0], 1);
166 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[4][0],1,&diff1[0],1, &out_d1[0], 1,&out_d1[0],1);
167 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[5][0],1,&diff2[0],1, &out_d1[0], 1,&out_d1[0],1);
170 if(out_d2.num_elements())
172 Vmath::Vmul (nquad0*nquad1*nquad2,&gmat[6][0],1,&diff0[0],1, &out_d2[0], 1);
173 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[7][0],1,&diff1[0],1, &out_d2[0], 1, &out_d2[0],1);
174 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[8][0],1,&diff2[0],1, &out_d2[0], 1, &out_d2[0],1);
179 if(out_d0.num_elements())
181 Vmath::Smul (nquad0*nquad1*nquad2,gmat[0][0],&diff0[0],1, &out_d0[0], 1);
182 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[1][0],&diff1[0],1, &out_d0[0], 1);
183 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[2][0],&diff2[0],1, &out_d0[0], 1);
186 if(out_d1.num_elements())
188 Vmath::Smul (nquad0*nquad1*nquad2,gmat[3][0],&diff0[0],1, &out_d1[0], 1);
189 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[4][0],&diff1[0],1, &out_d1[0], 1);
190 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[5][0],&diff2[0],1, &out_d1[0], 1);
193 if(out_d2.num_elements())
195 Vmath::Smul (nquad0*nquad1*nquad2,gmat[6][0],&diff0[0],1, &out_d2[0], 1);
196 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[7][0],&diff1[0],1, &out_d2[0], 1);
197 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[8][0],&diff2[0],1, &out_d2[0], 1);
223 if(
m_base[0]->Collocation() &&
224 m_base[1]->Collocation() &&
288 bool multiplybyweights)
290 const int nquad0 =
m_base[0]->GetNumPoints();
291 const int nquad1 =
m_base[1]->GetNumPoints();
292 const int nquad2 =
m_base[2]->GetNumPoints();
293 const int order0 =
m_base[0]->GetNumModes();
294 const int order1 =
m_base[1]->GetNumModes();
298 if(multiplybyweights)
315 inarray,outarray,wsp,
364 const int nquad0 =
m_base[0]->GetNumPoints();
365 const int nquad1 =
m_base[1]->GetNumPoints();
366 const int nquad2 =
m_base[2]->GetNumPoints();
367 const int order0 =
m_base[0]->GetNumModes ();
368 const int order1 =
m_base[1]->GetNumModes ();
369 const int nqtot = nquad0*nquad1*nquad2;
394 Vmath::Vmul(nqtot,&df[3*dir][0], 1,tmp1.get(),1,tmp2.get(),1);
395 Vmath::Vmul(nqtot,&df[3*dir+1][0],1,tmp1.get(),1,tmp3.get(),1);
396 Vmath::Vmul(nqtot,&df[3*dir+2][0],1,tmp1.get(),1,tmp4.get(),1);
400 Vmath::Smul(nqtot, df[3*dir][0], tmp1.get(),1,tmp2.get(), 1);
401 Vmath::Smul(nqtot, df[3*dir+1][0],tmp1.get(),1,tmp3.get(), 1);
402 Vmath::Smul(nqtot, df[3*dir+2][0],tmp1.get(),1,tmp4.get(), 1);
406 for (i = 0; i < nquad0; ++i)
408 gfac0[i] = 0.5*(1+z0[i]);
412 for(i = 0; i < nquad1; ++i)
414 gfac1[i] = 0.5*(1+z1[i]);
418 for (i = 0; i < nquad2; ++i)
420 gfac2[i] = 2.0/(1-z2[i]);
423 const int nq01 = nquad0*nquad1;
425 for (i = 0; i < nquad2; ++i)
427 Vmath::Smul(nq01,gfac2[i],&tmp2[0]+i*nq01,1,&tmp2[0]+i*nq01,1);
428 Vmath::Smul(nq01,gfac2[i],&tmp3[0]+i*nq01,1,&tmp3[0]+i*nq01,1);
429 Vmath::Smul(nq01,gfac2[i],&tmp4[0]+i*nq01,1,&tmp5[0]+i*nq01,1);
433 for(i = 0; i < nquad1*nquad2; ++i)
440 Vmath::Vadd(nqtot, &tmp2[0], 1, &wsp[0], 1, &tmp2[0], 1);
443 for(i = 0; i < nquad1*nquad2; ++i)
447 &tmp5[0]+i*nquad0,1);
449 Vmath::Vadd(nqtot, &tmp3[0], 1, &tmp5[0], 1, &tmp3[0], 1);
485 m_base[2]->GetBasisKey());
491 2,
m_base[0]->GetPointsKey());
493 2,
m_base[1]->GetPointsKey());
495 2,
m_base[2]->GetPointsKey());
510 ASSERTL1(Lcoords[0] <= -1.0 && Lcoords[0] >= 1.0 &&
511 Lcoords[1] <= -1.0 && Lcoords[1] >= 1.0 &&
512 Lcoords[2] <= -1.0 && Lcoords[2] >= 1.0,
513 "Local coordinates are not in region [-1,1]");
517 for(i = 0; i <
m_geom->GetCoordim(); ++i)
519 coords[i] =
m_geom->GetCoord(i,Lcoords);
534 const std::vector<unsigned int > &nummodes,
535 const int mode_offset,
537 std::vector<LibUtilities::BasisType> &fromType)
539 int data_order0 = nummodes[mode_offset];
540 int fillorder0 = min(
m_base[0]->GetNumModes(),data_order0);
541 int data_order1 = nummodes[mode_offset+1];
542 int order1 =
m_base[1]->GetNumModes();
543 int fillorder1 = min(order1,data_order1);
544 int data_order2 = nummodes[mode_offset+2];
545 int order2 =
m_base[2]->GetNumModes();
546 int fillorder2 = min(order2,data_order2);
553 data_order0 != fillorder0 ||
554 data_order1 != fillorder1 ||
555 data_order2 != fillorder2)
562 fromType[0], data_order0,
m_base[0]->GetPointsKey()),
564 fromType[1], data_order1,
m_base[1]->GetPointsKey()),
566 fromType[2], data_order2,
m_base[2]->GetPointsKey()));
570 m_base[2]->GetBasisKey());
578 Vmath::Vcopy(tmpOut.num_elements(), &tmpOut[0], 1, coeffs, 1);
597 return StdPyrExp::v_PhysEvaluate(Lcoord,physvals);
608 m_geom->GetLocCoords(coord, Lcoord);
610 return StdPyrExp::v_PhysEvaluate(Lcoord, physvals);
620 return m_geom->GetCoordim();
626 int nquad0 =
m_base[0]->GetNumPoints();
627 int nquad1 =
m_base[1]->GetNumPoints();
628 int nquad2 =
m_base[2]->GetNumPoints();
638 if(outarray.num_elements()!=nq0*nq1)
644 for(
int i = 0; i < nquad0*nquad1; ++i)
653 if(outarray.num_elements()!=nq0*nq1)
659 for (
int k=0; k<nquad2; k++)
661 for(
int i = 0; i < nquad0; ++i)
663 outarray[k*nquad0+i] = (nquad0*nquad1*k)+i;
671 if(outarray.num_elements()!=nq0*nq1)
677 for(
int j = 0; j < nquad1*nquad2; ++j)
679 outarray[j] = nquad0-1 + j*nquad0;
687 if(outarray.num_elements()!=nq0*nq1)
693 for (
int k=0; k<nquad2; k++)
695 for(
int i = 0; i < nquad0; ++i)
697 outarray[k*nquad0+i] = nquad0*(nquad1-1) + (nquad0*nquad1*k)+i;
705 if(outarray.num_elements()!=nq0*nq1)
711 for(
int j = 0; j < nquad1*nquad2; ++j)
713 outarray[j] = j*nquad0;
718 ASSERTL0(
false,
"face value (> 4) is out of range");
729 for(
int i = 0; i < ptsKeys.size(); ++i)
754 for (i = 0; i < vCoordDim; ++i)
769 for(i = 0; i < vCoordDim; ++i)
771 normal[i][0] = -df[3*i+2][0];
777 for(i = 0; i < vCoordDim; ++i)
779 normal[i][0] = -df[3*i+1][0];
785 for(i = 0; i < vCoordDim; ++i)
787 normal[i][0] = df[3*i][0]+df[3*i+2][0];
793 for(i = 0; i < vCoordDim; ++i)
795 normal[i][0] = df[3*i+1][0]+df[3*i+2][0];
801 for(i = 0; i < vCoordDim; ++i)
803 normal[i][0] = -df[3*i][0];
808 ASSERTL0(
false,
"face is out of range (face < 4)");
813 for(i = 0; i < vCoordDim; ++i)
815 fac += normal[i][0]*normal[i][0];
818 for (i = 0; i < vCoordDim; ++i)
828 int nq0 = ptsKeys[0].GetNumPoints();
829 int nq1 = ptsKeys[1].GetNumPoints();
830 int nq2 = ptsKeys[2].GetNumPoints();
839 else if (face == 1 || face == 3)
861 for(j = 0; j < nq01; ++j)
863 normals[j] = -df[2][j]*jac[j];
864 normals[nqtot+j] = -df[5][j]*jac[j];
865 normals[2*nqtot+j] = -df[8][j]*jac[j];
869 points0 = ptsKeys[0];
870 points1 = ptsKeys[1];
876 for (j = 0; j < nq0; ++j)
878 for(k = 0; k < nq2; ++k)
882 -df[1][tmp]*jac[tmp];
883 normals[nqtot+j+k*nq0] =
884 -df[4][tmp]*jac[tmp];
885 normals[2*nqtot+j+k*nq0] =
886 -df[7][tmp]*jac[tmp];
887 faceJac[j+k*nq0] = jac[tmp];
891 points0 = ptsKeys[0];
892 points1 = ptsKeys[2];
898 for (j = 0; j < nq1; ++j)
900 for(k = 0; k < nq2; ++k)
902 int tmp = nq0-1+nq0*j+nq01*k;
904 (df[0][tmp]+df[2][tmp])*jac[tmp];
905 normals[nqtot+j+k*nq1] =
906 (df[3][tmp]+df[5][tmp])*jac[tmp];
907 normals[2*nqtot+j+k*nq1] =
908 (df[6][tmp]+df[8][tmp])*jac[tmp];
909 faceJac[j+k*nq1] = jac[tmp];
913 points0 = ptsKeys[1];
914 points1 = ptsKeys[2];
920 for (j = 0; j < nq0; ++j)
922 for(k = 0; k < nq2; ++k)
924 int tmp = nq0*(nq1-1) + j + nq01*k;
926 (df[1][tmp]+df[2][tmp])*jac[tmp];
927 normals[nqtot+j+k*nq0] =
928 (df[4][tmp]+df[5][tmp])*jac[tmp];
929 normals[2*nqtot+j+k*nq0] =
930 (df[7][tmp]+df[8][tmp])*jac[tmp];
931 faceJac[j+k*nq0] = jac[tmp];
935 points0 = ptsKeys[0];
936 points1 = ptsKeys[2];
942 for (j = 0; j < nq1; ++j)
944 for(k = 0; k < nq2; ++k)
946 int tmp = j*nq0+nq01*k;
948 -df[0][tmp]*jac[tmp];
949 normals[nqtot+j+k*nq1] =
950 -df[3][tmp]*jac[tmp];
951 normals[2*nqtot+j+k*nq1] =
952 -df[6][tmp]*jac[tmp];
953 faceJac[j+k*nq1] = jac[tmp];
957 points0 = ptsKeys[1];
958 points1 = ptsKeys[2];
963 ASSERTL0(
false,
"face is out of range (face < 4)");
972 Vmath::Sdiv(nq_face, 1.0, &work[0], 1, &work[0], 1);
975 for(i = 0; i < vCoordDim; ++i)
982 Vmath::Vmul(nq_face,work,1,normal[i],1,normal[i],1);
989 Vmath::Vvtvp(nq_face,normal[i],1,normal[i],1,work,1,work,1);
997 Vmath::Vmul(nq_face,normal[i],1,work,1,normal[i],1);
1025 StdPyrExp::v_SVVLaplacianFilter( array, mkey);
1051 returnval = StdPyrExp::v_GenMatrix(mkey);
1065 return tmp->GetStdMatrix(mkey);
1165 int rows = lap00.GetRows();
1166 int cols = lap00.GetColumns();
1171 (*lap) = gmat[0][0]*lap00
1176 + gmat[7][0]*(lap12 +
Transpose(lap12));
1191 int rows = LapMat.GetRows();
1192 int cols = LapMat.GetColumns();
1196 (*helm) = LapMat + factor*MassMat;
1239 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
1240 unsigned int exp_size[] = {nbdry, nint};
1241 unsigned int nblks = 2;
1252 goto UseLocRegionsMatrix;
1258 goto UseLocRegionsMatrix;
1263 factor = mat->Scale();
1264 goto UseStdRegionsMatrix;
1267 UseStdRegionsMatrix:
1282 UseLocRegionsMatrix:
1298 for(i = 0; i < nbdry; ++i)
1300 for(j = 0; j < nbdry; ++j)
1302 (*A)(i,j) = mat(bmap[i],bmap[j]);
1305 for(j = 0; j < nint; ++j)
1307 (*B)(i,j) = mat(bmap[i],imap[j]);
1311 for(i = 0; i < nint; ++i)
1313 for(j = 0; j < nbdry; ++j)
1315 (*C)(i,j) = mat(imap[i],bmap[j]);
1318 for(j = 0; j < nint; ++j)
1320 (*D)(i,j) = mat(imap[i],imap[j]);
1329 (*A) = (*A) - (*B)*(*C);
1352 const unsigned int dim = 3;
1359 for (
unsigned int i = 0; i < dim; ++i)
1361 for (
unsigned int j = i; j < dim; ++j)
1392 const unsigned int nquad0 =
m_base[0]->GetNumPoints();
1393 const unsigned int nquad1 =
m_base[1]->GetNumPoints();
1394 const unsigned int nquad2 =
m_base[2]->GetNumPoints();
1397 for(j = 0; j < nquad2; ++j)
1399 for(i = 0; i < nquad1; ++i)
1401 Vmath::Fill(nquad0, 2.0/(1.0-z2[j]), &h0[0]+i*nquad0 + j*nquad0*nquad1,1);
1402 Vmath::Fill(nquad0, 1.0/(1.0-z2[j]), &h1[0]+i*nquad0 + j*nquad0*nquad1,1);
1403 Vmath::Fill(nquad0, (1.0+z1[i])/(1.0-z2[j]), &h2[0]+i*nquad0 + j*nquad0*nquad1,1);
1406 for(i = 0; i < nquad0; i++)
1408 Blas::Dscal(nquad1*nquad2, 1+z0[i], &h1[0]+i, nquad0);
1417 Vmath::Vvtvvtp(nqtot, &df[0][0], 1, &h0[0], 1, &df[2][0], 1, &h1[0], 1, &wsp1[0], 1);
1418 Vmath::Vvtvvtp(nqtot, &df[3][0], 1, &h0[0], 1, &df[5][0], 1, &h1[0], 1, &wsp2[0], 1);
1419 Vmath::Vvtvvtp(nqtot, &df[6][0], 1, &h0[0], 1, &df[8][0], 1, &h1[0], 1, &wsp3[0], 1);
1422 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1423 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1426 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp1[0], 1, &df[5][0], 1, &wsp2[0], 1, &g4[0], 1);
1427 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1430 Vmath::Vvtvvtp(nqtot, &df[1][0], 1, &h0[0], 1, &df[2][0], 1, &h2[0], 1, &wsp4[0], 1);
1431 Vmath::Vvtvvtp(nqtot, &df[4][0], 1, &h0[0], 1, &df[5][0], 1, &h2[0], 1, &wsp5[0], 1);
1432 Vmath::Vvtvvtp(nqtot, &df[7][0], 1, &h0[0], 1, &df[8][0], 1, &h2[0], 1, &wsp6[0], 1);
1435 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1436 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1439 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1440 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1443 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp4[0], 1, &df[5][0], 1, &wsp5[0], 1, &g5[0], 1);
1444 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1447 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &df[2][0], 1, &df[5][0], 1, &df[5][0], 1, &g2[0], 1);
1448 Vmath::Vvtvp (nqtot, &df[8][0], 1, &df[8][0], 1, &g2[0], 1, &g2[0], 1);
1453 Vmath::Svtsvtp(nqtot, df[0][0], &h0[0], 1, df[2][0], &h1[0], 1, &wsp1[0], 1);
1454 Vmath::Svtsvtp(nqtot, df[3][0], &h0[0], 1, df[5][0], &h1[0], 1, &wsp2[0], 1);
1455 Vmath::Svtsvtp(nqtot, df[6][0], &h0[0], 1, df[8][0], &h1[0], 1, &wsp3[0], 1);
1458 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1459 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1462 Vmath::Svtsvtp(nqtot, df[2][0], &wsp1[0], 1, df[5][0], &wsp2[0], 1, &g4[0], 1);
1463 Vmath::Svtvp (nqtot, df[8][0], &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1466 Vmath::Svtsvtp(nqtot, df[1][0], &h0[0], 1, df[2][0], &h2[0], 1, &wsp4[0], 1);
1467 Vmath::Svtsvtp(nqtot, df[4][0], &h0[0], 1, df[5][0], &h2[0], 1, &wsp5[0], 1);
1468 Vmath::Svtsvtp(nqtot, df[7][0], &h0[0], 1, df[8][0], &h2[0], 1, &wsp6[0], 1);
1471 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1472 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1475 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1476 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1479 Vmath::Svtsvtp(nqtot, df[2][0], &wsp4[0], 1, df[5][0], &wsp5[0], 1, &g5[0], 1);
1480 Vmath::Svtvp (nqtot, df[8][0], &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1483 Vmath::Fill(nqtot, df[2][0]*df[2][0] + df[5][0]*df[5][0] + df[8][0]*df[8][0], &g2[0], 1);
1486 for (
unsigned int i = 0; i < dim; ++i)
1488 for (
unsigned int j = i; j < dim; ++j)
1509 int nquad0 =
m_base[0]->GetNumPoints();
1510 int nquad1 =
m_base[1]->GetNumPoints();
1511 int nq2 =
m_base[2]->GetNumPoints();
1512 int nqtot = nquad0*nquad1*nq2;
1514 ASSERTL1(wsp.num_elements() >= 6*nqtot,
1515 "Insufficient workspace size.");
1517 "Workspace not set up for ncoeffs > nqtot");
1544 StdExpansion3D::PhysTensorDeriv(inarray,wsp0,wsp1,wsp2);
1550 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
1551 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
1552 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
1553 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
1554 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
1555 Vmath::Vvtvp (nqtot,&metric22[0],1,&wsp2[0],1,&wsp5[0],1,&wsp5[0],1);
#define ASSERTL0(condition, msg)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
#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.
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
SpatialDomains::GeometrySharedPtr GetGeom() const
SpatialDomains::GeometrySharedPtr m_geom
DNekMatSharedPtr BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
void ComputeLaplacianMetric()
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)
virtual int v_GetCoordim()
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdRegions::StdMatrixKey &mkey)
virtual DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey)
void v_DropLocStaticCondMatrix(const MatrixKey &mkey)
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 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 v_IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
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.
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &Lcoord, const Array< OneD, const NekDouble > &physvals)
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
virtual void v_ComputeLaplacianMetric()
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const
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.
virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey)
void v_ComputeFaceNormal(const int face)
virtual void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords)
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrate the physical point list inarray over pyramidic region and return the value.
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 void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int mode_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Calculates the inner product .
virtual void v_GetFacePhysMap(const int face, Array< OneD, int > &outarray)
virtual void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true)
DNekScalMatSharedPtr CreateMatrix(const MatrixKey &mkey)
virtual void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp)
DNekScalBlkMatSharedPtr CreateStaticCondMatrix(const MatrixKey &mkey)
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.
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)
std::map< int, NormalVector > m_faceNormals
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)
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)
const LibUtilities::BasisKey DetFaceBasisKey(const int i, const int k) const
Array< OneD, LibUtilities::BasisSharedPtr > m_base
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 Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
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.
int getNumberOfCoefficients(int Na)
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
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< PyrGeom > PyrGeomSharedPtr
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
std::shared_ptr< StdPyrExp > StdPyrExpSharedPtr
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
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 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):
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 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
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*y.
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)