1 #include "reduced_order.h" 2 #include "reduced_order/pod_basis_offline.h" 3 #include "parameters/all_parameters.h" 4 #include "functional/functional.h" 5 #include "flow_solver/flow_solver.h" 6 #include "flow_solver/flow_solver_factory.h" 7 #include <deal.II/base/numbers.h> 8 #include "ode_solver/ode_solver_factory.h" 14 template <
int dim,
int nstate>
16 const dealii::ParameterHandler ¶meter_handler_input)
18 , parameter_handler(parameter_handler_input)
21 template <
int dim,
int nstate>
24 pcout <<
"Starting reduced-order test..." << std::endl;
30 auto ode_solver_type = Parameters::ODESolverParam::ODESolverEnum::pod_galerkin_solver;
31 std::shared_ptr<ProperOrthogonalDecomposition::OfflinePOD<dim>> pod_galerkin = std::make_shared<ProperOrthogonalDecomposition::OfflinePOD<dim>>(flow_solver_galerkin->dg);
33 flow_solver_galerkin->ode_solver->allocate_ode_system();
38 ode_solver_type = Parameters::ODESolverParam::ODESolverEnum::pod_petrov_galerkin_solver;
39 std::shared_ptr<ProperOrthogonalDecomposition::OfflinePOD<dim>> pod_petrov_galerkin = std::make_shared<ProperOrthogonalDecomposition::OfflinePOD<dim>>(flow_solver_petrov_galerkin->dg);
41 flow_solver_petrov_galerkin->ode_solver->allocate_ode_system();
44 flow_solver_implicit->run();
45 flow_solver_galerkin->ode_solver->steady_state();
46 flow_solver_petrov_galerkin->ode_solver->steady_state();
48 dealii::LinearAlgebra::distributed::Vector<double> implicit_solution(flow_solver_implicit->dg->solution);
49 dealii::LinearAlgebra::distributed::Vector<double> galerkin_solution(flow_solver_galerkin->dg->solution);
50 dealii::LinearAlgebra::distributed::Vector<double> petrov_galerkin_solution(flow_solver_petrov_galerkin->dg->solution);
52 double galerkin_solution_error = ((galerkin_solution-=implicit_solution).l2_norm()/implicit_solution.l2_norm());
53 double petrov_galerkin_solution_error = ((petrov_galerkin_solution-=implicit_solution).l2_norm()/implicit_solution.l2_norm());
55 double galerkin_func_error = functional_galerkin->evaluate_functional(
false,
false) - functional_implicit->evaluate_functional(
false,
false);
56 double petrov_galerkin_func_error = functional_petrov_galerkin->evaluate_functional(
false,
false) - functional_implicit->evaluate_functional(
false,
false);
58 pcout <<
"Galerkin solution error: " << galerkin_solution_error << std::endl
59 <<
"Petrov-Galerkin solution error: " << petrov_galerkin_solution_error << std::endl
60 <<
"Galerkin functional error: " << galerkin_func_error << std::endl
61 <<
"Petrov-Galerkin functional error: " << petrov_galerkin_func_error << std::endl;
63 if (std::abs(galerkin_solution_error) < 1E-10 && std::abs(petrov_galerkin_solution_error) < 1E-11 && std::abs(galerkin_func_error) < 1E-10 && std::abs(petrov_galerkin_func_error) < 1E-11){
static std::shared_ptr< ODESolverBase< dim, real, MeshType > > create_ODESolver_manual(Parameters::ODESolverParam::ODESolverEnum ode_solver_type, std::shared_ptr< DGBase< dim, real, MeshType > > dg_input)
Creates either implicit or explicit ODE solver based on manual input (no POD basis given) ...
ReducedOrder(const Parameters::AllParameters *const parameters_input, const dealii::ParameterHandler ¶meter_handler_input)
Constructor.
Files for the baseline physics.
Main parameter class that contains the various other sub-parameter classes.
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.
const dealii::ParameterHandler & parameter_handler
Dummy parameter handler because flowsolver requires it.
int run_test() const override
Run POD reduced order.
static std::shared_ptr< Functional< dim, nstate, real, MeshType > > create_Functional(PHiLiP::Parameters::AllParameters const *const param, std::shared_ptr< PHiLiP::DGBase< dim, real, MeshType > > dg)
Create standard functional object from constant parameter file.
FunctionalParam functional_param
Contains parameters for functional.
dealii::ConditionalOStream pcout
ConditionalOStream.
POD reduced order test, verifies consistency of solution.
Base class of all the tests.