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:
25 private:
26 std::vector<std::shared_ptr<mfem::ParGridFunction> > grad_u;
27 public:
28 NSOperator(std::shared_ptr<mfem::ParFiniteElementSpace> vfes_,
29 std::shared_ptr<mfem::ParFiniteElementSpace> fes0_,
30 std::shared_ptr<mfem::ParMesh> pmesh_,
31 std::shared_ptr<mfem::ParGridFunction> eta_,
32 std::shared_ptr<mfem::ParGridFunction> alpha_,
33 std::vector<std::shared_ptr<mfem::ParGridFunction> > &grad_u_,
34 std::shared_ptr<Prandtl::PerssonPeraireIndicator> indicator_,
35 std::shared_ptr<const Gas> gasModel_,
36 const std::string &gasModelName_,
37 const std::string &numFluxName_,
38 const mfem::real_t alpha_max=0.5, const mfem::real_t alpha_min=0.001)
39 : RHSOperator<Physics>(vfes_, fes0_, pmesh_, eta_, alpha_,
40 indicator_, gasModel_, gasModelName_, numFluxName_,
41 "NavierStokes", alpha_max, alpha_min),
42 grad_u(grad_u_)
43 {}
44
45 // Top level RHS routine
46 void FlowMult(const mfem::Vector &u, mfem::Vector &dudt) const override;
47
48 // Gradient Operator Interface (BR1 aux rhs)
49 void GradOperator(const mfem::Vector &u, std::vector<mfem::Vector *> &grad_u) const;
50 void GradOperator_Volume(const mfem::Vector &pu, std::vector<mfem::Vector *> &p_grad_u) const;
51 void GradOperator_InteriorFaces(const mfem::Vector &pu, std::vector<mfem::Vector *> &p_grad_u) const;
52 void GradOperator_BoundaryFaces(const mfem::Vector &pu, std::vector<mfem::Vector *> &p_grad_u) const;
53
54 void ComputeEntropyState(const mfem::Vector &u, mfem::Vector &e) const;
55 void ComputeGradPrimFromGradEntropy(const mfem::Vector &u,
56 std::vector<mfem::Vector *> &gradEntropy) const;
57
58 // NavierStokes RHS Interface
59 void MultCNS(const mfem::Vector &u,
60 const std::vector<mfem::Vector *> &grad_prim,
61 mfem::Vector &pdudt) const;
62 void MultCNS_Volume(const mfem::Vector &pu,
63 const std::vector<mfem::Vector *> &p_grad_prim,
64 mfem::Vector &pdudt) const;
65 void MultCNS_InteriorFaces(const mfem::Vector &pu,
66 const std::vector<mfem::Vector *> &p_grad_prim,
67 mfem::Vector &pdudt) const;
68 void MultCNS_BoundaryFaces(const mfem::Vector &pu,
69 const std::vector<mfem::Vector *> &p_grad_prim,
70 mfem::Vector &pdudt) const;
71 };
72
73}
74
75#include "NSOperator_impl.hpp"
Definition NSOperator.hpp:14
void MultCNS_InteriorFaces(const mfem::Vector &pu, const std::vector< mfem::Vector * > &p_grad_prim, mfem::Vector &pdudt) const
Definition NSOperator_impl.hpp:579
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
void GradOperator(const mfem::Vector &u, std::vector< mfem::Vector * > &grad_u) const
Definition NSOperator_impl.hpp:519
typename Base::InviscidFlux InviscidFlux
Definition NSOperator.hpp:21
void MultCNS(const mfem::Vector &u, const std::vector< mfem::Vector * > &grad_prim, mfem::Vector &pdudt) const
Definition NSOperator_impl.hpp:1048
void GradOperator_Volume(const mfem::Vector &pu, std::vector< mfem::Vector * > &p_grad_u) const
Definition NSOperator_impl.hpp:195
void GradOperator_InteriorFaces(const mfem::Vector &pu, std::vector< mfem::Vector * > &p_grad_u) const
Definition NSOperator_impl.hpp:406
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:28
typename Base::Gas Gas
Definition NSOperator.hpp:20
void 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 MultCNS_Volume(const mfem::Vector &pu, const std::vector< mfem::Vector * > &p_grad_prim, mfem::Vector &pdudt) const
Definition NSOperator_impl.hpp:844
void MultCNS_BoundaryFaces(const mfem::Vector &pu, const std::vector< mfem::Vector * > &p_grad_prim, mfem::Vector &pdudt) const
Definition NSOperator_impl.hpp:716
void GradOperator_BoundaryFaces(const mfem::Vector &pu, std::vector< mfem::Vector * > &p_grad_u) const
Definition NSOperator_impl.hpp:286
const mfem::real_t alpha_min
Definition RHSOperator.hpp:35
const mfem::real_t alpha_max
Definition RHSOperator.hpp:36
Definition RHSOperator.hpp:118
DeviceCache device_cache
Definition RHSOperator.hpp:127
DGSEMDeviceCacheT< Physics > DeviceCache
Definition RHSOperator.hpp:122
OperatorCache operator_cache
Definition RHSOperator.hpp:126
DGSEMOperatorCacheT< Physics > OperatorCache
Definition RHSOperator.hpp:121
typename Physics::GasModel Gas
Definition RHSOperator.hpp:123
typename Physics::InviscidFlux InviscidFlux
Definition RHSOperator.hpp:124
Definition AxisymmetricGeometry.hpp:15