Nektar++
Public Types | Public Member Functions | 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
 

Public Member Functions

virtual ~NavierStokesImplicitCFE ()
 
- Public Member Functions inherited from Nektar::NavierStokesCFE
virtual ~NavierStokesCFE ()
 
- Public Member Functions inherited from Nektar::CompressibleFlowSystem
virtual ~CompressibleFlowSystem ()
 Destructor for CompressibleFlowSystem class. More...
 
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...
 
virtual void v_GetPressure (const Array< OneD, const Array< OneD, NekDouble >> &physfield, Array< OneD, NekDouble > &pressure) override
 
virtual void v_GetDensity (const Array< OneD, const Array< OneD, NekDouble >> &physfield, Array< OneD, NekDouble > &density) override
 
virtual bool v_HasConstantDensity () override
 
virtual void v_GetVelocity (const Array< OneD, const Array< OneD, NekDouble >> &physfield, Array< OneD, Array< OneD, NekDouble >> &velocity) override
 
- Public Member Functions inherited from Nektar::SolverUtils::AdvectionSystem
SOLVER_UTILS_EXPORT AdvectionSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
virtual SOLVER_UTILS_EXPORT ~AdvectionSystem ()
 
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
virtual SOLVER_UTILS_EXPORT ~UnsteadySystem ()
 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 void SteadyStateResidual (int step, Array< OneD, NekDouble > &L2)
 
- Public Member Functions inherited from Nektar::SolverUtils::EquationSystem
virtual SOLVER_UTILS_EXPORT ~EquationSystem ()
 Destructor. More...
 
SOLVER_UTILS_EXPORT void SetUpTraceNormals (void)
 
SOLVER_UTILS_EXPORT void InitObject (bool DeclareField=true)
 Initialises the members of this object. More...
 
SOLVER_UTILS_EXPORT void DoInitialise ()
 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 NekDouble LinfError (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray)
 Linf error computation. 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 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 GetFinalTime ()
 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 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 void SetSteps (const int steps)
 
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 int GetPararealIterationNumber ()
 
SOLVER_UTILS_EXPORT void SetPararealIterationNumber (int num)
 
SOLVER_UTILS_EXPORT bool GetUseInitialCondition ()
 
SOLVER_UTILS_EXPORT void SetUseInitialCondition (bool 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...
 
virtual SOLVER_UTILS_EXPORT bool v_NegatedOp ()
 Virtual function to identify if operator is negated in DoSolve. More...
 
SOLVER_UTILS_EXPORT bool ParallelInTime ()
 Check if solver use Parallel-in-Time. More...
 
- 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)
 
SOLVER_UTILS_EXPORT void GetMovingFrameVelocities (Array< OneD, NekDouble > &vFrameVels)
 
SOLVER_UTILS_EXPORT void SetMovingFrameProjectionMat (const boost::numeric::ublas::matrix< NekDouble > &vProjMat)
 
SOLVER_UTILS_EXPORT void GetMovingFrameProjectionMat (boost::numeric::ublas::matrix< NekDouble > &vProjMat)
 
SOLVER_UTILS_EXPORT void SetMovingFrameAngles (const Array< OneD, NekDouble > &vFrameTheta)
 
SOLVER_UTILS_EXPORT void GetMovingFrameAngles (Array< OneD, NekDouble > &vFrameTheta)
 
- Public Member Functions inherited from Nektar::CFSImplicit
 CFSImplicit (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
virtual ~CFSImplicit ()
 Destructor for CFSImplicit class. More...
 
void InitialiseNonlinSysSolver ()
 
void NonlinSysEvaluatorCoeff1D (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out, const bool &flag)
 
void NonlinSysEvaluatorCoeff (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out, const bool &flag=true, const Array< OneD, const NekDouble > &source=NullNekDouble1DArray)
 
void NonlinSysEvaluatorCoeff (const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &out, const Array< OneD, const Array< OneD, NekDouble >> &source=NullNekDoubleArrayOfArray)
 
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 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 CalcRefValues (const Array< OneD, const NekDouble > &inarray)
 

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)
 
virtual void v_InitObject (bool DeclareFields=true) override
 Initialization object for CompressibleFlowSystem class. More...
 
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) 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) override final
 
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) override
 
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) override
 
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) override
 
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) 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)
 
