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> 10 #include "parameters/parameters_manufactured_solution.h" 11 #include "physics/manufactured_solution.h" 17 template <
int dim,
int nspecies,
int nstate,
typename real>
33 dealii::ConditionalOStream
pcout;
37 virtual std::array<dealii::Tensor<1,dim,real>,nstate>
39 const std::array<real,nstate> &conservative_soln)
const = 0;
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;
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;
63 const std::array<real,nstate> &,
64 const dealii::Tensor<1,dim,real> &)
const = 0;
73 const std::array<real,nstate> &soln,
74 const dealii::Tensor<1,dim,real> &normal)
const = 0;
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;
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;
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;
103 const dealii::Vector<double> &uh,
104 const std::vector<dealii::Tensor<1,dim> > &,
105 const std::vector<dealii::Tensor<2,dim> > &,
106 const dealii::Tensor<1,dim> &,
107 const dealii::Point<dim> &)
const;
119 dealii::LinearAlgebra::distributed::Vector<double> cellwise_volume;
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;
149 std::array<real,nstate> &soln_bc,
150 std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc)
const;
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;
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;
168 std::array<real,nstate> &soln_bc)
const;
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;
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;
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.
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...
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.
double domain_volume
Domain volume, needed for channel flow case.
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.
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...
Physics model additional terms and equations to the baseline physics.
double bulk_velocity
Bulk velocity, needed for channel flow case.
double half_channel_height
Half channel height, needed for channel flow case.
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.
double resultant_wall_shear_force
Resultant wall shear force, needed for channel flow case.
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.
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.
dealii::ConditionalOStream pcout
Parallel std::cout that only outputs on mpi_rank==0.
dealii::LinearAlgebra::distributed::Vector< double > cellwise_mean_strain_rate_tensor_magnitude
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' PDEs.
dealii::LinearAlgebra::distributed::Vector< double > dynamic_smagorinsky_model_constant_times_filter_width_sqr
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.
virtual real max_convective_eigenvalue(const std::array< real, nstate > &soln) const =0
Maximum convective eigenvalue of the additional models' 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.
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.
ModelBase(std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function_input=nullptr)
Constructor.
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' PDEs...
dealii::LinearAlgebra::distributed::Vector< int > cellwise_poly_degree
Cellwise polynomial degree.
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...
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.
virtual void boundary_farfield(std::array< real, nstate > &soln_bc) const
Farfield boundary conditions based on freestream values.
double bulk_mass_flow_rate
Bulk mass flow rate, needed for channel flow case.
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...
const MPI_Comm mpi_communicator
MPI communicator.
double bulk_density
Bulk density, needed for channel flow case.
std::array< real, nstate > unfiltered_conservative_solution
The unfiltered conservative solution.
std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function
Manufactured solution function.