81 const int nConvectiveFields,
90 int nqtot = fields[0]->GetTotPoints();
91 ASSERTL1(nConvectiveFields == inarray.size(),
92 "Number of convective fields and Inarray are not compatible");
95 int ndim = advVel.size();
102 for (
int i = 0; i < ndim; ++i)
108 fields[i]->HomogeneousBwdTrans(nqtot, advVel[i], velocity[i]);
112 velocity[i] = advVel[i];
116 int nPointsTot = fields[0]->GetNpoints();
124 nPointsTot = fields[0]->Get1DScaledTotPoints(OneDptscale);
130 for (
int i = 0; i < ndim; ++i)
135 fields[0]->PhysInterp1DScaled(OneDptscale, velocity[i], AdvVel[i]);
142 for (
int i = 0; i < ndim; ++i)
144 AdvVel[i] = velocity[i];
155 for (
int n = 0; n < nConvectiveFields; ++n)
157 fields[0]->PhysDeriv(inarray[n], grad0);
161 fields[0]->PhysInterp1DScaled(OneDptscale, grad0, wkSp);
162 Vmath::Vmul(nPointsTot, wkSp, 1, AdvVel[0], 1, Outarray, 1);
165 fields[0]->PhysGalerkinProjection1DScaled(
166 OneDptscale, Outarray, outarray[n]);
172 Vmath::Vmul(nPointsTot, grad0, 1, AdvVel[0], 1, outarray[n],
180 for (
int n = 0; n < nConvectiveFields; ++n)
182 fields[0]->PhysDeriv(inarray[n], grad0, grad1);
187 fields[0]->PhysInterp1DScaled(OneDptscale, grad0, wkSp);
188 Vmath::Vmul(nPointsTot, wkSp, 1, AdvVel[0], 1, Outarray, 1);
190 fields[0]->PhysInterp1DScaled(OneDptscale, grad1, wkSp);
193 Vmath::Vvtvp(nPointsTot, wkSp, 1, AdvVel[1], 1, Outarray, 1,
197 fields[0]->PhysGalerkinProjection1DScaled(
198 OneDptscale, Outarray, outarray[n]);
204 Vmath::Vmul(nPointsTot, grad0, 1, AdvVel[0], 1, outarray[n],
207 outarray[n], 1, outarray[n], 1);
216 ndim * nConvectiveFields);
218 for (
int i = 0; i < ndim; i++)
222 for (
int i = 0; i < ndim * nConvectiveFields; i++)
226 for (
int i = 0; i < nConvectiveFields; i++)
231 for (
int n = 0; n < nConvectiveFields; n++)
233 fields[0]->PhysDeriv(inarray[n], grad[0], grad[1], grad[2]);
234 for (
int i = 0; i < ndim; i++)
237 fields[0]->PhysInterp1DScaled(OneDptscale, grad[i],
238 gradScaled[n * ndim + i]);
244 fields[0]->DealiasedDotProd(nPointsTot, AdvVel, gradScaled,
248 for (
int n = 0; n < nConvectiveFields; n++)
250 fields[0]->PhysGalerkinProjection1DScaled(
251 OneDptscale, Outarray[n], outarray[n]);
262 for (
int i = 0; i < ndim * nConvectiveFields; i++)
266 for (
int i = 0; i < nConvectiveFields; i++)
271 for (
int n = 0; n < nConvectiveFields; n++)
273 fields[0]->PhysDeriv(inarray[n], grad[n * ndim + 0],
278 fields[0]->DealiasedDotProd(nPointsTot, AdvVel, grad, outarray);
286 for (
int n = 0; n < nConvectiveFields; ++n)
288 if (fields[0]->GetWaveSpace() ==
true &&
291 fields[0]->HomogeneousBwdTrans(nqtot, inarray[n], tmp);
292 fields[0]->PhysDeriv(tmp, grad0, grad1);
295 inarray[n], outarray[n]);
296 fields[0]->HomogeneousBwdTrans(nqtot, outarray[n],
299 else if (fields[0]->GetWaveSpace() ==
true &&
302 fields[0]->HomogeneousBwdTrans(nqtot, inarray[n], tmp);
303 fields[0]->PhysDeriv(tmp, grad0);
306 inarray[n], outarray[n]);
307 fields[0]->HomogeneousBwdTrans(nqtot, outarray[n],
311 inarray[n], outarray[n]);
312 fields[0]->HomogeneousBwdTrans(nqtot, outarray[n],
317 fields[0]->PhysDeriv(inarray[n], grad0, grad1, grad2);
324 fields[0]->PhysInterp1DScaled(OneDptscale, grad0, wkSp);
327 Vmath::Vmul(nPointsTot, wkSp, 1, AdvVel[0], 1, Outarray,
331 fields[0]->PhysInterp1DScaled(OneDptscale, grad1, wkSp);
335 Outarray, 1, Outarray, 1);
338 fields[0]->PhysInterp1DScaled(OneDptscale, grad2, wkSp);
342 Outarray, 1, Outarray, 1);
344 fields[0]->PhysGalerkinProjection1DScaled(
345 OneDptscale, Outarray, outarray[n]);
354 outarray[n], 1, outarray[n], 1);
356 outarray[n], 1, outarray[n], 1);
359 if (fields[0]->GetWaveSpace() ==
true)
361 fields[0]->HomogeneousFwdTrans(nqtot, outarray[n],
368 ASSERTL0(
false,
"dimension unknown");
371 for (
int n = 0; n < nConvectiveFields; ++n)