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

 ~NavierStokesImplicitCFE () override=default
 
- Public Member Functions inherited from Nektar::NavierStokesCFE
 ~NavierStokesCFE () override=default
 
- Public Member Functions inherited from Nektar::CompressibleFlowSystem
 ~CompressibleFlowSystem () override=default
 
NekDouble GetStabilityLimit (int n)
 Function to calculate the stability limit for DG/CG. More...
 
Array< OneD, NekDoubleGetStabilityLimitVector (const Array< OneD, int > &ExpOrder)
 Function to calculate the stability limit for DG/CG (a vector of them). More...
 
- Public Member Functions inherited from Nektar::SolverUtils::AdvectionSystem
SOLVER_UTILS_EXPORT AdvectionSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
SOLVER_UTILS_EXPORT ~AdvectionSystem () override
 
SOLVER_UTILS_EXPORT void v_InitObject (bool DeclareField=true) override
 Initialisation object for EquationSystem. More...
 
SOLVER_UTILS_EXPORT AdvectionSharedPtr GetAdvObject ()
 Returns the advection object held by this instance. More...
 
SOLVER_UTILS_EXPORT Array< OneD, NekDoubleGetElmtCFLVals (const bool FlagAcousticCFL=true)
 
SOLVER_UTILS_EXPORT NekDouble GetCFLEstimate (int &elmtid)
 
- Public Member Functions inherited from Nektar::SolverUtils::UnsteadySystem
SOLVER_UTILS_EXPORT ~UnsteadySystem () override
 Destructor. More...
 
SOLVER_UTILS_EXPORT NekDouble GetTimeStep (const Array< OneD, const Array< OneD, NekDouble > > &inarray)
 Calculate the larger time-step mantaining the problem stable. More...
 
SOLVER_UTILS_EXPORT NekDouble GetTimeStep ()
 
SOLVER_UTILS_EXPORT void SetTimeStep (const NekDouble timestep)
 
SOLVER_UTILS_EXPORT void SteadyStateResidual (int step, Array< OneD, NekDouble > &L2)
 
SOLVER_UTILS_EXPORT LibUtilities::TimeIntegrationSchemeSharedPtrGetTimeIntegrationScheme ()
 Returns the time integration scheme. More...
 
SOLVER_UTILS_EXPORT LibUtilities::TimeIntegrationSchemeOperatorsGetTimeIntegrationSchemeOperators ()
 Returns the time integration scheme operators. More...
 
- Public Member Functions inherited from Nektar::SolverUtils::EquationSystem
virtual SOLVER_UTILS_EXPORT ~EquationSystem ()
 Destructor. More...
 
SOLVER_UTILS_EXPORT void InitObject (bool DeclareField=true)
 Initialises the members of this object. More...
 
SOLVER_UTILS_EXPORT void DoInitialise (bool dumpInitialConditions=true)
 Perform any initialisation necessary before solving the problem. More...
 
SOLVER_UTILS_EXPORT void DoSolve ()
 Solve the problem. More...
 
SOLVER_UTILS_EXPORT void TransCoeffToPhys ()
 Transform from coefficient to physical space. More...
 
SOLVER_UTILS_EXPORT void TransPhysToCoeff ()
 Transform from physical to coefficient space. More...
 
SOLVER_UTILS_EXPORT void Output ()
 Perform output operations after solve. More...
 
SOLVER_UTILS_EXPORT std::string GetSessionName ()
 Get Session name. More...
 
template<class T >
std::shared_ptr< T > as ()
 
SOLVER_UTILS_EXPORT void ResetSessionName (std::string newname)
 Reset Session name. More...
 
SOLVER_UTILS_EXPORT LibUtilities::SessionReaderSharedPtr GetSession ()
 Get Session name. More...
 
SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr GetPressure ()
 Get pressure field if available. More...
 
