include/meltpooldg/compressible_flow/operation_data.hpp Source File

Developer Documentation: include/meltpooldg/compressible_flow/operation_data.hpp Source File
Developer Documentation
operation_data.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/parameter_handler.h>
4
9#include <meltpooldg/utilities/better_enum.hpp>
12
13#include <string>
14#include <vector>
15
17{
18 BETTER_ENUM(NumericalFluxType,
19 char,
20 lax_friedrichs_modified,
21 lax_friedrichs_exact,
22 harten_lax_vanleer)
23
24 BETTER_ENUM(LinearizedConvectiveFluxJumpType, char, analytic, lambda_fd, complete_fd);
25
26 BETTER_ENUM(JacobianType, char, exact, finite_difference);
27
28 BETTER_ENUM(OutputType, char, conserved_variables, primitive_variables, material_quantities);
29
33 template <typename number>
35 {
38
40 TimeIntegration::TimeIntegratorData<number> time_integrator;
41
43 NumericalFluxType numerical_flux_type = NumericalFluxType::lax_friedrichs_modified;
44
48 LinearizedConvectiveFluxJumpType linearization_jump_convective_flux =
49 LinearizedConvectiveFluxJumpType::complete_fd;
50
52 JacobianType jacobian_type = JacobianType::exact;
53
55 number courant_number = 0.15;
56
58 number viscous_courant_number = 1.0;
59
61 bool do_cfl_time_stepping = false;
62
64 number gravity_constant = 0.0;
65
67 std::string domain_representation_type = "fitted";
68
70 int verbosity_level = -1;
71
73
75 std::vector<OutputType> output_variables = {OutputType::conserved_variables};
76
77 struct
78 {
80 bool do_output = false;
81
84 bool print_summary = false;
85
88 std::string output_filename = "eigenvalues";
89
91 unsigned int n_eigenvalues_to_compute = 100;
92 } eigenvalues_data;
93
99 void
100 add_parameters(dealii::ParameterHandler &prm)
101 {
102 prm.enter_subsection("compressible navier stokes");
103 {
104 fe.add_parameters(prm);
105 time_integrator.add_parameters(prm);
106 prm.add_parameter(
107 "linearization jump convective flux",
108 linearization_jump_convective_flux,
109 "Calculation method of the linearized jump operator in the convective "
110 "numerical flux (required for implicit time stepping). The options are \"analytic\","
111 " \"complete_fd\" and \"lambda_fd\".");
112 prm.add_parameter("numerical flux type",
113 numerical_flux_type,
114 "Type of the numerical flux.");
115 prm.add_parameter("courant number",
116 courant_number,
117 "Courant number for convective time-step limit.");
118 prm.add_parameter("viscous courant number",
119 viscous_courant_number,
120 "Characteristic Courant-like number for viscous time-step limit.");
121
122 prm.add_parameter("jacobian type",
123 jacobian_type,
124 "Type of the jacobian. Choose between 'exact' and 'finite_difference'.");
125 prm.add_parameter(
126 "use cfl criteria",
127 do_cfl_time_stepping,
128 "If set to true, the CFL time step size criteria is used to determine the time step"
129 " size in each iteration.");
130 prm.add_parameter("gravity constant", gravity_constant, "Gravity constant.");
131 prm.add_parameter("domain representation type",
132 domain_representation_type,
133 "Domain representation type. Choose between 'fitted' and 'cut'.",
134 dealii::Patterns::Selection("fitted|cut"));
135 prm.add_parameter("verbosity level", verbosity_level, "Verbosity level for output.");
136 limiter_data.add_parameters(prm);
137 }
138 prm.leave_subsection();
139
140 prm.enter_subsection("output");
141 {
142 prm.enter_subsection("paraview");
143 {
144 prm.add_parameter("compressible output types",
145 output_variables,
146 "Type of the variables added to the output.");
147 }
148 prm.leave_subsection();
149 prm.enter_subsection("eigenvalues");
150 {
151 prm.add_parameter("enable",
152 eigenvalues_data.do_output,
153 "Whether to output eigenvalues of the Jacobian.");
154 prm.add_parameter(
155 "file name",
156 eigenvalues_data.output_filename,
157 "Name of the file to which eigenvalues are written. A file ending is not required and will be added automatically.");
158 prm.add_parameter(
159 "print summary",
160 eigenvalues_data.print_summary,
161 "Whether to print a summary of the eigenvalues to the console on output time steps.");
162 prm.add_parameter("number of eigenvalues",
163 eigenvalues_data.n_eigenvalues_to_compute,
164 "Number of eigenvalues to compute if output_eigenvalues is true.");
165 }
166 prm.leave_subsection();
167 }
168 prm.leave_subsection();
169 }
170
177 void
178 post(const FiniteElementData &base_fe_data, const unsigned int base_verbosity_level)
179 {
180 fe.post(base_fe_data);
181 AssertThrow(fe.type == FiniteElementType::FE_DGQ,
182 dealii::ExcMessage(
183 "The compressible flow solver only supports elements of type 'FE_DGQ'."));
184
185 // set default time integration scheme for cut
186 if (domain_representation_type == "cut")
187 {
188 if (time_integrator.integrator_type ==
189 TimeIntegration::TimeIntegratorSchemes::not_initialized)
190 time_integrator.integrator_type =
191 TimeIntegration::TimeIntegratorSchemes::explicit_euler;
192 AssertThrow(
193 time_integrator.integrator_type ==
194 TimeIntegration::TimeIntegratorSchemes::explicit_euler,
195 dealii::ExcMessage(
196 "The cut compressible flow solver only supports explicit Euler time integration."));
197 }
198
199 // Synchronize verbosity with base verbosity if not set explicitly.
200 if (verbosity_level < 0)
201 verbosity_level = base_verbosity_level;
202 }
203 };
204
209 template <typename number>
211 {
215 std::string unfitted_flow_boundary_condition = "no_slip_wall";
216
219
222
228 void
229 add_parameters(dealii::ParameterHandler &prm)
230 {
231 prm.enter_subsection("cut");
232 {
233 prm.add_parameter("unfitted flow boundary condition",
235 "Flow boundary condition type at the unfitted boundary. "
236 "Choose between 'no_slip_wall' and 'inflow'.");
237 stabilization.add_parameters(prm);
239 }
240 prm.leave_subsection();
241 }
242 };
243} // namespace MeltPoolDG::CompressibleFlow
This file contains various functions that can be used to set and evaluate boundary conditions for the...
Definition boundary_condition_functions.hpp:17
analytic
Definition operation_data.hpp:24
lambda_fd
Definition operation_data.hpp:24
complete_fd
Definition operation_data.hpp:24
BETTER_ENUM(RampUpType, char, none, linear, exponential, cosine)
Enum for the type of ramp up function used for the velocity at an inflow boundary.
Collection of cut-related solver parameters required by the cut single-phase and multiphase compressi...
Definition operation_data.hpp:211
CutStabilizationData< number > stabilization
cut-related stabilization parameters
Definition operation_data.hpp:218
std::string unfitted_flow_boundary_condition
Definition operation_data.hpp:215
CutRepartitionData repartition
cut-related repartitioning parameters
Definition operation_data.hpp:221
void add_parameters(dealii::ParameterHandler &prm)
Add cut parameters in the parameter handler.
Definition operation_data.hpp:229
Collection of parameters required by the compressible Navier-Stokes operator.
Definition operation_data.hpp:35
TimeIntegration::TimeIntegratorData< number > time_integrator
Time integration data.
Definition operation_data.hpp:40
void add_parameters(dealii::ParameterHandler &prm)
Add compressible flow parameters in the parameter handler.
Definition operation_data.hpp:100
Utilities::LimiterData< number > limiter_data
Definition operation_data.hpp:72
FiniteElementData fe
Finite element data.
Definition operation_data.hpp:37
void post(const FiniteElementData &base_fe_data, const unsigned int base_verbosity_level)
Finalizes, adjusts and checks compressible flow parameters after reading user input.
Definition operation_data.hpp:178
Collection of parameters for the weighted repartitioning of the triangulation in cut applications.
Definition cut_data.hpp:74
void add_parameters(dealii::ParameterHandler &prm)
Add the repartitioning parameters in the parameter handler.
Definition cut_data.cpp:46
Collection of parameters for the stabilization of cutFEM and cutDG applications.
Definition cut_data.hpp:48
Definition finite_element_data.hpp:12
void add_parameters(dealii::ParameterHandler &prm)
Definition finite_element_data.cpp:8
void post(const FiniteElementData &base_fe_data)
Definition finite_element_data.cpp:30
FiniteElementType type
Definition finite_element_data.hpp:13
Definition limiters.hpp:32
void add_parameters(dealii::ParameterHandler &prm)
Definition limiters.templates.hpp:28