1 #include "taylor_green_vortex_restart_check.h" 2 #include "flow_solver/flow_solver_factory.h" 3 #include "flow_solver/flow_solver_cases/periodic_turbulence.h" 4 #include <deal.II/base/table_handler.h> 13 template <
int dim,
int nstate>
16 const dealii::ParameterHandler ¶meter_handler_input)
18 , parameter_handler(parameter_handler_input)
19 , kinetic_energy_expected(parameters_input->flow_solver_param.expected_kinetic_energy_at_final_time)
22 template <
int dim,
int nstate>
24 const bool output_restart_files_input,
25 const bool restart_computation_from_file_input,
26 const double final_time_input,
27 const double initial_time_input,
28 const unsigned int initial_iteration_input,
29 const double initial_desired_time_for_output_solution_every_dt_time_intervals_input,
30 const double initial_time_step_input,
31 const int restart_file_index_input)
const {
49 template<
typename InputIterator1,
typename InputIterator2>
50 bool range_equal(InputIterator1 first1, InputIterator1 last1,
51 InputIterator2 first2, InputIterator2 last2)
54 while(first1 != last1 && first2 != last2)
56 if(*first1 != *first2)
return false;
60 return (first1 == last1) && (first2 == last2);
63 bool compare_files(
const std::string& filename1,
const std::string& filename2)
66 std::ifstream file1(filename1);
67 std::ifstream file2(filename2);
69 std::istreambuf_iterator<char> begin1(file1);
70 std::istreambuf_iterator<char> begin2(file2);
72 std::istreambuf_iterator<char> end;
74 return range_equal(begin1, end, begin2, end);
77 template <
int dim,
int nstate>
80 const double time_at_which_we_stop_the_run = 6.2831853072000017e-03;
81 const int restart_file_index = 4;
82 const int initial_iteration_restart = restart_file_index;
88 static_cast<void>(flow_solver_incomplete_run->run());
90 const double time_step_at_stop_time = flow_solver_incomplete_run->flow_solver_case->get_constant_time_step(flow_solver_incomplete_run->dg);
91 const double desired_time_for_output_solution_every_dt_time_intervals_at_stop_time = flow_solver_incomplete_run->ode_solver->current_desired_time_for_output_solution_every_dt_time_intervals;
93 time_at_which_the_run_is_complete,
94 time_at_which_we_stop_the_run,
95 initial_iteration_restart,
96 desired_time_for_output_solution_every_dt_time_intervals_at_stop_time,
97 time_step_at_stop_time,
102 std::shared_ptr<dealii::TableHandler> unsteady_data_table = std::make_shared<dealii::TableHandler>();
104 flow_solver_incomplete_run->initialize_data_table_from_file(file_read,unsteady_data_table);
105 const std::string file_write =
"read_table_check.txt";
106 std::ofstream unsteady_data_table_file(file_write);
107 unsteady_data_table->write_text(unsteady_data_table_file);
109 bool files_are_same = compare_files(file_read,file_write);
110 if(!files_are_same) {
111 pcout <<
"\n Error: initialize_data_table_from_file() failed." << std::endl;
115 pcout <<
"\n Sub-test for initialize_data_table_from_file() passed, continuing test..." << std::endl;
121 static_cast<void>(flow_solver_restart_to_complete_run->run());
124 std::unique_ptr<FlowSolver::PeriodicTurbulence<dim, nstate>> flow_solver_case = std::make_unique<FlowSolver::PeriodicTurbulence<dim,nstate>>(this->
all_parameters);
125 flow_solver_case->compute_and_update_integrated_quantities(*(flow_solver_restart_to_complete_run->dg));
126 const double kinetic_energy_computed = flow_solver_case->get_integrated_kinetic_energy();
129 if (relative_error > 1.0e-10) {
130 pcout <<
"Computed kinetic energy is not within specified tolerance with respect to expected kinetic energy." << std::endl;
133 pcout <<
" Test passed, computed kinetic energy is within specified tolerance." << std::endl;
double final_time
Final solution time.
double initial_time
Initial time at which we initialize the ODE solver with.
const double kinetic_energy_expected
Expected kinetic energy at final time.
FlowSolverParam flow_solver_param
Contains the parameters for simulation cases (flow solver test)
Taylor Green Vortex Restart Check.
bool restart_computation_from_file
Restart computation from restart file.
bool output_restart_files
Output the restart files.
Files for the baseline physics.
unsigned int initial_iteration
Initial iteration at which we initialize the ODE solver with.
Main parameter class that contains the various other sub-parameter classes.
Parameters::AllParameters reinit_params(const bool output_restart_files_input, const bool restart_computation_from_file_input, const double final_time_input, const double initial_time_input=0.0, const unsigned int initial_iteration_input=0, const double initial_desired_time_for_output_solution_every_dt_time_intervals_input=0.0, const double initial_time_step_input=0.0, const int restart_file_index=0) const
Renitialize parameters, necessary because parameters created for the test are constant.
ODESolverParam ode_solver_param
Contains parameters for ODE solver.
double initial_time_step
Time step used in ODE solver.
static std::unique_ptr< FlowSolver< dim, nstate > > select_flow_case(const Parameters::AllParameters *const parameters_input, const dealii::ParameterHandler ¶meter_handler_input)
Factory to return the correct flow solver given input file.
const Parameters::AllParameters *const all_parameters
Pointer to all parameters.
unsigned int restart_file_index
Index of desired restart file for restarting the computation from.
int run_test() const override
Run test.
const int mpi_rank
MPI rank.
double initial_desired_time_for_output_solution_every_dt_time_intervals
const dealii::ParameterHandler & parameter_handler
Parameter handler for storing the .prm file being ran.
std::string unsteady_data_table_filename
dealii::ConditionalOStream pcout
ConditionalOStream.
TaylorGreenVortexRestartCheck(const Parameters::AllParameters *const parameters_input, const dealii::ParameterHandler ¶meter_handler_input)
Constructor.
std::string restart_files_directory_name
Name of directory for writing and reading restart files.
Base class of all the tests.