35 #ifndef NEKTAR_SOLVERUTILS_DIFFUSION
36 #define NEKTAR_SOLVERUTILS_DIFFUSION
41 #include <boost/core/ignore_unused.hpp>
54 typedef std::function<
void (
55 const Array<OneD, Array<OneD, NekDouble> > &,
56 const TensorOfArray3D<NekDouble> &,
57 TensorOfArray3D<NekDouble> &)>
60 typedef std::function<
void (
66 typedef std::function<
void (
72 typedef std::function<
void (
87 typedef std::function<
void (
106 typedef std::function<
void (
128 typedef std::function<
void (
141 typedef std::function<
void (
150 typedef std::function<
void (
171 const std::size_t nConvectiveFields,
179 const std::size_t nConvectiveFields,
189 const std::size_t nConvectiveFields,
200 const std::size_t nConvectiveFields,
210 pFwd, pBwd,qfield,nonZeroIndex);
214 const std::size_t nConvectiveFields,
245 VolumeFlux, nonZeroIndex);
263 VolumeFlux, TraceFlux, pFwd, pBwd, nonZeroIndex);
267 const int nConvectiveFields,
280 VolumeFlux,SymmFlux,pFwd,pBwd,
281 nonZeroIndex,solution_Aver,solution_jump);
286 const std::size_t nConvectiveFields,
296 inarray, qfield, VolumeFlux, outarray, pFwd, pBwd);
301 const std::size_t nConvectiveFields,
311 qfield, VolumeFlux, outarray, pFwd, pBwd);
315 const int nConvectiveFields,
328 template<
typename FuncPo
interT,
typename ObjectPo
interT>
332 func, obj, std::placeholders::_1, std::placeholders::_2,
333 std::placeholders::_3);
342 template<
typename FuncPo
interT,
typename ObjectPo
interT>
346 func, obj, std::placeholders::_1, std::placeholders::_2,
347 std::placeholders::_3);
355 template<
typename FuncPo
interT,
typename ObjectPo
interT>
359 func, obj, std::placeholders::_1, std::placeholders::_2,
360 std::placeholders::_3);
368 template<
typename FuncPo
interT,
typename ObjectPo
interT>
372 func, obj, std::placeholders::_1, std::placeholders::_2,
373 std::placeholders::_3, std::placeholders::_4,
374 std::placeholders::_5, std::placeholders::_6,
375 std::placeholders::_7);
383 template<
typename FuncPo
interT,
typename ObjectPo
interT>
387 func, obj, std::placeholders::_1, std::placeholders::_2,
388 std::placeholders::_3, std::placeholders::_4,
389 std::placeholders::_5, std::placeholders::_6,
390 std::placeholders::_7);
398 template<
typename FuncPo
interT,
typename ObjectPo
interT>
400 FuncPointerT
func, ObjectPointerT obj)
403 func, obj, std::placeholders::_1, std::placeholders::_2);
406 template<
typename FuncPo
interT,
typename ObjectPo
interT>
410 func, obj, std::placeholders::_1);
413 template<
typename FuncPo
interT,
typename ObjectPo
interT>
417 func, obj, std::placeholders::_1, std::placeholders::_2);
420 template<
typename FuncPo
interT,
typename ObjectPo
interT>
424 func, obj, std::placeholders::_1, std::placeholders::_2,
425 std::placeholders::_3, std::placeholders::_4,
426 std::placeholders::_5, std::placeholders::_6);
447 const std::size_t nConvectiveFields,
482 boost::ignore_unused(pSession, pFields);
486 const std::size_t nConvectiveFields,
494 const std::size_t nConvectiveFields,
502 const std::size_t nConvectiveFields,
513 const std::size_t nConvectiveFields,
550 const int nConvectiveFields,
562 boost::ignore_unused(nConvectiveFields, fields, inarray, qfield,
563 VolumeFlux, SymmFlux, pFwd, pBwd,
564 nonZeroIndex,solution_Aver,solution_jump);
565 ASSERTL0(
false,
"Not defined function v_DiffuseTraceSymmFlux.");
569 const std::size_t nConvectiveFields,
578 boost::ignore_unused(nConvectiveFields, fields, inarray, qfield,
579 VolumeFlux, outarray, pFwd, pBwd);
583 const std::size_t nConvectiveFields,
592 boost::ignore_unused(nConvectiveFields, fields, inarray, qfield,
593 VolumeFlux, outarray, pFwd, pBwd);
600 boost::ignore_unused(deriv);
#define ASSERTL0(condition, msg)
#define SOLVER_UTILS_EXPORT
Provides a generic Factory class.
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 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)
Array< OneD, NekDouble > m_divVelSquare
void SetFluxVectorNS(DiffusionFluxVecCBNS fluxVector)
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.
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 GetAVmu(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &muvar, Array< OneD, NekDouble > &MuVarTrace)
Get the mu of artifical viscosity(AV)
void SetSpecialBndTreat(FuncPointerT func, ObjectPointerT obj)
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 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.
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)
void SetArtificialDiffusionVector(FuncPointerT func, ObjectPointerT obj)
void SetHomoDerivs(Array< OneD, Array< OneD, NekDouble > > &deriv)
DiffusionArtificialDiffusion m_ArtificialDiffusionVector
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 TensorOfArray3D< NekDouble > & GetFluxTensor()
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)
void SetFluxPenaltyNS(DiffusionFluxPenaltyNS flux)
Array< OneD, NekDouble > m_divVel
Params for Ducros sensor.
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)
SOLVER_UTILS_EXPORT void GetDivCurl(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const TensorOfArray3D< NekDouble > &pVarDer)
Compute divergence and curl squared.
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.
virtual SOLVER_UTILS_EXPORT ~Diffusion()
Array< OneD, NekDouble > m_curlVelSquare
DiffusionFluxVecCBNS m_fluxVectorNS
void SetCalcViscosity(FuncPointerT func, ObjectPointerT obj)
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 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
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.
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.
void SetDiffusionSymmFluxCons(FuncPointerT func, ObjectPointerT obj)
CalcViscosity m_CalcViscosity
SpecialBndTreat m_SpecialBndTreat
virtual void v_SetHomoDerivs(Array< OneD, Array< OneD, NekDouble > > &deriv)
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.
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)
SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & GetTraceNormal()
Get trace normal.
void SetDiffusionFluxCons(FuncPointerT func, ObjectPointerT obj)
DiffusionSymmFluxCons m_FunctorSymmetricfluxCons
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)
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)
DiffusionFluxPenaltyNS m_fluxPenaltyNS
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)
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.
virtual SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & v_GetTraceNormal()
SOLVER_UTILS_EXPORT void FluxVec(TensorOfArray3D< NekDouble > &fluxvector)
void SetDiffusionFluxConsTrace(DiffusionFluxCons flux)
DiffusionFluxVecCB m_fluxVector
virtual SOLVER_UTILS_EXPORT void v_InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
SOLVER_UTILS_EXPORT void SetFluxVector(DiffusionFluxVecCB fluxVector)
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::function< void(Array< OneD, Array< OneD, NekDouble > > &)> SpecialBndTreat
std::function< void(const Array< OneD, const Array< OneD, NekDouble > > &, Array< OneD, NekDouble > &)> CalcViscosity
std::function< void(const Array< OneD, Array< OneD, NekDouble > > &, Array< OneD, NekDouble > &)> DiffusionArtificialDiffusion
DiffusionFactory & GetDiffusionFactory()
std::function< void(const Array< OneD, Array< OneD, NekDouble > > &, const TensorOfArray3D< NekDouble > &, TensorOfArray3D< NekDouble > &)> DiffusionFluxVecCB
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 int, const Array< OneD, Array< OneD, NekDouble > > &, const TensorOfArray3D< NekDouble > &, TensorOfArray3D< NekDouble > &, Array< OneD, int > &, const Array< OneD, Array< OneD, NekDouble > > &, const Array< OneD, NekDouble > &)> DiffusionFluxCons
std::shared_ptr< SolverUtils::Diffusion > DiffusionSharedPtr
A shared pointer to an EquationSystem object.
std::function< void(const Array< OneD, Array< OneD, NekDouble > > &, const Array< OneD, Array< OneD, NekDouble > > &, Array< OneD, Array< OneD, NekDouble > > &)> DiffusionFluxPenaltyNS
std::function< void(const Array< OneD, Array< OneD, NekDouble > > &, TensorOfArray3D< NekDouble > &, TensorOfArray3D< NekDouble > &)> DiffusionFluxVecCBNS
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 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