virtual void v_CalcPhysDeriv (const Array< OneD, const Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield) override
 
virtual 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...
 
virtual bool v_SupportsShockCaptType (const std::string type) const override final
 
- Protected Member Functions inherited from Nektar::NavierStokesCFE
 NavierStokesCFE (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
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 ()
 
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...
 
virtual 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<T>::value || tinysimd::is_vector_floating_point<T>::value>::type>
void GetViscosityAndThermalCondFromTempKernel (const T &temperature, T &mu, T &thermalCond)
 
template<class T , typename = typename std::enable_if< std::is_floating_point<T>::value || tinysimd::is_vector_floating_point<T>::value>::type>
void GetViscosityFromTempKernel (const T &temperature, T &mu)
 
template<class T , typename = typename std::enable_if< std::is_floating_point<T>::value || tinysimd::is_vector_floating_point<T>::value>::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...
 
- Protected Member Functions inherited from Nektar::CompressibleFlowSystem
 CompressibleFlowSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
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...
 
virtual NekDouble v_GetTimeStep (const Array< OneD, const Array< OneD, NekDouble >> &inarray) override
 Calculate the maximum timestep subject to CFL restrictions. More...
 
virtual void v_SetInitialConditions (NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0) override
 Set up logic for residual calculation. More...
 
NekDouble GetGamma ()
 
const Array< OneD, const Array< OneD, NekDouble > > & GetVecLocs ()
 
const Array< OneD, const Array< OneD, NekDouble > > & GetNormals ()
 
virtual MultiRegions::ExpListSharedPtr v_GetPressure () override
 
virtual Array< OneD, NekDoublev_GetMaxStdVelocity (const NekDouble SpeedSoundFactor) override
 Compute the advection velocity in the standard space for each element of the expansion. More...
 
virtual void v_SteadyStateResidual (int step, Array< OneD, NekDouble > &L2) override
 
- Protected Member Functions inherited from Nektar::SolverUtils::AdvectionSystem
virtual SOLVER_UTILS_EXPORT bool v_PostIntegrate (int step) override
 
- 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 NekDouble MaxTimeStepEstimator ()
 Get the maximum timestep estimator for cfl control. More...
 
virtual SOLVER_UTILS_EXPORT void v_DoSolve () override
 Solves an unsteady problem. More...
 
virtual SOLVER_UTILS_EXPORT void v_DoInitialise () override
 Sets up initial conditions. More...
 
virtual SOLVER_UTILS_EXPORT void v_GenerateSummary (SummaryList &s) override
 Print a summary of time stepping parameters. More...
 
virtual SOLVER_UTILS_EXPORT bool v_PreIntegrate (int step)
 
virtual SOLVER_UTILS_EXPORT bool v_RequireFwdTrans ()
 
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 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 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_EvaluateExactSolution (unsigned int field, Array< OneD, NekDouble > &outfield, const NekDouble time)
 
virtual SOLVER_UTILS_EXPORT void v_Output (void)
 
- Protected Member Functions inherited from Nektar::SolverUtils::FluidInterface
virtual SOLVER_UTILS_EXPORT void v_SetMovingFrameVelocities (const Array< OneD, NekDouble > &vFrameVels)
 
virtual SOLVER_UTILS_EXPORT void v_GetMovingFrameVelocities (Array< OneD, NekDouble > &vFrameVels)
 
virtual SOLVER_UTILS_EXPORT void v_SetMovingFrameProjectionMat (const boost::numeric::ublas::matrix< NekDouble > &vProjMat)
 
virtual SOLVER_UTILS_EXPORT void v_GetMovingFrameProjectionMat (boost::numeric::ublas::matrix< NekDouble > &vProjMat)
 
virtual SOLVER_UTILS_EXPORT void v_SetMovingFrameAngles (const Array< OneD, NekDouble > &vFrameTheta)
 
virtual SOLVER_UTILS_EXPORT void v_GetMovingFrameAngles (Array< OneD, NekDouble > &vFrameTheta)
 
- Protected Member Functions inherited from Nektar::CFSImplicit
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, const Array< OneD, TypeNekBlkMatSharedPtr > &TraceJacDeriv, TensorOfArray4D< DataType > &TraceJacArray, 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, const DataType tmpDataType)
 
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 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 MatrixMultiplyMatrixFreeCoeff (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out, const bool &flag=false)
 
