35 #ifndef NEKTAR_SOLVERUTILS_DIFFUSION
36 #define NEKTAR_SOLVERUTILS_DIFFUSION
41 #include <boost/core/ignore_unused.hpp>
54 typedef std::function<
void(
const Array<OneD, Array<OneD, NekDouble>> &,
55 const TensorOfArray3D<NekDouble> &,
56 TensorOfArray3D<NekDouble> &)>
79 typedef std::function<
void(
97 typedef std::function<
void(
114 typedef std::function<
void(
142 const std::size_t nConvectiveFields,
152 const std::size_t nConvectiveFields,
162 const std::size_t nConvectiveFields,
172 const std::size_t nConvectiveFields,
181 pBwd, qfield, nonZeroIndex);
185 const std::size_t nConvectiveFields,
230 pFwd, pBwd, nonZeroIndex);
234 const int nConvectiveFields,
249 VolumeFlux, SymmFlux, pFwd, pBwd, nonZeroIndex,
250 solution_Aver, solution_jump);
255 const std::size_t nConvectiveFields,
265 qfield, VolumeFlux, outarray, pFwd, pBwd);
270 const std::size_t nConvectiveFields,
280 VolumeFlux, outarray, pFwd, pBwd);
284 const int nConvectiveFields,
const int nDim,
const int nPts,
292 template <
typename FuncPo
interT,
typename ObjectPo
interT>
296 std::placeholders::_2, std::placeholders::_3);
304 template <
typename FuncPo
interT,
typename ObjectPo
interT>
308 std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
309 std::placeholders::_3);
317 template <
typename FuncPo
interT,
typename ObjectPo
interT>
321 std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
322 std::placeholders::_3);
330 template <
typename FuncPo
interT,
typename ObjectPo
interT>
334 std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
335 std::placeholders::_3, std::placeholders::_4,
336 std::placeholders::_5, std::placeholders::_6);
344 template <
typename FuncPo
interT,
typename ObjectPo
interT>
348 std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
349 std::placeholders::_3, std::placeholders::_4,
350 std::placeholders::_5, std::placeholders::_6);
358 template <
typename FuncPo
interT,
typename ObjectPo
interT>
364 template <
typename FuncPo
interT,
typename ObjectPo
interT>
368 std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
369 std::placeholders::_3, std::placeholders::_4,
370 std::placeholders::_5, std::placeholders::_6);
385 const std::size_t nConvectiveFields,
const size_t npnts,
416 boost::ignore_unused(pSession, pFields);
420 const std::size_t nConvectiveFields,
428 const std::size_t nConvectiveFields,
436 const std::size_t nConvectiveFields,
445 const std::size_t nConvectiveFields,
const size_t npnts,
478 const int nConvectiveFields,
490 boost::ignore_unused(nConvectiveFields, fields, inarray, qfield,
491 VolumeFlux, SymmFlux, pFwd, pBwd, nonZeroIndex,
492 solution_Aver, solution_jump);
493 ASSERTL0(
false,
"Not defined function v_DiffuseTraceSymmFlux.");
497 const std::size_t nConvectiveFields,
506 boost::ignore_unused(nConvectiveFields, fields, inarray, qfield,
507 VolumeFlux, outarray, pFwd, pBwd);
510 const std::size_t nConvectiveFields,
519 boost::ignore_unused(nConvectiveFields, fields, inarray, qfield,
520 VolumeFlux, outarray, pFwd, pBwd);
525 boost::ignore_unused(deriv);
#define ASSERTL0(condition, msg)
#define SOLVER_UTILS_EXPORT
Provides a generic Factory class.
SOLVER_UTILS_EXPORT void AddDiffusionSymmFluxToPhys(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Add symmetric flux to field in coeff physical space.
Array< OneD, NekDouble > m_divVelSquare
virtual SOLVER_UTILS_EXPORT void v_ConsVarAveJump(const std::size_t nConvectiveFields, const size_t npnts, const Array< OneD, const Array< OneD, NekDouble >> &vFwd, const Array< OneD, const Array< OneD, NekDouble >> &vBwd, Array< OneD, Array< OneD, NekDouble >> &aver, Array< OneD, Array< OneD, NekDouble >> &jump)
void SetFluxVectorNS(DiffusionFluxVecCBNS fluxVector)
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 SetSpecialBndTreat(FuncPointerT func, ObjectPointerT obj)
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.
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)
SOLVER_UTILS_EXPORT void AddDiffusionSymmFluxToCoeff(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Add symmetric flux to field in coeff space.
void SetFluxPenaltyNS(FuncPointerT func, ObjectPointerT obj)
DiffusionFluxCons m_FunctorDiffusionfluxConsTrace
virtual SOLVER_UTILS_EXPORT void v_DiffuseTraceSymmFlux(const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, const TensorOfArray3D< NekDouble > &qfield, const TensorOfArray3D< NekDouble > &VolumeFlux, TensorOfArray3D< NekDouble > &SymmFlux, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd, Array< OneD, int > &nonZeroIndex, Array< OneD, Array< OneD, NekDouble >> &solution_Aver, Array< OneD, Array< OneD, NekDouble >> &solution_jump)
SOLVER_UTILS_EXPORT void DiffuseTraceSymmFlux(const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, const TensorOfArray3D< NekDouble > &qfield, const TensorOfArray3D< NekDouble > &VolumeFlux, TensorOfArray3D< NekDouble > &SymmFlux, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd, Array< OneD, int > &nonZeroIndex, Array< OneD, Array< OneD, NekDouble >> &solution_Aver=NullNekDoubleArrayOfArray, Array< OneD, Array< OneD, NekDouble >> &solution_jump=NullNekDoubleArrayOfArray)
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)
Similar with Diffusion::Diffuse(): calculate diffusion flux The difference is in the outarray: it is ...
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)
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.
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 TensorOfArray3D< NekDouble > & GetFluxTensor()
void SetFluxPenaltyNS(DiffusionFluxPenaltyNS flux)
Array< OneD, NekDouble > m_divVel
Params for Ducros sensor.
SOLVER_UTILS_EXPORT void GetDivCurl(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const TensorOfArray3D< NekDouble > &pVarDer)
Compute divergence and curl squared.
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.
virtual SOLVER_UTILS_EXPORT ~Diffusion()
Array< OneD, NekDouble > m_curlVelSquare
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)
virtual TensorOfArray3D< NekDouble > & v_GetFluxTensor()
DiffusionFluxCons m_FunctorDiffusionfluxCons
void SetHomoDerivs(Array< OneD, Array< OneD, NekDouble >> &deriv)
virtual SOLVER_UTILS_EXPORT void v_GetPrimVar(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &primVar)
Compute primary derivatives.
void SetDiffusionSymmFluxCons(FuncPointerT func, ObjectPointerT obj)
SpecialBndTreat m_SpecialBndTreat
SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & GetTraceNormal()
Get trace normal.
void SetDiffusionFluxCons(FuncPointerT func, ObjectPointerT obj)
virtual void v_SetHomoDerivs(Array< OneD, Array< OneD, NekDouble >> &deriv)
DiffusionSymmFluxCons m_FunctorSymmetricfluxCons
SOLVER_UTILS_EXPORT void AddSymmFluxIntegralToOffDiag(const int nConvectiveFields, const int nDim, const int nPts, const int nTracePts, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, const int > &nonZeroIndex, TensorOfArray3D< NekDouble > &Fwdflux, TensorOfArray3D< NekDouble > &Bwdflux, Array< OneD, Array< OneD, NekDouble >> &outarray)
DiffusionFluxPenaltyNS m_fluxPenaltyNS
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, const Array< OneD, Array< OneD, NekDouble >> &pBwd, TensorOfArray3D< NekDouble > &qfield, Array< OneD, int > &nonZeroIndex)
virtual SOLVER_UTILS_EXPORT void v_AddDiffusionSymmFluxToCoeff(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, 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_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 SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & v_GetTraceNormal()
void SetDiffusionFluxConsTrace(DiffusionFluxCons flux)
DiffusionFluxVecCB m_fluxVector
virtual SOLVER_UTILS_EXPORT void v_AddDiffusionSymmFluxToPhys(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, 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)
virtual SOLVER_UTILS_EXPORT void v_InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
SOLVER_UTILS_EXPORT void SetFluxVector(DiffusionFluxVecCB fluxVector)
SOLVER_UTILS_EXPORT void ConsVarAveJump(const std::size_t nConvectiveFields, const size_t npnts, const Array< OneD, const Array< OneD, NekDouble >> &vFwd, const Array< OneD, const Array< OneD, NekDouble >> &vBwd, Array< OneD, Array< OneD, NekDouble >> &aver, Array< OneD, Array< OneD, NekDouble >> &jump)
Get the average and jump value of conservative variables on trace.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
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::shared_ptr< SolverUtils::Diffusion > DiffusionSharedPtr
A shared pointer to an EquationSystem object.
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