[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
model.h
1 #ifndef __MODEL__
2 #define __MODEL__
3 
4 #include <deal.II/base/conditional_ostream.h>
5 #include <deal.II/base/types.h>
6 #include <deal.II/base/tensor.h>
7 #include <deal.II/lac/la_parallel_vector.templates.h>
8 #include <deal.II/numerics/data_component_interpretation.h>
9 
10 #include "parameters/parameters_manufactured_solution.h"
11 #include "physics/manufactured_solution.h"
12 
13 namespace PHiLiP {
14 namespace Physics {
15 
17 template <int dim, int nspecies, int nstate, typename real>
18 class ModelBase
19 {
20 public:
22  explicit ModelBase(
23  std::shared_ptr< ManufacturedSolutionFunction<dim,nspecies,real> > manufactured_solution_function_input = nullptr);
24 
26  virtual ~ModelBase() = default;
27 
29  std::shared_ptr< ManufacturedSolutionFunction<dim,nspecies,real> > manufactured_solution_function;
30 
31 protected:
32  const MPI_Comm mpi_communicator;
33  dealii::ConditionalOStream pcout;
34 
35 public:
37  virtual std::array<dealii::Tensor<1,dim,real>,nstate>
39  const std::array<real,nstate> &conservative_soln) const = 0;
40 
42  virtual std::array<dealii::Tensor<1,dim,real>,nstate>
44  const std::array<real,nstate> &conservative_soln,
45  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
46  const dealii::types::global_dof_index cell_index) const = 0;
47 
49  virtual std::array<real,nstate> dissipative_flux_dot_normal (
50  const std::array<real,nstate> &solution,
51  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
52  const std::array<real,nstate> &filtered_solution,
53  const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
54  const bool on_boundary,
55  const dealii::types::global_dof_index cell_index,
56  const dealii::Tensor<1,dim,real> &normal,
57  const int boundary_type) const = 0;// Note: defined as const here since only PhysicsModel (i.e. PhysicsBase) has to be non-const
58 
60 
62  virtual std::array<real,nstate> convective_eigenvalues (
63  const std::array<real,nstate> &/*solution*/,
64  const dealii::Tensor<1,dim,real> &/*normal*/) const = 0;
65 
67 
68  virtual real max_convective_eigenvalue (const std::array<real,nstate> &soln) const = 0;
69 
71 
73  const std::array<real,nstate> &soln,
74  const dealii::Tensor<1,dim,real> &normal) const = 0;
75 
77  virtual std::array<real,nstate> physical_source_term (
78  const dealii::Point<dim,real> &pos,
79  const std::array<real,nstate> &solution,
80  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
81  const dealii::types::global_dof_index cell_index) const;
82 
84  virtual std::array<real,nstate> source_term (
85  const dealii::Point<dim,real> &pos,
86  const std::array<real,nstate> &solution,
87  const real current_time,
88  const dealii::types::global_dof_index cell_index) const = 0;
89 
92  const int boundary_type,
93  const dealii::Point<dim, real> &pos,
94  const dealii::Tensor<1,dim,real> &normal,
95  const std::array<real,nstate> &soln_int,
96  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
97  std::array<real,nstate> &soln_bc,
98  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const;
99 
101 
102  virtual dealii::Vector<double> post_compute_derived_quantities_vector (
103  const dealii::Vector<double> &uh,
104  const std::vector<dealii::Tensor<1,dim> > &/*duh*/,
105  const std::vector<dealii::Tensor<2,dim> > &/*dduh*/,
106  const dealii::Tensor<1,dim> &/*normals*/,
107  const dealii::Point<dim> &/*evaluation_points*/) const;
108 
110 
111  virtual std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation> post_get_data_component_interpretation () const;
112 
114 
115  virtual std::vector<std::string> post_get_names () const;
116 
117  // Quantities needed to be updated by DG for the model -- accomplished by DGBase update_model_variables()
118  dealii::LinearAlgebra::distributed::Vector<int> cellwise_poly_degree;
119  dealii::LinearAlgebra::distributed::Vector<double> cellwise_volume;
120  double bulk_density;
122  double bulk_velocity;
123  double domain_volume;
126  double time_step;
127 
129  dealii::LinearAlgebra::distributed::Vector<double> cellwise_mean_strain_rate_tensor_magnitude;
132  dealii::LinearAlgebra::distributed::Vector<double> dynamic_smagorinsky_model_constant_times_filter_width_sqr;
133 
135  virtual void set_unfiltered_conservative_solution(const std::array<real,nstate> &unfiltered_conservative_solution_);
136 
137 protected:
139  virtual void boundary_manufactured_solution (
140  const dealii::Point<dim, real> &pos,
141  const dealii::Tensor<1,dim,real> &normal_int,
142  const std::array<real,nstate> &soln_int,
143  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
144  std::array<real,nstate> &soln_bc,
145  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const;
146 
148  virtual void boundary_wall (
149  std::array<real,nstate> &soln_bc,
150  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const;
151 
153  virtual void boundary_outflow (
154  const std::array<real,nstate> &soln_int,
155  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
156  std::array<real,nstate> &soln_bc,
157  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const;
158 
160  virtual void boundary_inflow (
161  const std::array<real,nstate> &soln_int,
162  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
163  std::array<real,nstate> &soln_bc,
164  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const;
165 
167  virtual void boundary_farfield (
168  std::array<real,nstate> &soln_bc) const;
169 
171  virtual void boundary_riemann (
172  const dealii::Tensor<1,dim,real> &normal_int,
173  const std::array<real,nstate> &soln_int,
174  std::array<real,nstate> &soln_bc) const;
175 
177  virtual void boundary_slip_wall (
178  const dealii::Tensor<1,dim,real> &normal_int,
179  const std::array<real,nstate> &soln_int,
180  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
181  std::array<real,nstate> &soln_bc,
182  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const;
183 
185  std::array<real,nstate> unfiltered_conservative_solution;
186 };
187 
188 } // Physics namespace
189 } // PHiLiP namespace
190 
191 #endif
virtual ~ModelBase()=default
Virtual destructor required for abstract classes.
virtual std::array< real, nstate > dissipative_flux_dot_normal(const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const std::array< real, nstate > &filtered_solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &filtered_solution_gradient, const bool on_boundary, const dealii::types::global_dof_index cell_index, const dealii::Tensor< 1, dim, real > &normal, const int boundary_type) const =0
Dissipative flux terms additional to the baseline physics (including dissipative flux terms in additi...
virtual void set_unfiltered_conservative_solution(const std::array< real, nstate > &unfiltered_conservative_solution_)
Setter for the unfiltered conservative solution.
Definition: model.cpp:38
Manufactured solution used for grid studies to check convergence orders.
virtual std::vector< std::string > post_get_names() const
Returns names of the solution to be used by PhysicsPostprocessor to output current solution...
Definition: model.cpp:218
virtual void boundary_riemann(const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, std::array< real, nstate > &soln_bc) const
Riemann-based farfield boundary conditions based on freestream values.
Definition: model.cpp:141
double domain_volume
Domain volume, needed for channel flow case.
Definition: model.h:123
virtual std::array< real, nstate > source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &solution, const real current_time, const dealii::types::global_dof_index cell_index) const =0
Manufactured source terms additional to the baseline physics (including manufactured source terms in ...
Files for the baseline physics.
Definition: ADTypes.hpp:10
virtual std::array< real, nstate > physical_source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const
Physical source terms additional to the baseline physics (including physical source terms in addition...
Definition: model.cpp:25
Physics model additional terms and equations to the baseline physics.
Definition: model.h:18
double bulk_velocity
Bulk velocity, needed for channel flow case.
Definition: model.h:122
double half_channel_height
Half channel height, needed for channel flow case.
Definition: model.h:124
virtual std::array< dealii::Tensor< 1, dim, real >, nstate > dissipative_flux(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const =0
Dissipative flux terms additional to the baseline physics (including dissipative flux terms in additi...
virtual void boundary_wall(std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
Wall boundary condition.
Definition: model.cpp:65
double resultant_wall_shear_force
Resultant wall shear force, needed for channel flow case.
Definition: model.h:125
virtual void boundary_inflow(const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
Inflow boundary conditions.
Definition: model.cpp:95
virtual std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &conservative_soln) const =0
Convective flux terms additional to the baseline physics (including convective flux terms in addition...
double time_step
Current time step.
Definition: model.h:126
dealii::ConditionalOStream pcout
Parallel std::cout that only outputs on mpi_rank==0.
Definition: model.h:33
dealii::LinearAlgebra::distributed::Vector< double > cellwise_mean_strain_rate_tensor_magnitude
Definition: model.h:129
virtual std::array< real, nstate > convective_eigenvalues(const std::array< real, nstate > &, const dealii::Tensor< 1, dim, real > &) const =0
Convective eigenvalues of the additional models&#39; PDEs.
dealii::LinearAlgebra::distributed::Vector< double > dynamic_smagorinsky_model_constant_times_filter_width_sqr
Definition: model.h:132
void boundary_face_values(const int boundary_type, const dealii::Point< dim, real > &pos, const dealii::Tensor< 1, dim, real > &normal, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
Boundary condition handler.
Definition: model.cpp:156
virtual real max_convective_eigenvalue(const std::array< real, nstate > &soln) const =0
Maximum convective eigenvalue of the additional models&#39; PDEs.
virtual void boundary_slip_wall(const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
Slip wall boundary condition.
Definition: model.cpp:124
virtual void boundary_outflow(const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
Outflow Boundary Condition.
Definition: model.cpp:79
ModelBase(std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function_input=nullptr)
Constructor.
Definition: model.cpp:16
virtual real max_convective_normal_eigenvalue(const std::array< real, nstate > &soln, const dealii::Tensor< 1, dim, real > &normal) const =0
Maximum convective normal eigenvalue (used in Lax-Friedrichs) of the additional models&#39; PDEs...
dealii::LinearAlgebra::distributed::Vector< int > cellwise_poly_degree
Cellwise polynomial degree.
Definition: model.h:118
virtual dealii::Vector< double > post_compute_derived_quantities_vector(const dealii::Vector< double > &uh, const std::vector< dealii::Tensor< 1, dim > > &, const std::vector< dealii::Tensor< 2, dim > > &, const dealii::Tensor< 1, dim > &, const dealii::Point< dim > &) const
Returns current vector solution to be used by PhysicsPostprocessor to output current solution...
Definition: model.cpp:202
virtual void boundary_manufactured_solution(const dealii::Point< dim, real > &pos, const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
Evaluate the manufactured solution boundary conditions.
Definition: model.cpp:47
virtual void boundary_farfield(std::array< real, nstate > &soln_bc) const
Farfield boundary conditions based on freestream values.
Definition: model.cpp:111
double bulk_mass_flow_rate
Bulk mass flow rate, needed for channel flow case.
Definition: model.h:121
virtual std::vector< dealii::DataComponentInterpretation::DataComponentInterpretation > post_get_data_component_interpretation() const
Returns DataComponentInterpretation of the solution to be used by PhysicsPostprocessor to output curr...
Definition: model.cpp:230
const MPI_Comm mpi_communicator
MPI communicator.
Definition: model.h:32
double bulk_density
Bulk density, needed for channel flow case.
Definition: model.h:120
std::array< real, nstate > unfiltered_conservative_solution
The unfiltered conservative solution.
Definition: model.h:185
std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function
Manufactured solution function.
Definition: model.h:29