void CalcMuDmuDT (const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, NekDouble > &mu, Array< OneD, NekDouble > &DmuDT)
 
virtual 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
int m_abortSteps
 Number of steps between checks for abort conditions. More...
 
int m_filtersInfosteps
 Number of time steps between outputting filters information. More...
 
int m_nanSteps
 
LibUtilities::TimeIntegrationSchemeSharedPtr m_intScheme
 Wrapper to the time integration scheme. More...
 
LibUtilities::TimeIntegrationSchemeOperators m_ode
 The time integration scheme operators to use. More...
 
NekDouble m_epsilon
 
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...
 
bool m_homoInitialFwd
 Flag to determine if simulation should start in homogeneous forward transformed state. More...
 
NekDouble m_steadyStateTol
 Tolerance to which steady state should be evaluated at. More...
 
int m_steadyStateSteps
 Check for steady state at step interval. More...
 
NekDouble m_steadyStateRes = 1.0
 
NekDouble m_steadyStateRes0 = 1.0
 
Array< OneD, Array< OneD, NekDouble > > m_previousSolution
 Storage for previous solution for steady-state check. More...
 
std::ofstream m_errFile
 
std::vector< int > m_intVariables
 
std::vector< std::pair< std::string, FilterSharedPtr > > m_filters
 
NekDouble m_filterTimeWarning
 Number of time steps between outputting status information. More...
 
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...
 
bool m_flagImplicitItsStatistics
 
bool m_flagImplicitSolver = false
 
Array< OneD, NekDoublem_magnitdEstimat
 estimate the magnitude of each conserved varibles More...
 
Array< OneD, NekDoublem_locTimeStep
 local time step(notice only for jfnk other see m_cflSafetyFactor) More...
 
NekDouble m_inArrayNorm = -1.0
 
int m_TotLinItePerStep = 0
 
int m_StagesPerStep = 1
 
bool m_flagUpdatePreconMat
 
int m_maxLinItePerNewton
 
int m_TotNewtonIts = 0
 
int m_TotLinIts = 0
 
int m_TotImpStages = 0
 
bool m_CalcPhysicalAV = true
 flag to update artificial viscosity 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_timestepMax = -1.0
 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_pararealIter
 Number of parareal 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_useInitialCondition
 Flag to determine if IC are used. 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_movingFrameVelsxyz
 Moving frame of reference velocities. More...
 
Array< OneD, NekDoublem_movingFrameTheta
 Moving frame of reference angles with respect to the. More...
 
boost::numeric::ublas::matrix< NekDoublem_movingFrameProjMat
 Projection matrix for transformation between inertial and moving. 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::CFSImplicit
bool m_viscousJacFlag
 
bool m_advectionJacFlag
 
int m_nPadding = 1
 
Array< OneD, Array< OneD, NekDouble > > m_solutionPhys
 
NekDouble m_jacobiFreeEps
 
NekDouble m_newtonAbsoluteIteTol
 
TensorOfArray4D< NekSinglem_stdSMatDataDBB
 
TensorOfArray5D< NekSinglem_stdSMatDataDBDB
 
LibUtilities::NekNonlinSysSharedPtr m_nonlinsol
 
PreconCfsOpSharedPtr m_preconCfs
 
bool m_updateShockCaptPhys {true}
 

Friends

class MemoryManager< NavierStokesImplicitCFE >
 

Additional Inherited Members

- Public Attributes inherited from Nektar::SolverUtils::UnsteadySystem
NekDouble m_cflSafetyFactor
 CFL safety factor (comprise between 0 to 1). More...
 
NekDouble m_cflNonAcoustic
 
NekDouble m_CFLGrowth
 CFL growth rate. More...
 
NekDouble m_CFLEnd
 maximun cfl in cfl growth More...
 
- 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 []
 

Detailed Description

Definition at line 50 of file NavierStokesImplicitCFE.h.

Member Typedef Documentation

◆ GetdFlux_dDeriv

Definition at line 75 of file NavierStokesImplicitCFE.h.

