[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
assemble_ECSW_training_data_base.cpp
1 #include "assemble_ECSW_training_data_base.h"
2 #include <iostream>
3 
4 #include "flow_solver/flow_solver.h"
5 #include "flow_solver/flow_solver_factory.h"
6 
7 namespace PHiLiP {
8 namespace HyperReduction {
9 using Eigen::MatrixXd;
10 
11 template <int dim, int nstate>
13  const PHiLiP::Parameters::AllParameters *const parameters_input,
14  const dealii::ParameterHandler &parameter_handler_input,
15  std::shared_ptr<DGBase<dim,double>> &dg_input,
16  std::shared_ptr<ProperOrthogonalDecomposition::PODBase<dim>> pod,
17  MatrixXd snapshot_parameters_input,
19  Epetra_MpiComm &Comm)
20  : all_parameters(parameters_input)
21  , parameter_handler(parameter_handler_input)
22  , dg(dg_input)
23  , pod(pod)
24  , snapshot_parameters(snapshot_parameters_input)
25  , mpi_communicator(MPI_COMM_WORLD)
26  , mpi_rank(dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD))
27  , pcout(std::cout, mpi_rank==0)
28  , ode_solver_type(ode_solver_type)
29  , Comm_(Comm)
30  , A_T(std::make_shared<dealii::TrilinosWrappers::SparseMatrix>())
31  , fom_locations()
32 {
33 }
34 
35 template <int dim, int nstate>
36 std::shared_ptr<Epetra_CrsMatrix> AssembleECSWBase<dim,nstate>::local_generate_test_basis(Epetra_CrsMatrix &system_matrix, const Epetra_CrsMatrix &pod_basis){
38  if(ode_solver_type == ODEEnum::pod_galerkin_solver){
39  return std::make_shared<Epetra_CrsMatrix>(pod_basis);
40  }
41  else if(ode_solver_type == ODEEnum::pod_petrov_galerkin_solver || ode_solver_type == ODEEnum::hyper_reduced_petrov_galerkin_solver){
42  Epetra_Map system_matrix_rowmap = system_matrix.RowMap();
43  Epetra_CrsMatrix petrov_galerkin_basis(Epetra_DataAccess::Copy, system_matrix_rowmap, pod_basis.NumGlobalCols());
44  EpetraExt::MatrixMatrix::Multiply(system_matrix, false, pod_basis, false, petrov_galerkin_basis, true);
45 
46  return std::make_shared<Epetra_CrsMatrix>(petrov_galerkin_basis);
47  }
48  else {
49  return nullptr;
50  }
51 }
52 
53 template <int dim, int nstate>
55  // Copy all parameters
57 
58  using FlowCaseEnum = Parameters::FlowSolverParam::FlowCaseType;
59  const FlowCaseEnum flow_type = this->all_parameters->flow_solver_param.flow_case_type;
60 
61  if (flow_type == FlowCaseEnum::burgers_rewienski_snapshot){
63  if(all_parameters->reduced_order_param.parameter_names[0] == "rewienski_a"){
64  parameters.burgers_param.rewienski_a = parameter(0);
65  }
66  else if(all_parameters->reduced_order_param.parameter_names[0] == "rewienski_b"){
67  parameters.burgers_param.rewienski_b = parameter(0);
68  }
69  }
70  else{
71  parameters.burgers_param.rewienski_a = parameter(0);
72  parameters.burgers_param.rewienski_b = parameter(1);
73  }
74  }
75  else if (flow_type == FlowCaseEnum::naca0012){
78  parameters.euler_param.mach_inf = parameter(0);
79  }
80  else if(all_parameters->reduced_order_param.parameter_names[0] == "alpha"){
81  parameters.euler_param.angle_of_attack = parameter(0); //radians!
82  }
83  }
84  else{
85  parameters.euler_param.mach_inf = parameter(0);
86  parameters.euler_param.angle_of_attack = parameter(1); //radians!
87  }
88  }
89  else if (flow_type == FlowCaseEnum::gaussian_bump){
92  parameters.euler_param.mach_inf = parameter(0);
93  }
94  }
95  }
96  else{
97  pcout << "Invalid flow case. You probably forgot to specify a flow case in the prm file." << std::endl;
98  std::abort();
99  }
100  return parameters;
101 }
102 
103 template <int dim, int nstate>
104 void AssembleECSWBase<dim, nstate>::update_snapshots(dealii::LinearAlgebra::distributed::Vector<double> fom_solution){
105  fom_locations.emplace_back(fom_solution);
106 }
107 
108 template <int dim, int nstate>
110  MatrixXd snapshot_parameters_update) {
111  this->pod = pod_update;
112  this->snapshot_parameters = snapshot_parameters_update;
113 }
114 
115 #if PHILIP_DIM==1
117 #endif
118 
119 #if PHILIP_DIM!=1
121 #endif
122 
123 } // HyperReduction namespace
124 } // PHiLiP namespace
FlowCaseType
Selects the flow case to be simulated.
std::vector< dealii::LinearAlgebra::distributed::Vector< double > > fom_locations
Vector of parameter-ROMTestLocation pairs.
FlowCaseType flow_case_type
Selected FlowCaseType from the input file.
FlowSolverParam flow_solver_param
Contains the parameters for simulation cases (flow solver test)
std::vector< std::string > parameter_names
Names of parameters.
MatrixXd snapshot_parameters
Matrix of snapshot parameters.
double mach_inf
Mach number at infinity.
void update_snapshots(dealii::LinearAlgebra::distributed::Vector< double > fom_solution)
Update POD and Snapshot Parameters.
Files for the baseline physics.
Definition: ADTypes.hpp:10
ReducedOrderModelParam reduced_order_param
Contains parameters for the Reduced-Order model.
EulerParam euler_param
Contains parameters for the Euler equations non-dimensionalization.
Main parameter class that contains the various other sub-parameter classes.
std::shared_ptr< ProperOrthogonalDecomposition::PODBase< dim > > pod
POD.
Parameters::ODESolverParam::ODESolverEnum ode_solver_type
ODE Solve Type/ Projection Type (galerkin or petrov-galerkin)
double angle_of_attack
Input file provides in degrees, but the value stored here is in radians.
std::shared_ptr< Epetra_CrsMatrix > local_generate_test_basis(Epetra_CrsMatrix &system_matrix, const Epetra_CrsMatrix &pod_basis)
Generate Test Basis from the pod and snapshot info depending on the ode_solve_type (copied from the O...
AssembleECSWBase(const PHiLiP::Parameters::AllParameters *const parameters_input, const dealii::ParameterHandler &parameter_handler_input, std::shared_ptr< DGBase< dim, double >> &dg_input, std::shared_ptr< ProperOrthogonalDecomposition::PODBase< dim >> pod, MatrixXd snapshot_parameters_input, Parameters::ODESolverParam::ODESolverEnum ode_solver_type, Epetra_MpiComm &Comm)
Constructor.
const Parameters::AllParameters *const all_parameters
Pointer to all parameters.
void update_POD_snaps(std::shared_ptr< ProperOrthogonalDecomposition::PODBase< dim >> pod_update, MatrixXd snapshot_parameters_update)
Update POD and Snapshot Parameters.
dealii::ConditionalOStream pcout
ConditionalOStream.
DGBase is independent of the number of state variables.
Definition: dg_base.hpp:82
Parameters::AllParameters reinit_params(const RowVectorXd &parameter) const
Reinitialize parameters.
BurgersParam burgers_param
Contains parameters for Burgers equation.