60 Array<OneD, MultiRegions::ExpListSharedPtr> pFields)
77 const int nConvectiveFields,
78 const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
79 const Array<
OneD, Array<OneD, NekDouble> > &advVel,
80 const Array<
OneD, Array<OneD, NekDouble> > &inarray,
81 Array<
OneD, Array<OneD, NekDouble> > &outarray,
84 int nDim = fields[0]->GetCoordim(0);
85 int nPointsTot = fields[0]->GetTotPoints();
86 int nCoeffs = fields[0]->GetNcoeffs();
87 int nTracePointsTot = fields[0]->GetTrace()->GetTotPoints();
90 Array<OneD, Array<OneD, NekDouble> > tmp(nConvectiveFields);
91 Array<OneD, Array<OneD, Array<OneD, NekDouble> > > fluxvector(
95 for (i = 0; i < nConvectiveFields; ++i)
98 Array<OneD, Array<OneD, NekDouble> >(
m_spaceDim);
101 fluxvector[i][j] = Array<OneD, NekDouble>(nPointsTot);
106 "Riemann solver must be provided for AdvectionWeakDG.");
111 for(i = 0; i < nConvectiveFields; ++i)
113 tmp[i] = Array<OneD, NekDouble>(nCoeffs, 0.0);
115 for (j = 0; j < nDim; ++j)
117 fields[i]->IProductWRTDerivBase(j, fluxvector[i][j],
119 Vmath::Vadd(nCoeffs, outarray[i], 1, tmp[i], 1, tmp[i], 1);
124 Array<OneD, Array<OneD, NekDouble> > Fwd (nConvectiveFields);
125 Array<OneD, Array<OneD, NekDouble> > Bwd (nConvectiveFields);
126 Array<OneD, Array<OneD, NekDouble> > numflux(nConvectiveFields);
128 for(i = 0; i < nConvectiveFields; ++i)
130 Fwd[i] = Array<OneD, NekDouble>(nTracePointsTot, 0.0);
131 Bwd[i] = Array<OneD, NekDouble>(nTracePointsTot, 0.0);
132 numflux[i] = Array<OneD, NekDouble>(nTracePointsTot, 0.0);
133 fields[i]->GetFwdBwdTracePhys(inarray[i], Fwd[i], Bwd[i]);
139 for(i = 0; i < nConvectiveFields; ++i)
142 fields[i]->AddTraceIntegral (numflux[i], tmp[i]);
143 fields[i]->MultiplyByElmtInvMass(tmp[i], tmp[i]);
144 fields[i]->BwdTrans (tmp[i], outarray[i]);