35#ifndef NEKTAR_SOLVERUTILS_DIFFUSION
36#define NEKTAR_SOLVERUTILS_DIFFUSION
41#include <boost/core/ignore_unused.hpp>
91typedef std::function<
void(
109typedef std::function<
void(
126typedef std::function<
void(
149 const std::size_t nConvectiveFields,
158 v_Diffuse(nConvectiveFields, fields, inarray, outarray, pFwd, pBwd);
162 const std::size_t nConvectiveFields,
172 v_Diffuse(nConvectiveFields, fields, inarray, outarray, pFwd, pBwd);
176 const std::size_t nConvectiveFields,
190 const std::size_t nConvectiveFields,
242 pFwd, pBwd, nonZeroIndex);
263 template <
typename FuncPo
interT,
typename ObjectPo
interT>
267 std::placeholders::_2, std::placeholders::_3);
275 template <
typename FuncPo
interT,
typename ObjectPo
interT>
279 std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
280 std::placeholders::_3);
288 template <
typename FuncPo
interT,
typename ObjectPo
interT>
292 std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
293 std::placeholders::_3);
301 template <
typename FuncPo
interT,
typename ObjectPo
interT>
305 std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
306 std::placeholders::_3, std::placeholders::_4,
307 std::placeholders::_5, std::placeholders::_6);
315 template <
typename FuncPo
interT,
typename ObjectPo
interT>
319 std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
320 std::placeholders::_3, std::placeholders::_4,
321 std::placeholders::_5, std::placeholders::_6);
329 template <
typename FuncPo
interT,
typename ObjectPo
interT>
335 template <
typename FuncPo
interT,
typename ObjectPo
interT>
339 std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
340 std::placeholders::_3, std::placeholders::_4,
341 std::placeholders::_5, std::placeholders::_6);
365 const std::size_t nConvectiveFields,
373 const std::size_t nConvectiveFields,
408 boost::ignore_unused(deriv);
#define SOLVER_UTILS_EXPORT
Provides a generic Factory class.
Array< OneD, NekDouble > m_divVelSquare
void SetFluxVectorNS(DiffusionFluxVecCBNS fluxVector)
void SetSpecialBndTreat(FuncPointerT func, ObjectPointerT obj)
SOLVER_UTILS_EXPORT void DiffuseCalcDerivative(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfields, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayOfArray)
SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & GetTraceNormal()
Get trace normal.
void SetFluxPenaltyNS(FuncPointerT func, ObjectPointerT obj)
DiffusionFluxCons m_FunctorDiffusionfluxConsTrace
virtual SOLVER_UTILS_EXPORT void v_DiffuseCoeffs(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const Array< OneD, Array< OneD, NekDouble > > &pFwd, const Array< OneD, Array< OneD, NekDouble > > &pBwd)
virtual SOLVER_UTILS_EXPORT void v_Diffuse(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const Array< OneD, Array< OneD, NekDouble > > &pFwd, const Array< OneD, Array< OneD, NekDouble > > &pBwd)=0
void SetFluxPenaltyNS(DiffusionFluxPenaltyNS flux)
SOLVER_UTILS_EXPORT void SetHomoDerivs(Array< OneD, Array< OneD, NekDouble > > &deriv)
Array< OneD, NekDouble > m_divVel
Params for Ducros sensor.
virtual SOLVER_UTILS_EXPORT void v_DiffuseVolumeFlux(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, int > &nonZeroIndex)
Diffusion Volume Flux.
SOLVER_UTILS_EXPORT void Diffuse(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayOfArray)
virtual SOLVER_UTILS_EXPORT ~Diffusion()
SOLVER_UTILS_EXPORT void Diffuse(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, NekDouble time, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayOfArray)
Array< OneD, NekDouble > m_curlVelSquare
SOLVER_UTILS_EXPORT void DiffuseVolumeFlux(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, int > &nonZeroIndex=NullInt1DArray)
Diffusion Volume FLux.
DiffusionFluxVecCBNS m_fluxVectorNS
void SetFluxVectorNS(FuncPointerT func, ObjectPointerT obj)
void SetDiffusionFluxConsTrace(FuncPointerT func, ObjectPointerT obj)
void SetFluxVector(FuncPointerT func, ObjectPointerT obj)
void SetDiffusionFluxCons(DiffusionFluxCons flux)
SOLVER_UTILS_EXPORT void InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
SOLVER_UTILS_EXPORT TensorOfArray3D< NekDouble > & GetFluxTensor()
SOLVER_UTILS_EXPORT void DiffuseTraceFlux(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble > > &TraceFlux, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayOfArray, Array< OneD, int > &nonZeroIndex=NullInt1DArray)
Diffusion term Trace Flux.
DiffusionFluxCons m_FunctorDiffusionfluxCons
void SetDiffusionSymmFluxCons(FuncPointerT func, ObjectPointerT obj)
SpecialBndTreat m_SpecialBndTreat
virtual void v_SetHomoDerivs(Array< OneD, Array< OneD, NekDouble > > &deriv)
SOLVER_UTILS_EXPORT void DiffuseCoeffs(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, NekDouble time, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayOfArray)
virtual SOLVER_UTILS_EXPORT void v_DiffuseCalcDerivative(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfields, const Array< OneD, Array< OneD, NekDouble > > &pFwd, const Array< OneD, Array< OneD, NekDouble > > &pBwd)
Diffusion Flux, calculate the physical derivatives.
void SetDiffusionFluxCons(FuncPointerT func, ObjectPointerT obj)
virtual SOLVER_UTILS_EXPORT void v_InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)=0
DiffusionSymmFluxCons m_FunctorSymmetricfluxCons
DiffusionFluxPenaltyNS m_fluxPenaltyNS
virtual SOLVER_UTILS_EXPORT void v_DiffuseTraceFlux(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &Qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble > > &TraceFlux, const Array< OneD, Array< OneD, NekDouble > > &pFwd, const Array< OneD, Array< OneD, NekDouble > > &pBwd, Array< OneD, int > &nonZeroIndex)
Diffusion term Trace Flux.
virtual TensorOfArray3D< NekDouble > & v_GetFluxTensor()
virtual SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & v_GetTraceNormal()
void SetDiffusionFluxConsTrace(DiffusionFluxCons flux)
DiffusionFluxVecCB m_fluxVector
SOLVER_UTILS_EXPORT void DiffuseCoeffs(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayOfArray)
SOLVER_UTILS_EXPORT void SetFluxVector(DiffusionFluxVecCB fluxVector)
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< Diffusion > DiffusionSharedPtr
A shared pointer to an EquationSystem object.
std::function< void(Array< OneD, Array< OneD, NekDouble > > &)> SpecialBndTreat
std::function< void(const int, const Array< OneD, Array< OneD, NekDouble > > &, const TensorOfArray3D< NekDouble > &, TensorOfArray3D< NekDouble > &, Array< OneD, int > &, const Array< OneD, Array< OneD, NekDouble > > &)> DiffusionFluxCons
DiffusionFactory & GetDiffusionFactory()
std::function< void(const Array< OneD, Array< OneD, NekDouble > > &, const Array< OneD, Array< OneD, NekDouble > > &, Array< OneD, Array< OneD, NekDouble > > &)> DiffusionFluxPenaltyNS
LibUtilities::NekFactory< std::string, Diffusion, std::string > DiffusionFactory
Datatype of the NekFactory used to instantiate classes derived from the Diffusion class.
std::function< void(const Array< OneD, const Array< OneD, NekDouble > > &, const Array< OneD, const Array< OneD, Array< OneD, NekDouble > > > &, NekDouble, const Array< OneD, const Array< OneD, NekDouble > > &, const Array< OneD, const Array< OneD, Array< OneD, NekDouble > > > &)> FunctorDerivBndCond
std::function< void(const Array< OneD, Array< OneD, NekDouble > > &, const TensorOfArray3D< NekDouble > &, TensorOfArray3D< NekDouble > &)> DiffusionFluxVecCB
std::function< void(const Array< OneD, Array< OneD, NekDouble > > &, TensorOfArray3D< NekDouble > &, TensorOfArray3D< NekDouble > &)> DiffusionFluxVecCBNS
std::function< void(const int, const Array< OneD, Array< OneD, NekDouble > > &, const Array< OneD, Array< OneD, NekDouble > > &, TensorOfArray3D< NekDouble > &, Array< OneD, int > &, const Array< OneD, Array< OneD, NekDouble > > &)> DiffusionSymmFluxCons
The above copyright notice and this permission notice shall be included.
static Array< OneD, int > NullInt1DArray
static Array< OneD, Array< OneD, NekDouble > > NullNekDoubleArrayOfArray