Theseus
Compressible flow solver
Loading...
Searching...
No Matches
NSOperator.hpp
Go to the documentation of this file.
1// Copyright (c) 2025-2026 Board of Trustees of the University of Illinois
2//
3// This file is part of Theseus.
4//
5// SPDX-License-Identifier: BSD-3-Clause
6#pragma once
7#include "RHSOperator.hpp"
8
9namespace Theseus
10{
11
12 template<typename PhysicsT>
13 class NSOperator : public Theseus::RHSOperator<PhysicsT>
14 {
15 public:
16 using Physics = PhysicsT;
20 using Gas = typename Base::Gas;
22 protected:
26 private:
27 std::vector<std::shared_ptr<mfem::ParGridFunction> > grad_u;
28 public:
29 NSOperator(std::shared_ptr<mfem::ParFiniteElementSpace> vfes_,
30 std::shared_ptr<mfem::ParFiniteElementSpace> fes0_,
31 std::shared_ptr<mfem::ParMesh> pmesh_,
32 std::shared_ptr<mfem::ParGridFunction> eta_,
33 std::shared_ptr<mfem::ParGridFunction> alpha_,
34 std::vector<std::shared_ptr<mfem::ParGridFunction> > &grad_u_,
35 std::shared_ptr<Prandtl::PerssonPeraireIndicator> indicator_,
36 std::shared_ptr<const Gas> gasModel_,
37 const std::string &gasModelName_,
38 const std::string &numFluxName_,
39 const mfem::real_t alpha_max=0.5, const mfem::real_t alpha_min=0.001)
40 : RHSOperator<Physics>(vfes_, fes0_, pmesh_, eta_, alpha_,
41 indicator_, gasModel_, gasModelName_, numFluxName_,
42 "NavierStokes", alpha_max, alpha_min),
43 grad_u(grad_u_)
44 {}
45
46 // Top level RHS routine
47 mfem::real_t FlowMult(const mfem::Vector &u, mfem::Vector &dudt) const override;
48
49 // Gradient Operator Interface (BR1 aux rhs)
50 void GradOperator(const mfem::Vector &u, std::vector<mfem::Vector *> &grad_u) const;
51 void GradOperator_Volume(const mfem::Vector &pu, std::vector<mfem::Vector *> &p_grad_u) const;
52 void GradOperator_InteriorFaces(const mfem::Vector &pu, std::vector<mfem::Vector *> &p_grad_u) const;
53 void GradOperator_BoundaryFaces(const mfem::Vector &pu, std::vector<mfem::Vector *> &p_grad_u) const;
54
55 void ComputeEntropyState(const mfem::Vector &u, mfem::Vector &e) const;
56 void ComputeGradPrimFromGradEntropy(const mfem::Vector &u,
57 std::vector<mfem::Vector *> &gradEntropy) const;
58
59 // NavierStokes RHS Interface
60 mfem::real_t MultCNS(const mfem::Vector &u,
61 const std::vector<mfem::Vector *> &grad_prim,
62 mfem::Vector &pdudt) const;
63 mfem::real_t MultCNS_Volume(const mfem::Vector &pu,
64 const std::vector<mfem::Vector *> &p_grad_prim,
65 mfem::Vector &pdudt) const;
66 mfem::real_t MultCNS_InteriorFaces(const mfem::Vector &pu,
67 const std::vector<mfem::Vector *> &p_grad_prim,
68 mfem::Vector &pdudt) const;
69 mfem::real_t MultCNS_BoundaryFaces(const mfem::Vector &pu,
70 const std::vector<mfem::Vector *> &p_grad_prim,
71 mfem::Vector &pdudt) const;
72 };
73
74}
75
76#include "NSOperator_impl.hpp"
Definition NSOperator.hpp:14
PhysicsT Physics
Definition NSOperator.hpp:16
void ComputeEntropyState(const mfem::Vector &u, mfem::Vector &e) const
Definition NSOperator_impl.hpp:12
typename Base::OperatorCache OperatorCache
Definition NSOperator.hpp:18
mfem::real_t MultCNS(const mfem::Vector &u, const std::vector< mfem::Vector * > &grad_prim, mfem::Vector &pdudt) const
Definition NSOperator_impl.hpp:977
void GradOperator(const mfem::Vector &u, std::vector< mfem::Vector * > &grad_u) const
Definition NSOperator_impl.hpp:482
mfem::real_t MultCNS_InteriorFaces(const mfem::Vector &pu, const std::vector< mfem::Vector * > &p_grad_prim, mfem::Vector &pdudt) const
Definition NSOperator_impl.hpp:542
typename Base::InviscidFlux InviscidFlux
Definition NSOperator.hpp:21
mfem::real_t MultCNS_Volume(const mfem::Vector &pu, const std::vector< mfem::Vector * > &p_grad_prim, mfem::Vector &pdudt) const
Definition NSOperator_impl.hpp:802
void GradOperator_Volume(const mfem::Vector &pu, std::vector< mfem::Vector * > &p_grad_u) const
Definition NSOperator_impl.hpp:196
void GradOperator_InteriorFaces(const mfem::Vector &pu, std::vector< mfem::Vector * > &p_grad_u) const
Definition NSOperator_impl.hpp:389
NSOperator(std::shared_ptr< mfem::ParFiniteElementSpace > vfes_, std::shared_ptr< mfem::ParFiniteElementSpace > fes0_, std::shared_ptr< mfem::ParMesh > pmesh_, std::shared_ptr< mfem::ParGridFunction > eta_, std::shared_ptr< mfem::ParGridFunction > alpha_, std::vector< std::shared_ptr< mfem::ParGridFunction > > &grad_u_, std::shared_ptr< Prandtl::PerssonPeraireIndicator > indicator_, std::shared_ptr< const Gas > gasModel_, const std::string &gasModelName_, const std::string &numFluxName_, const mfem::real_t alpha_max=0.5, const mfem::real_t alpha_min=0.001)
Definition NSOperator.hpp:29
typename Base::Gas Gas
Definition NSOperator.hpp:20
mfem::real_t FlowMult(const mfem::Vector &u, mfem::Vector &dudt) const override
Definition NSOperator_impl.hpp:162
typename Base::DeviceCache DeviceCache
Definition NSOperator.hpp:19
void ComputeGradPrimFromGradEntropy(const mfem::Vector &u, std::vector< mfem::Vector * > &gradEntropy) const
Definition NSOperator_impl.hpp:83
void GradOperator_BoundaryFaces(const mfem::Vector &pu, std::vector< mfem::Vector * > &p_grad_u) const
Definition NSOperator_impl.hpp:269
mfem::real_t MultCNS_BoundaryFaces(const mfem::Vector &pu, const std::vector< mfem::Vector * > &p_grad_prim, mfem::Vector &pdudt) const
Definition NSOperator_impl.hpp:658
const mfem::real_t alpha_min
Definition RHSOperator.hpp:35
mfem::real_t max_char_speed
Definition RHSOperator.hpp:22
const mfem::real_t alpha_max
Definition RHSOperator.hpp:36
Definition RHSOperator.hpp:121
DeviceCache device_cache
Definition RHSOperator.hpp:130
DGSEMDeviceCacheT< Physics > DeviceCache
Definition RHSOperator.hpp:125
OperatorCache operator_cache
Definition RHSOperator.hpp:129
DGSEMOperatorCacheT< Physics > OperatorCache
Definition RHSOperator.hpp:124
typename Physics::GasModel Gas
Definition RHSOperator.hpp:126
typename Physics::InviscidFlux InviscidFlux
Definition RHSOperator.hpp:127
Definition AxisymmetricGeometry.hpp:15