41 namespace LocalRegions
62 boost::bind(&
PyrExp::CreateMatrix, this, _1),
63 std::string(
"PyrExpMatrix")),
64 m_staticCondMatrixManager(
65 boost::bind(&
PyrExp::CreateStaticCondMatrix, this, _1),
66 std::string(
"PyrExpStaticCondMatrix"))
76 m_matrixManager(T.m_matrixManager),
77 m_staticCondMatrixManager(T.m_staticCondMatrixManager)
112 int nquad0 =
m_base[0]->GetNumPoints();
113 int nquad1 =
m_base[1]->GetNumPoints();
114 int nquad2 =
m_base[2]->GetNumPoints();
116 Array<OneD, NekDouble> tmp(nquad0*nquad1*nquad2);
138 Array<OneD, NekDouble>& out_d0,
139 Array<OneD, NekDouble>& out_d1,
140 Array<OneD, NekDouble>& out_d2)
142 int nquad0 =
m_base[0]->GetNumPoints();
143 int nquad1 =
m_base[1]->GetNumPoints();
144 int nquad2 =
m_base[2]->GetNumPoints();
145 Array<TwoD, const NekDouble> gmat =
147 Array<OneD,NekDouble> diff0(nquad0*nquad1*nquad2);
148 Array<OneD,NekDouble> diff1(nquad0*nquad1*nquad2);
149 Array<OneD,NekDouble> diff2(nquad0*nquad1*nquad2);
155 if(out_d0.num_elements())
157 Vmath::Vmul (nquad0*nquad1*nquad2,&gmat[0][0],1,&diff0[0],1, &out_d0[0], 1);
158 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[1][0],1,&diff1[0],1, &out_d0[0], 1,&out_d0[0],1);
159 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[2][0],1,&diff2[0],1, &out_d0[0], 1,&out_d0[0],1);
162 if(out_d1.num_elements())
164 Vmath::Vmul (nquad0*nquad1*nquad2,&gmat[3][0],1,&diff0[0],1, &out_d1[0], 1);
165 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[4][0],1,&diff1[0],1, &out_d1[0], 1,&out_d1[0],1);
166 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[5][0],1,&diff2[0],1, &out_d1[0], 1,&out_d1[0],1);
169 if(out_d2.num_elements())
171 Vmath::Vmul (nquad0*nquad1*nquad2,&gmat[6][0],1,&diff0[0],1, &out_d2[0], 1);
172 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[7][0],1,&diff1[0],1, &out_d2[0], 1, &out_d2[0],1);
173 Vmath::Vvtvp (nquad0*nquad1*nquad2,&gmat[8][0],1,&diff2[0],1, &out_d2[0], 1, &out_d2[0],1);
178 if(out_d0.num_elements())
180 Vmath::Smul (nquad0*nquad1*nquad2,gmat[0][0],&diff0[0],1, &out_d0[0], 1);
181 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[1][0],&diff1[0],1, &out_d0[0], 1);
182 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[2][0],&diff2[0],1, &out_d0[0], 1);
185 if(out_d1.num_elements())
187 Vmath::Smul (nquad0*nquad1*nquad2,gmat[3][0],&diff0[0],1, &out_d1[0], 1);
188 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[4][0],&diff1[0],1, &out_d1[0], 1);
189 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[5][0],&diff2[0],1, &out_d1[0], 1);
192 if(out_d2.num_elements())
194 Vmath::Smul (nquad0*nquad1*nquad2,gmat[6][0],&diff0[0],1, &out_d2[0], 1);
195 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[7][0],&diff1[0],1, &out_d2[0], 1);
196 Blas::Daxpy (nquad0*nquad1*nquad2,gmat[8][0],&diff2[0],1, &out_d2[0], 1);
220 Array<OneD, NekDouble>& outarray)
222 if(
m_base[0]->Collocation() &&
223 m_base[1]->Collocation() &&
277 const Array<OneD, const NekDouble> &inarray,
278 Array<OneD, NekDouble> &outarray)
280 int nquad0 =
m_base[0]->GetNumPoints();
281 int nquad1 =
m_base[1]->GetNumPoints();
282 int nquad2 =
m_base[2]->GetNumPoints();
284 Array<OneD, NekDouble> tmp(nquad0*nquad1*nquad2);
309 Array<OneD, NekDouble>& coords)
313 ASSERTL1(Lcoords[0] <= -1.0 && Lcoords[0] >= 1.0 &&
314 Lcoords[1] <= -1.0 && Lcoords[1] >= 1.0 &&
315 Lcoords[2] <= -1.0 && Lcoords[2] >= 1.0,
316 "Local coordinates are not in region [-1,1]");
320 for(i = 0; i <
m_geom->GetCoordim(); ++i)
322 coords[i] =
m_geom->GetCoord(i,Lcoords);
327 Array<OneD, NekDouble> &coords_1,
328 Array<OneD, NekDouble> &coords_2,
329 Array<OneD, NekDouble> &coords_3)
335 const Array<OneD, const NekDouble>& physvals)
337 Array<OneD,NekDouble> Lcoord(3);
342 m_geom->GetLocCoords(coord, Lcoord);
354 return m_geom->GetCoordim();
360 const Array<OneD, const NekDouble> &inarray,
361 Array<OneD, NekDouble> &outarray,
364 int nq0 =
m_base[0]->GetNumPoints();
365 int nq1 =
m_base[1]->GetNumPoints();
366 int nq2 =
m_base[2]->GetNumPoints();
386 for (
int j=0; j<nq1; j++)
388 Vmath::Vcopy(nq0,&(inarray[0])+(nq0-1)+j*nq0,-1,&(o_tmp[0])+(j*nq0),1);
394 for (
int j=0; j<nq1; j++)
396 Vmath::Vcopy(nq0,&(inarray[0])+nq0*(nq1-1-j),1,&(o_tmp[0])+(j*nq0),1);
402 for(
int j=0; j<nq1; j++)
404 Vmath::Vcopy(nq0,&(inarray[0])+(nq0*nq1-1-j*nq0),-1,&(o_tmp[0])+(j*nq0),1);
410 for (
int i=0; i<nq0; i++)
412 Vmath::Vcopy(nq1,&(inarray[0])+i,nq0,&(o_tmp[0])+(i*nq1),1);
418 for (
int i=0; i<nq0; i++)
420 Vmath::Vcopy(nq1,&(inarray[0])+(nq0-1-i),nq0,&(o_tmp[0])+(i*nq1),1);
426 for (
int i=0; i<nq0; i++)
428 Vmath::Vcopy(nq1,&(inarray[0])+i+nq0*(nq1-1),-nq0,&(o_tmp[0])+(i*nq1),1);
434 for (
int i=0; i<nq0; i++)
436 Vmath::Vcopy(nq1,&(inarray[0])+(nq0*nq1-1-i),-nq0,&(o_tmp[0])+(i*nq1),1);
440 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),outarray);
445 for (
int k = 0; k < nq2; k++)
447 Vmath::Vcopy(nq0,inarray.get()+nq0*nq1*k,1,outarray.get()+k*nq0,1);
450 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
456 Vmath::Vcopy(nq1*nq2,inarray.get()+(nq0-1),nq0,outarray.get(),1);
458 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
464 for (
int k = 0; k < nq2; k++)
466 Vmath::Vcopy(nq0,inarray.get()+nq0*(nq1-1)+nq0*nq1*k,1,outarray.get()+(k*nq0),1);
469 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
474 Vmath::Vcopy(nq1*nq2,inarray.get(),nq0,outarray.get(),1);
476 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
481 ASSERTL0(
false,
"face value (> 4) is out of range");
487 int fnq1 = FaceExp->GetNumPoints(0);
488 int fnq2 = FaceExp->GetNumPoints(1);
490 if ((
int)orient == 7)
492 for (
int j = 0; j < fnq2; ++j)
494 Vmath::Vcopy(fnq1, o_tmp.get()+((j+1)*fnq1-1), -1, outarray.get()+j*fnq1, 1);
499 Vmath::Vcopy(fnq1*fnq2, o_tmp.get(), 1, outarray.get(), 1);
510 const Array<TwoD, const NekDouble> &df = geomFactors->GetDerivFactors(ptsKeys);
511 const Array<OneD, const NekDouble> &jac = geomFactors->GetJac(ptsKeys);
522 m_faceNormals[face] = Array<OneD, Array<OneD, NekDouble> >(vCoordDim);
523 Array<OneD, Array<OneD, NekDouble> > &normal =
m_faceNormals[face];
524 for (i = 0; i < vCoordDim; ++i)
526 normal[i] = Array<OneD, NekDouble>(nq_face);
539 for(i = 0; i < vCoordDim; ++i)
541 normal[i][0] = -df[3*i+2][0];
547 for(i = 0; i < vCoordDim; ++i)
549 normal[i][0] = -df[3*i+1][0];
555 for(i = 0; i < vCoordDim; ++i)
557 normal[i][0] = df[3*i][0]+df[3*i+2][0];
563 for(i = 0; i < vCoordDim; ++i)
565 normal[i][0] = df[3*i+1][0]+df[3*i+2][0];
571 for(i = 0; i < vCoordDim; ++i)
573 normal[i][0] = -df[3*i][0];
578 ASSERTL0(
false,
"face is out of range (face < 4)");
583 for(i = 0; i < vCoordDim; ++i)
585 fac += normal[i][0]*normal[i][0];
588 for (i = 0; i < vCoordDim; ++i)
598 int nq0 = ptsKeys[0].GetNumPoints();
599 int nq1 = ptsKeys[1].GetNumPoints();
600 int nq2 = ptsKeys[2].GetNumPoints();
609 else if (face == 1 || face == 3)
621 Array<OneD, NekDouble> normals(vCoordDim*nqtot,0.0);
630 for(j = 0; j < nq01; ++j)
632 normals[j] = -df[2][j]*jac[j];
633 normals[nqtot+j] = -df[5][j]*jac[j];
634 normals[2*nqtot+j] = -df[8][j]*jac[j];
637 points0 = ptsKeys[0];
638 points1 = ptsKeys[1];
644 for (j = 0; j < nq0; ++j)
646 for(k = 0; k < nq2; ++k)
650 -df[1][tmp]*jac[tmp];
651 normals[nqtot+j+k*nq0] =
652 -df[4][tmp]*jac[tmp];
653 normals[2*nqtot+j+k*nq0] =
654 -df[7][tmp]*jac[tmp];
658 points0 = ptsKeys[0];
659 points1 = ptsKeys[2];
665 for (j = 0; j < nq1; ++j)
667 for(k = 0; k < nq2; ++k)
669 int tmp = nq0-1+nq0*j+nq01*k;
671 (df[0][tmp]+df[2][tmp])*jac[tmp];
672 normals[nqtot+j+k*nq1] =
673 (df[3][tmp]+df[5][tmp])*jac[tmp];
674 normals[2*nqtot+j+k*nq1] =
675 (df[6][tmp]+df[8][tmp])*jac[tmp];
679 points0 = ptsKeys[1];
680 points1 = ptsKeys[2];
686 for (j = 0; j < nq0; ++j)
688 for(k = 0; k < nq2; ++k)
690 int tmp = nq0*(nq1-1) + j + nq01*k;
692 (df[1][tmp]+df[2][tmp])*jac[tmp];
693 normals[nqtot+j+k*nq0] =
694 (df[4][tmp]+df[5][tmp])*jac[tmp];
695 normals[2*nqtot+j+k*nq0] =
696 (df[7][tmp]+df[8][tmp])*jac[tmp];
700 points0 = ptsKeys[0];
701 points1 = ptsKeys[2];
707 for (j = 0; j < nq1; ++j)
709 for(k = 0; k < nq2; ++k)
711 int tmp = j*nq0+nq01*k;
713 -df[0][tmp]*jac[tmp];
714 normals[nqtot+j+k*nq1] =
715 -df[3][tmp]*jac[tmp];
716 normals[2*nqtot+j+k*nq1] =
717 -df[6][tmp]*jac[tmp];
721 points0 = ptsKeys[1];
722 points1 = ptsKeys[2];
727 ASSERTL0(
false,
"face is out of range (face < 4)");
730 Array<OneD, NekDouble> work (nq_face, 0.0);
736 Vmath::Sdiv(nq_face, 1.0, &work[0], 1, &work[0], 1);
739 for(i = 0; i < vCoordDim; ++i)
746 Vmath::Vmul(nq_face,work,1,normal[i],1,normal[i],1);
753 Vmath::Vvtvp(nq_face,normal[i],1,normal[i],1,work,1,work,1);
761 Vmath::Vmul(nq_face,normal[i],1,work,1,normal[i],1);
799 return tmp->GetStdMatrix(mkey);
896 Array<TwoD, const NekDouble> gmat =
899 int rows = lap00.GetRows();
900 int cols = lap00.GetColumns();
905 (*lap) = gmat[0][0]*lap00
925 int rows = LapMat.GetRows();
926 int cols = LapMat.GetColumns();
930 (*helm) = LapMat + factor*MassMat;
951 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
952 unsigned int exp_size[] = {nbdry, nint};
953 unsigned int nblks = 2;
964 goto UseLocRegionsMatrix;
970 goto UseLocRegionsMatrix;
975 factor = mat->Scale();
976 goto UseStdRegionsMatrix;
1005 Array<OneD,unsigned int> bmap(nbdry);
1006 Array<OneD,unsigned int> imap(nint);
1010 for(i = 0; i < nbdry; ++i)
1012 for(j = 0; j < nbdry; ++j)
1014 (*A)(i,j) = mat(bmap[i],bmap[j]);
1017 for(j = 0; j < nint; ++j)
1019 (*B)(i,j) = mat(bmap[i],imap[j]);
1023 for(i = 0; i < nint; ++i)
1025 for(j = 0; j < nbdry; ++j)
1027 (*C)(i,j) = mat(imap[i],bmap[j]);
1030 for(j = 0; j < nint; ++j)
1032 (*D)(i,j) = mat(imap[i],imap[j]);
1041 (*A) = (*A) - (*B)*(*C);
1065 const unsigned int dim = 3;
1072 for (
unsigned int i = 0; i < dim; ++i)
1074 for (
unsigned int j = i; j < dim; ++j)
1076 m_metrics[m[i][j]] = Array<OneD, NekDouble>(nqtot);
1081 Array<OneD,NekDouble> g0 (
m_metrics[m[0][0]]);
1082 Array<OneD,NekDouble> g1 (
m_metrics[m[1][1]]);
1083 Array<OneD,NekDouble> g2 (
m_metrics[m[2][2]]);
1084 Array<OneD,NekDouble> g3 (
m_metrics[m[0][1]]);
1085 Array<OneD,NekDouble> g4 (
m_metrics[m[0][2]]);
1086 Array<OneD,NekDouble> g5 (
m_metrics[m[1][2]]);
1089 Array<OneD,NekDouble> alloc(9*nqtot,0.0);
1090 Array<OneD,NekDouble> h0 (nqtot, alloc);
1091 Array<OneD,NekDouble> h1 (nqtot, alloc+ 1*nqtot);
1092 Array<OneD,NekDouble> h2 (nqtot, alloc+ 2*nqtot);
1093 Array<OneD,NekDouble> wsp1 (nqtot, alloc+ 3*nqtot);
1094 Array<OneD,NekDouble> wsp2 (nqtot, alloc+ 4*nqtot);
1095 Array<OneD,NekDouble> wsp3 (nqtot, alloc+ 5*nqtot);
1096 Array<OneD,NekDouble> wsp4 (nqtot, alloc+ 6*nqtot);
1097 Array<OneD,NekDouble> wsp5 (nqtot, alloc+ 7*nqtot);
1098 Array<OneD,NekDouble> wsp6 (nqtot, alloc+ 8*nqtot);
1100 const Array<TwoD, const NekDouble>& df =
1102 const Array<OneD, const NekDouble>& z0 =
m_base[0]->GetZ();
1103 const Array<OneD, const NekDouble>& z1 =
m_base[1]->GetZ();
1104 const Array<OneD, const NekDouble>& z2 =
m_base[2]->GetZ();
1105 const unsigned int nquad0 =
m_base[0]->GetNumPoints();
1106 const unsigned int nquad1 =
m_base[1]->GetNumPoints();
1107 const unsigned int nquad2 =
m_base[2]->GetNumPoints();
1110 for(j = 0; j < nquad2; ++j)
1112 for(i = 0; i < nquad1; ++i)
1114 Vmath::Fill(nquad0, 2.0/(1.0-z2[j]), &h0[0]+i*nquad0 + j*nquad0*nquad1,1);
1115 Vmath::Fill(nquad0, 1.0/(1.0-z2[j]), &h1[0]+i*nquad0 + j*nquad0*nquad1,1);
1116 Vmath::Fill(nquad0, (1.0+z1[i])/(1.0-z2[j]), &h2[0]+i*nquad0 + j*nquad0*nquad1,1);
1119 for(i = 0; i < nquad0; i++)
1121 Blas::Dscal(nquad1*nquad2, 1+z0[i], &h1[0]+i, nquad0);
1130 Vmath::Vvtvvtp(nqtot, &df[0][0], 1, &h0[0], 1, &df[2][0], 1, &h1[0], 1, &wsp1[0], 1);
1131 Vmath::Vvtvvtp(nqtot, &df[3][0], 1, &h0[0], 1, &df[5][0], 1, &h1[0], 1, &wsp2[0], 1);
1132 Vmath::Vvtvvtp(nqtot, &df[6][0], 1, &h0[0], 1, &df[8][0], 1, &h1[0], 1, &wsp3[0], 1);
1135 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1136 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1139 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp1[0], 1, &df[5][0], 1, &wsp2[0], 1, &g4[0], 1);
1140 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1143 Vmath::Vvtvvtp(nqtot, &df[1][0], 1, &h0[0], 1, &df[2][0], 1, &h2[0], 1, &wsp4[0], 1);
1144 Vmath::Vvtvvtp(nqtot, &df[4][0], 1, &h0[0], 1, &df[5][0], 1, &h2[0], 1, &wsp5[0], 1);
1145 Vmath::Vvtvvtp(nqtot, &df[7][0], 1, &h0[0], 1, &df[8][0], 1, &h2[0], 1, &wsp6[0], 1);
1148 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1149 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1152 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1153 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1156 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp4[0], 1, &df[5][0], 1, &wsp5[0], 1, &g5[0], 1);
1157 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1160 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &df[2][0], 1, &df[5][0], 1, &df[5][0], 1, &g2[0], 1);
1161 Vmath::Vvtvp (nqtot, &df[8][0], 1, &df[8][0], 1, &g2[0], 1, &g2[0], 1);
1166 Vmath::Svtsvtp(nqtot, df[0][0], &h0[0], 1, df[2][0], &h1[0], 1, &wsp1[0], 1);
1167 Vmath::Svtsvtp(nqtot, df[3][0], &h0[0], 1, df[5][0], &h1[0], 1, &wsp2[0], 1);
1168 Vmath::Svtsvtp(nqtot, df[6][0], &h0[0], 1, df[8][0], &h1[0], 1, &wsp3[0], 1);
1171 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1172 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1175 Vmath::Svtsvtp(nqtot, df[2][0], &wsp1[0], 1, df[5][0], &wsp2[0], 1, &g4[0], 1);
1176 Vmath::Svtvp (nqtot, df[8][0], &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1179 Vmath::Svtsvtp(nqtot, df[1][0], &h0[0], 1, df[2][0], &h2[0], 1, &wsp4[0], 1);
1180 Vmath::Svtsvtp(nqtot, df[4][0], &h0[0], 1, df[5][0], &h2[0], 1, &wsp5[0], 1);
1181 Vmath::Svtsvtp(nqtot, df[7][0], &h0[0], 1, df[8][0], &h2[0], 1, &wsp6[0], 1);
1184 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1185 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1188 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1189 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1192 Vmath::Svtsvtp(nqtot, df[2][0], &wsp4[0], 1, df[5][0], &wsp5[0], 1, &g5[0], 1);
1193 Vmath::Svtvp (nqtot, df[8][0], &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1196 Vmath::Fill(nqtot, df[2][0]*df[2][0] + df[5][0]*df[5][0] + df[8][0]*df[8][0], &g2[0], 1);
1199 for (
unsigned int i = 0; i < dim; ++i)
1201 for (
unsigned int j = i; j < dim; ++j)
1211 const Array<OneD, const NekDouble> &inarray,
1212 Array<OneD, NekDouble> &outarray,
1213 Array<OneD, NekDouble> &wsp)
1222 int nquad0 =
m_base[0]->GetNumPoints();
1223 int nquad1 =
m_base[1]->GetNumPoints();
1224 int nq2 =
m_base[2]->GetNumPoints();
1225 int nqtot = nquad0*nquad1*nq2;
1227 ASSERTL1(wsp.num_elements() >= 6*nqtot,
1228 "Insufficient workspace size.");
1230 "Workspace not set up for ncoeffs > nqtot");
1232 const Array<OneD, const NekDouble>& base0 =
m_base[0]->GetBdata();
1233 const Array<OneD, const NekDouble>& base1 =
m_base[1]->GetBdata();
1234 const Array<OneD, const NekDouble>& base2 =
m_base[2]->GetBdata();
1235 const Array<OneD, const NekDouble>& dbase0 =
m_base[0]->GetDbdata();
1236 const Array<OneD, const NekDouble>& dbase1 =
m_base[1]->GetDbdata();
1237 const Array<OneD, const NekDouble>& dbase2 =
m_base[2]->GetDbdata();
1246 Array<OneD,NekDouble> wsp0 (2*nqtot, wsp);
1247 Array<OneD,NekDouble> wsp1 ( nqtot, wsp+1*nqtot);
1248 Array<OneD,NekDouble> wsp2 ( nqtot, wsp+2*nqtot);
1249 Array<OneD,NekDouble> wsp3 ( nqtot, wsp+3*nqtot);
1250 Array<OneD,NekDouble> wsp4 ( nqtot, wsp+4*nqtot);
1251 Array<OneD,NekDouble> wsp5 ( nqtot, wsp+5*nqtot);
1263 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
1264 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
1265 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
1266 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
1267 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
1268 Vmath::Vvtvp (nqtot,&metric22[0],1,&wsp2[0],1,&wsp5[0],1,&wsp5[0],1);