Constructor & Destructor Documentation

◆ ~NavierStokesImplicitCFE()

Nektar::NavierStokesImplicitCFE::~NavierStokesImplicitCFE ( )
virtual

Definition at line 55 of file NavierStokesImplicitCFE.cpp.

56 {
57 }

◆ NavierStokesImplicitCFE()

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

Definition at line 46 of file NavierStokesImplicitCFE.cpp.

49  : UnsteadySystem(pSession, pGraph),
50  CompressibleFlowSystem(pSession, pGraph),
51  NavierStokesCFE(pSession, pGraph), CFSImplicit(pSession, pGraph)
52 {
53 }
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.

Member Function Documentation

◆ create()

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

Definition at line 57 of file NavierStokesImplicitCFE.h.

60  {
63  pGraph);
64  p->InitObject();
65  return p;
66  }
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 226 of file NavierStokesImplicitCFE.cpp.

229 {
230  NekDouble nx = normals[0];
231  NekDouble ny = normals[1];
232  NekDouble rho = U[0];
233  NekDouble orho = 1.0 / rho;
234  NekDouble u = U[1] * orho;
235  NekDouble v = U[2] * orho;
236  NekDouble E = U[3] * orho;
237  NekDouble q2 = u * u + v * v;
238  NekDouble gamma = m_gamma;
239  // q_x=-kappa*dT_dx;
240  NekDouble Pr = m_Prandtl;
241  NekDouble oPr = 1.0 / Pr;
242  // To notice, here is positive, which is consistent with
243  //"SYMMETRIC INTERIOR PENALTY DG METHODS FOR THE COMPRESSIBLE
244  // NAVIER-STOKES EQUATIONS"
245  // But opposite to "I Do like CFD"
246  NekDouble tmp = mu * orho;
247  NekDouble tmp2 = gamma * oPr;
248  NekDouble OneThird, TwoThird, FourThird;
249  OneThird = 1.0 / 3.0;
250  TwoThird = 2.0 * OneThird;
251  FourThird = 4.0 * OneThird;
252 
253  Array<OneD, NekDouble> tmpArray;
254  tmpArray = OutputMatrix->GetPtr();
255  int nrow = OutputMatrix->GetRows();
256 
257  tmpArray[0 + 0 * nrow] = tmp * (-FourThird * u * nx - v * ny);
258  tmpArray[0 + 1 * nrow] = tmp * (FourThird * nx);
259  tmpArray[0 + 2 * nrow] = tmp * ny;
260  tmpArray[0 + 3 * nrow] = 0.0;
261  tmpArray[1 + 0 * nrow] = tmp * (-v * nx + TwoThird * u * ny);
262  tmpArray[1 + 1 * nrow] = tmp * (-TwoThird * ny);
263  tmpArray[1 + 2 * nrow] = tmp * nx;
264  tmpArray[1 + 3 * nrow] = 0.0;
265  tmpArray[2 + 0 * nrow] =
266  (FourThird * u * u + v * v + tmp2 * (E - q2)) * nx +
267  OneThird * u * v * ny;
268  tmpArray[2 + 0 * nrow] = -tmp * (*OutputMatrix)(2, 0);
269  tmpArray[2 + 1 * nrow] = (FourThird - tmp2) * u * nx - TwoThird * v * ny;
270  tmpArray[2 + 1 * nrow] = tmp * (*OutputMatrix)(2, 1);
271  tmpArray[2 + 2 * nrow] = (1 - tmp2) * v * nx + u * ny;
272  tmpArray[2 + 2 * nrow] = tmp * (*OutputMatrix)(2, 2);
273  tmpArray[2 + 3 * nrow] = tmp * tmp2 * nx;
274 }
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 344 of file NavierStokesImplicitCFE.cpp.

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

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

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 284 of file NavierStokesImplicitCFE.cpp.

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

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 417 of file NavierStokesImplicitCFE.cpp.

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

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

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 492 of file NavierStokesImplicitCFE.cpp.

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

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

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 564 of file NavierStokesImplicitCFE.cpp.

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

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 732 of file NavierStokesImplicitCFE.cpp.

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

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

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 1315 of file NavierStokesImplicitCFE.cpp.

