Nektar++
Public Types | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Friends | List of all members
Nektar::NavierStokesImplicitCFE Class Reference

#include <NavierStokesImplicitCFE.h>

Inheritance diagram for Nektar::NavierStokesImplicitCFE:
[legend]

Public Types

typedef std::function< void(const Array< OneD, NekDouble > &, const NekDouble &, const Array< OneD, NekDouble > &, DNekMatSharedPtr &)> GetdFlux_dDeriv
 

Static Public Member Functions

static SolverUtils::EquationSystemSharedPtr create (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
- Static Public Member Functions inherited from Nektar::NavierStokesCFE
static SolverUtils::EquationSystemSharedPtr create (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 

Static Public Attributes

static std::string className
 
- Static Public Attributes inherited from Nektar::NavierStokesCFE
static std::string className
 
- Static Public Attributes inherited from Nektar::SolverUtils::UnsteadySystem
static std::string cmdSetStartTime
 
static std::string cmdSetStartChkNum
 

Protected Member Functions

 NavierStokesImplicitCFE (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
 ~NavierStokesImplicitCFE () override=default
 
void v_InitObject (bool DeclareFields=true) override
 Initialization object for CompressibleFlowSystem class. More...
 
void v_DoDiffusionCoeff (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const Array< OneD, const Array< OneD, NekDouble > > &pFwd, const Array< OneD, const Array< OneD, NekDouble > > &pBwd) override
 
void v_DoDiffusion (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) final
 
void v_MinusDiffusionFluxJacPoint (const int nConvectiveFields, const int nElmtPnt, const Array< OneD, const Array< OneD, NekDouble > > &locVars, const TensorOfArray3D< NekDouble > &locDerv, const Array< OneD, NekDouble > &locmu, const Array< OneD, NekDouble > &locDmuDT, const Array< OneD, NekDouble > &normals, DNekMatSharedPtr &wspMat, Array< OneD, Array< OneD, NekDouble > > &PntJacArray) override
 
void v_GetFluxDerivJacDirctn (const MultiRegions::ExpListSharedPtr &explist, const Array< OneD, const Array< OneD, NekDouble > > &normals, const int nDervDir, const Array< OneD, const Array< OneD, NekDouble > > &inarray, TensorOfArray5D< NekDouble > &ElmtJacArray, const int nFluxDir) override
 
void v_GetFluxDerivJacDirctnElmt (const int nConvectiveFields, const int nElmtPnt, const int nDervDir, const Array< OneD, const Array< OneD, NekDouble > > &locVars, const Array< OneD, NekDouble > &locmu, const Array< OneD, const Array< OneD, NekDouble > > &locnormal, DNekMatSharedPtr &wspMat, Array< OneD, Array< OneD, NekDouble > > &PntJacArray) override
 
void v_GetFluxDerivJacDirctn (const MultiRegions::ExpListSharedPtr &explist, const Array< OneD, const Array< OneD, NekDouble > > &normals, const int nDervDir, const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, DNekMatSharedPtr > > &ElmtJac) override
 
virtual void v_GetDiffusionFluxJacPoint (const Array< OneD, NekDouble > &conservVar, const Array< OneD, const Array< OneD, NekDouble > > &conseDeriv, const NekDouble mu, const NekDouble DmuDT, const Array< OneD, NekDouble > &normals, DNekMatSharedPtr &fluxJac)
 
void v_CalcPhysDeriv (const Array< OneD, const Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfield) override
 
void v_CalcMuDmuDT (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &mu, Array< OneD, NekDouble > &DmuDT) override
 
void GetdFlux_dQx_2D (const Array< OneD, NekDouble > &normals, const NekDouble &mu, const Array< OneD, NekDouble > &U, DNekMatSharedPtr &OutputMatrix)
 return part of viscous Jacobian: More...
 
void GetdFlux_dQy_2D (const Array< OneD, NekDouble > &normals, const NekDouble &mu, const Array< OneD, NekDouble > &U, DNekMatSharedPtr &OutputMatrix)
 return part of viscous Jacobian: More...
 
void GetdFlux_dQx_3D (const Array< OneD, NekDouble > &normals, const NekDouble &mu, const Array< OneD, NekDouble > &U, DNekMatSharedPtr &OutputMatrix)
 return part of viscous Jacobian derived with Qx=[drho_dx,drhou_dx,drhov_dx,drhow_dx,drhoE_dx] Input: normals:Point normals U=[rho,rhou,rhov,rhow,rhoE] dir: means whether derive with Qx=[drho_dx,drhou_dx,drhov_dx,drhow_dx,drhoE_dx] Output: 3D 4*5 Matrix (flux about rho is zero) OutputMatrix(dir=0)= dF_dQx; More...
 
void GetdFlux_dQy_3D (const Array< OneD, NekDouble > &normals, const NekDouble &mu, const Array< OneD, NekDouble > &U, DNekMatSharedPtr &OutputMatrix)
 return part of viscous Jacobian derived with Qy=[drho_dy,drhou_dy,drhov_dy,drhow_dy,drhoE_dy] Input: normals:Point normals U=[rho,rhou,rhov,rhow,rhoE] dir: means whether derive with Qy=[drho_dy,drhou_dy,drhov_dy,drhow_dy,drhoE_dy] Output: 3D 4*5 Matrix (flux about rho is zero) OutputMatrix(dir=1)= dF_dQy; More...
 
void GetdFlux_dQz_3D (const Array< OneD, NekDouble > &normals, const NekDouble &mu, const Array< OneD, NekDouble > &U, DNekMatSharedPtr &OutputMatrix)
 return part of viscous Jacobian derived with Qz=[drho_dz,drhou_dz,drhov_dz,drhow_dz,drhoE_dz] Input: normals:Point normals U=[rho,rhou,rhov,rhow,rhoE] dir: means whether derive with Qz=[drho_dz,drhou_dz,drhov_dz,drhow_dz,drhoE_dz] Output: 3D 4*5 Matrix (flux about rho is zero) OutputMatrix(dir=2)= dF_dQz; More...
 
void GetdFlux_dU_2D (const Array< OneD, NekDouble > &normals, const NekDouble mu, const NekDouble dmu_dT, const Array< OneD, NekDouble > &U, const Array< OneD, const Array< OneD, NekDouble > > &qfield, DNekMatSharedPtr &OutputMatrix)
 return part of viscous Jacobian Input: normals:Point normals mu: dynamicviscosity dmu_dT: mu's derivative with T using Sutherland's law U=[rho,rhou,rhov,rhoE] Output: 3*4 Matrix (the flux about rho is zero) OutputMatrix dFLux_dU, the matrix sign is consistent with SIPG More...
 
void GetdFlux_dU_3D (const Array< OneD, NekDouble > &normals, const NekDouble mu, const NekDouble dmu_dT, const Array< OneD, NekDouble > &U, const Array< OneD, const Array< OneD, NekDouble > > &qfield, DNekMatSharedPtr &OutputMatrix)
 return part of viscous Jacobian Input: normals:Point normals mu: dynamicviscosity dmu_dT: mu's derivative with T using Sutherland's law U=[rho,rhou,rhov,rhow,rhoE] Output: 4*5 Matrix (the flux about rho is zero) OutputMatrix dFLux_dU, the matrix sign is consistent with SIPG More...
 
bool v_SupportsShockCaptType (const std::string type) const final
 
- Protected Member Functions inherited from Nektar::NavierStokesCFE
 NavierStokesCFE (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
 ~NavierStokesCFE () override=default
 
void GetViscousFluxVectorConservVar (const size_t nDim, const Array< OneD, Array< OneD, NekDouble > > &inarray, const TensorOfArray3D< NekDouble > &qfields, TensorOfArray3D< NekDouble > &outarray, Array< OneD, int > &nonZeroIndex=NullInt1DArray, const Array< OneD, Array< OneD, NekDouble > > &normal=NullNekDoubleArrayOfArray)
 
void GetViscousSymmtrFluxConservVar (const size_t nSpaceDim, const Array< OneD, Array< OneD, NekDouble > > &inaverg, const Array< OneD, Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &outarray, Array< OneD, int > &nonZeroIndex, const Array< OneD, Array< OneD, NekDouble > > &normals)
 Calculate and return the Symmetric flux in IP method. More...
 
void SpecialBndTreat (Array< OneD, Array< OneD, NekDouble > > &consvar)
 For very special treatment. For general boundaries it does nothing But for WallViscous and WallAdiabatic, special treatment is needed because they get the same Bwd value, special treatment is needed for boundary treatment of diffusion flux Note: This special treatment could be removed by seperating WallViscous and WallAdiabatic into two different classes. More...
 
void GetArtificialViscosity (const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &muav)
 
void CalcViscosity (const Array< OneD, const Array< OneD, NekDouble > > &inaverg, Array< OneD, NekDouble > &mu)
 
void InitObject_Explicit ()
 
void v_InitObject (bool DeclareField=true) override
 Initialization object for CompressibleFlowSystem class. More...
 
void v_DoDiffusion (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) override
 
virtual void v_GetViscousFluxVector (const Array< OneD, const Array< OneD, NekDouble > > &physfield, TensorOfArray3D< NekDouble > &derivatives, TensorOfArray3D< NekDouble > &viscousTensor)
 Return the flux vector for the LDG diffusion problem. More...
 
virtual void v_GetViscousFluxVectorDeAlias (const Array< OneD, const Array< OneD, NekDouble > > &physfield, TensorOfArray3D< NekDouble > &derivatives, TensorOfArray3D< NekDouble > &viscousTensor)
 Return the flux vector for the LDG diffusion problem. More...
 
void GetPhysicalAV (const Array< OneD, const Array< OneD, NekDouble > > &physfield)
 
void Ducros (Array< OneD, NekDouble > &field)
 
void C0Smooth (Array< OneD, NekDouble > &field)
 
virtual void v_GetFluxPenalty (const Array< OneD, const Array< OneD, NekDouble > > &uFwd, const Array< OneD, const Array< OneD, NekDouble > > &uBwd, Array< OneD, Array< OneD, NekDouble > > &penaltyCoeff)
 Return the penalty vector for the LDGNS diffusion problem. More...
 
void GetViscosityAndThermalCondFromTemp (const Array< OneD, NekDouble > &temperature, Array< OneD, NekDouble > &mu, Array< OneD, NekDouble > &thermalCond)
 Update viscosity todo: add artificial viscosity here. More...
 
void GetDivCurlSquared (const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &cnsVar, Array< OneD, NekDouble > &div, Array< OneD, NekDouble > &curlSquare, const Array< OneD, Array< OneD, NekDouble > > &cnsVarFwd, const Array< OneD, Array< OneD, NekDouble > > &cnsVarBwd)
 Get divergence and curl squared. More...
 
void GetDivCurlFromDvelT (const TensorOfArray3D< NekDouble > &pVarDer, Array< OneD, NekDouble > &div, Array< OneD, NekDouble > &curlSquare)
 Get divergence and curl from velocity derivative tensor. More...
 
void v_ExtraFldOutput (std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables) override
 
template<class T , typename = typename std::enable_if< std::is_floating_point_v<T> || tinysimd::is_vector_floating_point_v<T>>::type>
void GetViscosityAndThermalCondFromTempKernel (const T &temperature, T &mu, T &thermalCond)
 
template<class T , typename = typename std::enable_if< std::is_floating_point_v<T> || tinysimd::is_vector_floating_point_v<T>>::type>
void GetViscosityFromTempKernel (const T &temperature, T &mu)
 
template<class T , typename = typename std::enable_if< std::is_floating_point_v<T> || tinysimd::is_vector_floating_point_v<T>>::type>
void GetViscousFluxBilinearFormKernel (const unsigned short nDim, const unsigned short FluxDirection, const unsigned short DerivDirection, const T *inaverg, const T *injumpp, const T &mu, T *outarray)
 Calculate diffusion flux using the Jacobian form. More...
 
template<bool IS_TRACE>
void GetViscousFluxVectorConservVar (const size_t nDim, const Array< OneD, Array< OneD, NekDouble > > &inarray, const TensorOfArray3D< NekDouble > &qfields, TensorOfArray3D< NekDouble > &outarray, Array< OneD, int > &nonZeroIndex, const Array< OneD, Array< OneD, NekDouble > > &normal)
 Return the flux vector for the IP diffusion problem, based on conservative variables. More...
 
bool v_SupportsShockCaptType (const std::string type) const override
 
- Protected Member Functions inherited from Nektar::CompressibleFlowSystem
 CompressibleFlowSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
 ~CompressibleFlowSystem () override=default
 
void v_InitObject (bool DeclareFields=true) override
 Initialization object for CompressibleFlowSystem class. More...
 
void v_GetPressure (const Array< OneD, const Array< OneD, NekDouble > > &physfield, Array< OneD, NekDouble > &pressure) override
 
void v_GetDensity (const Array< OneD, const Array< OneD, NekDouble > > &physfield, Array< OneD, NekDouble > &density) override
 
bool v_HasConstantDensity () override
 
void v_GetVelocity (const Array< OneD, const Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &velocity) override
 
void v_ALEInitObject (int spaceDim, Array< OneD, MultiRegions::ExpListSharedPtr > &fields) override
 
void InitialiseParameters ()
 Load CFS parameters from the session file. More...
 
void InitAdvection ()
 Create advection and diffusion objects for CFS. More...
 
void DoOdeRhs (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
 Compute the right-hand side. More...
 
void DoOdeProjection (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
 Compute the projection and call the method for imposing the boundary conditions in case of discontinuous projection. More...
 
void DoAdvection (const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time, const Array< OneD, Array< OneD, NekDouble > > &pFwd, const Array< OneD, Array< OneD, NekDouble > > &pBwd)
 Compute the advection terms for the right-hand side. More...
 
void DoDiffusion (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)
 Add the diffusions terms to the right-hand side. More...
 
void GetFluxVector (const Array< OneD, const Array< OneD, NekDouble > > &physfield, TensorOfArray3D< NekDouble > &flux)
 Return the flux vector for the compressible Euler equations. More...
 
void GetFluxVectorDeAlias (const Array< OneD, const Array< OneD, NekDouble > > &physfield, TensorOfArray3D< NekDouble > &flux)
 Return the flux vector for the compressible Euler equations by using the de-aliasing technique. More...
 
void SetBoundaryConditions (Array< OneD, Array< OneD, NekDouble > > &physarray, NekDouble time)
 
void SetBoundaryConditionsBwdWeight ()
 Set up a weight on physical boundaries for boundary condition applications. More...
 
void GetElmtTimeStep (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &tstep)
 Calculate the maximum timestep on each element subject to CFL restrictions. More...
 
NekDouble v_GetTimeStep (const Array< OneD, const Array< OneD, NekDouble > > &inarray) override
 Calculate the maximum timestep subject to CFL restrictions. More...
 
void v_GenerateSummary (SolverUtils::SummaryList &s) override
 Print a summary of time stepping parameters. More...
 
void v_SetInitialConditions (NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0) override
 Set up logic for residual calculation. More...
 
void v_EvaluateExactSolution (unsigned int field, Array< OneD, NekDouble > &outfield, const NekDouble time=0.0) override
 
NekDouble GetGamma ()
 
const Array< OneD, const Array< OneD, NekDouble > > & GetVecLocs ()
 
const Array< OneD, const Array< OneD, NekDouble > > & GetNormals ()
 
MultiRegions::ExpListSharedPtr v_GetPressure () override
 
void v_ExtraFldOutput (std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables) override
 
virtual void v_DoDiffusion (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
 
Array< OneD, NekDoublev_GetMaxStdVelocity (const NekDouble SpeedSoundFactor) override
 Compute the advection velocity in the standard space for each element of the expansion. More...
 
void v_SteadyStateResidual (int step, Array< OneD, NekDouble > &L2) override
 
virtual bool v_SupportsShockCaptType (const std::string type) const =0
 
- Protected Member Functions inherited from Nektar::SolverUtils::AdvectionSystem
SOLVER_UTILS_EXPORT void v_InitObject (bool DeclareField=true) override
 Initialisation object for EquationSystem. More...
 
SOLVER_UTILS_EXPORT bool v_PostIntegrate (int step) override
 
virtual SOLVER_UTILS_EXPORT Array< OneD, NekDoublev_GetMaxStdVelocity (const NekDouble SpeedSoundFactor=1.0)
 
- Protected Member Functions inherited from Nektar::SolverUtils::UnsteadySystem
SOLVER_UTILS_EXPORT UnsteadySystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 Initialises UnsteadySystem class members. More...
 
SOLVER_UTILS_EXPORT void v_InitObject (bool DeclareField=true) override
 Init object for UnsteadySystem class. More...
 
SOLVER_UTILS_EXPORT void v_DoSolve () override
 Solves an unsteady problem. More...
 
virtual SOLVER_UTILS_EXPORT void v_PrintStatusInformation (const int step, const NekDouble cpuTime)
 Print Status Information. More...
 
virtual SOLVER_UTILS_EXPORT void v_PrintSummaryStatistics (const NekDouble intTime)
 Print Summary Statistics. More...
 
SOLVER_UTILS_EXPORT void v_DoInitialise (bool dumpInitialConditions=true) override
 Sets up initial conditions. More...
 
SOLVER_UTILS_EXPORT void v_GenerateSummary (SummaryList &s) override
 Print a summary of time stepping parameters. More...
 
virtual SOLVER_UTILS_EXPORT NekDouble v_GetTimeStep (const Array< OneD, const Array< OneD, NekDouble > > &inarray)
 Return the timestep to be used for the next step in the time-marching loop. More...
 
virtual SOLVER_UTILS_EXPORT bool v_PreIntegrate (int step)
 
virtual SOLVER_UTILS_EXPORT bool v_PostIntegrate (int step)
 
virtual SOLVER_UTILS_EXPORT bool v_RequireFwdTrans ()
 
virtual SOLVER_UTILS_EXPORT void v_SteadyStateResidual (int step, Array< OneD, NekDouble > &L2)
 
virtual SOLVER_UTILS_EXPORT bool v_UpdateTimeStepCheck ()
 
SOLVER_UTILS_EXPORT NekDouble MaxTimeStepEstimator ()
 Get the maximum timestep estimator for cfl control. More...
 
SOLVER_UTILS_EXPORT void CheckForRestartTime (NekDouble &time, int &nchk)
 
SOLVER_UTILS_EXPORT void SVVVarDiffCoeff (const Array< OneD, Array< OneD, NekDouble > > vel, StdRegions::VarCoeffMap &varCoeffMap)
 Evaluate the SVV diffusion coefficient according to Moura's paper where it should proportional to h time velocity. More...
 
SOLVER_UTILS_EXPORT void DoDummyProjection (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
 Perform dummy projection. More...
 
- Protected Member Functions inherited from Nektar::SolverUtils::EquationSystem
SOLVER_UTILS_EXPORT EquationSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 Initialises EquationSystem class members. More...
 
virtual SOLVER_UTILS_EXPORT void v_InitObject (bool DeclareFeld=true)
 Initialisation object for EquationSystem. More...
 
virtual SOLVER_UTILS_EXPORT void v_DoInitialise (bool dumpInitialConditions=true)
 Virtual function for initialisation implementation. More...
 
virtual SOLVER_UTILS_EXPORT void v_DoSolve ()
 Virtual function for solve implementation. More...
 
virtual SOLVER_UTILS_EXPORT NekDouble v_LinfError (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray)
 Virtual function for the L_inf error computation between fields and a given exact solution. More...
 
virtual SOLVER_UTILS_EXPORT NekDouble v_L2Error (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray, bool Normalised=false)
 Virtual function for the L_2 error computation between fields and a given exact solution. More...
 
virtual SOLVER_UTILS_EXPORT NekDouble v_H1Error (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray, bool Normalised=false)
 Virtual function for the H_1 error computation between fields and a given exact solution. More...
 
virtual SOLVER_UTILS_EXPORT void v_TransCoeffToPhys ()
 Virtual function for transformation to physical space. More...
 
virtual SOLVER_UTILS_EXPORT void v_TransPhysToCoeff ()
 Virtual function for transformation to coefficient space. More...
 
virtual SOLVER_UTILS_EXPORT void v_GenerateSummary (SummaryList &l)
 Virtual function for generating summary information. More...
 
virtual SOLVER_UTILS_EXPORT void v_SetInitialConditions (NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
 
virtual SOLVER_UTILS_EXPORT void v_EvaluateExactSolution (unsigned int field, Array< OneD, NekDouble > &outfield, const NekDouble time)
 
virtual SOLVER_UTILS_EXPORT void v_Output (void)
 
virtual SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr v_GetPressure (void)
 
virtual SOLVER_UTILS_EXPORT bool v_NegatedOp (void)
 Virtual function to identify if operator is negated in DoSolve. More...
 
virtual SOLVER_UTILS_EXPORT void v_ExtraFldOutput (std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
 
- Protected Member Functions inherited from Nektar::SolverUtils::FluidInterface
virtual SOLVER_UTILS_EXPORT void v_GetVelocity (const Array< OneD, const Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &velocity)=0
 
virtual SOLVER_UTILS_EXPORT bool v_HasConstantDensity ()=0
 
virtual SOLVER_UTILS_EXPORT void v_GetDensity (const Array< OneD, const Array< OneD, NekDouble > > &physfield, Array< OneD, NekDouble > &density)=0
 
virtual SOLVER_UTILS_EXPORT void v_GetPressure (const Array< OneD, const Array< OneD, NekDouble > > &physfield, Array< OneD, NekDouble > &pressure)=0
 
virtual SOLVER_UTILS_EXPORT void v_SetMovingFrameVelocities (const Array< OneD, NekDouble > &vFrameVels, const int step)
 
virtual SOLVER_UTILS_EXPORT bool v_GetMovingFrameVelocities (Array< OneD, NekDouble > &vFrameVels, const int step)
 
virtual SOLVER_UTILS_EXPORT void v_SetMovingFrameDisp (const Array< OneD, NekDouble > &vFrameDisp, const int step)
 
virtual SOLVER_UTILS_EXPORT void v_SetMovingFramePivot (const Array< OneD, NekDouble > &vFramePivot)
 
virtual SOLVER_UTILS_EXPORT bool v_GetMovingFrameDisp (Array< OneD, NekDouble > &vFrameDisp, const int step)
 
virtual SOLVER_UTILS_EXPORT void v_SetAeroForce (Array< OneD, NekDouble > forces)
 
virtual SOLVER_UTILS_EXPORT void v_GetAeroForce (Array< OneD, NekDouble > forces)
 
- Protected Member Functions inherited from Nektar::CFSImplicit
void v_InitObject (bool DeclareFields=true) override
 Initialization object for CFSImplicit class. More...
 
void InitialiseNonlinSysSolver ()
 
void v_DoSolve () override
 Solves an unsteady problem. More...
 
void v_PrintStatusInformation (const int step, const NekDouble cpuTime) override
 Print Status Information. More...
 
void v_PrintSummaryStatistics (const NekDouble intTime) override
 Print Summary Statistics. More...
 
void v_ALEInitObject (int spaceDim, Array< OneD, MultiRegions::ExpListSharedPtr > &fields) override
 
void NonlinSysEvaluatorCoeff1D (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out, const bool &flag)
 
void NonlinSysEvaluatorCoeff (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &out, const bool &flag)
 
void DoOdeImplicitRhs (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
 
void DoOdeRhsCoeff (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
 Compute the right-hand side. More...
 
void DoAdvectionCoeff (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time, const Array< OneD, const Array< OneD, NekDouble > > &pFwd, const Array< OneD, const Array< OneD, NekDouble > > &pBwd)
 Compute the advection terms for the right-hand side. More...
 
void DoDiffusionCoeff (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const Array< OneD, const Array< OneD, NekDouble > > &pFwd, const Array< OneD, const Array< OneD, NekDouble > > &pBwd)
 Add the diffusions terms to the right-hand side Similar to DoDiffusion() but with outarray in coefficient space. More...
 
void DoImplicitSolve (const Array< OneD, const Array< OneD, NekDouble > > &inpnts, Array< OneD, Array< OneD, NekDouble > > &outpnt, const NekDouble time, const NekDouble lambda)
 
void DoImplicitSolveCoeff (const Array< OneD, const Array< OneD, NekDouble > > &inpnts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out, const NekDouble time, const NekDouble lambda)
 
void MatrixMultiplyMatrixFreeCoeff (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out, const bool &centralDifferenceFlag)
 
void CalcRefValues (const Array< OneD, const NekDouble > &inarray)
 
void PreconCoeff (const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const bool &flag)
 
template<typename DataType , typename TypeNekBlkMatSharedPtr >
void AddMatNSBlkDiagVol (const Array< OneD, const Array< OneD, NekDouble > > &inarray, const Array< OneD, const TensorOfArray2D< NekDouble > > &qfield, Array< OneD, Array< OneD, TypeNekBlkMatSharedPtr > > &gmtxarray, TensorOfArray4D< DataType > &StdMatDataDBB, TensorOfArray5D< DataType > &StdMatDataDBDB)
 
template<typename DataType >
void CalcVolJacStdMat (TensorOfArray4D< DataType > &StdMatDataDBB, TensorOfArray5D< DataType > &StdMatDataDBDB)
 
template<typename DataType , typename TypeNekBlkMatSharedPtr >
void AddMatNSBlkDiagBnd (const Array< OneD, const Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray2D< TypeNekBlkMatSharedPtr > &gmtxarray, Array< OneD, TypeNekBlkMatSharedPtr > &TraceJac, Array< OneD, TypeNekBlkMatSharedPtr > &TraceJacDeriv, Array< OneD, Array< OneD, DataType > > &TraceJacDerivSign, TensorOfArray5D< DataType > &TraceIPSymJacArray)
 
template<typename DataType , typename TypeNekBlkMatSharedPtr >
void ElmtVarInvMtrx (Array< OneD, Array< OneD, TypeNekBlkMatSharedPtr > > &gmtxarray, TypeNekBlkMatSharedPtr &gmtVar, const DataType &tmpDatatype)
 
template<typename DataType , typename TypeNekBlkMatSharedPtr >
void GetTraceJac (const Array< OneD, const Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfield, Array< OneD, TypeNekBlkMatSharedPtr > &TraceJac, Array< OneD, TypeNekBlkMatSharedPtr > &TraceJacDeriv, Array< OneD, Array< OneD, DataType > > &TraceJacDerivSign, TensorOfArray5D< DataType > &TraceIPSymJacArray)
 
template<typename DataType , typename TypeNekBlkMatSharedPtr >
void NumCalcRiemFluxJac (const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, const Array< OneD, NekDouble > > &AdvVel, const Array< OneD, const Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfield, const NekDouble &time, const Array< OneD, const Array< OneD, NekDouble > > &Fwd, const Array< OneD, const Array< OneD, NekDouble > > &Bwd, TypeNekBlkMatSharedPtr &FJac, TypeNekBlkMatSharedPtr &BJac, TensorOfArray5D< DataType > &TraceIPSymJacArray)
 
void PointFluxJacobianPoint (const Array< OneD, NekDouble > &Fwd, const Array< OneD, NekDouble > &normals, DNekMatSharedPtr &FJac, const NekDouble efix, const NekDouble fsw)
 
template<typename DataType , typename TypeNekBlkMatSharedPtr >
void TranSamesizeBlkDiagMatIntoArray (const TypeNekBlkMatSharedPtr &BlkMat, TensorOfArray3D< DataType > &MatArray)
 
template<typename DataType , typename TypeNekBlkMatSharedPtr >
void TransTraceJacMatToArray (const Array< OneD, TypeNekBlkMatSharedPtr > &TraceJac, TensorOfArray4D< DataType > &TraceJacDerivArray)
 
template<typename DataType , typename TypeNekBlkMatSharedPtr >
void Fill2DArrayOfBlkDiagonalMat (Array< OneD, Array< OneD, TypeNekBlkMatSharedPtr > > &gmtxarray, const DataType valu)
 
template<typename DataType , typename TypeNekBlkMatSharedPtr >
void Fill1DArrayOfBlkDiagonalMat (Array< OneD, TypeNekBlkMatSharedPtr > &gmtxarray, const DataType valu)
 
void AllocateNekBlkMatDig (SNekBlkMatSharedPtr &mat, const Array< OneD, unsigned int > nrow, const Array< OneD, unsigned int > ncol)
 
void CalcPreconMatBRJCoeff (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, SNekBlkMatSharedPtr > > &gmtxarray, SNekBlkMatSharedPtr &gmtVar, Array< OneD, SNekBlkMatSharedPtr > &TraceJac, Array< OneD, SNekBlkMatSharedPtr > &TraceJacDeriv, Array< OneD, Array< OneD, NekSingle > > &TraceJacDerivSign, TensorOfArray4D< NekSingle > &TraceJacArray, TensorOfArray4D< NekSingle > &TraceJacDerivArray, TensorOfArray5D< NekSingle > &TraceIPSymJacArray)
 
template<typename DataType , typename TypeNekBlkMatSharedPtr >
void MultiplyElmtInvMassPlusSource (Array< OneD, Array< OneD, TypeNekBlkMatSharedPtr > > &gmtxarray, const NekDouble dtlamda)
 
void GetFluxVectorJacDirElmt (const int nConvectiveFields, const int nElmtPnt, const Array< OneD, const Array< OneD, NekDouble > > &locVars, const Array< OneD, NekDouble > &normals, DNekMatSharedPtr &wspMat, Array< OneD, Array< OneD, NekDouble > > &PntJacArray)
 
void GetFluxVectorJacPoint (const int nConvectiveFields, const Array< OneD, NekDouble > &conservVar, const Array< OneD, NekDouble > &normals, DNekMatSharedPtr &fluxJac)
 
void CalcTraceNumericalFlux (const int nConvectiveFields, const int nDim, const int nPts, const int nTracePts, const NekDouble PenaltyFactor2, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, const Array< OneD, NekDouble > > &AdvVel, const Array< OneD, const Array< OneD, NekDouble > > &inarray, const NekDouble time, TensorOfArray3D< NekDouble > &qfield, const Array< OneD, const Array< OneD, NekDouble > > &vFwd, const Array< OneD, const Array< OneD, NekDouble > > &vBwd, const Array< OneD, const TensorOfArray2D< NekDouble > > &qFwd, const Array< OneD, const TensorOfArray2D< NekDouble > > &qBwd, const Array< OneD, NekDouble > &MuVarTrace, Array< OneD, int > &nonZeroIndex, Array< OneD, Array< OneD, NekDouble > > &traceflux)
 
void MinusDiffusionFluxJacPoint (const int nConvectiveFields, const int nElmtPnt, const Array< OneD, const Array< OneD, NekDouble > > &locVars, const TensorOfArray3D< NekDouble > &locDerv, const Array< OneD, NekDouble > &locmu, const Array< OneD, NekDouble > &locDmuDT, const Array< OneD, NekDouble > &normals, DNekMatSharedPtr &wspMat, Array< OneD, Array< OneD, NekDouble > > &PntJacArray)
 
void GetFluxDerivJacDirctn (const MultiRegions::ExpListSharedPtr &explist, const Array< OneD, const Array< OneD, NekDouble > > &normals, const int nDervDir, const Array< OneD, const Array< OneD, NekDouble > > &inarray, TensorOfArray5D< NekDouble > &ElmtJacArray, const int nFluxDir)
 
void GetFluxDerivJacDirctnElmt (const int nConvectiveFields, const int nElmtPnt, const int nDervDir, const Array< OneD, const Array< OneD, NekDouble > > &locVars, const Array< OneD, NekDouble > &locmu, const Array< OneD, const Array< OneD, NekDouble > > &locnormal, DNekMatSharedPtr &wspMat, Array< OneD, Array< OneD, NekDouble > > &PntJacArray)
 
void GetFluxDerivJacDirctn (const MultiRegions::ExpListSharedPtr &explist, const Array< OneD, const Array< OneD, NekDouble > > &normals, const int nDervDir, const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, DNekMatSharedPtr > > &ElmtJac)
 
void CalcPhysDeriv (const Array< OneD, const Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfield)
 
void CalcMuDmuDT (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &mu, Array< OneD, NekDouble > &DmuDT)
 
virtual void v_DoDiffusionCoeff (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const Array< OneD, const Array< OneD, NekDouble > > &pFwd, const Array< OneD, const Array< OneD, NekDouble > > &pBwd)
 
virtual void v_CalcMuDmuDT (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &mu, Array< OneD, NekDouble > &DmuDT)
 
virtual void v_CalcPhysDeriv (const Array< OneD, const Array< OneD, NekDouble > > &inarray, TensorOfArray3D< NekDouble > &qfield)
 
virtual void v_MinusDiffusionFluxJacPoint (const int nConvectiveFields, const int nElmtPnt, const Array< OneD, const Array< OneD, NekDouble > > &locVars, const TensorOfArray3D< NekDouble > &locDerv, const Array< OneD, NekDouble > &locmu, const Array< OneD, NekDouble > &locDmuDT, const Array< OneD, NekDouble > &normals, DNekMatSharedPtr &wspMat, Array< OneD, Array< OneD, NekDouble > > &PntJacArray)
 
virtual void v_GetFluxDerivJacDirctn (const MultiRegions::ExpListSharedPtr &explist, const Array< OneD, const Array< OneD, NekDouble > > &normals, const int nDervDir, const Array< OneD, const Array< OneD, NekDouble > > &inarray, TensorOfArray5D< NekDouble > &ElmtJacArray, const int nFluxDir)
 
virtual void v_GetFluxDerivJacDirctnElmt (const int nConvectiveFields, const int nElmtPnt, const int nDervDir, const Array< OneD, const Array< OneD, NekDouble > > &locVars, const Array< OneD, NekDouble > &locmu, const Array< OneD, const Array< OneD, NekDouble > > &locnormal, DNekMatSharedPtr &wspMat, Array< OneD, Array< OneD, NekDouble > > &PntJacArray)
 
virtual void v_GetFluxDerivJacDirctn (const MultiRegions::ExpListSharedPtr &explist, const Array< OneD, const Array< OneD, NekDouble > > &normals, const int nDervDir, const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, DNekMatSharedPtr > > &ElmtJac)
 
bool v_UpdateTimeStepCheck () override
 

Protected Attributes

Array< OneD, GetdFlux_dDerivm_GetdFlux_dDeriv_Array
 
- Protected Attributes inherited from Nektar::NavierStokesCFE
std::string m_ViscosityType
 
bool m_is_mu_variable {false}
 flag to switch between constant viscosity and Sutherland an enum could be added for more options More...
 
bool m_is_diffIP {false}
 flag to switch between IP and LDG an enum could be added for more options More...
 
bool m_is_shockCaptPhys {false}
 flag for shock capturing switch on/off an enum could be added for more options More...
 
NekDouble m_Cp
 
NekDouble m_Cv
 
NekDouble m_Prandtl
 
std::string m_physicalSensorType
 
std::string m_smoothing
 
MultiRegions::ContFieldSharedPtr m_C0ProjectExp
 
EquationOfStateSharedPtr m_eos
 Equation of system for computing temperature. More...
 
NekDouble m_Twall
 
NekDouble m_muRef
 
NekDouble m_thermalConductivityRef
 
- Protected Attributes inherited from Nektar::CompressibleFlowSystem
SolverUtils::DiffusionSharedPtr m_diffusion
 
ArtificialDiffusionSharedPtr m_artificialDiffusion
 
Array< OneD, Array< OneD, NekDouble > > m_vecLocs
 
NekDouble m_gamma
 
std::string m_shockCaptureType
 
NekDouble m_filterAlpha
 
NekDouble m_filterExponent
 
NekDouble m_filterCutoff
 
bool m_useFiltering
 
bool m_useLocalTimeStep
 
Array< OneD, NekDoublem_muav
 
Array< OneD, NekDoublem_muavTrace
 
VariableConverterSharedPtr m_varConv
 
std::vector< CFSBndCondSharedPtrm_bndConds
 
NekDouble m_bndEvaluateTime
 
std::vector< SolverUtils::ForcingSharedPtrm_forcing
 
- Protected Attributes inherited from Nektar::SolverUtils::AdvectionSystem
SolverUtils::AdvectionSharedPtr m_advObject
 Advection term. More...
 
- Protected Attributes inherited from Nektar::SolverUtils::UnsteadySystem
LibUtilities::TimeIntegrationSchemeSharedPtr m_intScheme
 Wrapper to the time integration scheme. More...
 
LibUtilities::TimeIntegrationSchemeOperators m_ode
 The time integration scheme operators to use. More...
 
Array< OneD, Array< OneD, NekDouble > > m_previousSolution
 Storage for previous solution for steady-state check. More...
 
std::vector< int > m_intVariables
 
NekDouble m_cflSafetyFactor
 CFL safety factor (comprise between 0 to 1). More...
 
NekDouble m_CFLGrowth
 CFL growth rate. More...
 
NekDouble m_CFLEnd
 Maximun cfl in cfl growth. More...
 
int m_abortSteps
 Number of steps between checks for abort conditions. More...
 
bool m_explicitDiffusion
 Indicates if explicit or implicit treatment of diffusion is used. More...
 
bool m_explicitAdvection
 Indicates if explicit or implicit treatment of advection is used. More...
 
bool m_explicitReaction
 Indicates if explicit or implicit treatment of reaction is used. More...
 
int m_steadyStateSteps
 Check for steady state at step interval. More...
 
NekDouble m_steadyStateTol
 Tolerance to which steady state should be evaluated at. More...
 
int m_filtersInfosteps
 Number of time steps between outputting filters information. More...
 
std::vector< std::pair< std::string, FilterSharedPtr > > m_filters
 
bool m_homoInitialFwd
 Flag to determine if simulation should start in homogeneous forward transformed state. More...
 
std::ofstream m_errFile
 
NekDouble m_epsilon
 Diffusion coefficient. More...
 
- Protected Attributes inherited from Nektar::SolverUtils::EquationSystem
LibUtilities::CommSharedPtr m_comm
 Communicator. More...
 
bool m_verbose
 
LibUtilities::SessionReaderSharedPtr m_session
 The session reader. More...
 
std::map< std::string, SolverUtils::SessionFunctionSharedPtrm_sessionFunctions
 Map of known SessionFunctions. More...
 
LibUtilities::FieldIOSharedPtr m_fld
 Field input/output. More...
 
Array< OneD, MultiRegions::ExpListSharedPtrm_fields
 Array holding all dependent variables. More...
 
SpatialDomains::BoundaryConditionsSharedPtr m_boundaryConditions
 Pointer to boundary conditions object. More...
 
SpatialDomains::MeshGraphSharedPtr m_graph
 Pointer to graph defining mesh. More...
 
std::string m_sessionName
 Name of the session. More...
 
NekDouble m_time
 Current time of simulation. More...
 
int m_initialStep
 Number of the step where the simulation should begin. More...
 
NekDouble m_fintime
 Finish time of the simulation. More...
 
NekDouble m_timestep
 Time step size. More...
 
NekDouble m_lambda
 Lambda constant in real system if one required. More...
 
NekDouble m_checktime
 Time between checkpoints. More...
 
NekDouble m_lastCheckTime
 
NekDouble m_TimeIncrementFactor
 
int m_nchk
 Number of checkpoints written so far. More...
 
int m_steps
 Number of steps to take. More...
 
int m_checksteps
 Number of steps between checkpoints. More...
 
int m_infosteps
 Number of time steps between outputting status information. More...
 
int m_iterPIT = 0
 Number of parallel-in-time time iteration. More...
 
int m_windowPIT = 0
 Index of windows for parallel-in-time time iteration. More...
 
int m_spacedim
 Spatial dimension (>= expansion dim). More...
 
int m_expdim
 Expansion dimension. More...
 
bool m_singleMode
 Flag to determine if single homogeneous mode is used. More...
 
bool m_halfMode
 Flag to determine if half homogeneous mode is used. More...
 
bool m_multipleModes
 Flag to determine if use multiple homogenenous modes are used. More...
 
bool m_useFFT
 Flag to determine if FFT is used for homogeneous transform. More...
 
bool m_homogen_dealiasing
 Flag to determine if dealiasing is used for homogeneous simulations. More...
 
bool m_specHP_dealiasing
 Flag to determine if dealisising is usde for the Spectral/hp element discretisation. More...
 
enum MultiRegions::ProjectionType m_projectionType
 Type of projection; e.g continuous or discontinuous. More...
 
Array< OneD, Array< OneD, NekDouble > > m_traceNormals
 Array holding trace normals for DG simulations in the forwards direction. More...
 
Array< OneD, bool > m_checkIfSystemSingular
 Flag to indicate if the fields should be checked for singularity. More...
 
LibUtilities::FieldMetaDataMap m_fieldMetaDataMap
 Map to identify relevant solver info to dump in output fields. More...
 
Array< OneD, NekDoublem_movingFrameData
 Moving reference frame status in the inertial frame X, Y, Z, Theta_x, Theta_y, Theta_z, U, V, W, Omega_x, Omega_y, Omega_z, A_x, A_y, A_z, DOmega_x, DOmega_y, DOmega_z, pivot_x, pivot_y, pivot_z. More...
 
std::vector< std::string > m_strFrameData
 variable name in m_movingFrameData More...
 
int m_NumQuadPointsError
 Number of Quadrature points used to work out the error. More...
 
enum HomogeneousType m_HomogeneousType
 
NekDouble m_LhomX
 physical length in X direction (if homogeneous) More...
 
NekDouble m_LhomY
 physical length in Y direction (if homogeneous) More...
 
NekDouble m_LhomZ
 physical length in Z direction (if homogeneous) More...
 
int m_npointsX
 number of points in X direction (if homogeneous) More...
 
int m_npointsY
 number of points in Y direction (if homogeneous) More...
 
int m_npointsZ
 number of points in Z direction (if homogeneous) More...
 
int m_HomoDirec
 number of homogenous directions More...
 
- Protected Attributes inherited from Nektar::SolverUtils::ALEHelper
Array< OneD, MultiRegions::ExpListSharedPtrm_fieldsALE
 
Array< OneD, Array< OneD, NekDouble > > m_gridVelocity
 
Array< OneD, Array< OneD, NekDouble > > m_gridVelocityTrace
 
std::vector< ALEBaseShPtrm_ALEs
 
bool m_ALESolver = false
 
bool m_ImplicitALESolver = false
 
NekDouble m_prevStageTime = 0.0
 
int m_spaceDim
 
- Protected Attributes inherited from Nektar::CFSImplicit
bool m_viscousJacFlag
 
bool m_advectionJacFlag
 
bool m_flagImplicitItsStatistics
 
int m_nPadding = 1
 
int m_TotNewtonIts = 0
 
int m_TotLinIts = 0
 
int m_TotImpStages = 0
 
Array< OneD, NekDoublem_magnitdEstimat
 Estimate the magnitude of each conserved varibles. More...
 
Array< OneD, Array< OneD, NekDouble > > m_solutionPhys
 
NekDouble m_TimeIntegLambda = 0.0
 coefff of spacial derivatives(rhs or m_F in GLM) in calculating the residual of the whole equation(used in unsteady time integrations) More...
 
NekDouble m_inArrayNorm = -1.0
 
NekDouble m_jacobiFreeEps
 
TensorOfArray4D< NekSinglem_stdSMatDataDBB
 
TensorOfArray5D< NekSinglem_stdSMatDataDBDB
 
LibUtilities::NekNonlinSysIterSharedPtr m_nonlinsol
 
PreconCfsSharedPtr m_preconCfs
 
bool m_updateShockCaptPhys {true}
 

Friends

class MemoryManager< NavierStokesImplicitCFE >
 

Additional Inherited Members

- Public Member Functions inherited from Nektar::CompressibleFlowSystem
NekDouble GetStabilityLimit (int n)
 Function to calculate the stability limit for DG/CG. More...
 
Array< OneD, NekDoubleGetStabilityLimitVector (const Array< OneD, int > &ExpOrder)
 Function to calculate the stability limit for DG/CG (a vector of them). More...
 
- Public Member Functions inherited from Nektar::SolverUtils::AdvectionSystem
SOLVER_UTILS_EXPORT AdvectionSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
SOLVER_UTILS_EXPORT ~AdvectionSystem () override=default
 
SOLVER_UTILS_EXPORT AdvectionSharedPtr GetAdvObject ()
 Returns the advection object held by this instance. More...
 
SOLVER_UTILS_EXPORT Array< OneD, NekDoubleGetElmtCFLVals (const bool FlagAcousticCFL=true)
 
SOLVER_UTILS_EXPORT NekDouble GetCFLEstimate (int &elmtid)
 
- Public Member Functions inherited from Nektar::SolverUtils::UnsteadySystem
SOLVER_UTILS_EXPORT ~UnsteadySystem () override=default
 Destructor. More...
 
SOLVER_UTILS_EXPORT NekDouble GetTimeStep (const Array< OneD, const Array< OneD, NekDouble > > &inarray)
 Calculate the larger time-step mantaining the problem stable. More...
 
SOLVER_UTILS_EXPORT NekDouble GetTimeStep ()
 
SOLVER_UTILS_EXPORT void SetTimeStep (const NekDouble timestep)
 
SOLVER_UTILS_EXPORT void SteadyStateResidual (int step, Array< OneD, NekDouble > &L2)
 
SOLVER_UTILS_EXPORT LibUtilities::TimeIntegrationSchemeSharedPtrGetTimeIntegrationScheme ()
 Returns the time integration scheme. More...
 
SOLVER_UTILS_EXPORT LibUtilities::TimeIntegrationSchemeOperatorsGetTimeIntegrationSchemeOperators ()
 Returns the time integration scheme operators. More...
 
- Public Member Functions inherited from Nektar::SolverUtils::EquationSystem
virtual SOLVER_UTILS_EXPORT ~EquationSystem ()
 Destructor. More...
 
SOLVER_UTILS_EXPORT void InitObject (bool DeclareField=true)
 Initialises the members of this object. More...
 
SOLVER_UTILS_EXPORT void DoInitialise (bool dumpInitialConditions=true)
 Perform any initialisation necessary before solving the problem. More...
 
SOLVER_UTILS_EXPORT void DoSolve ()
 Solve the problem. More...
 
SOLVER_UTILS_EXPORT void TransCoeffToPhys ()
 Transform from coefficient to physical space. More...
 
SOLVER_UTILS_EXPORT void TransPhysToCoeff ()
 Transform from physical to coefficient space. More...
 
SOLVER_UTILS_EXPORT void Output ()
 Perform output operations after solve. More...
 
SOLVER_UTILS_EXPORT std::string GetSessionName ()
 Get Session name. More...
 
template<class T >
std::shared_ptr< T > as ()
 
SOLVER_UTILS_EXPORT void ResetSessionName (std::string newname)
 Reset Session name. More...
 
SOLVER_UTILS_EXPORT LibUtilities::SessionReaderSharedPtr GetSession ()
 Get Session name. More...
 
SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr GetPressure ()
 Get pressure field if available. More...
 
SOLVER_UTILS_EXPORT void ExtraFldOutput (std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
 
SOLVER_UTILS_EXPORT void PrintSummary (std::ostream &out)
 Print a summary of parameters and solver characteristics. More...
 
SOLVER_UTILS_EXPORT void SetLambda (NekDouble lambda)
 Set parameter m_lambda. More...
 
SOLVER_UTILS_EXPORT SessionFunctionSharedPtr GetFunction (std::string name, const MultiRegions::ExpListSharedPtr &field=MultiRegions::NullExpListSharedPtr, bool cache=false)
 Get a SessionFunction by name. More...
 
SOLVER_UTILS_EXPORT void SetInitialConditions (NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
 Initialise the data in the dependent fields. More...
 
SOLVER_UTILS_EXPORT void EvaluateExactSolution (int field, Array< OneD, NekDouble > &outfield, const NekDouble time)
 Evaluates an exact solution. More...
 
SOLVER_UTILS_EXPORT NekDouble L2Error (unsigned int field, const Array< OneD, NekDouble > &exactsoln, bool Normalised=false)
 Compute the L2 error between fields and a given exact solution. More...
 
SOLVER_UTILS_EXPORT NekDouble L2Error (unsigned int field, bool Normalised=false)
 Compute the L2 error of the fields. More...
 
SOLVER_UTILS_EXPORT NekDouble LinfError (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray)
 Linf error computation. More...
 
SOLVER_UTILS_EXPORT NekDouble H1Error (unsigned int field, const Array< OneD, NekDouble > &exactsoln, bool Normalised=false)
 Compute the H1 error between fields and a given exact solution. More...
 
SOLVER_UTILS_EXPORT Array< OneD, NekDoubleErrorExtraPoints (unsigned int field)
 Compute error (L2 and L_inf) over an larger set of quadrature points return [L2 Linf]. More...
 
SOLVER_UTILS_EXPORT void Checkpoint_Output (const int n)
 Write checkpoint file of m_fields. More...
 
SOLVER_UTILS_EXPORT void Checkpoint_Output (const int n, MultiRegions::ExpListSharedPtr &field, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
 Write checkpoint file of custom data fields. More...
 
SOLVER_UTILS_EXPORT void Checkpoint_BaseFlow (const int n)
 Write base flow file of m_fields. More...
 
SOLVER_UTILS_EXPORT void WriteFld (const std::string &outname)
 Write field data to the given filename. More...
 
SOLVER_UTILS_EXPORT void WriteFld (const std::string &outname, MultiRegions::ExpListSharedPtr &field, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
 Write input fields to the given filename. More...
 
SOLVER_UTILS_EXPORT void ImportFld (const std::string &infile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields)
 Input field data from the given file. More...
 
SOLVER_UTILS_EXPORT void ImportFldToMultiDomains (const std::string &infile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const int ndomains)
 Input field data from the given file to multiple domains. More...
 
SOLVER_UTILS_EXPORT void ImportFld (const std::string &infile, std::vector< std::string > &fieldStr, Array< OneD, Array< OneD, NekDouble > > &coeffs)
 Output a field. Input field data into array from the given file. More...
 
SOLVER_UTILS_EXPORT void ImportFld (const std::string &infile, MultiRegions::ExpListSharedPtr &pField, std::string &pFieldName)
 Output a field. Input field data into ExpList from the given file. More...
 
SOLVER_UTILS_EXPORT void SessionSummary (SummaryList &vSummary)
 Write out a session summary. More...
 
SOLVER_UTILS_EXPORT Array< OneD, MultiRegions::ExpListSharedPtr > & UpdateFields ()
 
SOLVER_UTILS_EXPORT LibUtilities::FieldMetaDataMapUpdateFieldMetaDataMap ()
 Get hold of FieldInfoMap so it can be updated. More...
 
SOLVER_UTILS_EXPORT NekDouble GetTime ()
 Return final time. More...
 
SOLVER_UTILS_EXPORT int GetNcoeffs ()
 
SOLVER_UTILS_EXPORT int GetNcoeffs (const int eid)
 
SOLVER_UTILS_EXPORT int GetNumExpModes ()
 
SOLVER_UTILS_EXPORT const Array< OneD, int > GetNumExpModesPerExp ()
 
SOLVER_UTILS_EXPORT int GetNvariables ()
 
SOLVER_UTILS_EXPORT const std::string GetVariable (unsigned int i)
 
SOLVER_UTILS_EXPORT int GetTraceTotPoints ()
 
SOLVER_UTILS_EXPORT int GetTraceNpoints ()
 
SOLVER_UTILS_EXPORT int GetExpSize ()
 
SOLVER_UTILS_EXPORT int GetPhys_Offset (int n)
 
SOLVER_UTILS_EXPORT int GetCoeff_Offset (int n)
 
SOLVER_UTILS_EXPORT int GetTotPoints ()
 
SOLVER_UTILS_EXPORT int GetTotPoints (int n)
 
SOLVER_UTILS_EXPORT int GetNpoints ()
 
SOLVER_UTILS_EXPORT int GetSteps ()
 
SOLVER_UTILS_EXPORT void SetSteps (const int steps)
 
SOLVER_UTILS_EXPORT NekDouble GetTimeStep ()
 
SOLVER_UTILS_EXPORT void CopyFromPhysField (const int i, Array< OneD, NekDouble > &output)
 
SOLVER_UTILS_EXPORT void CopyToPhysField (const int i, const Array< OneD, const NekDouble > &input)
 
SOLVER_UTILS_EXPORT Array< OneD, NekDouble > & UpdatePhysField (const int i)
 
SOLVER_UTILS_EXPORT void ZeroPhysFields ()
 
SOLVER_UTILS_EXPORT void FwdTransFields ()
 
SOLVER_UTILS_EXPORT void SetModifiedBasis (const bool modbasis)
 
SOLVER_UTILS_EXPORT int GetCheckpointNumber ()
 
SOLVER_UTILS_EXPORT void SetCheckpointNumber (int num)
 
SOLVER_UTILS_EXPORT int GetCheckpointSteps ()
 
SOLVER_UTILS_EXPORT void SetCheckpointSteps (int num)
 
SOLVER_UTILS_EXPORT int GetInfoSteps ()
 
SOLVER_UTILS_EXPORT void SetInfoSteps (int num)
 
SOLVER_UTILS_EXPORT void SetIterationNumberPIT (int num)
 
SOLVER_UTILS_EXPORT void SetWindowNumberPIT (int num)
 
SOLVER_UTILS_EXPORT Array< OneD, const Array< OneD, NekDouble > > GetTraceNormals ()
 
SOLVER_UTILS_EXPORT void SetTime (const NekDouble time)
 
SOLVER_UTILS_EXPORT void SetTimeStep (const NekDouble timestep)
 
SOLVER_UTILS_EXPORT void SetInitialStep (const int step)
 
SOLVER_UTILS_EXPORT void SetBoundaryConditions (NekDouble time)
 Evaluates the boundary conditions at the given time. More...
 
SOLVER_UTILS_EXPORT bool NegatedOp ()
 Identify if operator is negated in DoSolve. More...
 
- Public Member Functions inherited from Nektar::SolverUtils::ALEHelper
virtual ~ALEHelper ()=default
 
virtual SOLVER_UTILS_EXPORT void v_ALEInitObject (int spaceDim, Array< OneD, MultiRegions::ExpListSharedPtr > &fields)
 
SOLVER_UTILS_EXPORT void InitObject (int spaceDim, Array< OneD, MultiRegions::ExpListSharedPtr > &fields)
 
virtual SOLVER_UTILS_EXPORT void v_UpdateGridVelocity (const NekDouble &time)
 
virtual SOLVER_UTILS_EXPORT void v_ALEPreMultiplyMass (Array< OneD, Array< OneD, NekDouble > > &fields)
 
SOLVER_UTILS_EXPORT void ALEDoElmtInvMass (Array< OneD, Array< OneD, NekDouble > > &traceNormals, Array< OneD, Array< OneD, NekDouble > > &fields, NekDouble time)
 Update m_fields with u^n by multiplying by inverse mass matrix. That's then used in e.g. checkpoint output and L^2 error calculation. More...
 
SOLVER_UTILS_EXPORT void ALEDoElmtInvMassBwdTrans (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
SOLVER_UTILS_EXPORT void MoveMesh (const NekDouble &time, Array< OneD, Array< OneD, NekDouble > > &traceNormals)
 
const Array< OneD, const Array< OneD, NekDouble > > & GetGridVelocity ()
 
SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & GetGridVelocityTrace ()
 
SOLVER_UTILS_EXPORT void ExtraFldOutputGridVelocity (std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
 
- Public Member Functions inherited from Nektar::SolverUtils::FluidInterface
virtual ~FluidInterface ()=default
 
SOLVER_UTILS_EXPORT void GetVelocity (const Array< OneD, const Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &velocity)
 Extract array with velocity from physfield. More...
 
SOLVER_UTILS_EXPORT bool HasConstantDensity ()
 
SOLVER_UTILS_EXPORT void GetDensity (const Array< OneD, const Array< OneD, NekDouble > > &physfield, Array< OneD, NekDouble > &density)
 Extract array with density from physfield. More...
 
SOLVER_UTILS_EXPORT void GetPressure (const Array< OneD, const Array< OneD, NekDouble > > &physfield, Array< OneD, NekDouble > &pressure)
 Extract array with pressure from physfield. More...
 
SOLVER_UTILS_EXPORT void SetMovingFrameVelocities (const Array< OneD, NekDouble > &vFrameVels, const int step)
 
SOLVER_UTILS_EXPORT bool GetMovingFrameVelocities (Array< OneD, NekDouble > &vFrameVels, const int step)
 
SOLVER_UTILS_EXPORT void SetMovingFrameDisp (const Array< OneD, NekDouble > &vFrameDisp, const int step)
 
SOLVER_UTILS_EXPORT void SetMovingFramePivot (const Array< OneD, NekDouble > &vFramePivot)
 
SOLVER_UTILS_EXPORT bool GetMovingFrameDisp (Array< OneD, NekDouble > &vFrameDisp, const int step)
 
SOLVER_UTILS_EXPORT void SetAeroForce (Array< OneD, NekDouble > forces)
 Set aerodynamic force and moment. More...
 
SOLVER_UTILS_EXPORT void GetAeroForce (Array< OneD, NekDouble > forces)
 Get aerodynamic force and moment. More...
 
- Public Member Functions inherited from Nektar::CFSImplicit
 CFSImplicit (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
 ~CFSImplicit () override=default
 
- Protected Types inherited from Nektar::SolverUtils::EquationSystem
enum  HomogeneousType { eHomogeneous1D , eHomogeneous2D , eHomogeneous3D , eNotHomogeneous }
 Parameter for homogeneous expansions. More...
 
- Static Protected Attributes inherited from Nektar::SolverUtils::EquationSystem
static std::string equationSystemTypeLookupIds []
 
static std::string projectionTypeLookupIds []
 

Detailed Description

Definition at line 51 of file NavierStokesImplicitCFE.h.

Member Typedef Documentation

◆ GetdFlux_dDeriv

Definition at line 74 of file NavierStokesImplicitCFE.h.

Constructor & Destructor Documentation

◆ NavierStokesImplicitCFE()

Nektar::NavierStokesImplicitCFE::NavierStokesImplicitCFE ( const LibUtilities::SessionReaderSharedPtr pSession,
const SpatialDomains::MeshGraphSharedPtr pGraph 
)
protected

Definition at line 45 of file NavierStokesImplicitCFE.cpp.

48 : UnsteadySystem(pSession, pGraph),
49 CompressibleFlowSystem(pSession, pGraph),
50 NavierStokesCFE(pSession, pGraph), CFSImplicit(pSession, pGraph)
51{
52}
CFSImplicit(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
CompressibleFlowSystem(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
NavierStokesCFE(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
SOLVER_UTILS_EXPORT UnsteadySystem(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
Initialises UnsteadySystem class members.

◆ ~NavierStokesImplicitCFE()

Nektar::NavierStokesImplicitCFE::~NavierStokesImplicitCFE ( )
overrideprotecteddefault

Member Function Documentation

◆ create()

static SolverUtils::EquationSystemSharedPtr Nektar::NavierStokesImplicitCFE::create ( const LibUtilities::SessionReaderSharedPtr pSession,
const SpatialDomains::MeshGraphSharedPtr pGraph 
)
inlinestatic

Definition at line 58 of file NavierStokesImplicitCFE.h.

61 {
64 pGraph);
65 p->InitObject();
66 return p;
67 }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::shared_ptr< EquationSystem > EquationSystemSharedPtr
A shared pointer to an EquationSystem object.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and CellMLToNektar.cellml_metadata::p.

◆ GetdFlux_dQx_2D()

void Nektar::NavierStokesImplicitCFE::GetdFlux_dQx_2D ( const Array< OneD, NekDouble > &  normals,
const NekDouble mu,
const Array< OneD, NekDouble > &  U,
DNekMatSharedPtr OutputMatrix 
)
protected

return part of viscous Jacobian:

Todo:
flux derived with Qx=[drho_dx,drhou_dx,drhov_dx,drhoE_dx] Input: normals:Point normals U=[rho,rhou,rhov,rhoE] Output: 2D 3*4 Matrix (flux with rho is zero)
Todo:
flux derived with Qx=[drho_dx,drhou_dx,drhov_dx,drhoE_dx] Input: normals:Point normals U=[rho,rhou,rhov,rhoE] Output: 2D 3*4 Matrix (flux with rho is zero)

Definition at line 216 of file NavierStokesImplicitCFE.cpp.

219{
220 NekDouble nx = normals[0];
221 NekDouble ny = normals[1];
222 NekDouble rho = U[0];
223 NekDouble orho = 1.0 / rho;
224 NekDouble u = U[1] * orho;
225 NekDouble v = U[2] * orho;
226 NekDouble E = U[3] * orho;
227 NekDouble q2 = u * u + v * v;
228 NekDouble gamma = m_gamma;
229 // q_x=-kappa*dT_dx;
230 NekDouble Pr = m_Prandtl;
231 NekDouble oPr = 1.0 / Pr;
232 // To notice, here is positive, which is consistent with
233 //"SYMMETRIC INTERIOR PENALTY DG METHODS FOR THE COMPRESSIBLE
234 // NAVIER-STOKES EQUATIONS"
235 // But opposite to "I Do like CFD"
236 NekDouble tmp = mu * orho;
237 NekDouble tmp2 = gamma * oPr;
238 NekDouble OneThird, TwoThird, FourThird;
239 OneThird = 1.0 / 3.0;
240 TwoThird = 2.0 * OneThird;
241 FourThird = 4.0 * OneThird;
242
243 Array<OneD, NekDouble> tmpArray;
244 tmpArray = OutputMatrix->GetPtr();
245 int nrow = OutputMatrix->GetRows();
246
247 tmpArray[0 + 0 * nrow] = tmp * (-FourThird * u * nx - v * ny);
248 tmpArray[0 + 1 * nrow] = tmp * (FourThird * nx);
249 tmpArray[0 + 2 * nrow] = tmp * ny;
250 tmpArray[0 + 3 * nrow] = 0.0;
251 tmpArray[1 + 0 * nrow] = tmp * (-v * nx + TwoThird * u * ny);
252 tmpArray[1 + 1 * nrow] = tmp * (-TwoThird * ny);
253 tmpArray[1 + 2 * nrow] = tmp * nx;
254 tmpArray[1 + 3 * nrow] = 0.0;
255 tmpArray[2 + 0 * nrow] =
256 (FourThird * u * u + v * v + tmp2 * (E - q2)) * nx +
257 OneThird * u * v * ny;
258 tmpArray[2 + 0 * nrow] = -tmp * (*OutputMatrix)(2, 0);
259 tmpArray[2 + 1 * nrow] = (FourThird - tmp2) * u * nx - TwoThird * v * ny;
260 tmpArray[2 + 1 * nrow] = tmp * (*OutputMatrix)(2, 1);
261 tmpArray[2 + 2 * nrow] = (1 - tmp2) * v * nx + u * ny;
262 tmpArray[2 + 2 * nrow] = tmp * (*OutputMatrix)(2, 2);
263 tmpArray[2 + 3 * nrow] = tmp * tmp2 * nx;
264}
double NekDouble

References Nektar::CompressibleFlowSystem::m_gamma, and Nektar::NavierStokesCFE::m_Prandtl.

Referenced by v_InitObject().

◆ GetdFlux_dQx_3D()

void Nektar::NavierStokesImplicitCFE::GetdFlux_dQx_3D ( const Array< OneD, NekDouble > &  normals,
const NekDouble mu,
const Array< OneD, NekDouble > &  U,
DNekMatSharedPtr OutputMatrix 
)
protected

return part of viscous Jacobian derived with Qx=[drho_dx,drhou_dx,drhov_dx,drhow_dx,drhoE_dx] Input: normals:Point normals U=[rho,rhou,rhov,rhow,rhoE] dir: means whether derive with Qx=[drho_dx,drhou_dx,drhov_dx,drhow_dx,drhoE_dx] Output: 3D 4*5 Matrix (flux about rho is zero) OutputMatrix(dir=0)= dF_dQx;

Definition at line 334 of file NavierStokesImplicitCFE.cpp.

337{
338 NekDouble nx = normals[0];
339 NekDouble ny = normals[1];
340 NekDouble nz = normals[2];
341 NekDouble rho = U[0];
342 NekDouble orho = 1.0 / rho;
343 NekDouble u = U[1] * orho;
344 NekDouble v = U[2] * orho;
345 NekDouble w = U[3] * orho;
346 NekDouble E = U[4] * orho;
347 NekDouble q2 = u * u + v * v + w * w;
348 NekDouble gamma = m_gamma;
349 // q_x=-kappa*dT_dx;
350 NekDouble Pr = m_Prandtl;
351 NekDouble oPr = 1.0 / Pr;
352 // To notice, here is positive, which is consistent with
353 //"SYMMETRIC INTERIOR PENALTY DG METHODS FOR THE COMPRESSIBLE
354 // NAVIER-STOKES EQUATIONS"
355 // But opposite to "I do like CFD"
356 NekDouble tmp = mu * orho;
357 NekDouble tmpx = tmp * nx;
358 NekDouble tmpy = tmp * ny;
359 NekDouble tmpz = tmp * nz;
360 NekDouble tmp2 = gamma * oPr;
361 NekDouble OneThird, TwoThird, FourThird;
362 OneThird = 1.0 / 3.0;
363 TwoThird = 2.0 * OneThird;
364 FourThird = 4.0 * OneThird;
365
366 Array<OneD, NekDouble> tmpArray;
367 tmpArray = OutputMatrix->GetPtr();
368 int nrow = OutputMatrix->GetRows();
369
370 tmpArray[0 + 0 * nrow] =
371 tmpx * (-FourThird * u) + tmpy * (-v) + tmpz * (-w);
372 tmpArray[0 + 1 * nrow] = tmpx * FourThird;
373 tmpArray[0 + 2 * nrow] = tmpy;
374 tmpArray[0 + 3 * nrow] = tmpz;
375 tmpArray[0 + 4 * nrow] = 0.0;
376 tmpArray[1 + 0 * nrow] = tmpx * (-v) + tmpy * (TwoThird * u);
377 tmpArray[1 + 1 * nrow] = tmpy * (-TwoThird);
378 tmpArray[1 + 2 * nrow] = tmpx;
379 tmpArray[1 + 3 * nrow] = 0.0;
380 tmpArray[1 + 4 * nrow] = 0.0;
381 tmpArray[2 + 0 * nrow] = tmpx * (-w) + tmpz * (TwoThird * u);
382 tmpArray[2 + 1 * nrow] = tmpz * (-TwoThird);
383 tmpArray[2 + 2 * nrow] = 0.0;
384 tmpArray[2 + 3 * nrow] = tmpx;
385 tmpArray[2 + 4 * nrow] = 0.0;
386 tmpArray[3 + 0 * nrow] =
387 -tmpx * (FourThird * u * u + v * v + w * w + tmp2 * (E - q2)) +
388 tmpy * (-OneThird * u * v) + tmpz * (-OneThird * u * w);
389 tmpArray[3 + 1 * nrow] = tmpx * (FourThird - tmp2) * u +
390 tmpy * (-TwoThird * v) + tmpz * (-TwoThird * w);
391 tmpArray[3 + 2 * nrow] = tmpx * (1.0 - tmp2) * v + tmpy * u;
392 tmpArray[3 + 3 * nrow] = tmpx * (1.0 - tmp2) * w + tmpz * u;
393 tmpArray[3 + 4 * nrow] = tmpx * tmp2;
394}
std::vector< double > w(NPUPPER)

References Nektar::CompressibleFlowSystem::m_gamma, Nektar::NavierStokesCFE::m_Prandtl, and Nektar::UnitTests::w().

Referenced by v_InitObject().

◆ GetdFlux_dQy_2D()

void Nektar::NavierStokesImplicitCFE::GetdFlux_dQy_2D ( const Array< OneD, NekDouble > &  normals,
const NekDouble mu,
const Array< OneD, NekDouble > &  U,
DNekMatSharedPtr OutputMatrix 
)
protected

return part of viscous Jacobian:

Todo:
flux derived with Qx=[drho_dy,drhou_dy,drhov_dy,drhoE_dy] Input: normals:Point normals U=[rho,rhou,rhov,rhoE] Output: 2D 3*4 Matrix (flux with rho is zero)
Todo:
flux derived with Qx=[drho_dy,drhou_dy,drhov_dy,drhoE_dy] Input: normals:Point normals U=[rho,rhou,rhov,rhoE] Output: 2D 3*4 Matrix (flux with rho is zero)

Definition at line 274 of file NavierStokesImplicitCFE.cpp.

277{
278 NekDouble nx = normals[0];
279 NekDouble ny = normals[1];
280 NekDouble rho = U[0];
281 NekDouble orho = 1.0 / rho;
282 NekDouble u = U[1] * orho;
283 NekDouble v = U[2] * orho;
284 NekDouble E = U[3] * orho;
285 NekDouble q2 = u * u + v * v;
286 NekDouble gamma = m_gamma;
287 // q_x=-kappa*dT_dx;
288 NekDouble Pr = m_Prandtl;
289 NekDouble oPr = 1.0 / Pr;
290 // To notice, here is positive, which is consistent with
291 //"SYMMETRIC INTERIOR PENALTY DG METHODS FOR THE COMPRESSIBLE
292 // NAVIER-STOKES EQUATIONS"
293 // But opposite to "I Do like CFD"
294 NekDouble tmp = mu * orho;
295 NekDouble tmp2 = gamma * oPr;
296 NekDouble OneThird, TwoThird, FourThird;
297 OneThird = 1.0 / 3.0;
298 TwoThird = 2.0 * OneThird;
299 FourThird = 4.0 * OneThird;
300
301 Array<OneD, NekDouble> tmpArray;
302 tmpArray = OutputMatrix->GetPtr();
303 int nrow = OutputMatrix->GetRows();
304
305 tmpArray[0 + 0 * nrow] = tmp * (TwoThird * v * nx - u * ny);
306 tmpArray[0 + 1 * nrow] = tmp * ny;
307 tmpArray[0 + 2 * nrow] = tmp * (-TwoThird) * nx;
308 tmpArray[0 + 3 * nrow] = 0.0;
309 tmpArray[1 + 0 * nrow] = tmp * (-u * nx - FourThird * v * ny);
310 tmpArray[1 + 1 * nrow] = tmp * nx;
311 tmpArray[1 + 2 * nrow] = tmp * (FourThird * ny);
312 tmpArray[1 + 3 * nrow] = 0.0;
313 tmpArray[2 + 0 * nrow] = OneThird * u * v * nx +
314 (FourThird * v * v + u * u + tmp2 * (E - q2)) * ny;
315 tmpArray[2 + 0 * nrow] = -tmp * (*OutputMatrix)(2, 0);
316 tmpArray[2 + 1 * nrow] = (1 - tmp2) * u * ny + v * nx;
317 tmpArray[2 + 1 * nrow] = tmp * (*OutputMatrix)(2, 1);
318 tmpArray[2 + 2 * nrow] = (FourThird - tmp2) * v * ny - TwoThird * u * nx;
319 tmpArray[2 + 2 * nrow] = tmp * (*OutputMatrix)(2, 2);
320 tmpArray[2 + 3 * nrow] = tmp * tmp2 * ny;
321}

References Nektar::CompressibleFlowSystem::m_gamma, and Nektar::NavierStokesCFE::m_Prandtl.

Referenced by v_InitObject().

◆ GetdFlux_dQy_3D()

void Nektar::NavierStokesImplicitCFE::GetdFlux_dQy_3D ( const Array< OneD, NekDouble > &  normals,
const NekDouble mu,
const Array< OneD, NekDouble > &  U,
DNekMatSharedPtr OutputMatrix 
)
protected

return part of viscous Jacobian derived with Qy=[drho_dy,drhou_dy,drhov_dy,drhow_dy,drhoE_dy] Input: normals:Point normals U=[rho,rhou,rhov,rhow,rhoE] dir: means whether derive with Qy=[drho_dy,drhou_dy,drhov_dy,drhow_dy,drhoE_dy] Output: 3D 4*5 Matrix (flux about rho is zero) OutputMatrix(dir=1)= dF_dQy;

Definition at line 407 of file NavierStokesImplicitCFE.cpp.

410{
411 NekDouble nx = normals[0];
412 NekDouble ny = normals[1];
413 NekDouble nz = normals[2];
414 NekDouble rho = U[0];
415 NekDouble orho = 1.0 / rho;
416 NekDouble u = U[1] * orho;
417 NekDouble v = U[2] * orho;
418 NekDouble w = U[3] * orho;
419 NekDouble E = U[4] * orho;
420 NekDouble q2 = u * u + v * v + w * w;
421 NekDouble gamma = m_gamma;
422 // q_x=-kappa*dT_dx;
423 NekDouble Pr = m_Prandtl;
424 NekDouble oPr = 1.0 / Pr;
425 // To notice, here is positive, which is consistent with
426 //"SYMMETRIC INTERIOR PENALTY DG METHODS FOR THE COMPRESSIBLE
427 // NAVIER-STOKES EQUATIONS"
428 // But opposite to "I do like CFD"
429 NekDouble tmp = mu * orho;
430 NekDouble tmpx = tmp * nx;
431 NekDouble tmpy = tmp * ny;
432 NekDouble tmpz = tmp * nz;
433 NekDouble tmp2 = gamma * oPr;
434 NekDouble OneThird, TwoThird, FourThird;
435 OneThird = 1.0 / 3.0;
436 TwoThird = 2.0 * OneThird;
437 FourThird = 4.0 * OneThird;
438
439 Array<OneD, NekDouble> tmpArray;
440 tmpArray = OutputMatrix->GetPtr();
441 int nrow = OutputMatrix->GetRows();
442
443 tmpArray[0 + 0 * nrow] = tmpx * (TwoThird * v) + tmpy * (-u);
444 tmpArray[0 + 1 * nrow] = tmpy;
445 tmpArray[0 + 2 * nrow] = tmpx * (-TwoThird);
446 tmpArray[0 + 3 * nrow] = 0.0;
447 tmpArray[0 + 4 * nrow] = 0.0;
448 tmpArray[1 + 0 * nrow] =
449 tmpx * (-u) + tmpy * (-FourThird * v) + tmpz * (-w);
450 tmpArray[1 + 1 * nrow] = tmpx;
451 tmpArray[1 + 2 * nrow] = tmpy * FourThird;
452 tmpArray[1 + 3 * nrow] = tmpz;
453 tmpArray[1 + 4 * nrow] = 0.0;
454 tmpArray[2 + 0 * nrow] = tmpy * (-w) + tmpz * (TwoThird * v);
455 tmpArray[2 + 1 * nrow] = 0.0;
456 tmpArray[2 + 2 * nrow] = tmpz * (-TwoThird);
457 tmpArray[2 + 3 * nrow] = tmpy;
458 tmpArray[2 + 4 * nrow] = 0.0;
459 tmpArray[3 + 0 * nrow] =
460 tmpx * (-OneThird * u * v) -
461 tmpy * (u * u + FourThird * v * v + w * w + tmp2 * (E - q2)) +
462 tmpz * (-OneThird * v * w);
463 tmpArray[3 + 1 * nrow] = tmpx * v + tmpy * (1 - tmp2) * u;
464 tmpArray[3 + 2 * nrow] = tmpx * (-TwoThird * u) +
465 tmpy * (FourThird - tmp2) * v +
466 tmpz * (-TwoThird * w);
467 tmpArray[3 + 3 * nrow] = tmpy * (1 - tmp2) * w + tmpz * v;
468 tmpArray[3 + 4 * nrow] = tmpy * tmp2;
469}

References Nektar::CompressibleFlowSystem::m_gamma, Nektar::NavierStokesCFE::m_Prandtl, and Nektar::UnitTests::w().

Referenced by v_InitObject().

◆ GetdFlux_dQz_3D()

void Nektar::NavierStokesImplicitCFE::GetdFlux_dQz_3D ( const Array< OneD, NekDouble > &  normals,
const NekDouble mu,
const Array< OneD, NekDouble > &  U,
DNekMatSharedPtr OutputMatrix 
)
protected

return part of viscous Jacobian derived with Qz=[drho_dz,drhou_dz,drhov_dz,drhow_dz,drhoE_dz] Input: normals:Point normals U=[rho,rhou,rhov,rhow,rhoE] dir: means whether derive with Qz=[drho_dz,drhou_dz,drhov_dz,drhow_dz,drhoE_dz] Output: 3D 4*5 Matrix (flux about rho is zero) OutputMatrix(dir=2)= dF_dQz;

Definition at line 482 of file NavierStokesImplicitCFE.cpp.

485{
486 NekDouble nx = normals[0];
487 NekDouble ny = normals[1];
488 NekDouble nz = normals[2];
489 NekDouble rho = U[0];
490 NekDouble orho = 1.0 / rho;
491 NekDouble u = U[1] * orho;
492 NekDouble v = U[2] * orho;
493 NekDouble w = U[3] * orho;
494 NekDouble E = U[4] * orho;
495 NekDouble q2 = u * u + v * v + w * w;
496 NekDouble gamma = m_gamma;
497 // q_x=-kappa*dT_dx;
498 NekDouble Pr = m_Prandtl;
499 NekDouble oPr = 1.0 / Pr;
500 // To notice, here is positive, which is consistent with
501 //"SYMMETRIC INTERIOR PENALTY DG METHODS FOR THE COMPRESSIBLE
502 // NAVIER-STOKES EQUATIONS"
503 // But opposite to "I do like CFD"
504 NekDouble tmp = mu * orho;
505 NekDouble tmpx = tmp * nx;
506 NekDouble tmpy = tmp * ny;
507 NekDouble tmpz = tmp * nz;
508 NekDouble tmp2 = gamma * oPr;
509 NekDouble OneThird, TwoThird, FourThird;
510 OneThird = 1.0 / 3.0;
511 TwoThird = 2.0 * OneThird;
512 FourThird = 4.0 * OneThird;
513
514 Array<OneD, NekDouble> tmpArray;
515 tmpArray = OutputMatrix->GetPtr();
516 int nrow = OutputMatrix->GetRows();
517
518 tmpArray[0 + 0 * nrow] = tmpx * (TwoThird * w) + tmpz * (-u);
519 tmpArray[0 + 1 * nrow] = tmpz;
520 tmpArray[0 + 2 * nrow] = 0.0;
521 tmpArray[0 + 3 * nrow] = tmpx * (-TwoThird);
522 tmpArray[0 + 4 * nrow] = 0.0;
523 tmpArray[1 + 0 * nrow] = tmpy * (TwoThird * w) + tmpz * (-v);
524 tmpArray[1 + 1 * nrow] = 0.0;
525 tmpArray[1 + 2 * nrow] = tmpz;
526 tmpArray[1 + 3 * nrow] = tmpy * (-TwoThird);
527 tmpArray[1 + 4 * nrow] = 0.0;
528 tmpArray[2 + 0 * nrow] =
529 tmpx * (-u) + tmpy * (-v) + tmpz * (-FourThird * w);
530 tmpArray[2 + 1 * nrow] = tmpx;
531 tmpArray[2 + 2 * nrow] = tmpy;
532 tmpArray[2 + 3 * nrow] = tmpz * FourThird;
533 tmpArray[2 + 4 * nrow] = 0.0;
534 tmpArray[3 + 0 * nrow] =
535 tmpx * (-OneThird * u * w) + tmpy * (-OneThird * v * w) -
536 tmpz * (u * u + v * v + FourThird * w * w + tmp2 * (E - q2));
537 tmpArray[3 + 1 * nrow] = tmpx * w + tmpz * (1 - tmp2) * u;
538 tmpArray[3 + 2 * nrow] = tmpy * w + tmpz * (1 - tmp2) * v;
539 tmpArray[3 + 3 * nrow] = tmpx * (-TwoThird * u) + tmpy * (-TwoThird * v) +
540 tmpz * (FourThird - tmp2) * w;
541 tmpArray[3 + 4 * nrow] = tmpz * tmp2;
542}

References Nektar::CompressibleFlowSystem::m_gamma, Nektar::NavierStokesCFE::m_Prandtl, and Nektar::UnitTests::w().

Referenced by v_InitObject().

◆ GetdFlux_dU_2D()

void Nektar::NavierStokesImplicitCFE::GetdFlux_dU_2D ( const Array< OneD, NekDouble > &  normals,
const NekDouble  mu,
const NekDouble  dmu_dT,
const Array< OneD, NekDouble > &  U,
const Array< OneD, const Array< OneD, NekDouble > > &  qfield,
DNekMatSharedPtr OutputMatrix 
)
protected

return part of viscous Jacobian Input: normals:Point normals mu: dynamicviscosity dmu_dT: mu's derivative with T using Sutherland's law U=[rho,rhou,rhov,rhoE] Output: 3*4 Matrix (the flux about rho is zero) OutputMatrix dFLux_dU, the matrix sign is consistent with SIPG

Definition at line 554 of file NavierStokesImplicitCFE.cpp.

559{
560 Array<OneD, NekDouble> tmpArray;
561 tmpArray = OutputMatrix->GetPtr();
562 int nrow = OutputMatrix->GetRows();
563
564 NekDouble nx = normals[0];
565 NekDouble ny = normals[1];
566 NekDouble U1 = U[0];
567 NekDouble U2 = U[1];
568 NekDouble U3 = U[2];
569 NekDouble U4 = U[3];
570 NekDouble dU1_dx = qfield[0][0];
571 NekDouble dU2_dx = qfield[0][1];
572 NekDouble dU3_dx = qfield[0][2];
573 NekDouble dU4_dx = qfield[0][3];
574 NekDouble dU1_dy = qfield[1][0];
575 NekDouble dU2_dy = qfield[1][1];
576 NekDouble dU3_dy = qfield[1][2];
577 NekDouble dU4_dy = qfield[1][3];
578 NekDouble gamma = m_gamma;
579 NekDouble Cv = m_Cv;
580 NekDouble Pr = m_Prandtl;
581 NekDouble oPr = 1.0 / Pr;
582
583 NekDouble orho1, orho2, orho3, orho4;
584 NekDouble oCv = 1. / Cv;
585 orho1 = 1.0 / U1;
586 orho2 = orho1 * orho1;
587 orho3 = orho1 * orho2;
588 orho4 = orho2 * orho2;
589
590 // Assume Fn=mu*Sn
591 // Sn=Sx*nx+Sy*ny
592
593 NekDouble TwoThrid = 2. / 3.;
594 NekDouble FourThird = 2.0 * TwoThrid;
595 NekDouble u = U2 * orho1;
596 NekDouble v = U3 * orho1;
597 NekDouble du_dx = orho1 * (dU2_dx - u * dU1_dx);
598 NekDouble dv_dx = orho1 * (dU3_dx - v * dU1_dx);
599 NekDouble du_dy = orho1 * (dU2_dy - u * dU1_dy);
600 NekDouble dv_dy = orho1 * (dU3_dy - v * dU1_dy);
601 NekDouble s12 = FourThird * du_dx - TwoThrid * dv_dy;
602 NekDouble s13 = du_dy + dv_dx;
603 NekDouble s22 = s13;
604 NekDouble s23 = FourThird * dv_dy - TwoThrid * du_dx;
605 NekDouble snx = s12 * nx + s22 * ny;
606 NekDouble sny = s13 * nx + s23 * ny;
607 NekDouble snv = snx * u + sny * v;
608 NekDouble qx = -gamma * mu * oPr *
609 (orho1 * dU4_dx - U[3] * orho2 * dU1_dx -
610 u * (orho1 * dU2_dx - U[1] * orho2 * dU1_dx) -
611 v * (orho1 * dU3_dx - U[2] * orho2 * dU1_dx));
612 NekDouble qy = -gamma * mu * oPr *
613 (orho1 * dU4_dy - U[3] * orho2 * dU1_dy -
614 u * (orho1 * dU2_dy - U[1] * orho2 * dU1_dy) -
615 v * (orho1 * dU3_dy - U[2] * orho2 * dU1_dy));
616 NekDouble qn = qx * nx + qy * ny;
617
618 // Term1 mu's derivative with U: dmu_dU*Sn
619 Array<OneD, NekDouble> tmp(3, 0.0);
620 tmp[0] = snx;
621 tmp[1] = sny;
622 tmp[2] = snv - qn / mu;
623 Array<OneD, NekDouble> dT_dU(4, 0.0);
624 dT_dU[0] = oCv * (-orho2 * U4 + orho3 * U2 * U2 + orho3 * U3 * U3);
625 dT_dU[1] = -oCv * orho2 * U2;
626 dT_dU[2] = -oCv * orho2 * U3;
627 dT_dU[3] = oCv * orho1;
628 for (int i = 0; i < 3; i++)
629 {
630 for (int j = 0; j < 4; j++)
631 {
632 tmpArray[i + j * nrow] = dmu_dT * dT_dU[j] * tmp[i];
633 }
634 }
635
636 // Term 2 +mu*dSn_dU
637 NekDouble du_dx_dU1, du_dx_dU2;
638 NekDouble du_dy_dU1, du_dy_dU2;
639 NekDouble dv_dx_dU1, dv_dx_dU3;
640 NekDouble dv_dy_dU1, dv_dy_dU3;
641 NekDouble ds12_dU1, ds12_dU2, ds12_dU3;
642 NekDouble ds13_dU1, ds13_dU2, ds13_dU3;
643 NekDouble ds22_dU1, ds22_dU2, ds22_dU3;
644 NekDouble ds23_dU1, ds23_dU2, ds23_dU3;
645 NekDouble dsnx_dU1, dsnx_dU2, dsnx_dU3;
646 NekDouble dsny_dU1, dsny_dU2, dsny_dU3;
647 NekDouble dsnv_dU1, dsnv_dU2, dsnv_dU3;
648
649 du_dx_dU1 = -orho2 * dU2_dx + 2 * orho3 * U2 * dU1_dx;
650 du_dx_dU2 = -orho2 * dU1_dx;
651 du_dy_dU1 = -orho2 * dU2_dy + 2 * orho3 * U2 * dU1_dy;
652 du_dy_dU2 = -orho2 * dU1_dy;
653 dv_dx_dU1 = -orho2 * dU3_dx + 2 * orho3 * U3 * dU1_dx;
654 dv_dx_dU3 = du_dx_dU2;
655 dv_dy_dU1 = -orho2 * dU3_dy + 2 * orho3 * U3 * dU1_dy;
656 dv_dy_dU3 = du_dy_dU2;
657 ds12_dU1 = FourThird * du_dx_dU1 - TwoThrid * dv_dy_dU1;
658 ds12_dU2 = FourThird * du_dx_dU2;
659 ds12_dU3 = -TwoThrid * dv_dy_dU3;
660 ds13_dU1 = du_dy_dU1 + dv_dx_dU1;
661 ds13_dU2 = du_dy_dU2;
662 ds13_dU3 = dv_dx_dU3;
663 ds22_dU1 = ds13_dU1;
664 ds22_dU2 = ds13_dU2;
665 ds22_dU3 = ds13_dU3;
666 ds23_dU1 = FourThird * dv_dy_dU1 - TwoThrid * du_dx_dU1;
667 ds23_dU2 = -TwoThrid * du_dx_dU2;
668 ds23_dU3 = FourThird * dv_dy_dU3;
669 dsnx_dU1 = ds12_dU1 * nx + ds22_dU1 * ny;
670 dsnx_dU2 = ds12_dU2 * nx + ds22_dU2 * ny;
671 dsnx_dU3 = ds12_dU3 * nx + ds22_dU3 * ny;
672 dsny_dU1 = ds13_dU1 * nx + ds23_dU1 * ny;
673 dsny_dU2 = ds13_dU2 * nx + ds23_dU2 * ny;
674 dsny_dU3 = ds13_dU3 * nx + ds23_dU3 * ny;
675 dsnv_dU1 =
676 u * dsnx_dU1 + v * dsny_dU1 - orho2 * U2 * snx - orho2 * U3 * sny;
677 dsnv_dU2 = u * dsnx_dU2 + v * dsny_dU2 + orho1 * snx;
678 dsnv_dU3 = u * dsnx_dU3 + v * dsny_dU3 + orho1 * sny;
679 tmpArray[0 + 0 * nrow] = tmpArray[0 + 0 * nrow] + mu * dsnx_dU1;
680 tmpArray[0 + 1 * nrow] = tmpArray[0 + 1 * nrow] + mu * dsnx_dU2;
681 tmpArray[0 + 2 * nrow] = tmpArray[0 + 2 * nrow] + mu * dsnx_dU3;
682 tmpArray[1 + 0 * nrow] = tmpArray[1 + 0 * nrow] + mu * dsny_dU1;
683 tmpArray[1 + 1 * nrow] = tmpArray[1 + 1 * nrow] + mu * dsny_dU2;
684 tmpArray[1 + 2 * nrow] = tmpArray[1 + 2 * nrow] + mu * dsny_dU3;
685 tmpArray[2 + 0 * nrow] = tmpArray[2 + 0 * nrow] + mu * dsnv_dU1;
686 tmpArray[2 + 1 * nrow] = tmpArray[2 + 1 * nrow] + mu * dsnv_dU2;
687 tmpArray[2 + 2 * nrow] = tmpArray[2 + 2 * nrow] + mu * dsnv_dU3;
688
689 // Consider +qn's effect (does not include mu's effect)
690 NekDouble dqx_dU1, dqx_dU2, dqx_dU3, dqx_dU4;
691 NekDouble dqy_dU1, dqy_dU2, dqy_dU3, dqy_dU4;
692 NekDouble tmpx = -nx * mu * gamma * oPr;
693 dqx_dU1 = tmpx * (-orho2 * dU4_dx + 2 * orho3 * U4 * dU1_dx +
694 2 * orho3 * U2 * dU2_dx - 3 * orho4 * U2 * U2 * dU1_dx +
695 2 * orho3 * U3 * dU3_dx - 3 * orho4 * U3 * U3 * dU1_dx);
696 dqx_dU2 = tmpx * (-orho2 * dU2_dx + 2 * orho3 * U2 * dU1_dx);
697 dqx_dU3 = tmpx * (-orho2 * dU3_dx + 2 * orho3 * U3 * dU1_dx);
698 dqx_dU4 = -tmpx * orho2 * dU1_dx;
699 NekDouble tmpy = -ny * mu * gamma * oPr;
700 dqy_dU1 = tmpy * (-orho2 * dU4_dy + 2 * orho3 * U4 * dU1_dy +
701 2 * orho3 * U2 * dU2_dy - 3 * orho4 * U2 * U2 * dU1_dy +
702 2 * orho3 * U3 * dU3_dy - 3 * orho4 * U3 * U3 * dU1_dy);
703 dqy_dU2 = tmpy * (-orho2 * dU2_dy + 2 * orho3 * U2 * dU1_dy);
704 dqy_dU3 = tmpy * (-orho2 * dU3_dy + 2 * orho3 * U3 * dU1_dy);
705 dqy_dU4 = -tmpy * orho2 * dU1_dy;
706 tmpArray[2 + 0 * nrow] = tmpArray[2 + 0 * nrow] - dqx_dU1 - dqy_dU1;
707 tmpArray[2 + 1 * nrow] = tmpArray[2 + 1 * nrow] - dqx_dU2 - dqy_dU2;
708 tmpArray[2 + 2 * nrow] = tmpArray[2 + 2 * nrow] - dqx_dU3 - dqy_dU3;
709 tmpArray[2 + 3 * nrow] = tmpArray[2 + 3 * nrow] - dqx_dU4 - dqy_dU4;
710}

References Nektar::NavierStokesCFE::m_Cv, Nektar::CompressibleFlowSystem::m_gamma, and Nektar::NavierStokesCFE::m_Prandtl.

Referenced by v_GetDiffusionFluxJacPoint().

◆ GetdFlux_dU_3D()

void Nektar::NavierStokesImplicitCFE::GetdFlux_dU_3D ( const Array< OneD, NekDouble > &  normals,
const NekDouble  mu,
const NekDouble  dmu_dT,
const Array< OneD, NekDouble > &  U,
const Array< OneD, const Array< OneD, NekDouble > > &  qfield,
DNekMatSharedPtr OutputMatrix 
)
protected

return part of viscous Jacobian Input: normals:Point normals mu: dynamicviscosity dmu_dT: mu's derivative with T using Sutherland's law U=[rho,rhou,rhov,rhow,rhoE] Output: 4*5 Matrix (the flux about rho is zero) OutputMatrix dFLux_dU, the matrix sign is consistent with SIPG

Definition at line 722 of file NavierStokesImplicitCFE.cpp.

727{
728 Array<OneD, NekDouble> tmpArray;
729 tmpArray = OutputMatrix->GetPtr();
730 int nrow = OutputMatrix->GetRows();
731
732 NekDouble nx = normals[0];
733 NekDouble ny = normals[1];
734 NekDouble nz = normals[2];
735 NekDouble U1 = U[0];
736 NekDouble U2 = U[1];
737 NekDouble U3 = U[2];
738 NekDouble U4 = U[3];
739 NekDouble U5 = U[4];
740 NekDouble dU1_dx = qfield[0][0];
741 NekDouble dU2_dx = qfield[0][1];
742 NekDouble dU3_dx = qfield[0][2];
743 NekDouble dU4_dx = qfield[0][3];
744 NekDouble dU5_dx = qfield[0][4];
745 NekDouble dU1_dy = qfield[1][0];
746 NekDouble dU2_dy = qfield[1][1];
747 NekDouble dU3_dy = qfield[1][2];
748 NekDouble dU4_dy = qfield[1][3];
749 NekDouble dU5_dy = qfield[1][4];
750 NekDouble dU1_dz = qfield[2][0];
751 NekDouble dU2_dz = qfield[2][1];
752 NekDouble dU3_dz = qfield[2][2];
753 NekDouble dU4_dz = qfield[2][3];
754 NekDouble dU5_dz = qfield[2][4];
755 NekDouble gamma = m_gamma;
756 NekDouble Cv = m_Cv;
757 NekDouble Pr = m_Prandtl;
758 NekDouble oPr = 1.0 / Pr;
759
760 NekDouble orho1, orho2, orho3, orho4;
761 NekDouble oCv = 1. / Cv;
762 orho1 = 1.0 / U1;
763 orho2 = orho1 * orho1;
764 orho3 = orho1 * orho2;
765 orho4 = orho2 * orho2;
766
767 // Assume Fn=mu*Sn
768 // Sn=Sx*nx+Sy*ny+Sz*nz
769 NekDouble TwoThrid = 2. / 3.;
770 NekDouble FourThird = 2.0 * TwoThrid;
771 NekDouble tmp2 = gamma * mu * oPr;
772 NekDouble u = U2 * orho1;
773 NekDouble v = U3 * orho1;
774 NekDouble w = U4 * orho1;
775 NekDouble du_dx = orho1 * (dU2_dx - u * dU1_dx);
776 NekDouble dv_dx = orho1 * (dU3_dx - v * dU1_dx);
777 NekDouble dw_dx = orho1 * (dU4_dx - w * dU1_dx);
778 NekDouble du_dy = orho1 * (dU2_dy - u * dU1_dy);
779 NekDouble dv_dy = orho1 * (dU3_dy - v * dU1_dy);
780 NekDouble dw_dy = orho1 * (dU4_dy - w * dU1_dy);
781 NekDouble du_dz = orho1 * (dU2_dz - u * dU1_dz);
782 NekDouble dv_dz = orho1 * (dU3_dz - v * dU1_dz);
783 NekDouble dw_dz = orho1 * (dU4_dz - w * dU1_dz);
784 NekDouble s12 = FourThird * du_dx - TwoThrid * dv_dy - TwoThrid * dw_dz;
785 NekDouble s13 = du_dy + dv_dx;
786 NekDouble s14 = dw_dx + du_dz;
787 NekDouble s22 = s13;
788 NekDouble s23 = FourThird * dv_dy - TwoThrid * du_dx - TwoThrid * dw_dz;
789 NekDouble s24 = dv_dz + dw_dy;
790 NekDouble s32 = s14;
791 NekDouble s33 = s24;
792 NekDouble s34 = FourThird * dw_dz - TwoThrid * du_dx - TwoThrid * dv_dy;
793 NekDouble snx = s12 * nx + s22 * ny + s32 * nz;
794 NekDouble sny = s13 * nx + s23 * ny + s33 * nz;
795 NekDouble snz = s14 * nz + s24 * ny + s34 * nz;
796 NekDouble snv = snx * u + sny * v + snz * w;
797 NekDouble qx = -tmp2 * (orho1 * dU5_dx - U5 * orho2 * dU1_dx -
798 u * (orho1 * dU2_dx - U2 * orho2 * dU1_dx) -
799 v * (orho1 * dU3_dx - U3 * orho2 * dU1_dx) -
800 w * (orho1 * dU4_dx - U4 * orho2 * dU1_dx));
801 NekDouble qy = -tmp2 * (orho1 * dU5_dy - U5 * orho2 * dU1_dy -
802 u * (orho1 * dU2_dy - U2 * orho2 * dU1_dy) -
803 v * (orho1 * dU3_dy - U3 * orho2 * dU1_dy) -
804 w * (orho1 * dU4_dy - U4 * orho2 * dU1_dy));
805 NekDouble qz = -tmp2 * (orho1 * dU5_dz - U5 * orho2 * dU1_dz -
806 u * (orho1 * dU2_dz - U2 * orho2 * dU1_dz) -
807 v * (orho1 * dU3_dz - U3 * orho2 * dU1_dz) -
808 w * (orho1 * dU4_dz - U4 * orho2 * dU1_dz));
809 NekDouble qn = qx * nx + qy * ny + qz * nz;
810
811 // Term1 mu's derivative with U: dmu_dU*Sn
812 Array<OneD, NekDouble> tmp(4, 0.0);
813 tmp[0] = snx;
814 tmp[1] = sny;
815 tmp[2] = snz;
816 tmp[3] = snv - qn / mu;
817 Array<OneD, NekDouble> dT_dU(5, 0.0);
818 dT_dU[0] = oCv * (-orho2 * U5 + orho3 * U2 * U2 + orho3 * U3 * U3 +
819 orho3 * U4 * U4);
820 dT_dU[1] = -oCv * orho2 * U2;
821 dT_dU[2] = -oCv * orho2 * U3;
822 dT_dU[3] = -oCv * orho2 * U4;
823 dT_dU[4] = oCv * orho1;
824 for (int i = 0; i < 4; i++)
825 {
826 for (int j = 0; j < 5; j++)
827 {
828 tmpArray[i + j * nrow] = dmu_dT * dT_dU[j] * tmp[i];
829 }
830 }
831
832 // Term 2 +mu*dSn_dU
833 NekDouble du_dx_dU1, du_dx_dU2;
834 NekDouble du_dy_dU1, du_dy_dU2;
835 NekDouble du_dz_dU1, du_dz_dU2;
836 NekDouble dv_dx_dU1, dv_dx_dU3;
837 NekDouble dv_dy_dU1, dv_dy_dU3;
838 NekDouble dv_dz_dU1, dv_dz_dU3;
839 NekDouble dw_dx_dU1, dw_dx_dU4;
840 NekDouble dw_dy_dU1, dw_dy_dU4;
841 NekDouble dw_dz_dU1, dw_dz_dU4;
842 NekDouble ds12_dU1, ds12_dU2, ds12_dU3, ds12_dU4;
843 NekDouble ds13_dU1, ds13_dU2, ds13_dU3;
844 NekDouble ds14_dU1, ds14_dU2, ds14_dU4;
845 NekDouble ds22_dU1, ds22_dU2, ds22_dU3;
846 NekDouble ds23_dU1, ds23_dU2, ds23_dU3, ds23_dU4;
847 NekDouble ds24_dU1, ds24_dU3, ds24_dU4;
848 NekDouble ds32_dU1, ds32_dU2, ds32_dU4;
849 NekDouble ds33_dU1, ds33_dU3, ds33_dU4;
850 NekDouble ds34_dU1, ds34_dU2, ds34_dU3, ds34_dU4;
851 NekDouble dsnx_dU1, dsnx_dU2, dsnx_dU3, dsnx_dU4;
852 NekDouble dsny_dU1, dsny_dU2, dsny_dU3, dsny_dU4;
853 NekDouble dsnz_dU1, dsnz_dU2, dsnz_dU3, dsnz_dU4;
854 NekDouble dsnv_dU1, dsnv_dU2, dsnv_dU3, dsnv_dU4;
855
856 du_dx_dU1 = -orho2 * dU2_dx + 2 * orho3 * U2 * dU1_dx;
857 du_dx_dU2 = -orho2 * dU1_dx;
858 du_dy_dU1 = -orho2 * dU2_dy + 2 * orho3 * U2 * dU1_dy;
859 du_dy_dU2 = -orho2 * dU1_dy;
860 du_dz_dU1 = -orho2 * dU2_dz + 2 * orho3 * U2 * dU1_dz;
861 du_dz_dU2 = -orho2 * dU1_dz;
862 dv_dx_dU1 = -orho2 * dU3_dx + 2 * orho3 * U3 * dU1_dx;
863 dv_dx_dU3 = -orho2 * dU1_dx;
864 dv_dy_dU1 = -orho2 * dU3_dy + 2 * orho3 * U3 * dU1_dy;
865 dv_dy_dU3 = -orho2 * dU1_dy;
866 dv_dz_dU1 = -orho2 * dU3_dz + 2 * orho3 * U3 * dU1_dz;
867 dv_dz_dU3 = -orho2 * dU1_dz;
868 dw_dx_dU1 = -orho2 * dU4_dx + 2 * orho3 * U4 * dU1_dx;
869 dw_dx_dU4 = -orho2 * dU1_dx;
870 dw_dy_dU1 = -orho2 * dU4_dy + 2 * orho3 * U4 * dU1_dy;
871 dw_dy_dU4 = -orho2 * dU1_dy;
872 dw_dz_dU1 = -orho2 * dU4_dz + 2 * orho3 * U4 * dU1_dz;
873 dw_dz_dU4 = -orho2 * dU1_dz;
874 ds12_dU1 =
875 FourThird * du_dx_dU1 - TwoThrid * dv_dy_dU1 - TwoThrid * dw_dz_dU1;
876 ds12_dU2 = FourThird * du_dx_dU2;
877 ds12_dU3 = -TwoThrid * dv_dy_dU3;
878 ds12_dU4 = -TwoThrid * dw_dz_dU4;
879 ds13_dU1 = du_dy_dU1 + dv_dx_dU1;
880 ds13_dU2 = du_dy_dU2;
881 ds13_dU3 = dv_dx_dU3;
882 ds14_dU1 = dw_dx_dU1 + du_dz_dU1;
883 ds14_dU2 = du_dz_dU2;
884 ds14_dU4 = dw_dx_dU4;
885 ds22_dU1 = du_dy_dU1 + dv_dx_dU1;
886 ds22_dU2 = du_dy_dU2;
887 ds22_dU3 = dv_dx_dU3;
888 ds23_dU1 =
889 FourThird * dv_dy_dU1 - TwoThrid * du_dx_dU1 - TwoThrid * dw_dz_dU1;
890 ds23_dU2 = -TwoThrid * du_dx_dU2;
891 ds23_dU3 = FourThird * dv_dy_dU3;
892 ds23_dU4 = -TwoThrid * dw_dz_dU4;
893 ds24_dU1 = dv_dz_dU1 + dw_dy_dU1;
894 ds24_dU3 = dv_dz_dU3;
895 ds24_dU4 = dw_dy_dU4;
896 ds32_dU1 = dw_dx_dU1 + du_dz_dU1;
897 ds32_dU2 = du_dz_dU2;
898 ds32_dU4 = dw_dx_dU4;
899 ds33_dU1 = dv_dz_dU1 + dw_dy_dU1;
900 ds33_dU3 = dv_dz_dU3;
901 ds33_dU4 = dw_dy_dU4;
902 ds34_dU1 =
903 FourThird * dw_dz_dU1 - TwoThrid * du_dx_dU1 - TwoThrid * dv_dy_dU1;
904 ds34_dU2 = -TwoThrid * du_dx_dU2;
905 ds34_dU3 = -TwoThrid * dv_dy_dU3;
906 ds34_dU4 = FourThird * dw_dz_dU4;
907 dsnx_dU1 = ds12_dU1 * nx + ds22_dU1 * ny + ds32_dU1 * nz;
908 dsnx_dU2 = ds12_dU2 * nx + ds22_dU2 * ny + ds32_dU2 * nz;
909 dsnx_dU3 = ds12_dU3 * nx + ds22_dU3 * ny;
910 dsnx_dU4 = ds12_dU4 * nx + ds32_dU4 * nz;
911 dsny_dU1 = ds13_dU1 * nx + ds23_dU1 * ny + ds33_dU1 * nz;
912 dsny_dU2 = ds13_dU2 * nx + ds23_dU2 * ny;
913 dsny_dU3 = ds13_dU3 * nx + ds23_dU3 * ny + ds33_dU3 * nz;
914 dsny_dU4 = ds23_dU4 * ny + ds33_dU4 * nz;
915 dsnz_dU1 = ds14_dU1 * nx + ds24_dU1 * ny + ds34_dU1 * nz;
916 dsnz_dU2 = ds14_dU2 * nx + ds34_dU2 * nz;
917 dsnz_dU3 = ds24_dU3 * ny + ds34_dU3 * nz;
918 //? why there is value if 2D
919 dsnz_dU4 = ds14_dU4 * nx + ds24_dU4 * ny + ds34_dU4 * nz;
920 dsnv_dU1 = u * dsnx_dU1 + v * dsny_dU1 + w * dsnz_dU1 - orho2 * U2 * snx -
921 orho2 * U3 * sny - orho2 * U4 * snz;
922 dsnv_dU2 = u * dsnx_dU2 + v * dsny_dU2 + w * dsnz_dU2 + orho1 * snx;
923 dsnv_dU3 = u * dsnx_dU3 + v * dsny_dU3 + w * dsnz_dU3 + orho1 * sny;
924 dsnv_dU4 = u * dsnx_dU4 + v * dsny_dU4 + w * dsnz_dU4 + orho1 * snz;
925 tmpArray[0 + 0 * nrow] = tmpArray[0 + 0 * nrow] + mu * dsnx_dU1;
926 tmpArray[0 + 1 * nrow] = tmpArray[0 + 1 * nrow] + mu * dsnx_dU2;
927 tmpArray[0 + 2 * nrow] = tmpArray[0 + 2 * nrow] + mu * dsnx_dU3;
928 tmpArray[0 + 3 * nrow] = tmpArray[0 + 3 * nrow] + mu * dsnx_dU4;
929 tmpArray[1 + 0 * nrow] = tmpArray[1 + 0 * nrow] + mu * dsny_dU1;
930 tmpArray[1 + 1 * nrow] = tmpArray[1 + 1 * nrow] + mu * dsny_dU2;
931 tmpArray[1 + 2 * nrow] = tmpArray[1 + 2 * nrow] + mu * dsny_dU3;
932 tmpArray[1 + 3 * nrow] = tmpArray[1 + 3 * nrow] + mu * dsny_dU4;
933 tmpArray[2 + 0 * nrow] = tmpArray[2 + 0 * nrow] + mu * dsnz_dU1;
934 tmpArray[2 + 1 * nrow] = tmpArray[2 + 1 * nrow] + mu * dsnz_dU2;
935 tmpArray[2 + 2 * nrow] = tmpArray[2 + 2 * nrow] + mu * dsnz_dU3;
936 tmpArray[2 + 3 * nrow] = tmpArray[2 + 3 * nrow] + mu * dsnz_dU4;
937 tmpArray[3 + 0 * nrow] = tmpArray[3 + 0 * nrow] + mu * dsnv_dU1;
938 tmpArray[3 + 1 * nrow] = tmpArray[3 + 1 * nrow] + mu * dsnv_dU2;
939 tmpArray[3 + 2 * nrow] = tmpArray[3 + 2 * nrow] + mu * dsnv_dU3;
940 tmpArray[3 + 3 * nrow] = tmpArray[3 + 3 * nrow] + mu * dsnv_dU4;
941
942 // Consider heat flux qn's effect (does not include mu's effect)
943 NekDouble dqx_dU1, dqx_dU2, dqx_dU3, dqx_dU4, dqx_dU5;
944 NekDouble dqy_dU1, dqy_dU2, dqy_dU3, dqy_dU4, dqy_dU5;
945 NekDouble dqz_dU1, dqz_dU2, dqz_dU3, dqz_dU4, dqz_dU5;
946 NekDouble tmpx = -nx * tmp2;
947 dqx_dU1 = tmpx * (-orho2 * dU5_dx + 2 * orho3 * U5 * dU1_dx +
948 2 * orho3 * U2 * dU2_dx - 3 * orho4 * U2 * U2 * dU1_dx +
949 2 * orho3 * U3 * dU3_dx - 3 * orho4 * U3 * U3 * dU1_dx +
950 2 * orho3 * U4 * dU4_dx - 3 * orho4 * U4 * U4 * dU1_dx);
951 dqx_dU2 = tmpx * (-orho2 * dU2_dx + 2 * orho3 * U2 * dU1_dx);
952 dqx_dU3 = tmpx * (-orho2 * dU3_dx + 2 * orho3 * U3 * dU1_dx);
953 dqx_dU4 = tmpx * (-orho2 * dU4_dx + 2 * orho3 * U4 * dU1_dx);
954 dqx_dU5 = -tmpx * orho2 * dU1_dx;
955 NekDouble tmpy = -ny * tmp2;
956 dqy_dU1 = tmpy * (-orho2 * dU5_dy + 2 * orho3 * U5 * dU1_dy +
957 2 * orho3 * U2 * dU2_dy - 3 * orho4 * U2 * U2 * dU1_dy +
958 2 * orho3 * U3 * dU3_dy - 3 * orho4 * U3 * U3 * dU1_dy +
959 2 * orho3 * U4 * dU4_dy - 3 * orho4 * U4 * U4 * dU1_dy);
960 dqy_dU2 = tmpy * (-orho2 * dU2_dy + 2 * orho3 * U2 * dU1_dy);
961 dqy_dU3 = tmpy * (-orho2 * dU3_dy + 2 * orho3 * U3 * dU1_dy);
962 dqy_dU4 = tmpy * (-orho2 * dU4_dy + 2 * orho3 * U4 * dU1_dy);
963 dqy_dU5 = -tmpy * orho2 * dU1_dy;
964 NekDouble tmpz = -nz * tmp2;
965 dqz_dU1 = tmpz * (-orho2 * dU5_dz + 2 * orho3 * U5 * dU1_dz +
966 2 * orho3 * U2 * dU2_dz - 3 * orho4 * U2 * U2 * dU1_dz +
967 2 * orho3 * U3 * dU3_dz - 3 * orho4 * U3 * U3 * dU1_dz +
968 2 * orho3 * U4 * dU4_dz - 3 * orho4 * U4 * U4 * dU1_dz);
969 dqz_dU2 = tmpz * (-orho2 * dU2_dz + 2 * orho3 * U2 * dU1_dz);
970 dqz_dU3 = tmpz * (-orho2 * dU3_dz + 2 * orho3 * U3 * dU1_dz);
971 dqz_dU4 = tmpz * (-orho2 * dU4_dz + 2 * orho3 * U4 * dU1_dz);
972 dqz_dU5 = -tmpz * orho2 * dU1_dz;
973 tmpArray[3 + 0 * nrow] =
974 tmpArray[3 + 0 * nrow] - dqx_dU1 - dqy_dU1 - dqz_dU1;
975 tmpArray[3 + 1 * nrow] =
976 tmpArray[3 + 1 * nrow] - dqx_dU2 - dqy_dU2 - dqz_dU2;
977 tmpArray[3 + 2 * nrow] =
978 tmpArray[3 + 2 * nrow] - dqx_dU3 - dqy_dU3 - dqz_dU3;
979 tmpArray[3 + 3 * nrow] =
980 tmpArray[3 + 3 * nrow] - dqx_dU4 - dqy_dU4 - dqz_dU4;
981 tmpArray[3 + 4 * nrow] =
982 tmpArray[3 + 4 * nrow] - dqx_dU5 - dqy_dU5 - dqz_dU5;
983}

References Nektar::NavierStokesCFE::m_Cv, Nektar::CompressibleFlowSystem::m_gamma, Nektar::NavierStokesCFE::m_Prandtl, and Nektar::UnitTests::w().

Referenced by v_GetDiffusionFluxJacPoint().

◆ v_CalcMuDmuDT()

void Nektar::NavierStokesImplicitCFE::v_CalcMuDmuDT ( const Array< OneD, const Array< OneD, NekDouble > > &  inarray,
Array< OneD, NekDouble > &  mu,
Array< OneD, NekDouble > &  DmuDT 
)
overrideprotectedvirtual

Reimplemented from Nektar::CFSImplicit.

Definition at line 1326 of file NavierStokesImplicitCFE.cpp.

1329{
1330 int nPts = mu.size();
1331
1332 Array<OneD, NekDouble> thermalConductivity(nPts, 0.0);
1333 Array<OneD, NekDouble> temperature(nPts, 0.0);
1334 m_varConv->GetTemperature(inarray, temperature);
1335 GetViscosityAndThermalCondFromTemp(temperature, mu, thermalConductivity);
1336
1337 if (m_ViscosityType == "Variable")
1338 {
1339 if (DmuDT.size() > 0)
1340 {
1341 m_varConv->GetDmuDT(temperature, mu, DmuDT);
1342 }
1343 }
1344 else
1345 {
1346 if (DmuDT.size() > 0)
1347 {
1348 Vmath::Zero(nPts, DmuDT, 1);
1349 }
1350 }
1351}
VariableConverterSharedPtr m_varConv
void GetViscosityAndThermalCondFromTemp(const Array< OneD, NekDouble > &temperature, Array< OneD, NekDouble > &mu, Array< OneD, NekDouble > &thermalCond)
Update viscosity todo: add artificial viscosity here.
void Zero(int n, T *x, const int incx)
Zero vector.
Definition: Vmath.hpp:273

References Nektar::NavierStokesCFE::GetViscosityAndThermalCondFromTemp(), Nektar::CompressibleFlowSystem::m_varConv, Nektar::NavierStokesCFE::m_ViscosityType, and Vmath::Zero().

◆ v_CalcPhysDeriv()

void Nektar::NavierStokesImplicitCFE::v_CalcPhysDeriv ( const Array< OneD, const Array< OneD, NekDouble > > &  inarray,
TensorOfArray3D< NekDouble > &  qfield 
)
overrideprotectedvirtual

Reimplemented from Nektar::CFSImplicit.

Definition at line 1282 of file NavierStokesImplicitCFE.cpp.

1285{
1286 int nConvectiveFields = m_fields.size();
1287 int npoints = GetTotPoints();
1288 if (!qfield.size())
1289 {
1291 for (int i = 0; i < m_spacedim; i++)
1292 {
1293 qfield[i] = Array<OneD, Array<OneD, NekDouble>>(nConvectiveFields);
1294 for (int j = 0; j < nConvectiveFields; j++)
1295 {
1296 qfield[i][j] = Array<OneD, NekDouble>(npoints, 0.0);
1297 }
1298 }
1299 }
1300 if (m_is_diffIP)
1301 {
1304 m_diffusion->DiffuseCalcDerivative(m_fields, inarray, qfield, pFwd,
1305 pBwd);
1306 }
1307 else
1308 {
1309 // For LDGNS, the array size should be nConvectiveFields - 1
1310 // pFwd must also be allocated.
1311 ASSERTL1(false, "LDGNS not yet validated for implicit compressible "
1312 "flow solver");
1313 Array<OneD, Array<OneD, NekDouble>> inarrayDiff(nConvectiveFields - 1);
1314 Array<OneD, Array<OneD, NekDouble>> pFwd(nConvectiveFields - 1);
1316 for (int i = 0; i < nConvectiveFields - 1; ++i)
1317 {
1318 inarrayDiff[i] = inarray[i];
1319 pFwd[i] = Array<OneD, NekDouble>(2 * npoints, 0.0);
1320 }
1321 m_diffusion->DiffuseCalcDerivative(m_fields, inarrayDiff, qfield, pFwd,
1322 pBwd);
1323 }
1324}
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
Definition: ErrorUtil.hpp:242
SolverUtils::DiffusionSharedPtr m_diffusion
bool m_is_diffIP
flag to switch between IP and LDG an enum could be added for more options
int m_spacedim
Spatial dimension (>= expansion dim).
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
SOLVER_UTILS_EXPORT int GetTotPoints()

References ASSERTL1, Nektar::SolverUtils::EquationSystem::GetTotPoints(), Nektar::CompressibleFlowSystem::m_diffusion, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::NavierStokesCFE::m_is_diffIP, and Nektar::SolverUtils::EquationSystem::m_spacedim.

◆ v_DoDiffusion()

void Nektar::NavierStokesImplicitCFE::v_DoDiffusion ( 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 
)
inlinefinalprotectedvirtual

Reimplemented from Nektar::NavierStokesCFE.

Definition at line 93 of file NavierStokesImplicitCFE.h.

98 {
100 "v_DoDiffusion is not implemented for implicit solvers");
101 }
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Definition: ErrorUtil.hpp:202

References Nektar::ErrorUtil::efatal, and NEKERROR.

◆ v_DoDiffusionCoeff()

void Nektar::NavierStokesImplicitCFE::v_DoDiffusionCoeff ( const Array< OneD, const Array< OneD, NekDouble > > &  inarray,
Array< OneD, Array< OneD, NekDouble > > &  outarray,
const Array< OneD, const Array< OneD, NekDouble > > &  pFwd,
const Array< OneD, const Array< OneD, NekDouble > > &  pBwd 
)
overrideprotectedvirtual

Reimplemented from Nektar::CFSImplicit.

Definition at line 102 of file NavierStokesImplicitCFE.cpp.

107{
108 size_t nvariables = inarray.size();
109 size_t npoints = GetNpoints();
110 size_t ncoeffs = GetNcoeffs();
111 size_t nTracePts = GetTraceTotPoints();
112
113 Array<OneD, Array<OneD, NekDouble>> outarrayDiff{nvariables};
114 for (int i = 0; i < nvariables; ++i)
115 {
116 outarrayDiff[i] = Array<OneD, NekDouble>{ncoeffs, 0.0};
117 }
118
119 // Set artificial viscosity based on NS viscous tensor
121 {
122 if (m_varConv->GetFlagCalcDivCurl())
123 {
124 Array<OneD, NekDouble> div(npoints), curlSquare(npoints);
125 GetDivCurlSquared(m_fields, inarray, div, curlSquare, pFwd, pBwd);
126
127 // Set volume and trace artificial viscosity
128 m_varConv->SetAv(m_fields, inarray, div, curlSquare);
129 }
130 else
131 {
132 m_varConv->SetAv(m_fields, inarray);
133 }
134 // set switch to false
135 m_updateShockCaptPhys = false;
136 }
137
138 if (m_is_diffIP)
139 {
140 if (m_bndEvaluateTime < 0.0)
141 {
142 NEKERROR(ErrorUtil::efatal, "m_bndEvaluateTime not setup");
143 }
144 m_diffusion->DiffuseCoeffs(nvariables, m_fields, inarray, outarrayDiff,
145 m_bndEvaluateTime, pFwd, pBwd);
146 for (int i = 0; i < nvariables; ++i)
147 {
148 Vmath::Vadd(ncoeffs, outarrayDiff[i], 1, outarray[i], 1,
149 outarray[i], 1);
150 }
151 }
152 else
153 {
154 ASSERTL1(false, "LDGNS not yet validated for implicit compressible "
155 "flow solver");
156 Array<OneD, Array<OneD, NekDouble>> inarrayDiff{nvariables - 1};
157 Array<OneD, Array<OneD, NekDouble>> inFwd{nvariables - 1};
158 Array<OneD, Array<OneD, NekDouble>> inBwd{nvariables - 1};
159
160 for (int i = 0; i < nvariables - 1; ++i)
161 {
162 inarrayDiff[i] = Array<OneD, NekDouble>{npoints};
163 inFwd[i] = Array<OneD, NekDouble>{nTracePts};
164 inBwd[i] = Array<OneD, NekDouble>{nTracePts};
165 }
166
167 // Extract temperature
168 m_varConv->GetTemperature(inarray, inarrayDiff[nvariables - 2]);
169
170 // Extract velocities
171 m_varConv->GetVelocityVector(inarray, inarrayDiff);
172
173 // Repeat calculation for trace space
174 if (pFwd == NullNekDoubleArrayOfArray ||
176 {
179 }
180 else
181 {
182 m_varConv->GetTemperature(pFwd, inFwd[nvariables - 2]);
183 m_varConv->GetTemperature(pBwd, inBwd[nvariables - 2]);
184
185 m_varConv->GetVelocityVector(pFwd, inFwd);
186 m_varConv->GetVelocityVector(pBwd, inBwd);
187 }
188
189 // Diffusion term in physical rhs form
190 m_diffusion->DiffuseCoeffs(nvariables, m_fields, inarrayDiff,
191 outarrayDiff, inFwd, inBwd);
192
193 for (int i = 0; i < nvariables; ++i)
194 {
195 Vmath::Vadd(ncoeffs, outarrayDiff[i], 1, outarray[i], 1,
196 outarray[i], 1);
197 }
198
199 // Laplacian operator based artificial viscosity
201 {
202 m_artificialDiffusion->DoArtificialDiffusionCoeff(inarray,
203 outarray);
204 }
205 }
206}
ArtificialDiffusionSharedPtr m_artificialDiffusion
void GetDivCurlSquared(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &cnsVar, Array< OneD, NekDouble > &div, Array< OneD, NekDouble > &curlSquare, const Array< OneD, Array< OneD, NekDouble > > &cnsVarFwd, const Array< OneD, Array< OneD, NekDouble > > &cnsVarBwd)
Get divergence and curl squared.
bool m_is_shockCaptPhys
flag for shock capturing switch on/off an enum could be added for more options
SOLVER_UTILS_EXPORT int GetNpoints()
SOLVER_UTILS_EXPORT int GetNcoeffs()
SOLVER_UTILS_EXPORT int GetTraceTotPoints()
static Array< OneD, Array< OneD, NekDouble > > NullNekDoubleArrayOfArray
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
Definition: Vmath.hpp:180

References ASSERTL1, Nektar::ErrorUtil::efatal, Nektar::NavierStokesCFE::GetDivCurlSquared(), Nektar::SolverUtils::EquationSystem::GetNcoeffs(), Nektar::SolverUtils::EquationSystem::GetNpoints(), Nektar::SolverUtils::EquationSystem::GetTraceTotPoints(), Nektar::CompressibleFlowSystem::m_artificialDiffusion, Nektar::CompressibleFlowSystem::m_bndEvaluateTime, Nektar::CompressibleFlowSystem::m_diffusion, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::NavierStokesCFE::m_is_diffIP, Nektar::NavierStokesCFE::m_is_shockCaptPhys, Nektar::CFSImplicit::m_updateShockCaptPhys, Nektar::CompressibleFlowSystem::m_varConv, NEKERROR, Nektar::NullNekDoubleArrayOfArray, and Vmath::Vadd().

◆ v_GetDiffusionFluxJacPoint()

void Nektar::NavierStokesImplicitCFE::v_GetDiffusionFluxJacPoint ( const Array< OneD, NekDouble > &  conservVar,
const Array< OneD, const Array< OneD, NekDouble > > &  conseDeriv,
const NekDouble  mu,
const NekDouble  DmuDT,
const Array< OneD, NekDouble > &  normals,
DNekMatSharedPtr fluxJac 
)
protectedvirtual

Definition at line 1040 of file NavierStokesImplicitCFE.cpp.

1045{
1046 switch (m_spacedim)
1047 {
1048 case 2:
1049 GetdFlux_dU_2D(normals, mu, DmuDT, conservVar, conseDeriv, fluxJac);
1050 break;
1051
1052 case 3:
1053 GetdFlux_dU_3D(normals, mu, DmuDT, conservVar, conseDeriv, fluxJac);
1054 break;
1055
1056 default:
1057 NEKERROR(ErrorUtil::efatal, "v_GetDiffusionFluxJacPoint not coded");
1058 break;
1059 }
1060}
void GetdFlux_dU_2D(const Array< OneD, NekDouble > &normals, const NekDouble mu, const NekDouble dmu_dT, const Array< OneD, NekDouble > &U, const Array< OneD, const Array< OneD, NekDouble > > &qfield, DNekMatSharedPtr &OutputMatrix)
return part of viscous Jacobian Input: normals:Point normals mu: dynamicviscosity dmu_dT: mu's deriva...
void GetdFlux_dU_3D(const Array< OneD, NekDouble > &normals, const NekDouble mu, const NekDouble dmu_dT, const Array< OneD, NekDouble > &U, const Array< OneD, const Array< OneD, NekDouble > > &qfield, DNekMatSharedPtr &OutputMatrix)
return part of viscous Jacobian Input: normals:Point normals mu: dynamicviscosity dmu_dT: mu's deriva...

References Nektar::ErrorUtil::efatal, GetdFlux_dU_2D(), GetdFlux_dU_3D(), Nektar::SolverUtils::EquationSystem::m_spacedim, and NEKERROR.

Referenced by v_MinusDiffusionFluxJacPoint().

◆ v_GetFluxDerivJacDirctn() [1/2]

void Nektar::NavierStokesImplicitCFE::v_GetFluxDerivJacDirctn ( const MultiRegions::ExpListSharedPtr explist,
const Array< OneD, const Array< OneD, NekDouble > > &  normals,
const int  nDervDir,
const Array< OneD, const Array< OneD, NekDouble > > &  inarray,
Array< OneD, Array< OneD, DNekMatSharedPtr > > &  ElmtJac 
)
overrideprotectedvirtual

Reimplemented from Nektar::CFSImplicit.

Definition at line 1184 of file NavierStokesImplicitCFE.cpp.

1190{
1191 int nConvectiveFields = inarray.size();
1192 std::shared_ptr<LocalRegions::ExpansionVector> expvect = explist->GetExp();
1193 int nTotElmt = (*expvect).size();
1194 int nPts = explist->GetTotPoints();
1195 int nSpaceDim = m_graph->GetSpaceDimension();
1196
1197 // Debug
1198 if (!ElmtJac.size())
1199 {
1200 ElmtJac = Array<OneD, Array<OneD, DNekMatSharedPtr>>(nTotElmt);
1201 for (int nelmt = 0; nelmt < nTotElmt; nelmt++)
1202 {
1203 int nElmtPnt = (*expvect)[nelmt]->GetTotPoints();
1204 ElmtJac[nelmt] = Array<OneD, DNekMatSharedPtr>(nElmtPnt);
1205 for (int npnt = 0; npnt < nElmtPnt; npnt++)
1206 {
1207 ElmtJac[nelmt][npnt] =
1209 nConvectiveFields, nConvectiveFields);
1210 }
1211 }
1212 }
1213
1214 // Auxiliary variables
1215 Array<OneD, NekDouble> mu(nPts, 0.0);
1216 Array<OneD, NekDouble> thermalConductivity(nPts, 0.0);
1217 Array<OneD, NekDouble> temperature(nPts, 0.0);
1218 m_varConv->GetTemperature(inarray, temperature);
1219 GetViscosityAndThermalCondFromTemp(temperature, mu, thermalConductivity);
1220
1221 // What about thermal conductivity?
1222
1223 NekDouble pointmu = 0.0;
1225 Array<OneD, NekDouble> pointVar(nConvectiveFields, 0.0);
1226 Array<OneD, Array<OneD, NekDouble>> locVars(nConvectiveFields);
1227 Array<OneD, NekDouble> pointnormals(nSpaceDim, 0.0);
1228 Array<OneD, Array<OneD, NekDouble>> locnormal(nSpaceDim);
1229
1231 nConvectiveFields - 1, nConvectiveFields);
1232 Array<OneD, NekDouble> tmpMatinnData, tmpMatoutData;
1233 Array<OneD, NekDouble> tmp1, tmp2;
1234
1235 for (int nelmt = 0; nelmt < nTotElmt; nelmt++)
1236 {
1237 int nElmtPnt = (*expvect)[nelmt]->GetTotPoints();
1238 int noffest = explist->GetPhys_Offset(nelmt);
1239
1240 for (int j = 0; j < nConvectiveFields; j++)
1241 {
1242 locVars[j] = inarray[j] + noffest;
1243 }
1244
1245 for (int j = 0; j < nSpaceDim; j++)
1246 {
1247 locnormal[j] = normals[j] + noffest;
1248 }
1249
1250 locmu = mu + noffest;
1251 for (int npnt = 0; npnt < nElmtPnt; npnt++)
1252 {
1253 for (int j = 0; j < nConvectiveFields; j++)
1254 {
1255 pointVar[j] = locVars[j][npnt];
1256 }
1257 for (int j = 0; j < nSpaceDim; j++)
1258 {
1259 pointnormals[j] = locnormal[j][npnt];
1260 }
1261
1262 pointmu = locmu[npnt];
1263
1264 m_GetdFlux_dDeriv_Array[nDervDir](pointnormals, pointmu, pointVar,
1265 PointFJac);
1266 tmpMatinnData = PointFJac->GetPtr();
1267 tmpMatoutData = ElmtJac[nelmt][npnt]->GetPtr();
1268
1269 Vmath::Fill(nConvectiveFields, 0.0, tmpMatoutData,
1270 nConvectiveFields);
1271 for (int j = 0; j < nConvectiveFields; j++)
1272 {
1274 nConvectiveFields - 1,
1275 tmp1 = tmpMatinnData + (j * (nConvectiveFields - 1)), 1,
1276 tmp2 = tmpMatoutData + (1 + j * nConvectiveFields), 1);
1277 }
1278 }
1279 }
1280}
Array< OneD, GetdFlux_dDeriv > m_GetdFlux_dDeriv_Array
SpatialDomains::MeshGraphSharedPtr m_graph
Pointer to graph defining mesh.
std::shared_ptr< DNekMat > DNekMatSharedPtr
Definition: NekTypeDefs.hpp:75
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
Definition: Vmath.hpp:54
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.hpp:825

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Vmath::Fill(), Nektar::NavierStokesCFE::GetViscosityAndThermalCondFromTemp(), m_GetdFlux_dDeriv_Array, Nektar::SolverUtils::EquationSystem::m_graph, Nektar::CompressibleFlowSystem::m_varConv, and Vmath::Vcopy().

◆ v_GetFluxDerivJacDirctn() [2/2]

void Nektar::NavierStokesImplicitCFE::v_GetFluxDerivJacDirctn ( const MultiRegions::ExpListSharedPtr explist,
const Array< OneD, const Array< OneD, NekDouble > > &  normals,
const int  nDervDir,
const Array< OneD, const Array< OneD, NekDouble > > &  inarray,
TensorOfArray5D< NekDouble > &  ElmtJacArray,
const int  nFluxDir 
)
overrideprotectedvirtual

Reimplemented from Nektar::CFSImplicit.

Definition at line 1062 of file NavierStokesImplicitCFE.cpp.

1068{
1069 int nConvectiveFields = inarray.size();
1070 std::shared_ptr<LocalRegions::ExpansionVector> expvect = explist->GetExp();
1071 int nTotElmt = (*expvect).size();
1072 int nPts = explist->GetTotPoints();
1073 int nSpaceDim = m_graph->GetSpaceDimension();
1074
1075 // Auxiliary variables
1076 Array<OneD, NekDouble> mu(nPts, 0.0);
1077 Array<OneD, NekDouble> thermalConductivity(nPts, 0.0);
1078 Array<OneD, NekDouble> temperature(nPts, 0.0);
1079 m_varConv->GetTemperature(inarray, temperature);
1080 GetViscosityAndThermalCondFromTemp(temperature, mu, thermalConductivity);
1081
1082 NekDouble pointmu = 0.0;
1084 Array<OneD, NekDouble> pointVar(nConvectiveFields, 0.0);
1085 Array<OneD, Array<OneD, NekDouble>> locVars(nConvectiveFields);
1086 Array<OneD, NekDouble> pointnormals(nSpaceDim, 0.0);
1087 Array<OneD, Array<OneD, NekDouble>> locnormal(nSpaceDim);
1088
1090 nConvectiveFields - 1, nConvectiveFields);
1091 Array<OneD, NekDouble> PointFJac_data = PointFJac->GetPtr();
1092
1093 for (int nelmt = 0; nelmt < nTotElmt; nelmt++)
1094 {
1095 int nElmtPnt = (*expvect)[nelmt]->GetTotPoints();
1096 int noffest = explist->GetPhys_Offset(nelmt);
1097
1098 for (int j = 0; j < nConvectiveFields; j++)
1099 {
1100 locVars[j] = inarray[j] + noffest;
1101 }
1102
1103 for (int j = 0; j < nSpaceDim; j++)
1104 {
1105 locnormal[j] = normals[j] + noffest;
1106 }
1107
1108 locmu = mu + noffest;
1109 for (int npnt = 0; npnt < nElmtPnt; npnt++)
1110 {
1111 for (int j = 0; j < nConvectiveFields; j++)
1112 {
1113 pointVar[j] = locVars[j][npnt];
1114 }
1115 for (int j = 0; j < nSpaceDim; j++)
1116 {
1117 pointnormals[j] = locnormal[j][npnt];
1118 }
1119
1120 pointmu = locmu[npnt];
1121
1122 m_GetdFlux_dDeriv_Array[nDervDir](pointnormals, pointmu, pointVar,
1123 PointFJac);
1124 for (int j = 0; j < nConvectiveFields; j++)
1125 {
1126 ElmtJacArray[0][j][nFluxDir][nelmt][npnt] = 0.0;
1127 }
1128 for (int j = 0; j < nConvectiveFields; j++)
1129 {
1130 int noffset = j * (nConvectiveFields - 1);
1131 for (int i = 0; i < nConvectiveFields - 1; i++)
1132 {
1133 ElmtJacArray[i + 1][j][nFluxDir][nelmt][npnt] =
1134 PointFJac_data[noffset + i];
1135 }
1136 }
1137 }
1138 }
1139}

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::NavierStokesCFE::GetViscosityAndThermalCondFromTemp(), m_GetdFlux_dDeriv_Array, Nektar::SolverUtils::EquationSystem::m_graph, and Nektar::CompressibleFlowSystem::m_varConv.

◆ v_GetFluxDerivJacDirctnElmt()

void Nektar::NavierStokesImplicitCFE::v_GetFluxDerivJacDirctnElmt ( const int  nConvectiveFields,
const int  nElmtPnt,
const int  nDervDir,
const Array< OneD, const Array< OneD, NekDouble > > &  locVars,
const Array< OneD, NekDouble > &  locmu,
const Array< OneD, const Array< OneD, NekDouble > > &  locnormal,
DNekMatSharedPtr wspMat,
Array< OneD, Array< OneD, NekDouble > > &  PntJacArray 
)
overrideprotectedvirtual

Reimplemented from Nektar::CFSImplicit.

Definition at line 1141 of file NavierStokesImplicitCFE.cpp.

1147{
1148 int nSpaceDim = m_graph->GetSpaceDimension();
1149
1150 NekDouble pointmu = 0.0;
1151 Array<OneD, NekDouble> pointVar(nConvectiveFields, 0.0);
1152 Array<OneD, NekDouble> pointnormals(nSpaceDim, 0.0);
1153
1154 Array<OneD, NekDouble> wspMatData = wspMat->GetPtr();
1155
1158
1159 for (int npnt = 0; npnt < nElmtPnt; npnt++)
1160 {
1161 for (int j = 0; j < nConvectiveFields; j++)
1162 {
1163 pointVar[j] = locVars[j][npnt];
1164 }
1165 for (int j = 0; j < nSpaceDim; j++)
1166 {
1167 pointnormals[j] = locnormal[j][npnt];
1168 }
1169
1170 pointmu = locmu[npnt];
1171
1172 m_GetdFlux_dDeriv_Array[nDervDir](pointnormals, pointmu, pointVar,
1173 wspMat);
1174 Vmath::Zero(nConvectiveFields, PntJacArray[npnt], nConvectiveFields);
1175 for (int j = 0; j < nConvectiveFields; j++)
1176 {
1177 int noffset = j * (nConvectiveFields - 1);
1178 Vmath::Vcopy((nConvectiveFields - 1), tmp1 = wspMatData + noffset,
1179 1, tmp2 = PntJacArray[npnt] + noffset + j + 1, 1);
1180 }
1181 }
1182}

References m_GetdFlux_dDeriv_Array, Nektar::SolverUtils::EquationSystem::m_graph, Vmath::Vcopy(), and Vmath::Zero().

◆ v_InitObject()

void Nektar::NavierStokesImplicitCFE::v_InitObject ( bool  DeclareFields = true)
overrideprotectedvirtual

Initialization object for CompressibleFlowSystem class.

Reimplemented from Nektar::CFSImplicit.

Definition at line 57 of file NavierStokesImplicitCFE.cpp.

58{
59 CFSImplicit::v_InitObject(DeclareFields);
60
62
64 switch (m_spacedim)
65 {
66 case 2:
67 /* code */
70 std::placeholders::_1, std::placeholders::_2,
71 std::placeholders::_3, std::placeholders::_4);
72
75 std::placeholders::_1, std::placeholders::_2,
76 std::placeholders::_3, std::placeholders::_4);
77 break;
78 case 3:
79 /* code */
82 std::placeholders::_1, std::placeholders::_2,
83 std::placeholders::_3, std::placeholders::_4);
84
87 std::placeholders::_1, std::placeholders::_2,
88 std::placeholders::_3, std::placeholders::_4);
91 std::placeholders::_1, std::placeholders::_2,
92 std::placeholders::_3, std::placeholders::_4);
93
94 break;
95
96 default:
97
98 break;
99 }
100}
void v_InitObject(bool DeclareFields=true) override
Initialization object for CFSImplicit class.
void GetdFlux_dQx_3D(const Array< OneD, NekDouble > &normals, const NekDouble &mu, const Array< OneD, NekDouble > &U, DNekMatSharedPtr &OutputMatrix)
return part of viscous Jacobian derived with Qx=[drho_dx,drhou_dx,drhov_dx,drhow_dx,...
void GetdFlux_dQx_2D(const Array< OneD, NekDouble > &normals, const NekDouble &mu, const Array< OneD, NekDouble > &U, DNekMatSharedPtr &OutputMatrix)
return part of viscous Jacobian:
void GetdFlux_dQy_3D(const Array< OneD, NekDouble > &normals, const NekDouble &mu, const Array< OneD, NekDouble > &U, DNekMatSharedPtr &OutputMatrix)
return part of viscous Jacobian derived with Qy=[drho_dy,drhou_dy,drhov_dy,drhow_dy,...
void GetdFlux_dQz_3D(const Array< OneD, NekDouble > &normals, const NekDouble &mu, const Array< OneD, NekDouble > &U, DNekMatSharedPtr &OutputMatrix)
return part of viscous Jacobian derived with Qz=[drho_dz,drhou_dz,drhov_dz,drhow_dz,...
void GetdFlux_dQy_2D(const Array< OneD, NekDouble > &normals, const NekDouble &mu, const Array< OneD, NekDouble > &U, DNekMatSharedPtr &OutputMatrix)
return part of viscous Jacobian:

References GetdFlux_dQx_2D(), GetdFlux_dQx_3D(), GetdFlux_dQy_2D(), GetdFlux_dQy_3D(), GetdFlux_dQz_3D(), Nektar::NavierStokesCFE::InitObject_Explicit(), m_GetdFlux_dDeriv_Array, Nektar::SolverUtils::EquationSystem::m_spacedim, and Nektar::CFSImplicit::v_InitObject().

◆ v_MinusDiffusionFluxJacPoint()

void Nektar::NavierStokesImplicitCFE::v_MinusDiffusionFluxJacPoint ( const int  nConvectiveFields,
const int  nElmtPnt,
const Array< OneD, const Array< OneD, NekDouble > > &  locVars,
const TensorOfArray3D< NekDouble > &  locDerv,
const Array< OneD, NekDouble > &  locmu,
const Array< OneD, NekDouble > &  locDmuDT,
const Array< OneD, NekDouble > &  normals,
DNekMatSharedPtr wspMat,
Array< OneD, Array< OneD, NekDouble > > &  PntJacArray 
)
overrideprotectedvirtual

Reimplemented from Nektar::CFSImplicit.

Definition at line 985 of file NavierStokesImplicitCFE.cpp.

992{
993 int nSpaceDim = m_graph->GetSpaceDimension();
994
995 NekDouble pointmu = 0.0;
996 NekDouble pointDmuDT = 0.0;
997 Array<OneD, NekDouble> pointVar(nConvectiveFields, 0.0);
998 Array<OneD, Array<OneD, NekDouble>> pointDerv(nSpaceDim);
999 for (int j = 0; j < nSpaceDim; j++)
1000 {
1001 pointDerv[j] = Array<OneD, NekDouble>(nConvectiveFields, 0.0);
1002 }
1003
1004 Array<OneD, NekDouble> wspMatData = wspMat->GetPtr();
1008
1009 for (int npnt = 0; npnt < nElmtPnt; npnt++)
1010 {
1011 for (int j = 0; j < nConvectiveFields; j++)
1012 {
1013 pointVar[j] = locVars[j][npnt];
1014 }
1015 for (int j = 0; j < nSpaceDim; j++)
1016 {
1017 for (int k = 0; k < nConvectiveFields; k++)
1018 {
1019 pointDerv[j][k] = locDerv[j][k][npnt];
1020 }
1021 }
1022
1023 pointmu = locmu[npnt];
1024 pointDmuDT = locDmuDT[npnt];
1025
1026 v_GetDiffusionFluxJacPoint(pointVar, pointDerv, pointmu, pointDmuDT,
1027 normals, wspMat);
1028 for (int j = 0; j < nConvectiveFields; j++)
1029 {
1030 int noffset = j * nConvectiveFields;
1031
1032 Vmath::Vsub(nConvectiveFields - 1,
1033 tmp1 = PntJacArray[npnt] + (noffset + 1), 1,
1034 tmp2 = wspMatData + (noffset - j), 1,
1035 tmp3 = PntJacArray[npnt] + (noffset + 1), 1);
1036 }
1037 }
1038}
virtual void v_GetDiffusionFluxJacPoint(const Array< OneD, NekDouble > &conservVar, const Array< OneD, const Array< OneD, NekDouble > > &conseDeriv, const NekDouble mu, const NekDouble DmuDT, const Array< OneD, NekDouble > &normals, DNekMatSharedPtr &fluxJac)
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y.
Definition: Vmath.hpp:220

References Nektar::SolverUtils::EquationSystem::m_graph, v_GetDiffusionFluxJacPoint(), and Vmath::Vsub().

◆ v_SupportsShockCaptType()

bool Nektar::NavierStokesImplicitCFE::v_SupportsShockCaptType ( const std::string  type) const
finalprotectedvirtual

Reimplemented from Nektar::NavierStokesCFE.

Definition at line 1353 of file NavierStokesImplicitCFE.cpp.

1355{
1356 if (type == "Physical" || type == "Off")
1357 {
1358 return true;
1359 }
1360 else
1361 {
1362 return false;
1363 }
1364}

Friends And Related Function Documentation

◆ MemoryManager< NavierStokesImplicitCFE >

friend class MemoryManager< NavierStokesImplicitCFE >
friend

Definition at line 1 of file NavierStokesImplicitCFE.h.

Member Data Documentation

◆ className

std::string Nektar::NavierStokesImplicitCFE::className
static
Initial value:
=
"NavierStokesImplicitCFE", NavierStokesImplicitCFE::create,
"NavierStokes equations in conservative variables.")
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
static SolverUtils::EquationSystemSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
EquationSystemFactory & GetEquationSystemFactory()

Definition at line 69 of file NavierStokesImplicitCFE.h.

◆ m_GetdFlux_dDeriv_Array

Array<OneD, GetdFlux_dDeriv> Nektar::NavierStokesImplicitCFE::m_GetdFlux_dDeriv_Array
protected