3 #include <deal.II/grid/grid_out.h> 5 #include <deal.II/distributed/solution_transfer.h> 7 #include <deal.II/grid/tria.h> 8 #include <deal.II/distributed/shared_tria.h> 9 #include <deal.II/distributed/tria.h> 12 #include "grid_study.h" 13 #include "grid_refinement_study.h" 14 #include "burgers_stability.h" 15 #include "diffusion_exact_adjoint.h" 16 #include "euler_gaussian_bump.h" 17 #include "euler_gaussian_bump_enthalpy_check.h" 18 #include "euler_gaussian_bump_adjoint.h" 19 #include "euler_cylinder.h" 20 #include "euler_cylinder_adjoint.h" 21 #include "euler_vortex.h" 22 #include "euler_entropy_waves.h" 23 #include "advection_explicit_periodic.h" 24 #include "euler_split_inviscid_taylor_green_vortex.h" 25 #include "TGV_scaling.h" 26 #include "optimization_inverse_manufactured/optimization_inverse_manufactured.h" 27 #include "euler_bump_optimization.h" 28 #include "euler_naca0012_optimization.hpp" 30 #include "euler_naca0012.hpp" 31 #include "reduced_order.h" 32 #include "unsteady_reduced_order.h" 33 #include "convection_diffusion_explicit_periodic.h" 34 #include "dual_weighted_residual_mesh_adaptation.h" 35 #include "anisotropic_mesh_adaptation_cases.h" 36 #include "pod_adaptive_sampling_run.h" 37 #include "pod_adaptive_sampling_testing.h" 38 #include "taylor_green_vortex_energy_check.h" 39 #include "taylor_green_vortex_restart_check.h" 40 #include "general_refinement_study.h" 41 #include "time_refinement_study_reference.h" 42 #include "h_refinement_study_isentropic_vortex.h" 43 #include "rrk_numerical_entropy_conservation_check.h" 44 #include "euler_entropy_conserving_split_forms_check.h" 45 #include "homogeneous_isotropic_turbulence_initialization_check.h" 46 #include "khi_robustness.h" 47 #include "stability_fr_parameter_range.h" 48 #include "bound_preserving_limiter_tests.h" 49 #include "naca0012_unsteady_check_quick.h" 50 #include "build_NNLS_problem.h" 51 #include "hyper_reduction_comparison.h" 52 #include "hyper_adaptive_sampling_run.h" 53 #include "hyper_reduction_post_sampling.h" 54 #include "ROM_error_post_sampling.h" 55 #include "HROM_error_post_sampling.h" 56 #include "hyper_adaptive_sampling_new_error.h" 57 #include "halton_sampling_run.h" 62 using AllParam = Parameters::AllParameters;
65 : all_parameters(parameters_input)
66 , mpi_communicator(MPI_COMM_WORLD)
67 , mpi_rank(dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD))
68 , n_mpi(dealii::Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD))
69 , pcout(
std::cout, mpi_rank==0)
74 std::vector<int> n_1d_cells(n_grids);
77 for (
int igrid=1;igrid<n_grids;++igrid) {
90 const PDE_enum pde_type = param->
pde_type;
91 std::string pde_string;
92 if (pde_type == PDE_enum::advection) {pde_string =
"advection";}
93 if (pde_type == PDE_enum::advection_vector) {pde_string =
"advection_vector";}
94 if (pde_type == PDE_enum::diffusion) {pde_string =
"diffusion";}
95 if (pde_type == PDE_enum::convection_diffusion) {pde_string =
"convection_diffusion";}
96 if (pde_type == PDE_enum::burgers_inviscid) {pde_string =
"burgers_inviscid";}
97 if (pde_type == PDE_enum::burgers_viscous) {pde_string =
"burgers_viscous";}
98 if (pde_type == PDE_enum::burgers_rewienski) {pde_string =
"burgers_rewienski";}
99 if (pde_type == PDE_enum::euler) {pde_string =
"euler";}
100 if (pde_type == PDE_enum::navier_stokes) {pde_string =
"navier_stokes";}
101 if (pde_type == PDE_enum::physics_model) {
102 pde_string =
"physics_model";
105 std::string model_string =
"WARNING: invalid model";
106 if(model == Model_enum::large_eddy_simulation) {
108 model_string =
"large_eddy_simulation";
111 std::string sgs_model_string =
"WARNING: invalid SGS model";
113 if (sgs_model==SGSModel_enum::smagorinsky) sgs_model_string =
"smagorinsky";
114 else if(sgs_model==SGSModel_enum::wall_adaptive_local_eddy_viscosity) sgs_model_string =
"wall_adaptive_local_eddy_viscosity";
115 else if(sgs_model==SGSModel_enum::vreman) sgs_model_string =
"vreman";
116 pde_string += std::string(
" (Model: ") + model_string + std::string(
", SGS Model: ") + sgs_model_string + std::string(
")");
118 else if(model == Model_enum::reynolds_averaged_navier_stokes) {
120 model_string =
"reynolds_averaged_navier_stokes";
123 std::string rans_model_string =
"WARNING: invalid RANS model";
125 if (rans_model==RANSModel_enum::SA_negative) rans_model_string =
"SA_negative";
126 pde_string += std::string(
" (Model: ") + model_string + std::string(
", RANS Model: ") + rans_model_string + std::string(
")");
128 if(pde_string ==
"physics_model") pde_string += std::string(
" (Model: ") + model_string + std::string(
")");
137 std::string conv_num_flux_string;
138 if (CNF_type == CNF_enum::lax_friedrichs) {conv_num_flux_string =
"lax_friedrichs";}
139 if (CNF_type == CNF_enum::roe) {conv_num_flux_string =
"roe";}
140 if (CNF_type == CNF_enum::l2roe) {conv_num_flux_string =
"l2roe";}
141 if (CNF_type == CNF_enum::central_flux) {conv_num_flux_string =
"central_flux";}
142 if (CNF_type == CNF_enum::two_point_flux) {conv_num_flux_string =
"two_point_flux";}
143 if (CNF_type == CNF_enum::two_point_flux_with_lax_friedrichs_dissipation) {
144 conv_num_flux_string =
"two_point_flux_with_lax_friedrichs_dissipation";
145 }
if (CNF_type == CNF_enum::two_point_flux_with_roe_dissipation) {
146 conv_num_flux_string =
"two_point_flux_with_roe_dissipation";
147 }
if (CNF_type == CNF_enum::two_point_flux_with_l2roe_dissipation) {
148 conv_num_flux_string =
"two_point_flux_with_l2roe_dissipation";
151 return conv_num_flux_string;
158 std::string diss_num_flux_string;
159 if (DNF_type == DNF_enum::symm_internal_penalty) {diss_num_flux_string =
"symm_internal_penalty";}
160 if (DNF_type == DNF_enum::bassi_rebay_2) {diss_num_flux_string =
"bassi_rebay_2";}
161 return diss_num_flux_string;
169 const ManufacturedSolutionEnum MS_type = manu_grid_conv_param.manufactured_solution_param.manufactured_solution_type;
170 std::string manufactured_solution_string;
171 if (MS_type == ManufacturedSolutionEnum::sine_solution) {manufactured_solution_string =
"sine_solution";}
172 if (MS_type == ManufacturedSolutionEnum::cosine_solution) {manufactured_solution_string =
"cosine_solution";}
173 if (MS_type == ManufacturedSolutionEnum::additive_solution) {manufactured_solution_string =
"additive_solution";}
174 if (MS_type == ManufacturedSolutionEnum::exp_solution) {manufactured_solution_string =
"exp_solution";}
175 if (MS_type == ManufacturedSolutionEnum::poly_solution) {manufactured_solution_string =
"poly_solution";}
176 if (MS_type == ManufacturedSolutionEnum::even_poly_solution) {manufactured_solution_string =
"even_poly_solution";}
177 if (MS_type == ManufacturedSolutionEnum::atan_solution) {manufactured_solution_string =
"atan_solution";}
178 if (MS_type == ManufacturedSolutionEnum::boundary_layer_solution) {manufactured_solution_string =
"boundary_layer_solution";}
179 if (MS_type == ManufacturedSolutionEnum::s_shock_solution) {manufactured_solution_string =
"s_shock_solution";}
180 if (MS_type == ManufacturedSolutionEnum::quadratic_solution) {manufactured_solution_string =
"quadratic_solution";}
181 if (MS_type == ManufacturedSolutionEnum::example_solution) {manufactured_solution_string =
"example_solution";}
182 if (MS_type == ManufacturedSolutionEnum::navah_solution_1) {manufactured_solution_string =
"navah_solution_1";}
183 if (MS_type == ManufacturedSolutionEnum::navah_solution_2) {manufactured_solution_string =
"navah_solution_2";}
184 if (MS_type == ManufacturedSolutionEnum::navah_solution_3) {manufactured_solution_string =
"navah_solution_3";}
185 if (MS_type == ManufacturedSolutionEnum::navah_solution_4) {manufactured_solution_string =
"navah_solution_4";}
186 if (MS_type == ManufacturedSolutionEnum::navah_solution_5) {manufactured_solution_string =
"navah_solution_5";}
187 return manufactured_solution_string;
202 template<
int dim,
int nstate,
typename MeshType>
205 dealii::ParameterHandler ¶meter_handler_input) {
207 Mesh_enum mesh_type = parameters_input->
mesh_type;
209 if(mesh_type == Mesh_enum::default_triangulation) {
215 }
else if(mesh_type == Mesh_enum::triangulation) {
217 }
else if(mesh_type == Mesh_enum::parallel_shared_triangulation) {
219 }
else if(mesh_type == Mesh_enum::parallel_distributed_triangulation) {
221 std::cout <<
"dealii::parallel::distributed::Triangulation is unavailible in 1D." << std::endl;
226 std::cout <<
"Invalid mesh type." << std::endl;
232 template<
int dim,
int nstate,
typename MeshType>
235 dealii::ParameterHandler ¶meter_handler_input) {
237 const Test_enum test_type = parameters_input->
test_type;
240 if((test_type != Test_enum::finite_difference_sensitivity) &&
241 (test_type != Test_enum::taylor_green_vortex_energy_check) &&
242 (test_type != Test_enum::taylor_green_vortex_restart_check)) {
243 (void) parameter_handler_input;
244 }
else if (!((dim==3 && nstate==dim+2) || (dim==1 && nstate==1))) {
245 (void) parameter_handler_input;
248 if(test_type == Test_enum::run_control) {
249 return std::make_unique<GridStudy<dim,nstate>>(parameters_input);
250 }
else if(test_type == Test_enum::grid_refinement_study) {
251 return std::make_unique<GridRefinementStudy<dim,nstate,MeshType>>(parameters_input);
252 }
else if(test_type == Test_enum::stability_fr_parameter_range) {
253 if constexpr ((dim==1 && nstate==1 ) || (dim==2 && nstate==1 ))
254 return std::make_unique<StabilityFRParametersRange<dim,nstate>>(parameters_input, parameter_handler_input);
255 }
else if(test_type == Test_enum::burgers_energy_stability) {
256 if constexpr (dim==1 && nstate==1)
return std::make_unique<BurgersEnergyStability<dim,nstate>>(parameters_input);
257 }
else if(test_type == Test_enum::diffusion_exact_adjoint) {
258 if constexpr (dim>=1 && nstate==1)
return std::make_unique<DiffusionExactAdjoint<dim,nstate>>(parameters_input);
259 }
else if (test_type == Test_enum::advection_periodicity){
260 if constexpr (nstate == 1)
return std::make_unique<AdvectionPeriodic<dim,nstate>> (parameters_input);
261 }
else if (test_type == Test_enum::convection_diffusion_periodicity){
262 if constexpr (nstate == 1)
return std::make_unique<ConvectionDiffusionPeriodic<dim,nstate>> (parameters_input);
263 }
else if(test_type == Test_enum::euler_gaussian_bump) {
264 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<EulerGaussianBump<dim,nstate>>(parameters_input,parameter_handler_input);
265 }
else if(test_type == Test_enum::euler_gaussian_bump_enthalpy) {
266 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<EulerGaussianBumpEnthalpyCheck<dim,nstate>>(parameters_input, parameter_handler_input);
269 }
else if(test_type == Test_enum::euler_cylinder) {
270 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<EulerCylinder<dim,nstate>>(parameters_input);
271 }
else if(test_type == Test_enum::euler_cylinder_adjoint) {
272 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<EulerCylinderAdjoint<dim,nstate>>(parameters_input);
273 }
else if(test_type == Test_enum::euler_vortex) {
274 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<EulerVortex<dim,nstate>>(parameters_input);
275 }
else if(test_type == Test_enum::euler_entropy_waves) {
276 if constexpr (dim>=2 && nstate==PHILIP_DIM+2)
return std::make_unique<EulerEntropyWaves<dim,nstate>>(parameters_input);
277 }
else if(test_type == Test_enum::euler_split_taylor_green) {
278 if constexpr (dim==3 && nstate == dim+2)
return std::make_unique<EulerTaylorGreen<dim,nstate>>(parameters_input);
279 }
else if(test_type == Test_enum::taylor_green_scaling) {
280 if constexpr (dim==3 && nstate == dim+2)
return std::make_unique<EulerTaylorGreenScaling<dim,nstate>>(parameters_input);
281 }
else if(test_type == Test_enum::optimization_inverse_manufactured) {
282 return std::make_unique<OptimizationInverseManufactured<dim,nstate>>(parameters_input);
283 }
else if(test_type == Test_enum::euler_bump_optimization) {
284 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<EulerBumpOptimization<dim,nstate>>(parameters_input);
285 }
else if(test_type == Test_enum::euler_naca_optimization) {
286 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<EulerNACAOptimization<dim,nstate>>(parameters_input);
287 }
else if(test_type == Test_enum::shock_1d) {
288 if constexpr (dim==1 && nstate==1)
return std::make_unique<Shock1D<dim,nstate>>(parameters_input);
289 }
else if(test_type == Test_enum::reduced_order) {
290 if constexpr ((dim==2 && nstate==dim+2) || (dim==1 && nstate==1))
return std::make_unique<ReducedOrder<dim,nstate>>(parameters_input, parameter_handler_input);
291 }
else if(test_type == Test_enum::unsteady_reduced_order) {
292 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<UnsteadyReducedOrder<dim,nstate>>(parameters_input, parameter_handler_input);
293 }
else if(test_type == Test_enum::POD_adaptive_sampling_run) {
294 if constexpr ((dim==2 && nstate==dim+2) || (dim==1 && nstate==1))
return std::make_unique<AdaptiveSamplingRun<dim,nstate>>(parameters_input,parameter_handler_input);
295 }
else if(test_type == Test_enum::adaptive_sampling_testing) {
296 if constexpr ((dim==2 && nstate==dim+2) || (dim==1 && nstate==1))
return std::make_unique<AdaptiveSamplingTesting<dim,nstate>>(parameters_input,parameter_handler_input);
297 }
else if(test_type == Test_enum::euler_naca0012) {
298 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<EulerNACA0012<dim,nstate>>(parameters_input,parameter_handler_input);
299 }
else if(test_type == Test_enum::dual_weighted_residual_mesh_adaptation) {
300 if constexpr (dim==2 && nstate==1)
return std::make_unique<DualWeightedResidualMeshAdaptation<dim, nstate>>(parameters_input,parameter_handler_input);
301 }
else if(test_type == Test_enum::anisotropic_mesh_adaptation) {
302 if constexpr( (dim==2 && nstate==1) || (dim==2 && nstate==dim+2))
return std::make_unique<AnisotropicMeshAdaptationCases<dim, nstate>>(parameters_input,parameter_handler_input);
303 }
else if(test_type == Test_enum::taylor_green_vortex_energy_check) {
304 if constexpr (dim==3 && nstate==dim+2)
return std::make_unique<TaylorGreenVortexEnergyCheck<dim,nstate>>(parameters_input,parameter_handler_input);
305 }
else if(test_type == Test_enum::taylor_green_vortex_restart_check) {
306 if constexpr (dim==3 && nstate==dim+2)
return std::make_unique<TaylorGreenVortexRestartCheck<dim,nstate>>(parameters_input,parameter_handler_input);
307 }
else if(test_type == Test_enum::homogeneous_isotropic_turbulence_initialization_check){
308 if constexpr (dim==3 && nstate==dim+2)
return std::make_unique<HomogeneousIsotropicTurbulenceInitializationCheck<dim,nstate>>(parameters_input,parameter_handler_input);
309 }
else if(test_type == Test_enum::time_refinement_study) {
310 if constexpr (dim==1 && nstate==1)
return std::make_unique<GeneralRefinementStudy<dim, nstate>>(parameters_input, parameter_handler_input,
312 }
else if(test_type == Test_enum::h_refinement_study_isentropic_vortex) {
313 if constexpr (dim+2==nstate && dim!=1)
return std::make_unique<HRefinementStudyIsentropicVortex<dim, nstate>>(parameters_input, parameter_handler_input);
314 }
else if(test_type == Test_enum::time_refinement_study_reference) {
315 if constexpr (dim==1 && nstate==1)
return std::make_unique<TimeRefinementStudyReference<dim, nstate>>(parameters_input, parameter_handler_input);
316 }
else if(test_type == Test_enum::rrk_numerical_entropy_conservation_check) {
317 if constexpr ((dim==1 && nstate==1) || (dim==3 && nstate==dim+2))
return std::make_unique<RRKNumericalEntropyConservationCheck<dim, nstate>>(parameters_input, parameter_handler_input);
318 }
else if(test_type == Test_enum::euler_entropy_conserving_split_forms_check) {
319 if constexpr (dim==3 && nstate==dim+2)
return std::make_unique<EulerSplitEntropyCheck<dim, nstate>>(parameters_input, parameter_handler_input);
320 }
else if(test_type == Test_enum::khi_robustness) {
321 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<KHIRobustness<dim, nstate>>(parameters_input, parameter_handler_input);
322 }
else if(test_type == Test_enum::build_NNLS_problem) {
323 if constexpr (dim==1 && nstate==1)
return std::make_unique<BuildNNLSProblem<dim,nstate>>(parameters_input, parameter_handler_input);
324 }
else if(test_type == Test_enum::hyper_reduction_comparison) {
325 if constexpr (dim==1 && nstate==1)
return std::make_unique<HyperReductionComparison<dim,nstate>>(parameters_input, parameter_handler_input);
326 }
else if(test_type == Test_enum::hyper_adaptive_sampling_run) {
327 if constexpr ((dim==2 && nstate==dim+2) || (dim==1 && nstate==1))
return std::make_unique<HyperAdaptiveSamplingRun<dim,nstate>>(parameters_input, parameter_handler_input);
328 }
else if(test_type == Test_enum::hyper_reduction_post_sampling) {
329 if constexpr ((dim==2 && nstate==dim+2) || (dim==1 && nstate==1))
return std::make_unique<HyperReductionPostSampling<dim,nstate>>(parameters_input, parameter_handler_input);
330 }
else if(test_type == Test_enum::ROM_error_post_sampling) {
331 if constexpr ((dim==2 && nstate==dim+2) || (dim==1 && nstate==1))
return std::make_unique<ROMErrorPostSampling<dim,nstate>>(parameters_input, parameter_handler_input);
332 }
else if(test_type == Test_enum::HROM_error_post_sampling) {
333 if constexpr ((dim==2 && nstate==dim+2) || (dim==1 && nstate==1))
return std::make_unique<HROMErrorPostSampling<dim,nstate>>(parameters_input, parameter_handler_input);
334 }
else if(test_type == Test_enum::hyper_adaptive_sampling_new_error) {
335 if constexpr ((dim==2 && nstate==dim+2) || (dim==1 && nstate==1))
return std::make_unique<HyperAdaptiveSamplingNewError<dim,nstate>>(parameters_input, parameter_handler_input);
336 }
else if(test_type == Test_enum::halton_sampling_run) {
337 if constexpr ((dim==2 && nstate==dim+2) || (dim==1 && nstate==1))
return std::make_unique<HaltonSamplingRun<dim,nstate>>(parameters_input, parameter_handler_input);
338 }
else if (test_type == Test_enum::advection_limiter) {
339 if constexpr (nstate == 1 && dim < 3)
return std::make_unique<BoundPreservingLimiterTests<dim, nstate>>(parameters_input, parameter_handler_input);
340 }
else if (test_type == Test_enum::burgers_limiter) {
341 if constexpr (nstate == dim && dim < 3)
return std::make_unique<BoundPreservingLimiterTests<dim, nstate>>(parameters_input, parameter_handler_input);
342 }
else if(test_type == Test_enum::low_density) {
343 if constexpr (dim<3 && nstate==dim+2)
return std::make_unique<BoundPreservingLimiterTests<dim, nstate>>(parameters_input, parameter_handler_input);
344 }
else if(test_type == Test_enum::naca0012_unsteady_check_quick){
345 if constexpr (dim==2 && nstate==dim+2)
return std::make_unique<NACA0012UnsteadyCheckQuick<dim, nstate>>(parameters_input, parameter_handler_input);
347 std::cout <<
"Invalid test. You probably forgot to add it to the list of tests in tests.cpp" << std::endl;
354 template<
int dim,
int nstate,
typename MeshType>
357 dealii::ParameterHandler ¶meter_handler_input)
367 if(nstate == parameters_input->
nstate)
369 else if constexpr (nstate > 1)
374 else if constexpr (dim > 1)
ManufacturedSolutionType
Selects the manufactured solution to be used if use_manufactured_source_term=true.
PartialDifferentialEquation pde_type
Store the PDE type to be solved.
Advection time refinement study.
TestType
Possible integration tests to run.
Parameters related to the manufactured convergence study.
PartialDifferentialEquation
Possible Partial Differential Equations to solve.
Test factory, that will create the correct test with the right template parameters.
Files for the baseline physics.
static std::unique_ptr< TestsBase > create_test(const Parameters::AllParameters *const parameters_input, dealii::ParameterHandler ¶meter_handler_input)
Recursive factory that will create TestBase<int dim, int nstate>
TestsBase()=delete
Constructor. Deleted the default constructor since it should not be used.
ModelType
Types of models available.
unsigned int dimension
Number of dimensions. Note that it has to match the executable PHiLiP_xD.
Main parameter class that contains the various other sub-parameter classes.
SubGridScaleModel SGS_model_type
Store the SubGridScale (SGS) model type.
ManufacturedConvergenceStudyParam manufactured_convergence_study_param
Contains parameters for manufactured convergence study.
unsigned int initial_grid_size
const Parameters::AllParameters *const all_parameters
Pointer to all parameters.
DissipativeNumericalFlux
Possible dissipative numerical flux types.
TestType test_type
Store selected TestType from the input file.
std::string get_conv_num_flux_string(const Parameters::AllParameters *const param) const
Returns a string describing which convective numerical flux is being used.
ReynoldsAveragedNavierStokesModel
Types of Reynolds-averaged Navier-Stokes (RANS) models that can be used.
ConvectiveNumericalFlux
Possible convective numerical flux types.
MeshType
Mesh type to be used in defining the triangulation.
std::string get_pde_string(const Parameters::AllParameters *const param) const
Returns a string describing which PDE is being used.
ReynoldsAveragedNavierStokesModel RANS_model_type
Store the Reynolds-averaged Navier-Stokes (RANS) model type.
ConvectiveNumericalFlux conv_num_flux_type
Store convective flux type.
std::string get_diss_num_flux_string(const Parameters::AllParameters *const param) const
Returns a string describing which dissipative numerical flux is being used.
int nstate
Number of state variables. Will depend on PDE.
int grid_progression_add
Adds number of cells to 1D grid.
std::string get_manufactured_solution_string(const Parameters::AllParameters *const param) const
Returns a string describing which manufactured solution is being used.
DissipativeNumericalFlux diss_num_flux_type
Store diffusive flux type.
static std::unique_ptr< TestsBase > select_mesh(const Parameters::AllParameters *const parameters_input, dealii::ParameterHandler ¶meter_handler_input)
selects the mesh type to be used in the test
SubGridScaleModel
Types of sub-grid scale (SGS) models that can be used.
double grid_progression
Multiplies the last grid size by this amount.
ModelType model_type
Store the model type.
static std::unique_ptr< TestsBase > select_test(const Parameters::AllParameters *const parameters_input, dealii::ParameterHandler ¶meter_handler_input)
Selects the actual test such as grid convergence, numerical flux conversation, etc.
std::vector< int > get_number_1d_cells(const int ngrids) const
Evaluates the number of cells to generate the grids for 1D grid based on input file.
PhysicsModelParam physics_model_param
Contains parameters for Physics Model.
MeshType mesh_type
Store selected MeshType from the input file.