1318 {
1319  int nPts = mu.size();
1320 
1321  Array<OneD, NekDouble> thermalConductivity(nPts, 0.0);
1322  Array<OneD, NekDouble> temperature(nPts, 0.0);
1323  m_varConv->GetTemperature(inarray, temperature);
1324  GetViscosityAndThermalCondFromTemp(temperature, mu, thermalConductivity);
1325 
1326  if (m_ViscosityType == "Variable")
1327  {
1328  if (DmuDT.size() > 0)
1329  {
1330  m_varConv->GetDmuDT(temperature, mu, DmuDT);
1331  }
1332  }
1333  else
1334  {
1335  if (DmuDT.size() > 0)
1336  {
1337  Vmath::Zero(nPts, DmuDT, 1);
1338  }
1339  }
1340 }
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.cpp:492

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 1292 of file NavierStokesImplicitCFE.cpp.

1295 {
1296  int nConvectiveFields = m_fields.size();
1297  int npoints = GetTotPoints();
1300  if (!qfield.size())
1301  {
1303  for (int i = 0; i < m_spacedim; i++)
1304  {
1305  qfield[i] = Array<OneD, Array<OneD, NekDouble>>(nConvectiveFields);
1306  for (int j = 0; j < nConvectiveFields; j++)
1307  {
1308  qfield[i][j] = Array<OneD, NekDouble>(npoints, 0.0);
1309  }
1310  }
1311  }
1312  m_diffusion->DiffuseCalcDerivative(m_fields, inarray, qfield, pFwd, pBwd);
1313 }
SolverUtils::DiffusionSharedPtr m_diffusion
int m_spacedim
Spatial dimension (>= expansion dim).
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
SOLVER_UTILS_EXPORT int GetTotPoints()

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

◆ v_DoDiffusion()

virtual 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 
)
inlinefinaloverrideprotectedvirtual

Reimplemented from Nektar::NavierStokesCFE.

Definition at line 92 of file NavierStokesImplicitCFE.h.

