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);
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);
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);
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);
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);
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);
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;
415 const int nquad0 =
m_base[0]->GetNumPoints();
416 const int nquad1 =
m_base[1]->GetNumPoints();
417 const int nquad2 =
m_base[2]->GetNumPoints();
418 const int order0 =
m_base[0]->GetNumModes ();
419 const int order1 =
m_base[1]->GetNumModes ();
420 const int nqtot = nquad0*nquad1*nquad2;
431 order0*nquad2*(nquad1+order1)));
445 Vmath::Vmul(nqtot,&df[3*dir][0], 1,tmp1.get(),1,tmp2.get(),1);
446 Vmath::Vmul(nqtot,&df[3*dir+1][0],1,tmp1.get(),1,tmp3.get(),1);
447 Vmath::Vmul(nqtot,&df[3*dir+2][0],1,tmp1.get(),1,tmp4.get(),1);
451 Vmath::Smul(nqtot, df[3*dir][0], tmp1.get(),1,tmp2.get(), 1);
452 Vmath::Smul(nqtot, df[3*dir+1][0],tmp1.get(),1,tmp3.get(), 1);
453 Vmath::Smul(nqtot, df[3*dir+2][0],tmp1.get(),1,tmp4.get(), 1);
457 for (
int i = 0; i < nquad0; ++i)
459 gfac0[i] = 0.5*(1+z0[i]);
463 for(
int i = 0; i < nquad1; ++i)
465 gfac1[i] = 0.5*(1+z1[i]);
469 for (
int i = 0; i < nquad2; ++i)
471 gfac2[i] = 2.0/(1-z2[i]);
474 const int nq01 = nquad0*nquad1;
476 for (
int i = 0; i < nquad2; ++i)
478 Vmath::Smul(nq01,gfac2[i],&tmp2[0]+i*nq01,1,&tmp2[0]+i*nq01,1);
479 Vmath::Smul(nq01,gfac2[i],&tmp3[0]+i*nq01,1,&tmp3[0]+i*nq01,1);
480 Vmath::Smul(nq01,gfac2[i],&tmp4[0]+i*nq01,1,&tmp5[0]+i*nq01,1);
484 for (
int i = 0; i < nquad1*nquad2; ++i)
491 Vmath::Vadd(nqtot, &tmp2[0], 1, &wsp[0], 1, &tmp2[0], 1);
494 for (
int i = 0; i < nquad1*nquad2; ++i)
498 &tmp5[0]+i*nquad0,1);
500 Vmath::Vadd(nqtot, &tmp3[0], 1, &tmp5[0], 1, &tmp3[0], 1);
512 m_base[2]->GetBasisKey());
518 2,
m_base[0]->GetPointsKey());
520 2,
m_base[1]->GetPointsKey());
522 2,
m_base[2]->GetPointsKey());
537 ASSERTL1(Lcoords[0] <= -1.0 && Lcoords[0] >= 1.0 &&
538 Lcoords[1] <= -1.0 && Lcoords[1] >= 1.0 &&
539 Lcoords[2] <= -1.0 && Lcoords[2] >= 1.0,
540 "Local coordinates are not in region [-1,1]");
544 for(i = 0; i <
m_geom->GetCoordim(); ++i)
546 coords[i] =
m_geom->GetCoord(i,Lcoords);
561 const std::vector<unsigned int > &nummodes,
562 const int mode_offset,
564 std::vector<LibUtilities::BasisType> &fromType)
566 int data_order0 = nummodes[mode_offset];
567 int fillorder0 = min(
m_base[0]->GetNumModes(),data_order0);
568 int data_order1 = nummodes[mode_offset+1];
569 int order1 =
m_base[1]->GetNumModes();
570 int fillorder1 = min(order1,data_order1);
571 int data_order2 = nummodes[mode_offset+2];
572 int order2 =
m_base[2]->GetNumModes();
573 int fillorder2 = min(order2,data_order2);
580 data_order0 != fillorder0 ||
581 data_order1 != fillorder1 ||
582 data_order2 != fillorder2)
589 fromType[0], data_order0,
m_base[0]->GetPointsKey()),
591 fromType[1], data_order1,
m_base[1]->GetPointsKey()),
593 fromType[2], data_order2,
m_base[2]->GetPointsKey()));
597 m_base[2]->GetBasisKey());
624 return StdPyrExp::v_PhysEvaluate(Lcoord,physvals);
635 m_geom->GetLocCoords(coord, Lcoord);
637 return StdPyrExp::v_PhysEvaluate(Lcoord, physvals);
647 return m_geom->GetCoordim();
653 int nquad0 =
m_base[0]->GetNumPoints();
654 int nquad1 =
m_base[1]->GetNumPoints();
655 int nquad2 =
m_base[2]->GetNumPoints();
665 if(outarray.size()!=nq0*nq1)
671 for(
int i = 0; i < nquad0*nquad1; ++i)
680 if(outarray.size()!=nq0*nq1)
686 for (
int k=0; k<nquad2; k++)
688 for(
int i = 0; i < nquad0; ++i)
690 outarray[k*nquad0+i] = (nquad0*nquad1*k)+i;
698 if(outarray.size()!=nq0*nq1)
704 for(
int j = 0; j < nquad1*nquad2; ++j)
706 outarray[j] = nquad0-1 + j*nquad0;
714 if(outarray.size()!=nq0*nq1)
720 for (
int k=0; k<nquad2; k++)
722 for(
int i = 0; i < nquad0; ++i)
724 outarray[k*nquad0+i] = nquad0*(nquad1-1) + (nquad0*nquad1*k)+i;
732 if(outarray.size()!=nq0*nq1)
738 for(
int j = 0; j < nquad1*nquad2; ++j)
740 outarray[j] = j*nquad0;
745 ASSERTL0(
false,
"face value (> 4) is out of range");
756 for(
int i = 0; i < ptsKeys.size(); ++i)
781 for (i = 0; i < vCoordDim; ++i)
786 size_t nqb = nq_face;
801 for(i = 0; i < vCoordDim; ++i)
803 normal[i][0] = -df[3*i+2][0];
809 for(i = 0; i < vCoordDim; ++i)
811 normal[i][0] = -df[3*i+1][0];
817 for(i = 0; i < vCoordDim; ++i)
819 normal[i][0] = df[3*i][0]+df[3*i+2][0];
825 for(i = 0; i < vCoordDim; ++i)
827 normal[i][0] = df[3*i+1][0]+df[3*i+2][0];
833 for(i = 0; i < vCoordDim; ++i)
835 normal[i][0] = -df[3*i][0];
840 ASSERTL0(
false,
"face is out of range (face < 4)");
845 for(i = 0; i < vCoordDim; ++i)
847 fac += normal[i][0]*normal[i][0];
853 for (i = 0; i < vCoordDim; ++i)
863 int nq0 = ptsKeys[0].GetNumPoints();
864 int nq1 = ptsKeys[1].GetNumPoints();
865 int nq2 = ptsKeys[2].GetNumPoints();
874 else if (face == 1 || face == 3)
896 for(j = 0; j < nq01; ++j)
898 normals[j] = -df[2][j]*jac[j];
899 normals[nqtot+j] = -df[5][j]*jac[j];
900 normals[2*nqtot+j] = -df[8][j]*jac[j];
904 points0 = ptsKeys[0];
905 points1 = ptsKeys[1];
911 for (j = 0; j < nq0; ++j)
913 for(k = 0; k < nq2; ++k)
917 -df[1][tmp]*jac[tmp];
918 normals[nqtot+j+k*nq0] =
919 -df[4][tmp]*jac[tmp];
920 normals[2*nqtot+j+k*nq0] =
921 -df[7][tmp]*jac[tmp];
922 faceJac[j+k*nq0] = jac[tmp];
926 points0 = ptsKeys[0];
927 points1 = ptsKeys[2];
933 for (j = 0; j < nq1; ++j)
935 for(k = 0; k < nq2; ++k)
937 int tmp = nq0-1+nq0*j+nq01*k;
939 (df[0][tmp]+df[2][tmp])*jac[tmp];
940 normals[nqtot+j+k*nq1] =
941 (df[3][tmp]+df[5][tmp])*jac[tmp];
942 normals[2*nqtot+j+k*nq1] =
943 (df[6][tmp]+df[8][tmp])*jac[tmp];
944 faceJac[j+k*nq1] = jac[tmp];
948 points0 = ptsKeys[1];
949 points1 = ptsKeys[2];
955 for (j = 0; j < nq0; ++j)
957 for(k = 0; k < nq2; ++k)
959 int tmp = nq0*(nq1-1) + j + nq01*k;
961 (df[1][tmp]+df[2][tmp])*jac[tmp];
962 normals[nqtot+j+k*nq0] =
963 (df[4][tmp]+df[5][tmp])*jac[tmp];
964 normals[2*nqtot+j+k*nq0] =
965 (df[7][tmp]+df[8][tmp])*jac[tmp];
966 faceJac[j+k*nq0] = jac[tmp];
970 points0 = ptsKeys[0];
971 points1 = ptsKeys[2];
977 for (j = 0; j < nq1; ++j)
979 for(k = 0; k < nq2; ++k)
981 int tmp = j*nq0+nq01*k;
983 -df[0][tmp]*jac[tmp];
984 normals[nqtot+j+k*nq1] =
985 -df[3][tmp]*jac[tmp];
986 normals[2*nqtot+j+k*nq1] =
987 -df[6][tmp]*jac[tmp];
988 faceJac[j+k*nq1] = jac[tmp];
992 points0 = ptsKeys[1];
993 points1 = ptsKeys[2];
998 ASSERTL0(
false,
"face is out of range (face < 4)");
1007 Vmath::Sdiv(nq_face, 1.0, &work[0], 1, &work[0], 1);
1010 for(i = 0; i < vCoordDim; ++i)
1017 Vmath::Vmul(nq_face,work,1,normal[i],1,normal[i],1);
1024 Vmath::Vvtvp(nq_face,normal[i],1,normal[i],1,work,1,work,1);
1034 Vmath::Vmul(nq_face,normal[i],1,work,1,normal[i],1);
1062 StdPyrExp::v_SVVLaplacianFilter( array, mkey);
1088 returnval = StdPyrExp::v_GenMatrix(mkey);
1102 return tmp->GetStdMatrix(mkey);
1202 int rows = lap00.GetRows();
1203 int cols = lap00.GetColumns();
1208 (*lap) = gmat[0][0]*lap00
1213 + gmat[7][0]*(lap12 +
Transpose(lap12));
1228 int rows = LapMat.GetRows();
1229 int cols = LapMat.GetColumns();
1233 (*helm) = LapMat + factor*MassMat;
1276 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
1277 unsigned int exp_size[] = {nbdry, nint};
1278 unsigned int nblks = 2;
1289 goto UseLocRegionsMatrix;
1295 goto UseLocRegionsMatrix;
1300 factor = mat->Scale();
1301 goto UseStdRegionsMatrix;
1304 UseStdRegionsMatrix:
1319 UseLocRegionsMatrix:
1335 for(i = 0; i < nbdry; ++i)
1337 for(j = 0; j < nbdry; ++j)
1339 (*A)(i,j) = mat(bmap[i],bmap[j]);
1342 for(j = 0; j < nint; ++j)
1344 (*B)(i,j) = mat(bmap[i],imap[j]);
1348 for(i = 0; i < nint; ++i)
1350 for(j = 0; j < nbdry; ++j)
1352 (*C)(i,j) = mat(imap[i],bmap[j]);
1355 for(j = 0; j < nint; ++j)
1357 (*D)(i,j) = mat(imap[i],imap[j]);
1366 (*A) = (*A) - (*B)*(*C);
1389 const unsigned int dim = 3;
1396 for (
unsigned int i = 0; i < dim; ++i)
1398 for (
unsigned int j = i; j < dim; ++j)
1429 const unsigned int nquad0 =
m_base[0]->GetNumPoints();
1430 const unsigned int nquad1 =
m_base[1]->GetNumPoints();
1431 const unsigned int nquad2 =
m_base[2]->GetNumPoints();
1434 for(j = 0; j < nquad2; ++j)
1436 for(i = 0; i < nquad1; ++i)
1438 Vmath::Fill(nquad0, 2.0/(1.0-z2[j]), &h0[0]+i*nquad0 + j*nquad0*nquad1,1);
1439 Vmath::Fill(nquad0, 1.0/(1.0-z2[j]), &h1[0]+i*nquad0 + j*nquad0*nquad1,1);
1440 Vmath::Fill(nquad0, (1.0+z1[i])/(1.0-z2[j]), &h2[0]+i*nquad0 + j*nquad0*nquad1,1);
1443 for(i = 0; i < nquad0; i++)
1445 Blas::Dscal(nquad1*nquad2, 1+z0[i], &h1[0]+i, nquad0);
1454 Vmath::Vvtvvtp(nqtot, &df[0][0], 1, &h0[0], 1, &df[2][0], 1, &h1[0], 1, &wsp1[0], 1);
1455 Vmath::Vvtvvtp(nqtot, &df[3][0], 1, &h0[0], 1, &df[5][0], 1, &h1[0], 1, &wsp2[0], 1);
1456 Vmath::Vvtvvtp(nqtot, &df[6][0], 1, &h0[0], 1, &df[8][0], 1, &h1[0], 1, &wsp3[0], 1);
1459 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1460 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1463 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp1[0], 1, &df[5][0], 1, &wsp2[0], 1, &g4[0], 1);
1464 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1467 Vmath::Vvtvvtp(nqtot, &df[1][0], 1, &h0[0], 1, &df[2][0], 1, &h2[0], 1, &wsp4[0], 1);
1468 Vmath::Vvtvvtp(nqtot, &df[4][0], 1, &h0[0], 1, &df[5][0], 1, &h2[0], 1, &wsp5[0], 1);
1469 Vmath::Vvtvvtp(nqtot, &df[7][0], 1, &h0[0], 1, &df[8][0], 1, &h2[0], 1, &wsp6[0], 1);
1472 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1473 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1476 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1477 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1480 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp4[0], 1, &df[5][0], 1, &wsp5[0], 1, &g5[0], 1);
1481 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1484 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &df[2][0], 1, &df[5][0], 1, &df[5][0], 1, &g2[0], 1);
1485 Vmath::Vvtvp (nqtot, &df[8][0], 1, &df[8][0], 1, &g2[0], 1, &g2[0], 1);
1490 Vmath::Svtsvtp(nqtot, df[0][0], &h0[0], 1, df[2][0], &h1[0], 1, &wsp1[0], 1);
1491 Vmath::Svtsvtp(nqtot, df[3][0], &h0[0], 1, df[5][0], &h1[0], 1, &wsp2[0], 1);
1492 Vmath::Svtsvtp(nqtot, df[6][0], &h0[0], 1, df[8][0], &h1[0], 1, &wsp3[0], 1);
1495 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1496 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1499 Vmath::Svtsvtp(nqtot, df[2][0], &wsp1[0], 1, df[5][0], &wsp2[0], 1, &g4[0], 1);
1500 Vmath::Svtvp (nqtot, df[8][0], &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1503 Vmath::Svtsvtp(nqtot, df[1][0], &h0[0], 1, df[2][0], &h2[0], 1, &wsp4[0], 1);
1504 Vmath::Svtsvtp(nqtot, df[4][0], &h0[0], 1, df[5][0], &h2[0], 1, &wsp5[0], 1);
1505 Vmath::Svtsvtp(nqtot, df[7][0], &h0[0], 1, df[8][0], &h2[0], 1, &wsp6[0], 1);
1508 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1509 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1512 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1513 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1516 Vmath::Svtsvtp(nqtot, df[2][0], &wsp4[0], 1, df[5][0], &wsp5[0], 1, &g5[0], 1);
1517 Vmath::Svtvp (nqtot, df[8][0], &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1520 Vmath::Fill(nqtot, df[2][0]*df[2][0] + df[5][0]*df[5][0] + df[8][0]*df[8][0], &g2[0], 1);
1523 for (
unsigned int i = 0; i < dim; ++i)
1525 for (
unsigned int j = i; j < dim; ++j)
1546 int nquad0 =
m_base[0]->GetNumPoints();
1547 int nquad1 =
m_base[1]->GetNumPoints();
1548 int nq2 =
m_base[2]->GetNumPoints();
1549 int nqtot = nquad0*nquad1*nq2;
1552 "Insufficient workspace size.");
1554 "Workspace not set up for ncoeffs > nqtot");
1581 StdExpansion3D::PhysTensorDeriv(inarray,wsp0,wsp1,wsp2);
1587 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
1588 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
1589 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
1590 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
1591 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
1592 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.
std::map< int, NormalVector > m_faceNormals
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
std::map< int, Array< OneD, NekDouble > > m_elmtBndNormDirElmtLen
the element length in each element boundary(Vertex, edge or face) normal direction calculated based o...
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 void v_GetTracePhysMap(const int face, Array< OneD, int > &outarray)
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)
void v_ComputeTraceNormal(const int face)
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)
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_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)
virtual void v_AlignVectorToCollapsedDir(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray)
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)
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)
const LibUtilities::BasisKey GetTraceBasisKey(const int i, int k=-1) const
This function returns the basis key belonging to the i-th trace.
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)
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
The above copyright notice and this permission notice shall be included.
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*x.
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)
scalarT< T > sqrt(scalarT< T > in)