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();
365 const Array<OneD, const NekDouble> &inarray,
366 Array<OneD, NekDouble> &outarray,
369 int nq0 =
m_base[0]->GetNumPoints();
370 int nq1 =
m_base[1]->GetNumPoints();
371 int nq2 =
m_base[2]->GetNumPoints();
373 Array<OneD,NekDouble> o_tmp(nq0*nq1*nq2);
391 for (
int j=0; j<nq1; j++)
393 Vmath::Vcopy(nq0,&(inarray[0])+(nq0-1)+j*nq0,-1,&(o_tmp[0])+(j*nq0),1);
399 for (
int j=0; j<nq1; j++)
401 Vmath::Vcopy(nq0,&(inarray[0])+nq0*(nq1-1-j),1,&(o_tmp[0])+(j*nq0),1);
407 for(
int j=0; j<nq1; j++)
409 Vmath::Vcopy(nq0,&(inarray[0])+(nq0*nq1-1-j*nq0),-1,&(o_tmp[0])+(j*nq0),1);
415 for (
int i=0; i<nq0; i++)
417 Vmath::Vcopy(nq1,&(inarray[0])+i,nq0,&(o_tmp[0])+(i*nq1),1);
423 for (
int i=0; i<nq0; i++)
425 Vmath::Vcopy(nq1,&(inarray[0])+(nq0-1-i),nq0,&(o_tmp[0])+(i*nq1),1);
431 for (
int i=0; i<nq0; i++)
433 Vmath::Vcopy(nq1,&(inarray[0])+i+nq0*(nq1-1),-nq0,&(o_tmp[0])+(i*nq1),1);
439 for (
int i=0; i<nq0; i++)
441 Vmath::Vcopy(nq1,&(inarray[0])+(nq0*nq1-1-i),-nq0,&(o_tmp[0])+(i*nq1),1);
445 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),outarray);
450 for (
int k = 0; k < nq2; k++)
452 Vmath::Vcopy(nq0,inarray.get()+nq0*nq1*k,1,outarray.get()+k*nq0,1);
455 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
461 Vmath::Vcopy(nq1*nq2,inarray.get()+(nq0-1),nq0,outarray.get(),1);
463 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
469 for (
int k = 0; k < nq2; k++)
471 Vmath::Vcopy(nq0,inarray.get()+nq0*(nq1-1)+nq0*nq1*k,1,outarray.get()+(k*nq0),1);
474 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
479 Vmath::Vcopy(nq1*nq2,inarray.get(),nq0,outarray.get(),1);
481 FaceExp->GetBasis(0)->GetPointsKey(),FaceExp->GetBasis(1)->GetPointsKey(),o_tmp.get());
486 ASSERTL0(
false,
"face value (> 4) is out of range");
492 int fnq1 = FaceExp->GetNumPoints(0);
493 int fnq2 = FaceExp->GetNumPoints(1);
495 if ((
int)orient == 7)
497 for (
int j = 0; j < fnq2; ++j)
499 Vmath::Vcopy(fnq1, o_tmp.get()+((j+1)*fnq1-1), -1, outarray.get()+j*fnq1, 1);
504 Vmath::Vcopy(fnq1*fnq2, o_tmp.get(), 1, outarray.get(), 1);
515 const Array<TwoD, const NekDouble> &df = geomFactors->GetDerivFactors(ptsKeys);
516 const Array<OneD, const NekDouble> &jac = geomFactors->GetJac(ptsKeys);
519 int nq =
m_base[0]->GetNumPoints()*
m_base[0]->GetNumPoints();
523 m_faceNormals[face] = Array<OneD, Array<OneD, NekDouble> >(vCoordDim);
524 Array<OneD, Array<OneD, NekDouble> > &normal =
m_faceNormals[face];
525 for (i = 0; i < vCoordDim; ++i)
527 normal[i] = Array<OneD, NekDouble>(nq);
540 for(i = 0; i < vCoordDim; ++i)
548 for(i = 0; i < vCoordDim; ++i)
556 for(i = 0; i < vCoordDim; ++i)
558 Vmath::Fill(nq,df[3*i][0]+df[3*i+2][0],normal[i],1);
564 for(i = 0; i < vCoordDim; ++i)
566 Vmath::Fill(nq,df[3*i+1][0]+df[3*i+2][0],normal[i],1);
572 for(i = 0; i < vCoordDim; ++i)
579 ASSERTL0(
false,
"face is out of range (face < 4)");
584 for(i = 0; i < vCoordDim; ++i)
586 fac += normal[i][0]*normal[i][0];
589 for (i = 0; i < vCoordDim; ++i)
599 int nq0 = ptsKeys[0].GetNumPoints();
600 int nq1 = ptsKeys[1].GetNumPoints();
601 int nq2 = ptsKeys[2].GetNumPoints();
610 else if (face == 1 || face == 3)
622 Array<OneD, NekDouble> work (nq, 0.0);
623 Array<OneD, NekDouble> normals(vCoordDim*nqtot,0.0);
632 for(j = 0; j < nq01; ++j)
634 normals[j] = -df[2][j]*jac[j];
635 normals[nqtot+j] = -df[5][j]*jac[j];
636 normals[2*nqtot+j] = -df[8][j]*jac[j];
639 points0 = ptsKeys[0];
640 points1 = ptsKeys[1];
646 for (j = 0; j < nq0; ++j)
648 for(k = 0; k < nq2; ++k)
652 -df[1][tmp]*jac[tmp];
653 normals[nqtot+j+k*nq0] =
654 -df[4][tmp]*jac[tmp];
655 normals[2*nqtot+j+k*nq0] =
656 -df[7][tmp]*jac[tmp];
660 points0 = ptsKeys[0];
661 points1 = ptsKeys[2];
667 for (j = 0; j < nq1; ++j)
669 for(k = 0; k < nq2; ++k)
671 int tmp = nq0-1+nq0*j+nq01*k;
673 (df[0][tmp]+df[2][tmp])*jac[tmp];
674 normals[nqtot+j+k*nq1] =
675 (df[3][tmp]+df[5][tmp])*jac[tmp];
676 normals[2*nqtot+j+k*nq1] =
677 (df[6][tmp]+df[8][tmp])*jac[tmp];
681 points0 = ptsKeys[1];
682 points1 = ptsKeys[2];
688 for (j = 0; j < nq0; ++j)
690 for(k = 0; k < nq2; ++k)
692 int tmp = nq0*(nq1-1) + j + nq01*k;
694 (df[1][tmp]+df[2][tmp])*jac[tmp];
695 normals[nqtot+j+k*nq0] =
696 (df[4][tmp]+df[5][tmp])*jac[tmp];
697 normals[2*nqtot+j+k*nq0] =
698 (df[7][tmp]+df[8][tmp])*jac[tmp];
702 points0 = ptsKeys[0];
703 points1 = ptsKeys[2];
709 for (j = 0; j < nq1; ++j)
711 for(k = 0; k < nq2; ++k)
713 int tmp = j*nq0+nq01*k;
715 -df[0][tmp]*jac[tmp];
716 normals[nqtot+j+k*nq1] =
717 -df[3][tmp]*jac[tmp];
718 normals[2*nqtot+j+k*nq1] =
719 -df[6][tmp]*jac[tmp];
723 points0 = ptsKeys[1];
724 points1 = ptsKeys[2];
729 ASSERTL0(
false,
"face is out of range (face < 4)");
734 m_base[0]->GetPointsKey(),
735 m_base[0]->GetPointsKey(),
740 for(i = 0; i < vCoordDim; ++i)
744 m_base[0]->GetPointsKey(),
745 m_base[0]->GetPointsKey(),
800 return tmp->GetStdMatrix(mkey);
897 Array<TwoD, const NekDouble> gmat =
900 int rows = lap00.GetRows();
901 int cols = lap00.GetColumns();
906 (*lap) = gmat[0][0]*lap00
926 int rows = LapMat.GetRows();
927 int cols = LapMat.GetColumns();
931 (*helm) = LapMat + factor*MassMat;
952 unsigned int nint = (
unsigned int)(
m_ncoeffs - nbdry);
953 unsigned int exp_size[] = {nbdry, nint};
954 unsigned int nblks = 2;
965 goto UseLocRegionsMatrix;
971 goto UseLocRegionsMatrix;
976 factor = mat->Scale();
977 goto UseStdRegionsMatrix;
1006 Array<OneD,unsigned int> bmap(nbdry);
1007 Array<OneD,unsigned int> imap(nint);
1011 for(i = 0; i < nbdry; ++i)
1013 for(j = 0; j < nbdry; ++j)
1015 (*A)(i,j) = mat(bmap[i],bmap[j]);
1018 for(j = 0; j < nint; ++j)
1020 (*B)(i,j) = mat(bmap[i],imap[j]);
1024 for(i = 0; i < nint; ++i)
1026 for(j = 0; j < nbdry; ++j)
1028 (*C)(i,j) = mat(imap[i],bmap[j]);
1031 for(j = 0; j < nint; ++j)
1033 (*D)(i,j) = mat(imap[i],imap[j]);
1042 (*A) = (*A) - (*B)*(*C);
1066 const unsigned int dim = 3;
1073 for (
unsigned int i = 0; i < dim; ++i)
1075 for (
unsigned int j = i; j < dim; ++j)
1077 m_metrics[m[i][j]] = Array<OneD, NekDouble>(nqtot);
1082 Array<OneD,NekDouble> g0 (
m_metrics[m[0][0]]);
1083 Array<OneD,NekDouble> g1 (
m_metrics[m[1][1]]);
1084 Array<OneD,NekDouble> g2 (
m_metrics[m[2][2]]);
1085 Array<OneD,NekDouble> g3 (
m_metrics[m[0][1]]);
1086 Array<OneD,NekDouble> g4 (
m_metrics[m[0][2]]);
1087 Array<OneD,NekDouble> g5 (
m_metrics[m[1][2]]);
1090 Array<OneD,NekDouble> alloc(9*nqtot,0.0);
1091 Array<OneD,NekDouble> h0 (nqtot, alloc);
1092 Array<OneD,NekDouble> h1 (nqtot, alloc+ 1*nqtot);
1093 Array<OneD,NekDouble> h2 (nqtot, alloc+ 2*nqtot);
1094 Array<OneD,NekDouble> wsp1 (nqtot, alloc+ 3*nqtot);
1095 Array<OneD,NekDouble> wsp2 (nqtot, alloc+ 4*nqtot);
1096 Array<OneD,NekDouble> wsp3 (nqtot, alloc+ 5*nqtot);
1097 Array<OneD,NekDouble> wsp4 (nqtot, alloc+ 6*nqtot);
1098 Array<OneD,NekDouble> wsp5 (nqtot, alloc+ 7*nqtot);
1099 Array<OneD,NekDouble> wsp6 (nqtot, alloc+ 8*nqtot);
1101 const Array<TwoD, const NekDouble>& df =
1103 const Array<OneD, const NekDouble>& z0 =
m_base[0]->GetZ();
1104 const Array<OneD, const NekDouble>& z1 =
m_base[1]->GetZ();
1105 const Array<OneD, const NekDouble>& z2 =
m_base[2]->GetZ();
1106 const unsigned int nquad0 =
m_base[0]->GetNumPoints();
1107 const unsigned int nquad1 =
m_base[1]->GetNumPoints();
1108 const unsigned int nquad2 =
m_base[2]->GetNumPoints();
1111 for(j = 0; j < nquad2; ++j)
1113 for(i = 0; i < nquad1; ++i)
1115 Vmath::Fill(nquad0, 2.0/(1.0-z2[j]), &h0[0]+i*nquad0 + j*nquad0*nquad1,1);
1116 Vmath::Fill(nquad0, 1.0/(1.0-z2[j]), &h1[0]+i*nquad0 + j*nquad0*nquad1,1);
1117 Vmath::Fill(nquad0, (1.0+z1[i])/(1.0-z2[j]), &h2[0]+i*nquad0 + j*nquad0*nquad1,1);
1120 for(i = 0; i < nquad0; i++)
1122 Blas::Dscal(nquad1*nquad2, 1+z0[i], &h1[0]+i, nquad0);
1131 Vmath::Vvtvvtp(nqtot, &df[0][0], 1, &h0[0], 1, &df[2][0], 1, &h1[0], 1, &wsp1[0], 1);
1132 Vmath::Vvtvvtp(nqtot, &df[3][0], 1, &h0[0], 1, &df[5][0], 1, &h1[0], 1, &wsp2[0], 1);
1133 Vmath::Vvtvvtp(nqtot, &df[6][0], 1, &h0[0], 1, &df[8][0], 1, &h1[0], 1, &wsp3[0], 1);
1136 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1137 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1140 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp1[0], 1, &df[5][0], 1, &wsp2[0], 1, &g4[0], 1);
1141 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1144 Vmath::Vvtvvtp(nqtot, &df[1][0], 1, &h0[0], 1, &df[2][0], 1, &h2[0], 1, &wsp4[0], 1);
1145 Vmath::Vvtvvtp(nqtot, &df[4][0], 1, &h0[0], 1, &df[5][0], 1, &h2[0], 1, &wsp5[0], 1);
1146 Vmath::Vvtvvtp(nqtot, &df[7][0], 1, &h0[0], 1, &df[8][0], 1, &h2[0], 1, &wsp6[0], 1);
1149 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1150 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1153 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1154 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1157 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &wsp4[0], 1, &df[5][0], 1, &wsp5[0], 1, &g5[0], 1);
1158 Vmath::Vvtvp (nqtot, &df[8][0], 1, &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1161 Vmath::Vvtvvtp(nqtot, &df[2][0], 1, &df[2][0], 1, &df[5][0], 1, &df[5][0], 1, &g2[0], 1);
1162 Vmath::Vvtvp (nqtot, &df[8][0], 1, &df[8][0], 1, &g2[0], 1, &g2[0], 1);
1167 Vmath::Svtsvtp(nqtot, df[0][0], &h0[0], 1, df[2][0], &h1[0], 1, &wsp1[0], 1);
1168 Vmath::Svtsvtp(nqtot, df[3][0], &h0[0], 1, df[5][0], &h1[0], 1, &wsp2[0], 1);
1169 Vmath::Svtsvtp(nqtot, df[6][0], &h0[0], 1, df[8][0], &h1[0], 1, &wsp3[0], 1);
1172 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp1[0], 1, &wsp2[0], 1, &wsp2[0], 1, &g0[0], 1);
1173 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp3[0], 1, &g0[0], 1, &g0[0], 1);
1176 Vmath::Svtsvtp(nqtot, df[2][0], &wsp1[0], 1, df[5][0], &wsp2[0], 1, &g4[0], 1);
1177 Vmath::Svtvp (nqtot, df[8][0], &wsp3[0], 1, &g4[0], 1, &g4[0], 1);
1180 Vmath::Svtsvtp(nqtot, df[1][0], &h0[0], 1, df[2][0], &h2[0], 1, &wsp4[0], 1);
1181 Vmath::Svtsvtp(nqtot, df[4][0], &h0[0], 1, df[5][0], &h2[0], 1, &wsp5[0], 1);
1182 Vmath::Svtsvtp(nqtot, df[7][0], &h0[0], 1, df[8][0], &h2[0], 1, &wsp6[0], 1);
1185 Vmath::Vvtvvtp(nqtot, &wsp4[0], 1, &wsp4[0], 1, &wsp5[0], 1, &wsp5[0], 1, &g1[0], 1);
1186 Vmath::Vvtvp (nqtot, &wsp6[0], 1, &wsp6[0], 1, &g1[0], 1, &g1[0], 1);
1189 Vmath::Vvtvvtp(nqtot, &wsp1[0], 1, &wsp4[0], 1, &wsp2[0], 1, &wsp5[0], 1, &g3[0], 1);
1190 Vmath::Vvtvp (nqtot, &wsp3[0], 1, &wsp6[0], 1, &g3[0], 1, &g3[0], 1);
1193 Vmath::Svtsvtp(nqtot, df[2][0], &wsp4[0], 1, df[5][0], &wsp5[0], 1, &g5[0], 1);
1194 Vmath::Svtvp (nqtot, df[8][0], &wsp6[0], 1, &g5[0], 1, &g5[0], 1);
1197 Vmath::Fill(nqtot, df[2][0]*df[2][0] + df[5][0]*df[5][0] + df[8][0]*df[8][0], &g2[0], 1);
1200 for (
unsigned int i = 0; i < dim; ++i)
1202 for (
unsigned int j = i; j < dim; ++j)
1212 const Array<OneD, const NekDouble> &inarray,
1213 Array<OneD, NekDouble> &outarray,
1214 Array<OneD, NekDouble> &wsp)
1223 int nquad0 =
m_base[0]->GetNumPoints();
1224 int nquad1 =
m_base[1]->GetNumPoints();
1225 int nq2 =
m_base[2]->GetNumPoints();
1226 int nqtot = nquad0*nquad1*nq2;
1228 ASSERTL1(wsp.num_elements() >= 6*nqtot,
1229 "Insufficient workspace size.");
1231 "Workspace not set up for ncoeffs > nqtot");
1233 const Array<OneD, const NekDouble>& base0 =
m_base[0]->GetBdata();
1234 const Array<OneD, const NekDouble>& base1 =
m_base[1]->GetBdata();
1235 const Array<OneD, const NekDouble>& base2 =
m_base[2]->GetBdata();
1236 const Array<OneD, const NekDouble>& dbase0 =
m_base[0]->GetDbdata();
1237 const Array<OneD, const NekDouble>& dbase1 =
m_base[1]->GetDbdata();
1238 const Array<OneD, const NekDouble>& dbase2 =
m_base[2]->GetDbdata();
1247 Array<OneD,NekDouble> wsp0 (2*nqtot, wsp);
1248 Array<OneD,NekDouble> wsp1 ( nqtot, wsp+1*nqtot);
1249 Array<OneD,NekDouble> wsp2 ( nqtot, wsp+2*nqtot);
1250 Array<OneD,NekDouble> wsp3 ( nqtot, wsp+3*nqtot);
1251 Array<OneD,NekDouble> wsp4 ( nqtot, wsp+4*nqtot);
1252 Array<OneD,NekDouble> wsp5 ( nqtot, wsp+5*nqtot);
1264 Vmath::Vvtvvtp(nqtot,&metric00[0],1,&wsp0[0],1,&metric01[0],1,&wsp1[0],1,&wsp3[0],1);
1265 Vmath::Vvtvp (nqtot,&metric02[0],1,&wsp2[0],1,&wsp3[0],1,&wsp3[0],1);
1266 Vmath::Vvtvvtp(nqtot,&metric01[0],1,&wsp0[0],1,&metric11[0],1,&wsp1[0],1,&wsp4[0],1);
1267 Vmath::Vvtvp (nqtot,&metric12[0],1,&wsp2[0],1,&wsp4[0],1,&wsp4[0],1);
1268 Vmath::Vvtvvtp(nqtot,&metric02[0],1,&wsp0[0],1,&metric12[0],1,&wsp1[0],1,&wsp5[0],1);
1269 Vmath::Vvtvp (nqtot,&metric22[0],1,&wsp2[0],1,&wsp5[0],1,&wsp5[0],1);