97  {
98  boost::ignore_unused(inarray, outarray, pFwd, pBwd);
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:209

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 107 of file NavierStokesImplicitCFE.cpp.

112 {
113  size_t nvariables = inarray.size();
114  size_t npoints = GetNpoints();
115  size_t ncoeffs = GetNcoeffs();
116  size_t nTracePts = GetTraceTotPoints();
117 
118  Array<OneD, Array<OneD, NekDouble>> outarrayDiff{nvariables};
119  for (int i = 0; i < nvariables; ++i)
120  {
121  outarrayDiff[i] = Array<OneD, NekDouble>{ncoeffs, 0.0};
122  }
123 
124  // Set artificial viscosity based on NS viscous tensor
126  {
127  if (m_varConv->GetFlagCalcDivCurl())
128  {
129  Array<OneD, NekDouble> div(npoints), curlSquare(npoints);
130  GetDivCurlSquared(m_fields, inarray, div, curlSquare, pFwd, pBwd);
131 
132  // Set volume and trace artificial viscosity
133  m_varConv->SetAv(m_fields, inarray, div, curlSquare);
134  }
135  else
136  {
137  m_varConv->SetAv(m_fields, inarray);
138  }
139  // set switch to false
140  m_updateShockCaptPhys = false;
141  }
142 
143  if (m_is_diffIP)
144  {
145  if (m_bndEvaluateTime < 0.0)
146  {
147  NEKERROR(ErrorUtil::efatal, "m_bndEvaluateTime not setup");
148  }
149  m_diffusion->DiffuseCoeffs(nvariables, m_fields, inarray, outarrayDiff,
150  m_bndEvaluateTime, pFwd, pBwd);
151  for (int i = 0; i < nvariables; ++i)
152  {
153  Vmath::Vadd(ncoeffs, outarrayDiff[i], 1, outarray[i], 1,
154  outarray[i], 1);
155  }
156  }
157  else
158  {
159  Array<OneD, Array<OneD, NekDouble>> inarrayDiff{nvariables - 1};
160  Array<OneD, Array<OneD, NekDouble>> inFwd{nvariables - 1};
161  Array<OneD, Array<OneD, NekDouble>> inBwd{nvariables - 1};
162 
163  for (int i = 0; i < nvariables - 1; ++i)
164  {
165  inarrayDiff[i] = Array<OneD, NekDouble>{npoints};
166  inFwd[i] = Array<OneD, NekDouble>{nTracePts};
167  inBwd[i] = Array<OneD, NekDouble>{nTracePts};
168  }
169 
170  // Extract pressure
171  // (use inarrayDiff[0] as a temporary storage for the pressure)
172  m_varConv->GetPressure(inarray, inarrayDiff[0]);
173 
174  // Extract temperature
175  m_varConv->GetTemperature(inarray, inarrayDiff[nvariables - 2]);
176 
177  // Extract velocities
178  m_varConv->GetVelocityVector(inarray, inarrayDiff);
179 
180  // Repeat calculation for trace space
181  if (pFwd == NullNekDoubleArrayOfArray ||
183  {
186  }
187  else
188  {
189  m_varConv->GetPressure(pFwd, inFwd[0]);
190  m_varConv->GetPressure(pBwd, inBwd[0]);
191 
192  m_varConv->GetTemperature(pFwd, inFwd[nvariables - 2]);
193  m_varConv->GetTemperature(pBwd, inBwd[nvariables - 2]);
194 
195  m_varConv->GetVelocityVector(pFwd, inFwd);
196  m_varConv->GetVelocityVector(pBwd, inBwd);
197  }
198 
199  // Diffusion term in physical rhs form
200  m_diffusion->Diffuse(nvariables, m_fields, inarrayDiff, outarrayDiff,
201  inFwd, inBwd);
202 
203  for (int i = 0; i < nvariables; ++i)
204  {
205  Vmath::Vadd(npoints, outarrayDiff[i], 1, outarray[i], 1,
206  outarray[i], 1);
207  }
208 
209  // Laplacian operator based artificial viscosity
211  {
212  m_artificialDiffusion->DoArtificialDiffusionCoeff(inarray,
213  outarray);
214  }
215  }
216 }
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
bool m_is_diffIP
flag to switch between IP and LDG an enum could be added for more options
SOLVER_UTILS_EXPORT int GetTraceTotPoints()
SOLVER_UTILS_EXPORT int GetNpoints()
SOLVER_UTILS_EXPORT int GetNcoeffs()
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.cpp:359

References 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 1050 of file NavierStokesImplicitCFE.cpp.

1055 {
1056  switch (m_spacedim)
1057  {
1058  case 2:
1059  GetdFlux_dU_2D(normals, mu, DmuDT, conservVar, conseDeriv, fluxJac);
1060  break;
1061 
1062  case 3:
1063  GetdFlux_dU_3D(normals, mu, DmuDT, conservVar, conseDeriv, fluxJac);
1064  break;
1065 
1066  default:
1067  NEKERROR(ErrorUtil::efatal, "v_GetDiffusionFluxJacPoint not coded");
1068  break;
1069  }
1070 }
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 1194 of file NavierStokesImplicitCFE.cpp.

1200 {
1201  int nConvectiveFields = inarray.size();
1202  std::shared_ptr<LocalRegions::ExpansionVector> expvect = explist->GetExp();
1203  int nTotElmt = (*expvect).size();
1204  int nPts = explist->GetTotPoints();
1205  int nSpaceDim = m_graph->GetSpaceDimension();
1206 
1207  // Debug
1208  if (!ElmtJac.size())
1209  {
1210  ElmtJac = Array<OneD, Array<OneD, DNekMatSharedPtr>>(nTotElmt);
1211  for (int nelmt = 0; nelmt < nTotElmt; nelmt++)
1212  {
1213  int nElmtPnt = (*expvect)[nelmt]->GetTotPoints();
1214  ElmtJac[nelmt] = Array<OneD, DNekMatSharedPtr>(nElmtPnt);
1215  for (int npnt = 0; npnt < nElmtPnt; npnt++)
1216  {
1217  ElmtJac[nelmt][npnt] =
1219  nConvectiveFields, nConvectiveFields);
1220  }
1221  }
1222  }
1223 
1224  // Auxiliary variables
1225  Array<OneD, NekDouble> mu(nPts, 0.0);
1226  Array<OneD, NekDouble> thermalConductivity(nPts, 0.0);
1227  Array<OneD, NekDouble> temperature(nPts, 0.0);
1228  m_varConv->GetTemperature(inarray, temperature);
1229  GetViscosityAndThermalCondFromTemp(temperature, mu, thermalConductivity);
1230 
1231  // What about thermal conductivity?
1232 
1233  NekDouble pointmu = 0.0;
1234  Array<OneD, NekDouble> locmu;
1235  Array<OneD, NekDouble> pointVar(nConvectiveFields, 0.0);
1236  Array<OneD, Array<OneD, NekDouble>> locVars(nConvectiveFields);
1237  Array<OneD, NekDouble> pointnormals(nSpaceDim, 0.0);
1238  Array<OneD, Array<OneD, NekDouble>> locnormal(nSpaceDim);
1239 
1241  nConvectiveFields - 1, nConvectiveFields);
1242  Array<OneD, NekDouble> tmpMatinnData, tmpMatoutData;
1243  Array<OneD, NekDouble> tmp1, tmp2;
1244 
1245  for (int nelmt = 0; nelmt < nTotElmt; nelmt++)
1246  {
1247  int nElmtPnt = (*expvect)[nelmt]->GetTotPoints();
1248  int noffest = explist->GetPhys_Offset(nelmt);
1249 
1250  for (int j = 0; j < nConvectiveFields; j++)
1251  {
1252  locVars[j] = inarray[j] + noffest;
1253  }
1254 
1255  for (int j = 0; j < nSpaceDim; j++)
1256  {
1257  locnormal[j] = normals[j] + noffest;
1258  }
1259 
1260  locmu = mu + noffest;
1261  for (int npnt = 0; npnt < nElmtPnt; npnt++)
1262  {
1263  for (int j = 0; j < nConvectiveFields; j++)
1264  {
1265  pointVar[j] = locVars[j][npnt];
1266  }
1267  for (int j = 0; j < nSpaceDim; j++)
1268  {
1269  pointnormals[j] = locnormal[j][npnt];
1270  }
1271 
1272  pointmu = locmu[npnt];
1273 
1274  m_GetdFlux_dDeriv_Array[nDervDir](pointnormals, pointmu, pointVar,
1275  PointFJac);
1276  tmpMatinnData = PointFJac->GetPtr();
1277  tmpMatoutData = ElmtJac[nelmt][npnt]->GetPtr();
1278 
1279  Vmath::Fill(nConvectiveFields, 0.0, tmpMatoutData,
1280  nConvectiveFields);
1281  for (int j = 0; j < nConvectiveFields; j++)
1282  {
1283  Vmath::Vcopy(
1284  nConvectiveFields - 1,
1285  tmp1 = tmpMatinnData + (j * (nConvectiveFields - 1)), 1,
1286  tmp2 = tmpMatoutData + (1 + j * nConvectiveFields), 1);
1287  }
1288  }
1289  }
1290 }
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.cpp:45
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1255

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 1072 of file NavierStokesImplicitCFE.cpp.

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

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 1151 of file NavierStokesImplicitCFE.cpp.

