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"))
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);
int GetNumPoints() const
Return points order at which basis is defined.
void ComputeLaplacianMetric()
const VarCoeffMap & GetVarCoeffs() const
DNekMatSharedPtr GenMatrix(const StdMatrixKey &mkey)
#define ASSERTL0(condition, msg)
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...
std::vector< PointsKey > PointsKeyVector
void v_ComputeFaceNormal(const int face)
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
virtual void v_ComputeLaplacianMetric()
int GetNumPoints(const int dir) const
This function returns the number of quadrature points in the dir direction.
void Vsqrt(int n, const T *x, const int incx, T *y, const int incy)
sqrt y = sqrt(x)
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const
void MultiplyByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
int NumBndryCoeffs(void) const
SpatialDomains::GeometrySharedPtr GetGeom() const
DNekScalMatSharedPtr CreateMatrix(const MatrixKey &mkey)
virtual void v_GetFacePhysMap(const int face, Array< OneD, int > &outarray)
std::shared_ptr< GeomFactors > GeomFactorsSharedPtr
Pointer to a GeomFactors object.
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
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(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Calculates the inner product .
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)
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.
virtual void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true)
DNekMatSharedPtr BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
std::shared_ptr< DNekMat > DNekMatSharedPtr
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.
SpatialDomains::GeometrySharedPtr m_geom
virtual void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp)
MatrixType GetMatrixType() const
DNekScalBlkMatSharedPtr GetLocStaticCondMatrix(const LocalRegions::MatrixKey &mkey)
PointsKey GetPointsKey() const
Return distribution of points.
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
virtual void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords)
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrate the physical point list inarray over pyramidic region and return the value.
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const
const LibUtilities::PointsKeyVector GetPointsKeys() const
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::shared_ptr< StdExpansion > StdExpansionSharedPtr
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)
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 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)
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
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
NekDouble GetConstFactor(const ConstFactorType &factor) const
void v_IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
void v_DropLocStaticCondMatrix(const MatrixKey &mkey)
std::shared_ptr< PyrGeom > PyrGeomSharedPtr
NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &Lcoord, const Array< OneD, const NekDouble > &physvals)
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
const ConstFactorMap & GetConstFactors() const
LibUtilities::PointsType GetPointsType(const int dir) const
This function returns the type of quadrature points used in the dir direction.
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
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):
bool ConstFactorExists(const ConstFactorType &factor) const
#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.
LibUtilities::BasisType GetBasisType(const int dir) const
This function returns the type of basis used in the dir direction.
const LibUtilities::BasisKey DetFaceBasisKey(const int i, const int k) const
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdRegions::StdMatrixKey &mkey)
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Backward transformation from coefficient space to physical space...
void ComputeQuadratureMetric()
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)
StdExpansion()
Default Constructor.
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
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.
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
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.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Geometry is curved or has non-constant factors.
LibUtilities::ShapeType GetShapeType() const
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.
std::shared_ptr< StdPyrExp > StdPyrExpSharedPtr
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.
void FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Forward transformation from physical space to coefficient space...