SOLVER_UTILS_EXPORT void ExtraFldOutput (std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
 
SOLVER_UTILS_EXPORT void PrintSummary (std::ostream &out)
 Print a summary of parameters and solver characteristics. More...
 
SOLVER_UTILS_EXPORT void SetLambda (NekDouble lambda)
 Set parameter m_lambda. More...
 
SOLVER_UTILS_EXPORT SessionFunctionSharedPtr GetFunction (std::string name, const MultiRegions::ExpListSharedPtr &field=MultiRegions::NullExpListSharedPtr, bool cache=false)
 Get a SessionFunction by name. More...
 
SOLVER_UTILS_EXPORT void SetInitialConditions (NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
 Initialise the data in the dependent fields. More...
 
SOLVER_UTILS_EXPORT void EvaluateExactSolution (int field, Array< OneD, NekDouble > &outfield, const NekDouble time)
 Evaluates an exact solution. More...
 
SOLVER_UTILS_EXPORT NekDouble L2Error (unsigned int field, const Array< OneD, NekDouble > &exactsoln, bool Normalised=false)
 Compute the L2 error between fields and a given exact solution. More...
 
SOLVER_UTILS_EXPORT NekDouble L2Error (unsigned int field, bool Normalised=false)
 Compute the L2 error of the fields. More...
 
SOLVER_UTILS_EXPORT NekDouble LinfError (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray)
 Linf error computation. More...
 
SOLVER_UTILS_EXPORT Array< OneD, NekDoubleErrorExtraPoints (unsigned int field)
 Compute error (L2 and L_inf) over an larger set of quadrature points return [L2 Linf]. More...
 
SOLVER_UTILS_EXPORT void Checkpoint_Output (const int n)
 Write checkpoint file of m_fields. More...
 
SOLVER_UTILS_EXPORT void Checkpoint_Output (const int n, MultiRegions::ExpListSharedPtr &field, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
 Write checkpoint file of custom data fields. More...
 
SOLVER_UTILS_EXPORT void Checkpoint_BaseFlow (const int n)
 Write base flow file of m_fields. More...
 
SOLVER_UTILS_EXPORT void WriteFld (const std::string &outname)
 Write field data to the given filename. More...
 
SOLVER_UTILS_EXPORT void WriteFld (const std::string &outname, MultiRegions::ExpListSharedPtr &field, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
 Write input fields to the given filename. More...
 
SOLVER_UTILS_EXPORT void ImportFld (const std::string &infile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields)
 Input field data from the given file. More...
 
SOLVER_UTILS_EXPORT void ImportFldToMultiDomains (const std::string &infile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const int ndomains)
 Input field data from the given file to multiple domains. More...
 
SOLVER_UTILS_EXPORT void ImportFld (const std::string &infile, std::vector< std::string > &fieldStr, Array< OneD, Array< OneD, NekDouble > > &coeffs)
 Output a field. Input field data into array from the given file. More...
 
SOLVER_UTILS_EXPORT void ImportFld (const std::string &infile, MultiRegions::ExpListSharedPtr &pField, std::string &pFieldName)
 Output a field. Input field data into ExpList from the given file. More...
 
SOLVER_UTILS_EXPORT void SessionSummary (SummaryList &vSummary)
 Write out a session summary. More...
 
SOLVER_UTILS_EXPORT Array< OneD, MultiRegions::ExpListSharedPtr > & UpdateFields ()
 
SOLVER_UTILS_EXPORT LibUtilities::FieldMetaDataMapUpdateFieldMetaDataMap ()
 Get hold of FieldInfoMap so it can be updated. More...
 
SOLVER_UTILS_EXPORT NekDouble GetTime ()
 Return final time. More...
 
SOLVER_UTILS_EXPORT int GetNcoeffs ()
 
SOLVER_UTILS_EXPORT int GetNcoeffs (const int eid)
 
SOLVER_UTILS_EXPORT int GetNumExpModes ()
 
SOLVER_UTILS_EXPORT const Array< OneD, int > GetNumExpModesPerExp ()
 
SOLVER_UTILS_EXPORT int GetNvariables ()
 
SOLVER_UTILS_EXPORT const std::string GetVariable (unsigned int i)
 
SOLVER_UTILS_EXPORT int GetTraceTotPoints ()
 
SOLVER_UTILS_EXPORT int GetTraceNpoints ()
 
SOLVER_UTILS_EXPORT int GetExpSize ()
 
SOLVER_UTILS_EXPORT int GetPhys_Offset (int n)
 
SOLVER_UTILS_EXPORT int GetCoeff_Offset (int n)
 
SOLVER_UTILS_EXPORT int GetTotPoints ()
 
SOLVER_UTILS_EXPORT int GetTotPoints (int n)
 
SOLVER_UTILS_EXPORT int GetNpoints ()
 
SOLVER_UTILS_EXPORT int GetSteps ()
 
SOLVER_UTILS_EXPORT NekDouble GetTimeStep ()
 
SOLVER_UTILS_EXPORT void CopyFromPhysField (const int i, Array< OneD, NekDouble > &output)
 
SOLVER_UTILS_EXPORT void CopyToPhysField (const int i, const Array< OneD, const NekDouble > &input)
 
SOLVER_UTILS_EXPORT Array< OneD, NekDouble > & UpdatePhysField (const int i)
 
SOLVER_UTILS_EXPORT void 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 void SetIterationNumberPIT (int num)
 
SOLVER_UTILS_EXPORT void SetWindowNumberPIT (int num)
 
SOLVER_UTILS_EXPORT Array< OneD, const Array< OneD, NekDouble > > GetTraceNormals ()
 
SOLVER_UTILS_EXPORT void SetTime (const NekDouble time)
 
SOLVER_UTILS_EXPORT void SetTimeStep (const NekDouble timestep)
 
SOLVER_UTILS_EXPORT void SetInitialStep (const int step)
 
SOLVER_UTILS_EXPORT void SetBoundaryConditions (NekDouble time)
 Evaluates the boundary conditions at the given time. More...
 
SOLVER_UTILS_EXPORT bool NegatedOp ()
 Identify if operator is negated in DoSolve. More...
 
- Public Member Functions inherited from Nektar::SolverUtils::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 SetMovingFrameDisp (const Array< OneD, NekDouble > &vFrameDisp)
 
SOLVER_UTILS_EXPORT void GetMovingFrameDisp (Array< OneD, NekDouble > &vFrameDisp)
 
SOLVER_UTILS_EXPORT void SetAeroForce (Array< OneD, NekDouble > forces)
 Set aerodynamic force and moment. More...
 
SOLVER_UTILS_EXPORT void GetAeroForce (Array< OneD, NekDouble > forces)
 Get aerodynamic force and moment. More...
 
- Public Member Functions inherited from Nektar::CFSImplicit
 CFSImplicit (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
 ~CFSImplicit () override=default
 

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

Protected Attributes

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

Friends

class MemoryManager< NavierStokesImplicitCFE >
 

Additional Inherited Members

- Protected Types inherited from Nektar::SolverUtils::EquationSystem
enum  HomogeneousType { eHomogeneous1D , eHomogeneous2D , eHomogeneous3D , eNotHomogeneous }
 Parameter for homogeneous expansions. More...
 
- Static Protected Attributes inherited from Nektar::SolverUtils::EquationSystem
static std::string equationSystemTypeLookupIds []
 
static std::string projectionTypeLookupIds []
 

Detailed Description

Definition at line 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 ( )
overridedefault

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

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

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

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

Referenced by v_InitObject().

◆ GetdFlux_dQy_2D()

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

return part of viscous Jacobian:

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

Definition at line 282 of file NavierStokesImplicitCFE.cpp.

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

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

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

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

Referenced by v_InitObject().

◆ GetdFlux_dQz_3D()

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

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

Definition at line 490 of file NavierStokesImplicitCFE.cpp.

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

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

Referenced by v_InitObject().

◆ GetdFlux_dU_2D()

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

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

Definition at line 562 of file NavierStokesImplicitCFE.cpp.

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

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

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

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

Referenced by v_GetDiffusionFluxJacPoint().

◆ v_CalcMuDmuDT()

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

Reimplemented from Nektar::CFSImplicit.

Definition at line 1334 of file NavierStokesImplicitCFE.cpp.

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

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

◆ v_CalcPhysDeriv()

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

Reimplemented from Nektar::CFSImplicit.

Definition at line 1290 of file NavierStokesImplicitCFE.cpp.

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

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

◆ v_DoDiffusion()

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

Reimplemented from Nektar::NavierStokesCFE.

Definition at line 92 of file NavierStokesImplicitCFE.h.

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

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

◆ v_DoDiffusionCoeff()

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

Reimplemented from Nektar::CFSImplicit.

Definition at line 103 of file NavierStokesImplicitCFE.cpp.

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

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

◆ v_GetDiffusionFluxJacPoint()

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

Definition at line 1048 of file NavierStokesImplicitCFE.cpp.

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

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

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

◆ v_GetFluxDerivJacDirctn() [2/2]

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

Reimplemented from Nektar::CFSImplicit.

Definition at line 1070 of file NavierStokesImplicitCFE.cpp.

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

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

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

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

59{
60 CFSImplicit::v_InitObject(DeclareFields);
61
63
65 switch (m_spacedim)
66 {
67 case 2:
68 /* code */
71 std::placeholders::_1, std::placeholders::_2,
72 std::placeholders::_3, std::placeholders::_4);
73
76 std::placeholders::_1, std::placeholders::_2,
77 std::placeholders::_3, std::placeholders::_4);
78 break;
79 case 3:
80 /* code */
83 std::placeholders::_1, std::placeholders::_2,
84 std::placeholders::_3, std::placeholders::_4);
85
88 std::placeholders::_1, std::placeholders::_2,
89 std::placeholders::_3, std::placeholders::_4);
92 std::placeholders::_1, std::placeholders::_2,
93 std::placeholders::_3, std::placeholders::_4);
94
95 break;
96
97 default:
98
99 break;
100 }
101}
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 993 of file NavierStokesImplicitCFE.cpp.

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

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

◆ v_SupportsShockCaptType()

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

Reimplemented from Nektar::NavierStokesCFE.

Definition at line 1361 of file NavierStokesImplicitCFE.cpp.

1363{
1364 if (type == "Physical" || type == "Off")
1365 {
1366 return true;
1367 }
1368 else
1369 {
1370 return false;
1371 }
1372}

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:197
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