1157 {
1158  int nSpaceDim = m_graph->GetSpaceDimension();
1159 
1160  NekDouble pointmu = 0.0;
1161  Array<OneD, NekDouble> pointVar(nConvectiveFields, 0.0);
1162  Array<OneD, NekDouble> pointnormals(nSpaceDim, 0.0);
1163 
1164  Array<OneD, NekDouble> wspMatData = wspMat->GetPtr();
1165 
1168 
1169  for (int npnt = 0; npnt < nElmtPnt; npnt++)
1170  {
1171  for (int j = 0; j < nConvectiveFields; j++)
1172  {
1173  pointVar[j] = locVars[j][npnt];
1174  }
1175  for (int j = 0; j < nSpaceDim; j++)
1176  {
1177  pointnormals[j] = locnormal[j][npnt];
1178  }
1179 
1180  pointmu = locmu[npnt];
1181 
1182  m_GetdFlux_dDeriv_Array[nDervDir](pointnormals, pointmu, pointVar,
1183  wspMat);
1184  Vmath::Zero(nConvectiveFields, PntJacArray[npnt], nConvectiveFields);
1185  for (int j = 0; j < nConvectiveFields; j++)
1186  {
1187  int noffset = j * (nConvectiveFields - 1);
1188  Vmath::Vcopy((nConvectiveFields - 1), tmp1 = wspMatData + noffset,
1189  1, tmp2 = PntJacArray[npnt] + noffset + j + 1, 1);
1190  }
1191  }
1192 }

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 62 of file NavierStokesImplicitCFE.cpp.

