69 const Array<OneD, const NekDouble> &inarray,
70 Array<OneD, NekDouble> &out_dx,
71 Array<OneD, NekDouble> &out_dy,
72 Array<OneD, NekDouble> &out_dz)
74 const int nquad0 =
m_base[0]->GetNumPoints();
75 const int nquad1 =
m_base[1]->GetNumPoints();
76 const int nquad2 =
m_base[2]->GetNumPoints();
78 Array<OneD, NekDouble> wsp(nquad0*nquad1*nquad2);
81 Vmath::Vcopy(nquad0*nquad1*nquad2, &inarray[0], 1, &wsp[0], 1);
83 if (out_dx.num_elements() > 0)
87 Blas::Dgemm(
'N',
'N', nquad0,nquad1*nquad2,nquad0,1.0,
88 D0,nquad0,&wsp[0],nquad0,0.0,&out_dx[0],nquad0);
91 if (out_dy.num_elements() > 0)
94 for (
int j = 0; j < nquad2; ++j)
96 Blas::Dgemm(
'N',
'T', nquad0, nquad1, nquad1,
97 1.0, &wsp[j*nquad0*nquad1], nquad0,
99 0.0, &out_dy[j*nquad0*nquad1], nquad0);
103 if (out_dz.num_elements() > 0)
107 Blas::Dgemm(
'N',
'T',nquad0*nquad1,nquad2,nquad2,1.0,
108 &wsp[0],nquad0*nquad1,D2,nquad2,0.0,&out_dz[0],
114 const Array<OneD, const NekDouble>& base0,
115 const Array<OneD, const NekDouble>& base1,
116 const Array<OneD, const NekDouble>& base2,
117 const Array<OneD, const NekDouble>& inarray,
118 Array<OneD, NekDouble>& outarray,
119 Array<OneD, NekDouble>& wsp,
120 bool doCheckCollDir0,
121 bool doCheckCollDir1,
122 bool doCheckCollDir2)
124 v_BwdTrans_SumFacKernel(base0, base1, base2, inarray, outarray, wsp, doCheckCollDir0, doCheckCollDir1, doCheckCollDir2);
128 const Array<OneD, const NekDouble>& base0,
129 const Array<OneD, const NekDouble>& base1,
130 const Array<OneD, const NekDouble>& base2,
131 const Array<OneD, const NekDouble>& inarray,
132 Array<OneD, NekDouble> &outarray,
133 Array<OneD, NekDouble> &wsp,
134 bool doCheckCollDir0,
135 bool doCheckCollDir1,
136 bool doCheckCollDir2)
142 const Array<OneD, const NekDouble> &coords,
143 const Array<OneD, const NekDouble> &physvals)
145 Array<OneD, NekDouble> eta = Array<OneD, NekDouble>(3);
146 Array<OneD, DNekMatSharedPtr> I(3);
148 WARNINGL2(coords[0] >= -1,
"coord[0] < -1");
149 WARNINGL2(coords[0] <= 1,
"coord[0] > 1");
150 WARNINGL2(coords[1] >= -1,
"coord[1] < -1");
151 WARNINGL2(coords[1] <= 1,
"coord[1] > 1");
152 WARNINGL2(coords[2] >= -1,
"coord[2] < -1");
153 WARNINGL2(coords[2] <= 1,
"coord[2] > 1");
160 I[0] =
m_base[0]->GetI(eta);
161 I[1] =
m_base[1]->GetI(eta+1);
162 I[2] =
m_base[2]->GetI(eta+2);
168 const Array<OneD, DNekMatSharedPtr > &I,
169 const Array<OneD, const NekDouble> &physvals)
173 int Qx =
m_base[0]->GetNumPoints();
174 int Qy =
m_base[1]->GetNumPoints();
175 int Qz =
m_base[2]->GetNumPoints();
177 Array<OneD, NekDouble> sumFactorization_qr = Array<OneD, NekDouble>(Qy*Qz);
178 Array<OneD, NekDouble> sumFactorization_r = Array<OneD, NekDouble>(Qz);
184 interpolatingNodes = &I[0]->GetPtr()[0];
186 Blas::Dgemv(
'T',Qx,Qy*Qz,1.0,&physvals[0],Qx,&interpolatingNodes[0], 1, 0.0, &sumFactorization_qr[0], 1);
189 interpolatingNodes = &I[1]->GetPtr()[0];
191 Blas::Dgemv(
'T',Qy,Qz,1.0,&sumFactorization_qr[0],Qy,&interpolatingNodes[0],1,0.0,&sumFactorization_r[0], 1);
194 interpolatingNodes = &I[2]->GetPtr()[0];
195 value =
Blas::Ddot(Qz, interpolatingNodes, 1, &sumFactorization_r[0], 1);
207 const Array<OneD, const NekDouble> &inarray,
208 Array<OneD,NekDouble> &outarray,
218 const Array<OneD, const NekDouble>& base0 =
m_base[0]->GetBdata();
219 const Array<OneD, const NekDouble>& base1 =
m_base[1]->GetBdata();
220 const Array<OneD, const NekDouble>& base2 =
m_base[2]->GetBdata();
223 Array<OneD,NekDouble> wsp0(7*nqtot);
224 Array<OneD,NekDouble> wsp1(wsp0+nqtot);
226 if(!(
m_base[0]->Collocation() &&
m_base[1]->Collocation() &&
227 m_base[2]->Collocation()))
249 const Array<OneD, const NekDouble> &inarray,
250 Array<OneD,NekDouble> &outarray,
255 int nquad0 =
m_base[0]->GetNumPoints();
256 int nquad1 =
m_base[1]->GetNumPoints();
257 int nquad2 =
m_base[2]->GetNumPoints();
258 int nmodes0 =
m_base[0]->GetNumModes();
259 int nmodes1 =
m_base[1]->GetNumModes();
260 int nmodes2 =
m_base[2]->GetNumModes();
261 int wspsize = max(nquad0*nmodes2*(nmodes1+nquad1),
262 nquad0*nquad1*(nquad2+nmodes0)+
263 nmodes0*nmodes1*nquad2);
267 const Array<OneD, const NekDouble>& base0 =
m_base[0]->GetBdata ();
268 const Array<OneD, const NekDouble>& base1 =
m_base[1]->GetBdata ();
269 const Array<OneD, const NekDouble>& base2 =
m_base[2]->GetBdata ();
270 Array<OneD,NekDouble> wsp0(8*wspsize);
271 Array<OneD,NekDouble> wsp1(wsp0+1*wspsize);
272 Array<OneD,NekDouble> wsp2(wsp0+2*wspsize);
274 if(!(
m_base[0]->Collocation() &&
m_base[1]->Collocation() &&
275 m_base[2]->Collocation()))
283 wsp0,wsp2,
true,
true,
true);
286 outarray,wsp2,
true,
true,
true);
317 std::map<int, NormalVector>::const_iterator x;
320 "face normal not computed.");
325 const Array<OneD, const NekDouble>& inarray)
351 switch(faceDirBasisType)
392 ASSERTL0(
false,
"expansion type unknown");
407 switch(faceDirBasisType)
439 ASSERTL0(
false,
"invalid value to flag");
467 ASSERTL0(
false,
"invalid value to flag");
497 ASSERTL0(
false,
"invalid value to flag");
504 ASSERTL0(
false,
"expansion type unknown");