35#include <boost/core/ignore_unused.hpp>
81 const int nConvectiveFields,
92 boost::ignore_unused(advVel, time);
93 size_t nCoeffs = fields[0]->GetNcoeffs();
96 for (
int i = 0; i < nConvectiveFields; ++i)
102 AdvectCoeffs(nConvectiveFields, fields, advVel, inarray, tmp, time, pFwd,
108 for (
int i = 0; i < nConvectiveFields; ++i)
110 fields[i]->BwdTrans(tmp[i], outarray[i]);
122 const int nConvectiveFields,
130 size_t nPointsTot = fields[0]->GetTotPoints();
131 size_t nCoeffs = fields[0]->GetNcoeffs();
132 size_t nTracePointsTot = fields[0]->GetTrace()->GetTotPoints();
137 for (
int i = 0; i < nConvectiveFields; ++i)
154 for (
int i = 0; i < nConvectiveFields; ++i)
156 Vmath::Fill(outarray[i].size(), 0.0, outarray[i], 1);
157 fields[i]->IProductWRTDerivBase(fluxvector[i], outarray[i]);
164 for (
int i = 0; i < nConvectiveFields; ++i)
169 AdvectTraceFlux(nConvectiveFields, fields, advVel, inarray, numflux, time,
173 for (
int i = 0; i < nConvectiveFields; ++i)
178 fields[i]->AddTraceIntegral(numflux[i], outarray[i]);
183 fields[i]->MultiplyByElmtInvMass(outarray[i], outarray[i]);
193 const int nConvectiveFields,
201 boost::ignore_unused(advVel, time);
202 int nTracePointsTot = fields[0]->GetTrace()->GetTotPoints();
212 for (
int i = 0; i < nConvectiveFields; ++i)
216 fields[i]->GetFwdBwdTracePhys(inarray[i], Fwd[i], Bwd[i]);
221 for (
int i = 0; i < nConvectiveFields; ++i)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
void AccumulateRegion(std::string, int iolevel=0)
Accumulate elapsed time for a region.
int m_spaceDim
Storage for space dimension. Used for homogeneous extension.
virtual SOLVER_UTILS_EXPORT void v_InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
Initialises the advection object.
RiemannSolverSharedPtr m_riemann
Riemann solver for DG-type schemes.
SOLVER_UTILS_EXPORT void AdvectVolumeFlux(const Array< OneD, Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &VolumeFlux)
virtual void v_InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields) override
Initialise AdvectionWeakDG objects and store them before starting the time-stepping.
SOLVER_UTILS_EXPORT void AdvectTraceFlux(const int nConvective, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &advVel, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &TraceFlux, const NekDouble &time, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayOfArray)
static AdvectionSharedPtr create(std::string advType)
virtual void v_Advect(const int nConvective, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &advVel, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayOfArray) override
Compute the advection term at each time-step using the Discontinuous Galerkin approach (DG).
SOLVER_UTILS_EXPORT void AdvectCoeffs(const int nConvective, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &advVel, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayOfArray)
std::shared_ptr< SessionReader > SessionReaderSharedPtr
AdvectionFactory & GetAdvectionFactory()
Gets the factory for initialising advection objects.
The above copyright notice and this permission notice shall be included.
static Array< OneD, Array< OneD, NekDouble > > NullNekDoubleArrayOfArray
void Neg(int n, T *x, const int incx)
Negate x = -x.
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.