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 "inviscid_split_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 "turbulent_channel_flow_skin_friction_check.h" 51 #include "dipole_wall_collision_unsteady_quantity_check.h" 52 #include "turbulent_channel_flow_unsteady_quantity_check.h" 53 #include "build_NNLS_problem.h" 54 #include "hyper_reduction_comparison.h" 55 #include "hyper_adaptive_sampling_run.h" 56 #include "hyper_reduction_post_sampling.h" 57 #include "ROM_error_post_sampling.h" 58 #include "HROM_error_post_sampling.h" 59 #include "hyper_adaptive_sampling_new_error.h" 60 #include "halton_sampling_run.h" 61 #include "multispecies_vortex_advection.h" 66 using AllParam = Parameters::AllParameters;
69 : all_parameters(parameters_input)
70 , mpi_communicator(MPI_COMM_WORLD)
71 , mpi_rank(dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD))
72 , n_mpi(dealii::Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD))
73 , pcout(
std::cout, mpi_rank==0)
78 std::vector<int> n_1d_cells(n_grids);
81 for (
int igrid=1;igrid<n_grids;++igrid) {
94 const PDE_enum pde_type = param->
pde_type;
95 std::string pde_string;
96 if (pde_type == PDE_enum::advection) {pde_string =
"advection";}
97 if (pde_type == PDE_enum::advection_vector) {pde_string =
"advection_vector";}
98 if (pde_type == PDE_enum::diffusion) {pde_string =
"diffusion";}
99 if (pde_type == PDE_enum::convection_diffusion) {pde_string =
"convection_diffusion";}
100 if (pde_type == PDE_enum::burgers_inviscid) {pde_string =
"burgers_inviscid";}
101 if (pde_type == PDE_enum::burgers_viscous) {pde_string =
"burgers_viscous";}
102 if (pde_type == PDE_enum::burgers_rewienski) {pde_string =
"burgers_rewienski";}
103 if (pde_type == PDE_enum::euler) {pde_string =
"euler";}
104 if (pde_type == PDE_enum::navier_stokes) {pde_string =
"navier_stokes";}
105 if (pde_type == PDE_enum::physics_model) {
106 pde_string =
"physics_model";
109 std::string model_string =
"WARNING: invalid model";
110 if(model == Model_enum::large_eddy_simulation) {
112 model_string =
"large_eddy_simulation";
115 std::string sgs_model_string =
"WARNING: invalid SGS model";
117 if (sgs_model==SGSModel_enum::smagorinsky) sgs_model_string =
"smagorinsky";
118 else if(sgs_model==SGSModel_enum::wall_adaptive_local_eddy_viscosity) sgs_model_string =
"wall_adaptive_local_eddy_viscosity";
119 else if(sgs_model==SGSModel_enum::vreman) sgs_model_string =
"vreman";
120 pde_string += std::string(
" (Model: ") + model_string + std::string(
", SGS Model: ") + sgs_model_string + std::string(
")");
121 }
else if(model == Model_enum::navier_stokes_model) {
122 model_string =
"navier_stokes_model";
124 else if(model == Model_enum::reynolds_averaged_navier_stokes) {
126 model_string =
"reynolds_averaged_navier_stokes";
129 std::string rans_model_string =
"WARNING: invalid RANS model";
131 if (rans_model==RANSModel_enum::SA_negative) rans_model_string =
"SA_negative";
132 pde_string += std::string(
" (Model: ") + model_string + std::string(
", RANS Model: ") + rans_model_string + std::string(
")");
134 if(pde_string ==
"physics_model") pde_string += std::string(
" (Model: ") + model_string + std::string(
")");
143 std::string conv_num_flux_string;
144 if (CNF_type == CNF_enum::lax_friedrichs) {conv_num_flux_string =
"lax_friedrichs";}
145 if (CNF_type == CNF_enum::roe) {conv_num_flux_string =
"roe";}
146 if (CNF_type == CNF_enum::l2roe) {conv_num_flux_string =
"l2roe";}
147 if (CNF_type == CNF_enum::central_flux) {conv_num_flux_string =
"central_flux";}
148 if (CNF_type == CNF_enum::two_point_flux) {conv_num_flux_string =
"two_point_flux";}
149 if (CNF_type == CNF_enum::two_point_flux_with_lax_friedrichs_dissipation) {
150 conv_num_flux_string =
"two_point_flux_with_lax_friedrichs_dissipation";
151 }
if (CNF_type == CNF_enum::two_point_flux_with_roe_dissipation) {
152 conv_num_flux_string =
"two_point_flux_with_roe_dissipation";
153 }
if (CNF_type == CNF_enum::two_point_flux_with_l2roe_dissipation) {
154 conv_num_flux_string =
"two_point_flux_with_l2roe_dissipation";
157 return conv_num_flux_string;
164 std::string diss_num_flux_string;
165 if (DNF_type == DNF_enum::symm_internal_penalty) {diss_num_flux_string =
"symm_internal_penalty";}
166 if (DNF_type == DNF_enum::bassi_rebay_2) {diss_num_flux_string =
"bassi_rebay_2";}
167 return diss_num_flux_string;
175 const ManufacturedSolutionEnum MS_type = manu_grid_conv_param.manufactured_solution_param.manufactured_solution_type;
176 std::string manufactured_solution_string;
177 if (MS_type == ManufacturedSolutionEnum::sine_solution) {manufactured_solution_string =
"sine_solution";}
178 if (MS_type == ManufacturedSolutionEnum::cosine_solution) {manufactured_solution_string =
"cosine_solution";}
179 if (MS_type == ManufacturedSolutionEnum::additive_solution) {manufactured_solution_string =
"additive_solution";}
180 if (MS_type == ManufacturedSolutionEnum::exp_solution) {manufactured_solution_string =
"exp_solution";}
181 if (MS_type == ManufacturedSolutionEnum::poly_solution) {manufactured_solution_string =
"poly_solution";}
182 if (MS_type == ManufacturedSolutionEnum::even_poly_solution) {manufactured_solution_string =
"even_poly_solution";}
183 if (MS_type == ManufacturedSolutionEnum::atan_solution) {manufactured_solution_string =
"atan_solution";}
184 if (MS_type == ManufacturedSolutionEnum::boundary_layer_solution) {manufactured_solution_string =
"boundary_layer_solution";}
185 if (MS_type == ManufacturedSolutionEnum::s_shock_solution) {manufactured_solution_string =
"s_shock_solution";}
186 if (MS_type == ManufacturedSolutionEnum::quadratic_solution) {manufactured_solution_string =
"quadratic_solution";}
187 if (MS_type == ManufacturedSolutionEnum::example_solution) {manufactured_solution_string =
"example_solution";}
188 if (MS_type == ManufacturedSolutionEnum::navah_solution_1) {manufactured_solution_string =
"navah_solution_1";}
189 if (MS_type == ManufacturedSolutionEnum::navah_solution_2) {manufactured_solution_string =
"navah_solution_2";}
190 if (MS_type == ManufacturedSolutionEnum::navah_solution_3) {manufactured_solution_string =
"navah_solution_3";}
191 if (MS_type == ManufacturedSolutionEnum::navah_solution_4) {manufactured_solution_string =
"navah_solution_4";}
192 if (MS_type == ManufacturedSolutionEnum::navah_solution_5) {manufactured_solution_string =
"navah_solution_5";}
193 return manufactured_solution_string;
208 template<
int dim,
int nspecies,
int nstate,
typename MeshType>
211 dealii::ParameterHandler ¶meter_handler_input) {
213 Mesh_enum mesh_type = parameters_input->
mesh_type;
215 if(mesh_type == Mesh_enum::default_triangulation) {
221 }
else if(mesh_type == Mesh_enum::triangulation) {
223 }
else if(mesh_type == Mesh_enum::parallel_shared_triangulation) {
225 }
else if(mesh_type == Mesh_enum::parallel_distributed_triangulation) {
227 std::cout <<
"dealii::parallel::distributed::Triangulation is unavailible in 1D." << std::endl;
232 std::cout <<
"Invalid mesh type." << std::endl;
238 template<
int dim,
int nspecies,
int nstate,
typename MeshType>
241 dealii::ParameterHandler ¶meter_handler_input) {
243 const Test_enum test_type = parameters_input->
test_type;
246 if((test_type != Test_enum::finite_difference_sensitivity) &&
247 (test_type != Test_enum::taylor_green_vortex_energy_check) &&
248 (test_type != Test_enum::taylor_green_vortex_restart_check) &&
249 (test_type != Test_enum::dipole_wall_collision_quantity_check) &&
250 (test_type != Test_enum::turbulent_channel_flow_quantity_check)) {
251 (void) parameter_handler_input;
252 }
else if (!((dim==3 && nstate==dim+2) || (dim==1 && nstate==1))) {
253 (void) parameter_handler_input;
256 if(test_type == Test_enum::run_control) {
257 if constexpr(nspecies==1)
return std::make_unique<GridStudy<dim,nspecies,nstate>>(parameters_input);
258 }
else if(test_type == Test_enum::grid_refinement_study) {
259 if constexpr(nspecies==1)
return std::make_unique<GridRefinementStudy<dim,nspecies,nstate,MeshType>>(parameters_input);
260 }
else if(test_type == Test_enum::stability_fr_parameter_range) {
261 if constexpr (((dim==1 && nstate==1 ) || (dim==2 && nstate==1 )) && nspecies==1)
262 return std::make_unique<StabilityFRParametersRange<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
263 }
else if(test_type == Test_enum::burgers_energy_stability) {
264 if constexpr (dim==1 && nstate==1 && nspecies==1)
return std::make_unique<BurgersEnergyStability<dim,nspecies,nstate>>(parameters_input);
265 }
else if(test_type == Test_enum::diffusion_exact_adjoint) {
266 if constexpr (dim>=1 && nstate==1 && nspecies==1)
return std::make_unique<DiffusionExactAdjoint<dim,nspecies,nstate>>(parameters_input);
267 }
else if (test_type == Test_enum::advection_periodicity){
268 if constexpr (nstate == 1 && nspecies==1)
return std::make_unique<AdvectionPeriodic<dim,nspecies,nstate>> (parameters_input);
269 }
else if (test_type == Test_enum::convection_diffusion_periodicity){
270 if constexpr (nstate == 1 && nspecies==1)
return std::make_unique<ConvectionDiffusionPeriodic<dim,nspecies,nstate>> (parameters_input);
271 }
else if(test_type == Test_enum::euler_gaussian_bump) {
272 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<EulerGaussianBump<dim,nspecies,nstate>>(parameters_input,parameter_handler_input);
273 }
else if(test_type == Test_enum::euler_gaussian_bump_enthalpy) {
274 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<EulerGaussianBumpEnthalpyCheck<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
277 }
else if(test_type == Test_enum::euler_cylinder) {
278 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<EulerCylinder<dim,nspecies,nstate>>(parameters_input);
279 }
else if(test_type == Test_enum::euler_cylinder_adjoint) {
280 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<EulerCylinderAdjoint<dim,nspecies,nstate>>(parameters_input);
281 }
else if(test_type == Test_enum::euler_vortex) {
282 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<EulerVortex<dim,nspecies,nstate>>(parameters_input);
283 }
else if(test_type == Test_enum::euler_entropy_waves) {
284 if constexpr (dim>=2 && nstate==PHILIP_DIM+2 && nspecies==1)
return std::make_unique<EulerEntropyWaves<dim,nspecies,nstate>>(parameters_input);
285 }
else if(test_type == Test_enum::euler_split_taylor_green) {
286 if constexpr (dim==3 && nstate == dim+2 && nspecies==1)
return std::make_unique<InviscidTaylorGreen<dim,nspecies,nstate>>(parameters_input);
287 }
else if(test_type == Test_enum::taylor_green_scaling) {
288 if constexpr (dim==3 && nstate == dim+2 && nspecies==1)
return std::make_unique<InviscidTaylorGreenScaling<dim,nspecies,nstate>>(parameters_input);
289 }
else if(test_type == Test_enum::optimization_inverse_manufactured) {
290 if constexpr(nspecies==1)
return std::make_unique<OptimizationInverseManufactured<dim,nspecies,nstate>>(parameters_input);
291 }
else if(test_type == Test_enum::euler_bump_optimization) {
292 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<EulerBumpOptimization<dim,nspecies,nstate>>(parameters_input);
293 }
else if(test_type == Test_enum::euler_naca_optimization) {
294 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<EulerNACAOptimization<dim,nspecies,nstate>>(parameters_input);
295 }
else if(test_type == Test_enum::shock_1d) {
296 if constexpr (dim==1 && nstate==1 && nspecies==1)
return std::make_unique<Shock1D<dim,nspecies,nstate>>(parameters_input);
297 }
else if(test_type == Test_enum::reduced_order) {
298 if constexpr (((dim==2 && nstate==dim+2) || (dim==1 && nstate==1)) && nspecies==1)
return std::make_unique<ReducedOrder<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
299 }
else if(test_type == Test_enum::unsteady_reduced_order) {
300 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<UnsteadyReducedOrder<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
301 }
else if(test_type == Test_enum::POD_adaptive_sampling_run) {
302 if constexpr (((dim==2 && nstate==dim+2) || (dim==1 && nstate==1)) && nspecies==1)
return std::make_unique<AdaptiveSamplingRun<dim,nspecies,nstate>>(parameters_input,parameter_handler_input);
303 }
else if(test_type == Test_enum::adaptive_sampling_testing) {
304 if constexpr (((dim==2 && nstate==dim+2) || (dim==1 && nstate==1)) && nspecies==1)
return std::make_unique<AdaptiveSamplingTesting<dim,nspecies,nstate>>(parameters_input,parameter_handler_input);
305 }
else if(test_type == Test_enum::euler_naca0012) {
306 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<EulerNACA0012<dim,nspecies,nstate>>(parameters_input,parameter_handler_input);
307 }
else if(test_type == Test_enum::dual_weighted_residual_mesh_adaptation) {
308 if constexpr (dim==2 && nstate==1 && nspecies==1)
return std::make_unique<DualWeightedResidualMeshAdaptation<dim, nspecies, nstate>>(parameters_input,parameter_handler_input);
309 }
else if(test_type == Test_enum::anisotropic_mesh_adaptation) {
310 if constexpr (((dim==2 && nstate==1) || (dim==2 && nstate==dim+2)) && nspecies==1)
return std::make_unique<AnisotropicMeshAdaptationCases<dim, nspecies, nstate>>(parameters_input,parameter_handler_input);
311 }
else if(test_type == Test_enum::taylor_green_vortex_energy_check) {
312 if constexpr (dim==3 && nstate==dim+2 && nspecies==1)
return std::make_unique<TaylorGreenVortexEnergyCheck<dim,nspecies,nstate>>(parameters_input,parameter_handler_input);
313 }
else if(test_type == Test_enum::taylor_green_vortex_restart_check) {
314 if constexpr (dim==3 && nstate==dim+2 && nspecies==1)
return std::make_unique<TaylorGreenVortexRestartCheck<dim,nspecies,nstate>>(parameters_input,parameter_handler_input);
315 }
else if(test_type == Test_enum::homogeneous_isotropic_turbulence_initialization_check){
316 if constexpr (dim==3 && nstate==dim+2 && nspecies==1)
return std::make_unique<HomogeneousIsotropicTurbulenceInitializationCheck<dim,nspecies,nstate>>(parameters_input,parameter_handler_input);
317 }
else if(test_type == Test_enum::turbulent_channel_flow_skin_friction_check){
318 if constexpr (dim==3 && nstate==dim+2 && nspecies==1)
return std::make_unique<TurbulentChannelFlowSkinFrictionCheck<dim,nspecies,nstate>>(parameters_input,parameter_handler_input);
319 }
else if(test_type == Test_enum::dipole_wall_collision_quantity_check) {
320 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<DipoleWallCollisionUnsteadyQuantityCheck<dim,nspecies,nstate>>(parameters_input,parameter_handler_input);
321 }
else if(test_type == Test_enum::turbulent_channel_flow_quantity_check) {
322 if constexpr (dim==3 && nstate==dim+2 && nspecies==1)
return std::make_unique<TurbulentChannelFlowUnsteadyQuantityCheck<dim,nspecies,nstate>>(parameters_input,parameter_handler_input);
323 }
else if(test_type == Test_enum::time_refinement_study) {
324 if constexpr (dim==1 && nstate==1 && nspecies==1)
return std::make_unique<GeneralRefinementStudy<dim, nspecies, nstate>>(parameters_input, parameter_handler_input,
326 }
else if(test_type == Test_enum::h_refinement_study_isentropic_vortex) {
327 if constexpr (dim+2==nstate && dim!=1 && nspecies==1)
return std::make_unique<HRefinementStudyIsentropicVortex<dim, nspecies, nstate>>(parameters_input, parameter_handler_input);
328 }
else if(test_type == Test_enum::time_refinement_study_reference) {
329 if constexpr (dim==1 && nstate==1 && nspecies==1)
return std::make_unique<TimeRefinementStudyReference<dim, nspecies, nstate>>(parameters_input, parameter_handler_input);
330 }
else if(test_type == Test_enum::rrk_numerical_entropy_conservation_check) {
331 if constexpr (((dim==1 && nstate==1) || (dim==3 && nstate==dim+2)) && nspecies==1)
return std::make_unique<RRKNumericalEntropyConservationCheck<dim, nspecies, nstate>>(parameters_input, parameter_handler_input);
332 }
else if(test_type == Test_enum::euler_entropy_conserving_split_forms_check) {
333 if constexpr (dim==3 && nstate==dim+2 && nspecies==1)
return std::make_unique<EulerSplitEntropyCheck<dim, nspecies, nstate>>(parameters_input, parameter_handler_input);
334 }
else if(test_type == Test_enum::khi_robustness) {
335 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<KHIRobustness<dim, nspecies, nstate>>(parameters_input, parameter_handler_input);
336 }
else if(test_type == Test_enum::build_NNLS_problem) {
337 if constexpr (dim==1 && nstate==1 && nspecies==1)
return std::make_unique<BuildNNLSProblem<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
338 }
else if(test_type == Test_enum::hyper_reduction_comparison) {
339 if constexpr (dim==1 && nstate==1 && nspecies==1)
return std::make_unique<HyperReductionComparison<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
340 }
else if(test_type == Test_enum::hyper_adaptive_sampling_run) {
341 if constexpr (((dim==2 && nstate==dim+2) || (dim==1 && nstate==1)) && nspecies==1)
return std::make_unique<HyperAdaptiveSamplingRun<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
342 }
else if(test_type == Test_enum::hyper_reduction_post_sampling) {
343 if constexpr (((dim==2 && nstate==dim+2) || (dim==1 && nstate==1)) && nspecies==1)
return std::make_unique<HyperReductionPostSampling<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
344 }
else if(test_type == Test_enum::ROM_error_post_sampling) {
345 if constexpr (((dim==2 && nstate==dim+2) || (dim==1 && nstate==1)) && nspecies==1)
return std::make_unique<ROMErrorPostSampling<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
346 }
else if(test_type == Test_enum::HROM_error_post_sampling) {
347 if constexpr (((dim==2 && nstate==dim+2) || (dim==1 && nstate==1)) && nspecies==1)
return std::make_unique<HROMErrorPostSampling<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
348 }
else if(test_type == Test_enum::hyper_adaptive_sampling_new_error) {
349 if constexpr (((dim==2 && nstate==dim+2) || (dim==1 && nstate==1)) && nspecies==1)
return std::make_unique<HyperAdaptiveSamplingNewError<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
350 }
else if(test_type == Test_enum::halton_sampling_run) {
351 if constexpr (((dim==2 && nstate==dim+2) || (dim==1 && nstate==1)) && nspecies==1)
return std::make_unique<HaltonSamplingRun<dim,nspecies,nstate>>(parameters_input, parameter_handler_input);
352 }
else if (test_type == Test_enum::advection_limiter) {
353 if constexpr (nstate == 1 && dim < 3 && nspecies==1)
return std::make_unique<BoundPreservingLimiterTests<dim, nspecies, nstate>>(parameters_input, parameter_handler_input);
354 }
else if (test_type == Test_enum::burgers_limiter) {
355 if constexpr (nstate == dim && dim < 3 && nspecies==1)
return std::make_unique<BoundPreservingLimiterTests<dim, nspecies, nstate>>(parameters_input, parameter_handler_input);
356 }
else if(test_type == Test_enum::low_density) {
357 if constexpr (dim<3 && nstate==dim+2 && nspecies==1)
return std::make_unique<BoundPreservingLimiterTests<dim, nspecies, nstate>>(parameters_input, parameter_handler_input);
358 }
else if(test_type == Test_enum::naca0012_unsteady_check_quick){
359 if constexpr (dim==2 && nstate==dim+2 && nspecies==1)
return std::make_unique<NACA0012UnsteadyCheckQuick<dim, nspecies, nstate>>(parameters_input, parameter_handler_input);
360 }
else if(test_type == Test_enum::multi_species_vortex_advection){
361 if constexpr ((nspecies==2 || nspecies==3) && nstate==dim+nspecies+1)
362 return std::make_unique<MultispeciesVortexAdvection<dim, nspecies, nstate>>(parameters_input, parameter_handler_input);
363 }
else if(test_type == Test_enum::real_gas_split_taylor_green) {
364 if constexpr (dim==3 && nstate == dim+nspecies+1)
return std::make_unique<InviscidTaylorGreen<dim,nspecies,nstate>>(parameters_input);
366 std::cout <<
"Invalid test. You probably forgot to add it to the list of tests in tests.cpp" << std::endl;
373 template<
int dim,
int nspecies,
int nstate,
typename MeshType>
376 dealii::ParameterHandler ¶meter_handler_input)
388 else if(nstate == parameters_input->
nstate)
390 else if constexpr (nstate > 1)
395 else if constexpr (dim > 1)
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
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.
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.
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.
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.
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 nspecies, int nstate>
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.
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.
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.