63 {
64  CFSImplicit::v_InitObject(DeclareFields);
65 
67 
69  switch (m_spacedim)
70  {
71  case 2:
72  /* code */
75  std::placeholders::_1, std::placeholders::_2,
76  std::placeholders::_3, std::placeholders::_4);
77 
80  std::placeholders::_1, std::placeholders::_2,
81  std::placeholders::_3, std::placeholders::_4);
82  break;
83  case 3:
84  /* code */
87  std::placeholders::_1, std::placeholders::_2,
88  std::placeholders::_3, std::placeholders::_4);
89 
92  std::placeholders::_1, std::placeholders::_2,
93  std::placeholders::_3, std::placeholders::_4);
96  std::placeholders::_1, std::placeholders::_2,
97  std::placeholders::_3, std::placeholders::_4);
98 
99  break;
100 
101  default:
102 
103  break;
104  }
105 }
virtual 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 995 of file NavierStokesImplicitCFE.cpp.

1002 {
1003  int nSpaceDim = m_graph->GetSpaceDimension();
1004 
1005  NekDouble pointmu = 0.0;
1006  NekDouble pointDmuDT = 0.0;
1007  Array<OneD, NekDouble> pointVar(nConvectiveFields, 0.0);
1008  Array<OneD, Array<OneD, NekDouble>> pointDerv(nSpaceDim);
1009  for (int j = 0; j < nSpaceDim; j++)
1010  {
1011  pointDerv[j] = Array<OneD, NekDouble>(nConvectiveFields, 0.0);
1012  }
1013 
1014  Array<OneD, NekDouble> wspMatData = wspMat->GetPtr();
1018 
1019  for (int npnt = 0; npnt < nElmtPnt; npnt++)
1020  {
1021  for (int j = 0; j < nConvectiveFields; j++)
1022  {
1023  pointVar[j] = locVars[j][npnt];
1024  }
1025  for (int j = 0; j < nSpaceDim; j++)
1026  {
1027  for (int k = 0; k < nConvectiveFields; k++)
1028  {
1029  pointDerv[j][k] = locDerv[j][k][npnt];
1030  }
1031  }
1032 
1033  pointmu = locmu[npnt];
1034  pointDmuDT = locDmuDT[npnt];
1035 
1036  v_GetDiffusionFluxJacPoint(pointVar, pointDerv, pointmu, pointDmuDT,
1037  normals, wspMat);
1038  for (int j = 0; j < nConvectiveFields; j++)
1039  {
1040  int noffset = j * nConvectiveFields;
1041 
1042  Vmath::Vsub(nConvectiveFields - 1,
1043  tmp1 = PntJacArray[npnt] + (noffset + 1), 1,
1044  tmp2 = wspMatData + (noffset - j), 1,
1045  tmp3 = PntJacArray[npnt] + (noffset + 1), 1);
1046  }
1047  }
1048 }
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.cpp:419

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

◆ v_SupportsShockCaptType()

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

Reimplemented from Nektar::NavierStokesCFE.

Definition at line 1342 of file NavierStokesImplicitCFE.cpp.

1344 {
1345  if (type == "Physical" || type == "Off")
1346  {
1347  return true;
1348  }
1349  else
1350  {
1351  return false;
1352  }
1353 }

Friends And Related Function Documentation

◆ MemoryManager< NavierStokesImplicitCFE >

friend class MemoryManager< NavierStokesImplicitCFE >
friend

Definition at line 1 of file NavierStokesImplicitCFE.h.

Member Data Documentation

◆ className

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.
Definition: NekFactory.hpp:198
static SolverUtils::EquationSystemSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
EquationSystemFactory & GetEquationSystemFactory()

Definition at line 68 of file NavierStokesImplicitCFE.h.

◆ m_GetdFlux_dDeriv_Array

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