49 : StdExpansion(LibUtilities::StdPrismData::getNumberOfCoefficients(
50 Ba.GetNumModes(), Bb.GetNumModes(), Bc.GetNumModes()),
52 StdExpansion3D(LibUtilities::StdPrismData::getNumberOfCoefficients(
53 Ba.GetNumModes(), Bb.GetNumModes(), Bc.GetNumModes()),
58 m_staticCondMatrixManager(
std::bind(&
Expansion::CreateStaticCondMatrix,
59 this,
std::placeholders::_1))
64 : StdExpansion(T), StdExpansion3D(T), StdPrismExp(T),
Expansion(T),
66 m_staticCondMatrixManager(T.m_staticCondMatrixManager)
108 const int nquad1 =
m_base[1]->GetNumPoints();
109 const int nquad2 =
m_base[2]->GetNumPoints();
110 const int nqtot = nquad0 * nquad1 * nquad2;
128 m_base[2]->GetBdata(), tmp2, outarray, jac,
132 m_base[2]->GetBdata(), tmp3, tmp6, jac, Deformed);
136 m_base[2]->GetDbdata(), tmp4, tmp6, jac, Deformed);
144 const int nquad0 =
m_base[0]->GetNumPoints();
145 const int nquad1 =
m_base[1]->GetNumPoints();
146 const int nquad2 =
m_base[2]->GetNumPoints();
147 const int nqtot = nquad0 * nquad1 * nquad2;
164 Vmath::Vmul(nqtot, &df[3 * dir][0], 1, tmp1.data(), 1, tmp2.data(), 1);
165 Vmath::Vmul(nqtot, &df[3 * dir + 1][0], 1, tmp1.data(), 1, tmp3.data(),
167 Vmath::Vmul(nqtot, &df[3 * dir + 2][0], 1, tmp1.data(), 1, tmp4.data(),
172 Vmath::Smul(nqtot, df[3 * dir][0], tmp1.data(), 1, tmp2.data(), 1);
173 Vmath::Smul(nqtot, df[3 * dir + 1][0], tmp1.data(), 1, tmp3.data(), 1);
174 Vmath::Smul(nqtot, df[3 * dir + 2][0], tmp1.data(), 1, tmp4.data(), 1);
181 for (
int k = 0; k < nquad2; ++k)
183 g2 = 2.0 / (1.0 - z2[k]);
185 for (j = 0; j < nquad1; ++j)
187 for (i = 0; i < nquad0; ++i, ++cnt)
189 g0 = 0.5 * (1.0 + z0[i]);
191 tmp2[cnt] = g2 * tmp2[cnt] + g02 * tmp4[cnt];
205 m_base[2]->GetBasisKey());
211 m_base[0]->GetPointsKey());
213 m_base[1]->GetPointsKey());
215 m_base[2]->GetPointsKey());
218 bkey0, bkey1, bkey2);
230 ASSERTL1(Lcoords[0] <= -1.0 && Lcoords[0] >= 1.0 && Lcoords[1] <= -1.0 &&
231 Lcoords[1] >= 1.0 && Lcoords[2] <= -1.0 && Lcoords[2] >= 1.0,
232 "Local coordinates are not in region [-1,1]");
252 std::array<NekDouble, 3> &firstOrderDerivs)
257 return StdPrismExp::v_PhysEvalFirstDeriv(Lcoord, inarray, firstOrderDerivs);
265 const NekDouble *data,
const std::vector<unsigned int> &nummodes,
266 const int mode_offset,
NekDouble *coeffs,
267 [[maybe_unused]] std::vector<LibUtilities::BasisType> &fromType)
269 int data_order0 = nummodes[mode_offset];
270 int fillorder0 =
min(
m_base[0]->GetNumModes(), data_order0);
271 int data_order1 = nummodes[mode_offset + 1];
272 int order1 =
m_base[1]->GetNumModes();
273 int fillorder1 =
min(order1, data_order1);
274 int data_order2 = nummodes[mode_offset + 2];
275 int order2 =
m_base[2]->GetNumModes();
276 int fillorder2 =
min(order2, data_order2);
287 "Extraction routine not set up for this basis");
289 "Extraction routine not set up for this basis");
292 for (j = 0; j < fillorder0; ++j)
294 for (i = 0; i < fillorder1; ++i)
296 Vmath::Vcopy(fillorder2 - j, &data[cnt], 1, &coeffs[cnt1],
298 cnt += data_order2 - j;
303 for (i = fillorder1; i < data_order1; ++i)
305 cnt += data_order2 - j;
308 for (i = fillorder1; i < order1; ++i)
316 ASSERTL0(
false,
"basis is either not set up or not "
323 int nquad0 =
m_base[0]->GetNumPoints();
324 int nquad1 =
m_base[1]->GetNumPoints();
325 int nquad2 =
m_base[2]->GetNumPoints();
334 if (outarray.size() != nq0 * nq1)
340 for (
int i = 0; i < nquad0 * nquad1; ++i)
349 if (outarray.size() != nq0 * nq1)
355 for (
int k = 0; k < nquad2; k++)
357 for (
int i = 0; i < nquad0; ++i)
359 outarray[k * nquad0 + i] = (nquad0 * nquad1 * k) + i;
368 if (outarray.size() != nq0 * nq1)
374 for (
int j = 0; j < nquad1 * nquad2; ++j)
376 outarray[j] = nquad0 - 1 + j * nquad0;
382 if (outarray.size() != nq0 * nq1)
388 for (
int k = 0; k < nquad2; k++)
390 for (
int i = 0; i < nquad0; ++i)
392 outarray[k * nquad0 + i] =
393 nquad0 * (nquad1 - 1) + (nquad0 * nquad1 * k) + i;
401 if (outarray.size() != nq0 * nq1)
407 for (
int j = 0; j < nquad1 * nquad2; ++j)
409 outarray[j] = j * nquad0;
413 ASSERTL0(
false,
"face value (> 4) is out of range");
425 for (
int i = 0; i < ptsKeys.size(); ++i)
441 int nq0 = ptsKeys[0].GetNumPoints();
442 int nq1 = ptsKeys[1].GetNumPoints();
443 int nq2 = ptsKeys[2].GetNumPoints();
444 int nq01 = nq0 * nq1;
458 for (i = 0; i < vCoordDim; ++i)
463 size_t nqb = nq_face;
478 for (i = 0; i < vCoordDim; ++i)
480 normal[i][0] = -df[3 * i + 2][0];
486 for (i = 0; i < vCoordDim; ++i)
488 normal[i][0] = -df[3 * i + 1][0];
494 for (i = 0; i < vCoordDim; ++i)
496 normal[i][0] = df[3 * i][0] + df[3 * i + 2][0];
502 for (i = 0; i < vCoordDim; ++i)
504 normal[i][0] = df[3 * i + 1][0];
510 for (i = 0; i < vCoordDim; ++i)
512 normal[i][0] = -df[3 * i][0];
517 ASSERTL0(
false,
"face is out of range (face < 4)");
522 for (i = 0; i < vCoordDim; ++i)
524 fac += normal[i][0] * normal[i][0];
526 fac = 1.0 /
sqrt(fac);
530 for (i = 0; i < vCoordDim; ++i)
532 Vmath::Fill(nq_face, fac * normal[i][0], normal[i], 1);
545 else if (face == 1 || face == 3)
567 for (j = 0; j < nq01; ++j)
569 normals[j] = -df[2][j] * jac[j];
570 normals[nqtot + j] = -df[5][j] * jac[j];
571 normals[2 * nqtot + j] = -df[8][j] * jac[j];
575 points0 = ptsKeys[0];
576 points1 = ptsKeys[1];
582 for (j = 0; j < nq0; ++j)
584 for (k = 0; k < nq2; ++k)
586 int tmp = j + nq01 * k;
587 normals[j + k * nq0] = -df[1][tmp] * jac[tmp];
588 normals[nqtot + j + k * nq0] = -df[4][tmp] * jac[tmp];
589 normals[2 * nqtot + j + k * nq0] =
590 -df[7][tmp] * jac[tmp];
591 faceJac[j + k * nq0] = jac[tmp];
595 points0 = ptsKeys[0];
596 points1 = ptsKeys[2];
602 for (j = 0; j < nq1; ++j)
604 for (k = 0; k < nq2; ++k)
606 int tmp = nq0 - 1 + nq0 * j + nq01 * k;
607 normals[j + k * nq1] =
608 (df[0][tmp] + df[2][tmp]) * jac[tmp];
609 normals[nqtot + j + k * nq1] =
610 (df[3][tmp] + df[5][tmp]) * jac[tmp];
611 normals[2 * nqtot + j + k * nq1] =
612 (df[6][tmp] + df[8][tmp]) * jac[tmp];
613 faceJac[j + k * nq1] = jac[tmp];
617 points0 = ptsKeys[1];
618 points1 = ptsKeys[2];
624 for (j = 0; j < nq0; ++j)
626 for (k = 0; k < nq2; ++k)
628 int tmp = nq0 * (nq1 - 1) + j + nq01 * k;
629 normals[j + k * nq0] = df[1][tmp] * jac[tmp];
630 normals[nqtot + j + k * nq0] = df[4][tmp] * jac[tmp];
631 normals[2 * nqtot + j + k * nq0] =
632 df[7][tmp] * jac[tmp];
633 faceJac[j + k * nq0] = jac[tmp];
637 points0 = ptsKeys[0];
638 points1 = ptsKeys[2];
644 for (j = 0; j < nq1; ++j)
646 for (k = 0; k < nq2; ++k)
648 int tmp = j * nq0 + nq01 * k;
649 normals[j + k * nq1] = -df[0][tmp] * jac[tmp];
650 normals[nqtot + j + k * nq1] = -df[3][tmp] * jac[tmp];
651 normals[2 * nqtot + j + k * nq1] =
652 -df[6][tmp] * jac[tmp];
653 faceJac[j + k * nq1] = jac[tmp];
657 points0 = ptsKeys[1];
658 points1 = ptsKeys[2];
663 ASSERTL0(
false,
"face is out of range (face < 4)");
671 Vmath::Sdiv(nq_face, 1.0, &work[0], 1, &work[0], 1);
674 for (i = 0; i < vCoordDim; ++i)
679 Vmath::Vmul(nq_face, work, 1, normal[i], 1, normal[i], 1);
686 Vmath::Vvtvp(nq_face, normal[i], 1, normal[i], 1, work, 1, work, 1);
696 Vmath::Vmul(nq_face, normal[i], 1, work, 1, normal[i], 1);
705 StdExpansion::MassMatrixOp_MatFree(inarray, outarray, mkey);
720 StdExpansion::LaplacianMatrixOp_MatFree(k1, k2, inarray, outarray, mkey);
751 StdPrismExp::v_SVVLaplacianFilter(array, mkey);
777 returnval = StdPrismExp::v_GenMatrix(mkey);
793 return tmp->GetStdMatrix(mkey);
844 int nquad0 =
m_base[0]->GetNumPoints();
845 int nquad1 =
m_base[1]->GetNumPoints();
846 int nquad2 =
m_base[2]->GetNumPoints();
847 int nqtot = nquad0 * nquad1 * nquad2;
890 for (i = 0; i < nquad2; ++i)
893 &h0[0] + i * nquad0 * nquad1, 1);
895 &h1[0] + i * nquad0 * nquad1, 1);
897 for (i = 0; i < nquad0; i++)
899 Blas::Dscal(nquad1 * nquad2, 0.5 * (1 + z0[i]), &h1[0] + i, nquad0);
908 Vmath::Vvtvvtp(nqtot, &df[0][0], 1, &h0[0], 1, &df[2][0], 1, &h1[0], 1,
911 Vmath::Vvtvvtp(nqtot, &df[3][0], 1, &h0[0], 1, &df[5][0], 1, &h1[0], 1,
914 Vmath::Vvtvvtp(nqtot, &df[6][0], 1, &h0[0], 1, &df[8][0], 1, &h1[0], 1,
918 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0],
920 Vmath::Vvtvp(nqtot, &wsp6[0], 1, &wsp6[0], 1, &g0[0], 1, &g0[0], 1);
923 Vmath::Vvtvvtp(nqtot, &df[1][0], 1, &wsp4[0], 1, &df[4][0], 1, &wsp5[0],
925 Vmath::Vvtvp(nqtot, &df[7][0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
928 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp4[0], 1, &df[5][0], 1, &wsp5[0],
930 Vmath::Vvtvp(nqtot, &df[8][0], 1, &wsp6[0], 1, &g4[0], 1, &g4[0], 1);
935 &df[4][0], 1, &g1[0], 1);
936 Vmath::Vvtvp(nqtot, &df[7][0], 1, &df[7][0], 1, &g1[0], 1, &g1[0], 1);
940 &df[5][0], 1, &g2[0], 1);
941 Vmath::Vvtvp(nqtot, &df[8][0], 1, &df[8][0], 1, &g2[0], 1, &g2[0], 1);
945 &df[5][0], 1, &g5[0], 1);
946 Vmath::Vvtvp(nqtot, &df[7][0], 1, &df[8][0], 1, &g5[0], 1, &g5[0], 1);
961 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0],
963 Vmath::Vvtvp(nqtot, &wsp6[0], 1, &wsp6[0], 1, &g0[0], 1, &g0[0], 1);
966 Vmath::Svtsvtp(nqtot, df[1][0], &wsp4[0], 1, df[4][0], &wsp5[0], 1,
968 Vmath::Svtvp(nqtot, df[7][0], &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
971 Vmath::Svtsvtp(nqtot, df[2][0], &wsp4[0], 1, df[5][0], &wsp5[0], 1,
973 Vmath::Svtvp(nqtot, df[8][0], &wsp6[0], 1, &g4[0], 1, &g4[0], 1);
978 df[1][0] * df[1][0] + df[4][0] * df[4][0] +
984 df[2][0] * df[2][0] + df[5][0] * df[5][0] +
990 df[1][0] * df[2][0] + df[4][0] * df[5][0] +
996 Vmath::Vvtvvtp(nqtot, &g0[0], 1, &wsp1[0], 1, &g3[0], 1, &wsp2[0], 1,
998 Vmath::Vvtvp(nqtot, &g4[0], 1, &wsp3[0], 1, &wsp7[0], 1, &wsp7[0], 1);
999 Vmath::Vvtvvtp(nqtot, &g1[0], 1, &wsp2[0], 1, &g3[0], 1, &wsp1[0], 1,
1001 Vmath::Vvtvp(nqtot, &g5[0], 1, &wsp3[0], 1, &wsp8[0], 1, &wsp8[0], 1);
1002 Vmath::Vvtvvtp(nqtot, &g2[0], 1, &wsp3[0], 1, &g4[0], 1, &wsp1[0], 1,
1004 Vmath::Vvtvp(nqtot, &g5[0], 1, &wsp2[0], 1, &wsp9[0], 1, &wsp9[0], 1);
1027 int np0 =
m_base[0]->GetNumPoints();
1028 int np1 =
m_base[1]->GetNumPoints();
1029 int np2 =
m_base[2]->GetNumPoints();
1030 int np =
max(np0,
max(np1, np2));
1032 bool standard =
true;
1040 if ((vid2 < vid1) && (vid2 < vid0))
1048 else if ((vid1 < vid2) && (vid1 < vid0))
1056 else if ((vid0 < vid2) && (vid0 < vid1))
1077 rot[0] = (0 + rotate) % 3;
1078 rot[1] = (1 + rotate) % 3;
1079 rot[2] = (2 + rotate) % 3;
1082 for (
int i = 0; i < np - 1; ++i)
1084 planep1 += (np - i) * np;
1089 if (standard ==
false)
1091 for (
int j = 0; j < np - 1; ++j)
1094 row1p1 += np - i - 1;
1095 for (
int k = 0; k < np - i - 2; ++k)
1098 prismpt[rot[0]] = plane + row + k;
1099 prismpt[rot[1]] = plane + row + k + 1;
1100 prismpt[rot[2]] = planep1 + row1 + k;
1102 prismpt[3 + rot[0]] = plane + rowp1 + k;
1103 prismpt[3 + rot[1]] = plane + rowp1 + k + 1;
1104 prismpt[3 + rot[2]] = planep1 + row1p1 + k;
1106 conn[cnt++] = prismpt[0];
1107 conn[cnt++] = prismpt[1];
1108 conn[cnt++] = prismpt[3];
1109 conn[cnt++] = prismpt[2];
1111 conn[cnt++] = prismpt[5];
1112 conn[cnt++] = prismpt[2];
1113 conn[cnt++] = prismpt[3];
1114 conn[cnt++] = prismpt[4];
1116 conn[cnt++] = prismpt[3];
1117 conn[cnt++] = prismpt[1];
1118 conn[cnt++] = prismpt[4];
1119 conn[cnt++] = prismpt[2];
1122 prismpt[rot[0]] = planep1 + row1 + k + 1;
1123 prismpt[rot[1]] = planep1 + row1 + k;
1124 prismpt[rot[2]] = plane + row + k + 1;
1126 prismpt[3 + rot[0]] = planep1 + row1p1 + k + 1;
1127 prismpt[3 + rot[1]] = planep1 + row1p1 + k;
1128 prismpt[3 + rot[2]] = plane + rowp1 + k + 1;
1130 conn[cnt++] = prismpt[0];
1131 conn[cnt++] = prismpt[1];
1132 conn[cnt++] = prismpt[2];
1133 conn[cnt++] = prismpt[5];
1135 conn[cnt++] = prismpt[5];
1136 conn[cnt++] = prismpt[0];
1137 conn[cnt++] = prismpt[4];
1138 conn[cnt++] = prismpt[1];
1140 conn[cnt++] = prismpt[3];
1141 conn[cnt++] = prismpt[4];
1142 conn[cnt++] = prismpt[0];
1143 conn[cnt++] = prismpt[5];
1147 prismpt[rot[0]] = plane + row + np - i - 2;
1148 prismpt[rot[1]] = plane + row + np - i - 1;
1149 prismpt[rot[2]] = planep1 + row1 + np - i - 2;
1151 prismpt[3 + rot[0]] = plane + rowp1 + np - i - 2;
1152 prismpt[3 + rot[1]] = plane + rowp1 + np - i - 1;
1153 prismpt[3 + rot[2]] = planep1 + row1p1 + np - i - 2;
1155 conn[cnt++] = prismpt[0];
1156 conn[cnt++] = prismpt[1];
1157 conn[cnt++] = prismpt[3];
1158 conn[cnt++] = prismpt[2];
1160 conn[cnt++] = prismpt[5];
1161 conn[cnt++] = prismpt[2];
1162 conn[cnt++] = prismpt[3];
1163 conn[cnt++] = prismpt[4];
1165 conn[cnt++] = prismpt[3];
1166 conn[cnt++] = prismpt[1];
1167 conn[cnt++] = prismpt[4];
1168 conn[cnt++] = prismpt[2];
1176 for (
int j = 0; j < np - 1; ++j)
1179 row1p1 += np - i - 1;
1180 for (
int k = 0; k < np - i - 2; ++k)
1183 prismpt[rot[0]] = plane + row + k;
1184 prismpt[rot[1]] = plane + row + k + 1;
1185 prismpt[rot[2]] = planep1 + row1 + k;
1187 prismpt[3 + rot[0]] = plane + rowp1 + k;
1188 prismpt[3 + rot[1]] = plane + rowp1 + k + 1;
1189 prismpt[3 + rot[2]] = planep1 + row1p1 + k;
1191 conn[cnt++] = prismpt[0];
1192 conn[cnt++] = prismpt[1];
1193 conn[cnt++] = prismpt[4];
1194 conn[cnt++] = prismpt[2];
1196 conn[cnt++] = prismpt[4];
1197 conn[cnt++] = prismpt[3];
1198 conn[cnt++] = prismpt[0];
1199 conn[cnt++] = prismpt[2];
1201 conn[cnt++] = prismpt[3];
1202 conn[cnt++] = prismpt[4];
1203 conn[cnt++] = prismpt[5];
1204 conn[cnt++] = prismpt[2];
1207 prismpt[rot[0]] = planep1 + row1 + k + 1;
1208 prismpt[rot[1]] = planep1 + row1 + k;
1209 prismpt[rot[2]] = plane + row + k + 1;
1211 prismpt[3 + rot[0]] = planep1 + row1p1 + k + 1;
1212 prismpt[3 + rot[1]] = planep1 + row1p1 + k;
1213 prismpt[3 + rot[2]] = plane + rowp1 + k + 1;
1215 conn[cnt++] = prismpt[0];
1216 conn[cnt++] = prismpt[2];
1217 conn[cnt++] = prismpt[1];
1218 conn[cnt++] = prismpt[5];
1220 conn[cnt++] = prismpt[3];
1221 conn[cnt++] = prismpt[5];
1222 conn[cnt++] = prismpt[0];
1223 conn[cnt++] = prismpt[1];
1225 conn[cnt++] = prismpt[5];
1226 conn[cnt++] = prismpt[3];
1227 conn[cnt++] = prismpt[4];
1228 conn[cnt++] = prismpt[1];
1232 prismpt[rot[0]] = plane + row + np - i - 2;
1233 prismpt[rot[1]] = plane + row + np - i - 1;
1234 prismpt[rot[2]] = planep1 + row1 + np - i - 2;
1236 prismpt[3 + rot[0]] = plane + rowp1 + np - i - 2;
1237 prismpt[3 + rot[1]] = plane + rowp1 + np - i - 1;
1238 prismpt[3 + rot[2]] = planep1 + row1p1 + np - i - 2;
1240 conn[cnt++] = prismpt[0];
1241 conn[cnt++] = prismpt[1];
1242 conn[cnt++] = prismpt[4];
1243 conn[cnt++] = prismpt[2];
1245 conn[cnt++] = prismpt[4];
1246 conn[cnt++] = prismpt[3];
1247 conn[cnt++] = prismpt[0];
1248 conn[cnt++] = prismpt[2];
1250 conn[cnt++] = prismpt[3];
1251 conn[cnt++] = prismpt[4];
1252 conn[cnt++] = prismpt[5];
1253 conn[cnt++] = prismpt[2];
1259 plane += (np - i) * np;
#define ASSERTL0(condition, msg)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
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.
DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey) override
std::map< int, NormalVector > m_traceNormals
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::Geometry * m_geom
void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3) override
SpatialDomains::GeomFactorsUniquePtr m_geomFactors
PrismExp(const LibUtilities::BasisKey &Ba, const LibUtilities::BasisKey &Bb, const LibUtilities::BasisKey &Bc, SpatialDomains::Geometry3D *geom)
Constructor using BasisKey class for quadrature points and order definition.
DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey) override
DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey) override
StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const override
void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_DropLocStaticCondMatrix(const MatrixKey &mkey) override
void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
NekDouble v_PhysEvalFirstDeriv(const Array< OneD, NekDouble > &coord, const Array< OneD, const NekDouble > &inarray, std::array< NekDouble, 3 > &firstOrderDerivs) override
void v_GetSimplexEquiSpacedConnectivity(Array< OneD, int > &conn, bool standard=true) override
DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey) override
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Calculates the inner product .
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int mode_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType) override
void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords) override
Get the coordinates #coords at the local coordinates #Lcoords.
void v_AlignVectorToCollapsedDir(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray) override
StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const override
void v_ComputeTraceNormal(const int face) override
Get the normals along specficied face Get the face normals interplated to a points0 x points 0 type d...
void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp) override
Calculate the Laplacian multiplication in a matrix-free manner.
void v_GetTracePhysMap(const int face, Array< OneD, int > &outarray) override
void v_DropLocMatrix(const MatrixKey &mkey) override
void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdRegions::StdMatrixKey &mkey) override
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey) override
void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3) override
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
NekDouble GetCoord(const int i, const Array< OneD, const NekDouble > &Lcoord)
Given local collapsed coordinate Lcoord, return the value of physical coordinate in direction i.
NekDouble GetLocCoords(const Array< OneD, const NekDouble > &coords, Array< OneD, NekDouble > &Lcoords)
Determine the local collapsed coordinates that correspond to a given Cartesian coordinate for this ge...
int GetVid(int i) const
Returns global id of vertex i of this object.
int GetCoordim() const
Return the coordinate dimension of this object (i.e. the dimension of the space in which this object ...
void FillGeom()
Populate the coordinate mapping Geometry::m_coeffs information from any children geometry elements.
void PhysTensorDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
Calculate the 3D derivative in the local tensor/collapsed coordinate at the physical points.
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.
const LibUtilities::PointsKeyVector GetPointsKeys() const
virtual void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
LibUtilities::PointsType GetPointsType(const int dir) const
This function returns the type of quadrature points used in the dir direction.
int GetNumPoints(const int dir) const
This function returns the number of quadrature points in the dir direction.
const LibUtilities::BasisKey GetTraceBasisKey(const int i, int k=-1, bool UseGLL=false) const
This function returns the basis key belonging to the i-th trace.
Array< OneD, LibUtilities::BasisSharedPtr > m_base
MatrixType GetMatrixType() const
void v_IProductWRTBaseKernel(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, const Array< OneD, NekDouble > &jac, const bool Deformed, bool CollDir0=false, bool CollDir1=false, bool CollDir2=false) override
Inner product of inarray over region with respect to the expansion basis (this)->m_base[0] and return...
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
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
@ eModified_B
Principle Modified Functions .
@ eModified_A
Principle Modified Functions .
GeomType
Indicates the type of element geometry.
@ eRegular
Geometry is straight-sided with constant geometric factors.
@ eMovingRegular
Currently unused.
@ eDeformed
Geometry is curved or has non-constant factors.
std::shared_ptr< StdPrismExp > StdPrismExpSharedPtr
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
@ eInvLaplacianWithUnityMean
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
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)
Svtsvtp (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/x.
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 > max(scalarT< T > lhs, scalarT< T > rhs)
scalarT< T > min(scalarT< T > lhs, scalarT< T > rhs)
scalarT< T > sqrt(scalarT< T > in)