[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
flow_solver.h
1 #ifndef __FLOW_SOLVER_H__
2 #define __FLOW_SOLVER_H__
3 
4 // for FlowSolver class:
5 #include "flow_solver_cases/flow_solver_case_base.h"
6 #include "physics/physics.h"
7 #include "parameters/all_parameters.h"
8 
9 // for generate_grid
10 #include <deal.II/base/function.h>
11 #include <deal.II/distributed/shared_tria.h>
12 #include <deal.II/distributed/tria.h>
13 #include <deal.II/dofs/dof_tools.h>
14 #include <deal.II/grid/grid_tools.h>
15 #include <deal.II/grid/tria.h>
16 #include <deal.II/numerics/vector_tools.h>
17 
18 #include <stdlib.h>
19 #include <iostream>
20 #include <string>
21 #include <vector>
22 
23 #include "dg/dg_base.hpp"
24 #include "dg/dg_factory.hpp"
25 #include "physics/physics_factory.h"
26 //#include "ode_solver/runge_kutta_ode_solver.h"
27 #include "ode_solver/runge_kutta_ode_solver.h"
28 #include "ode_solver/ode_solver_factory.h"
29 
30 #include "reduced_order/pod_basis_online.h"
31 
32 #include <deal.II/base/table_handler.h>
33 
34 #include <deal.II/base/parameter_handler.h>
35 
36 namespace PHiLiP {
37 namespace FlowSolver {
38 
39 #if PHILIP_DIM==1
40  using Triangulation = dealii::Triangulation<PHILIP_DIM>;
41 #else
42  using Triangulation = dealii::parallel::distributed::Triangulation<PHILIP_DIM>;
43 #endif
44 
46 
50 {
51 public:
53  virtual ~FlowSolverBase() = default;
54 
56 
58  virtual int run() const = 0;
59 };
60 
61 
63 template <int dim, int nstate>
64 class FlowSolver : public FlowSolverBase
65 {
66 public:
68  FlowSolver(
69  const Parameters::AllParameters *const parameters_input,
70  std::shared_ptr<FlowSolverCaseBase<dim, nstate>> flow_solver_case_input,
71  const dealii::ParameterHandler &parameter_handler_input);
72 
74  std::shared_ptr<FlowSolverCaseBase<dim, nstate>> flow_solver_case;
75 
77  const dealii::ParameterHandler &parameter_handler;
78 
80  int run () const override;
81 
83  void initialize_data_table_from_file(
84  std::string data_table_filename_with_extension,
85  const std::shared_ptr <dealii::TableHandler> data_table) const;
86 
88  std::string get_restart_filename_without_extension(const unsigned int restart_index_input) const;
89 
90 protected:
91  const MPI_Comm mpi_communicator;
92  const int mpi_rank;
93  const int n_mpi;
94 
97  dealii::ConditionalOStream pcout;
101  const unsigned int poly_degree;
102  const unsigned int grid_degree;
103  const double final_time;
104 
107 
111 
112 public:
114  std::shared_ptr<DGBase<dim, double>> dg;
115 
117  std::shared_ptr<ODE::ODESolverBase<dim, double>> ode_solver;
118 
119  std::shared_ptr<ProperOrthogonalDecomposition::OnlinePOD<dim>> time_pod;
120 
121 private:
124  std::vector<std::string> get_data_table_column_names(const std::string string_input) const;
125 
127  void write_restart_parameter_file(const unsigned int restart_index_input,
128  const double constant_time_step_input) const;
129 
131  std::string double_to_string(const double value_input) const;
132 
133 #if PHILIP_DIM>1
134  void output_restart_files(
136  const unsigned int current_restart_index,
137  const double constant_time_step,
138  const std::shared_ptr <dealii::TableHandler> unsteady_data_table) const;
139 #endif
140 
142 
144  void perform_steady_state_mesh_adaptation() const;
145 
147  dealii::Table<1,double> output_solution_fixed_times;
148 };
149 
150 } // FlowSolver namespace
151 } // PHiLiP namespace
152 #endif
const MPI_Comm mpi_communicator
MPI communicator.
Definition: flow_solver.h:91
dealii::Table< 1, double > output_solution_fixed_times
Fixed times at which to output the solution.
Definition: flow_solver.h:147
Selects which flow case to simulate.
Definition: flow_solver.h:64
dealii::ConditionalOStream pcout
ConditionalOStream.
Definition: flow_solver.h:97
std::shared_ptr< FlowSolverCaseBase< dim, nstate > > flow_solver_case
Pointer to Flow Solver Case.
Definition: flow_solver.h:74
std::shared_ptr< DGBase< dim, double > > dg
Pointer to dg so it can be accessed externally.
Definition: flow_solver.h:114
const Parameters::FlowSolverParam flow_solver_param
Flow solver parameters.
Definition: flow_solver.h:99
const int mpi_rank
MPI rank.
Definition: flow_solver.h:92
Files for the baseline physics.
Definition: ADTypes.hpp:10
const std::string input_parameters_file_reference_copy_filename
Name of the reference copy of inputted parameters file; for restart purposes.
Definition: flow_solver.h:106
Main parameter class that contains the various other sub-parameter classes.
virtual int run() const =0
Basically the main and only function of this class.
const Parameters::AllParameters all_param
All parameters.
Definition: flow_solver.h:98
const Parameters::ODESolverParam ode_param
ODE solver parameters.
Definition: flow_solver.h:100
Parameters related to the flow solver.
std::shared_ptr< ODE::ODESolverBase< dim, double > > ode_solver
Pointer to ode solver so it can be accessed externally.
Definition: flow_solver.h:117
Parameters related to the ODE solver.
const bool do_output_solution_at_fixed_times
Flag for outputting solution at fixed times.
Definition: flow_solver.h:108
const double final_time
Final time of solution.
Definition: flow_solver.h:103
const unsigned int number_of_fixed_times_to_output_solution
Number of fixed times to output the solution.
Definition: flow_solver.h:109
Base class of all the flow solvers.
Definition: flow_solver.h:49
virtual ~FlowSolverBase()=default
Destructor.
const unsigned int poly_degree
Polynomial order.
Definition: flow_solver.h:101
const unsigned int grid_degree
Polynomial order of the grid.
Definition: flow_solver.h:102
const bool output_solution_at_exact_fixed_times
Flag for outputting the solution at exact fixed times by decreasing the time step on the fly...
Definition: flow_solver.h:110
const dealii::ParameterHandler & parameter_handler
Parameter handler for storing the .prm file being ran.
Definition: flow_solver.h:77