[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
stability_fr_parameter_range.cpp
1 #include <deal.II/base/tensor.h>
2 #include <deal.II/base/convergence_table.h>
3 
4 #include "stability_fr_parameter_range.h"
5 #include "dg/dg_factory.hpp"
6 #include "ode_solver/ode_solver_base.h"
7 #include <fstream>
8 #include "ode_solver/ode_solver_factory.h"
9 #include "physics/initial_conditions/set_initial_condition.h"
10 #include "physics/initial_conditions/initial_condition_function.h"
11 #include "mesh/grids/straight_periodic_cube.hpp"
12 
13 
14 namespace PHiLiP {
15 namespace Tests {
16 
17 template <int dim, int nstate>
19  const PHiLiP::Parameters::AllParameters *const parameters_input,
20  const dealii::ParameterHandler &parameter_handler_input)
21 : GeneralRefinementStudy<dim,nstate>(parameters_input, parameter_handler_input,
22  GeneralRefinementStudy<dim,nstate>::RefinementType::cell_length)
23 {}
24 
25 
26 template <int dim, int nstate>
28 {
29  PHiLiP::Parameters::AllParameters parameters = *(parameters_in);
31 
32  return parameters;
33 }
34 
35 template <int dim, int nstate>
37 {
38  this->pcout << " Running stability ESFR parameter range test. " << std::endl;
39  int testfail = 0;
40 
42  this->pcout << "Warning: order checks in StabilityFRParametersRange are hard-coded for p=2." << std::endl
43  << "This test may fail for other poly_degree choices, as FR will lose an order" << std::endl
44  << "at a different c value." << std::endl;
45  }
46 
47  const unsigned int nb_c_value = this->all_parameters->flow_solver_param.number_ESFR_parameter_values;
50  const double log_c_min = std::log10(c_min);
51  const double log_c_max = std::log10(c_max);
52  std::vector<double> c_array(nb_c_value+1);
53  // Create log space array of c_value
54  for (unsigned int ic = 0; ic < nb_c_value; ic++) {
55  double log_c = log_c_min + (log_c_max - log_c_min) / (nb_c_value - 1) * ic;
56  c_array[ic] = std::pow(10.0, log_c);
57  }
58 
60 
61  // clear output file
62  if (this->pcout.is_active()){
63  std::ofstream conv_tab_file;
64  const std::string fname = "convergence_table.txt";
65  conv_tab_file.open(fname);
66  conv_tab_file.close();
67  }
68 
69  // Loop over c_array to compute slope
70  for (unsigned int ic = 0; ic < nb_c_value+1; ic++) {
71  double c_value = c_array[ic];
72  this->pcout << "\n\n---------------------------------------------" << std::endl;
73  this->pcout << " Entering refinement loop for a new c value = " << c_value << std::endl;
74  this->pcout << "---------------------------------------------" << std::endl;
75 
76  if (this->pcout.is_active()){
77  std::ofstream conv_tab_file;
78  const std::string fname = "convergence_table.txt";
79  conv_tab_file.open(fname, std::ios::app);
80  conv_tab_file << "Convergence for c = " << c_value << std::endl;
81  conv_tab_file.close();
82  }
83 
84  const Parameters::AllParameters parameters_c_loop = reinit_params_c_value(this->all_parameters, c_value);
85 
86  const double expected_order = (c_value >= 0.186) ? parameters_c_loop.flow_solver_param.poly_degree : parameters_c_loop.flow_solver_param.poly_degree + 1;
87 
88  int local_testfail = this->run_refinement_study_and_write_result(&parameters_c_loop, expected_order, false, true);
89  if (local_testfail == 1) testfail = 1;
90  }
91 
92  return testfail;
93 }
94 #if PHILIP_DIM==1
96 #else
98 #endif
99 } // Tests namespace
100 } // PHiLiP namespace
Advection time refinement study.
FlowSolverParam flow_solver_param
Contains the parameters for simulation cases (flow solver test)
double ESFR_parameter_values_start
For user defined FR parameter tests, value of starting FR param.
int number_ESFR_parameter_values
For user defined FR parameter tests, number of values to be tested.
double ESFR_parameter_values_end
For user defined FR parameter tests, value of final FR param.
Files for the baseline physics.
Definition: ADTypes.hpp:10
int run_refinement_study_and_write_result(const Parameters::AllParameters *parameters_in, const double expected_order, const bool check_only_last_refinement=false, const bool append_to_file=false) const
Run the refinements.
unsigned int poly_degree
Polynomial order (P) of the basis functions for DG.
Main parameter class that contains the various other sub-parameter classes.
const Parameters::AllParameters *const all_parameters
Pointer to all parameters.
Definition: tests.h:20
StabilityFRParametersRange(const Parameters::AllParameters *const parameters_input, const dealii::ParameterHandler &parameter_handler_input)
Constructor.
double FR_user_specified_correction_parameter_value
User specified flux recontruction correction parameter value.
Parameters::AllParameters reinit_params_c_value(const Parameters::AllParameters *parameters_in, const double c_value) const
Reinitialize parameters for the c loop.
dealii::ConditionalOStream pcout
ConditionalOStream.
Definition: tests.h:45