65 "--enable-petsc, --enable-trilinos, or --enable-eigen");
67 #if !defined(LIBMESH_HAVE_XDR) 69 libmesh_example_requires(
false,
"--enable-xdr");
70 #elif defined(LIBMESH_DEFAULT_SINGLE_PRECISION) 72 libmesh_example_requires(
false,
"double precision");
73 #elif defined(LIBMESH_DEFAULT_TRIPLE_PRECISION) 75 libmesh_example_requires(
false,
"double precision");
79 libmesh_example_requires(2 <= LIBMESH_DIM,
"2D support");
83 #if !defined(LIBMESH_ENABLE_DIRICHLET) || !defined(LIBMESH_HAVE_CAPNPROTO) 84 libmesh_example_requires(
false,
"--enable-dirichlet --enable-capnp");
88 std::string eim_parameters =
"eim.in";
89 std::string rb_parameters =
"rb.in";
90 std::string main_parameters =
"reduced_basis_ex4.in";
91 GetPot infile(main_parameters);
93 unsigned int n_elem = infile(
"n_elem", 1);
94 const unsigned int dim = 2;
97 const int online_mode =
99 eim_training_function_to_plot =
101 eim_basis_function_to_plot =
112 bool eim_binary_io =
true;
118 libMesh::out <<
"Perform EIM training" << std::endl << std::endl;
128 equation_systems.
init ();
132 equation_systems.print_info();
149 rb_eim_eval_writer.write_to_file(
"rb_eim_eval.bin");
152 eim_rb_eval.write_out_basis_functions(
"eim_data", eim_binary_io);
154 #ifdef LIBMESH_HAVE_EXODUS_API 156 eim_rb_eval.project_qp_data_map_onto_system(eim_construction,
159 std::set<std::string> system_names = {eim_construction.
name()};
163 eim_rb_eval.project_qp_data_map_onto_system(eim_construction,
164 eim_rb_eval.get_basis_function(eim_basis_function_to_plot),
171 libMesh::out << std::endl <<
"Perform RB training" << std::endl << std::endl;
183 equation_systems.
init ();
187 equation_systems.print_info();
197 rb_construction.set_rb_evaluation(rb_eval);
200 rb_eim_eval_reader.read_from_file(
"rb_eim_eval.bin");
201 eim_rb_eval.read_in_basis_functions(rb_construction,
"eim_data", eim_binary_io);
204 rb_construction.process_parameters_file(rb_parameters);
207 eim_rb_eval.initialize_eim_theta_objects();
208 rb_eval.get_rb_theta_expansion().attach_multiple_F_theta(eim_rb_eval.get_eim_theta_objects());
212 rb_construction.get_rb_assembly_expansion().attach_multiple_F_assembly(eim_construction.
get_eim_assembly_objects());
215 rb_construction.print_info();
219 rb_construction.initialize_rb_construction();
220 rb_construction.train_reduced_basis();
225 rb_construction.get_rb_evaluation().write_out_basis_functions(rb_construction,
235 rb_eim_eval_reader.read_from_file(
"rb_eim_eval.bin");
238 eim_rb_eval.initialize_eim_theta_objects();
239 rb_eval.get_rb_theta_expansion().attach_multiple_F_theta(eim_rb_eval.get_eim_theta_objects());
243 rb_eval_reader.read_from_file(
"rb_eval.bin",
true);
246 Real online_center_x = infile(
"online_center_x", 0.);
247 Real online_center_y = infile(
"online_center_y", 0.);
268 rb_eval.set_parameters(online_mu);
269 rb_eval.print_parameters();
276 const RBThetaExpansion & rb_theta_expansion = rb_eval.get_rb_theta_expansion();
280 std::vector<RBParameters> mu_vec = {online_mu};
283 std::vector<std::vector<Number>> all_A(rb_theta_expansion.
get_n_A_terms());
284 for (
unsigned int q_a=0; q_a<rb_theta_expansion.
get_n_A_terms(); q_a++)
289 all_A[q_a] = rb_theta_expansion.
eval_A_theta(q_a, mu_vec);
317 std::vector<std::vector<Number>> all_F(rb_theta_expansion.
get_n_F_terms());
318 for (
unsigned int q_f=0; q_f<rb_theta_expansion.
get_n_F_terms(); q_f++)
319 all_F[q_f] = rb_theta_expansion.
eval_F_theta(q_f, mu_vec);
323 const auto & eim_error_indicators =
324 eim_rb_eval.get_rb_eim_error_indicators();
327 << std::scientific << eim_error_indicators[
idx] << std::endl;
335 unsigned int output_counter = 0;
336 for (
unsigned int n=0; n<rb_theta_expansion.
get_n_outputs(); n++)
338 all_outputs[output_counter++] =
344 unsigned int n_thetas =
350 std::vector<Number> evaluated_thetas(n_thetas);
358 equation_systems.
init ();
363 rb_eval.read_in_basis_functions(rb_construction,
"rb_data");
366 for (
unsigned sample_idx=0; sample_idx<online_mu.
n_samples(); ++sample_idx)
368 unsigned int counter = 0;
371 for (
unsigned int q_a=0; q_a<rb_theta_expansion.
get_n_A_terms(); q_a++)
372 evaluated_thetas[counter++] = all_A[q_a][sample_idx];
375 for (
unsigned int q_f=0; q_f<rb_theta_expansion.
get_n_F_terms(); q_f++)
376 evaluated_thetas[counter++] = all_F[q_f][sample_idx];
380 unsigned int output_counter = 0;
381 for (
unsigned int n=0; n<rb_theta_expansion.
get_n_outputs(); n++)
383 evaluated_thetas[counter++] = all_outputs[output_counter++][sample_idx];
387 libMesh::out <<
"Performing solve for step " << sample_idx << std::endl;
388 rb_eval.rb_solve(rb_eval.get_n_basis_functions(), &evaluated_thetas);
392 libMesh::out <<
"Output value " << i <<
" = " << rb_eval.RB_outputs[i]
393 <<
", error bound " << i <<
" = " << rb_eval.RB_output_error_bounds[i]
398 #ifdef LIBMESH_HAVE_EXODUS_API 404 #endif // LIBMESH_ENABLE_DIRICHLET T command_line_next(std::string name, T default_value)
Use GetPot's search()/next() functions to get following arguments from the command line...
This is the EquationSystems class.
virtual Number eval_output_theta(unsigned int output_index, unsigned int q_l, const RBParameters &mu) const
Evaluate theta_q_l at the current parameter.
The ReplicatedMesh class is derived from the MeshBase class, and is used to store identical copies of...
virtual Number eval_A_theta(unsigned int q, const RBParameters &mu) const
Evaluate theta_q_a at the current parameter.
unsigned int get_n_F_terms() const
Get Q_f, the number of terms in the affine expansion for the right-hand side.
void initialize_eim_construction()
Perform initialization of this object to prepare for running train_eim_approximation().
This class serializes an RBEvaluation object using the Cap'n Proto library.
virtual void write_equation_systems(const std::string &, const EquationSystems &, const std::set< std::string > *system_names=nullptr)
This method implements writing a mesh with data to a specified file where the data is taken from the ...
The ExodusII_IO class implements reading meshes in the ExodusII file format from Sandia National Labs...
virtual Real train_eim_approximation()
Generate the EIM approximation for the specified parametrized function using either POD or the Greedy...
virtual void process_parameters_file(const std::string ¶meters_filename)
Read parameters in from file and set up this system accordingly.
unsigned int get_n_A_terms() const
Get Q_a, the number of terms in the affine expansion for the bilinear form.
const Parallel::Communicator & comm() const
const QpDataMap & get_parametrized_function_from_training_set(unsigned int training_index) const
Get a const reference to the specified parametrized function from the training set.
The LibMeshInit class, when constructed, initializes the dependent libraries (e.g.
This class serializes an RBEIMEvaluation object using the Cap'n Proto library.
unsigned int get_n_outputs() const
Get n_outputs, the number output functionals.
void init()
Initializes degrees of freedom on the current mesh.
This class stores the set of RBTheta functor objects that define the "parameter-dependent expansion" ...
virtual void print_info()
Print out info that describes the current setup of this RBConstruction.
SolverPackage default_solver_package()
void print_info(std::ostream &os=libMesh::out, const unsigned int verbosity=0, const bool global=true) const
Prints relevant information about the mesh.
void init(triangulateio &t)
Initializes the fields of t to nullptr/0 as necessary.
virtual Number eval_F_theta(unsigned int q, const RBParameters &mu) const
Evaluate theta_q_f at the current parameter.
This class is part of the rbOOmit framework.
void write_to_file(const std::string &path)
Write the Cap'n'Proto buffer to disk.
unsigned int n_samples() const
Returns the number of samples stored for all parameters.
void set_rb_eim_evaluation(RBEIMEvaluation &rb_eim_eval_in)
Set the RBEIMEvaluation object.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
unsigned int get_n_output_terms(unsigned int output_index) const
Get the number of affine terms associated with the specified output.
virtual void initialize_eim_assembly_objects()
Build a vector of ElemAssembly objects that accesses the basis functions stored in this RBEIMConstruc...
std::vector< std::unique_ptr< ElemAssembly > > & get_eim_assembly_objects()
unsigned int get_total_n_output_terms() const
Returns the total number of affine terms associated with all outputs.
This class de-serializes an RBEvaluation object using the Cap'n Proto library.
const std::string & name() const
virtual void load_rb_solution()
Load the RB solution from the most recent solve with rb_eval into this system's solution vector...
void set_rb_evaluation(RBEvaluation &rb_eval_in)
Set the RBEvaluation object.
void push_back_value(const std::string ¶m_name, Real value)
Similar to set_value(name, index, value) but instead of specifying a particular index, just appends one more.
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
This class de-serializes a RBEIMEvaluation object using the Cap'n Proto library.