42 #include "libmesh/libmesh.h"
43 #include "libmesh/mesh.h"
44 #include "libmesh/mesh_generation.h"
45 #include "libmesh/equation_systems.h"
46 #include "libmesh/exodusII_io.h"
47 #include "libmesh/getpot.h"
48 #include "libmesh/rb_data_serialization.h"
49 #include "libmesh/rb_data_deserialization.h"
50 #include "libmesh/enum_solver_package.h"
52 #include "eim_classes.h"
53 #include "rb_classes.h"
58 int main (
int argc,
char ** argv)
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");
81 #ifndef LIBMESH_ENABLE_DIRICHLET
82 libmesh_example_requires(
false,
"--enable-dirichlet");
86 std::string eim_parameters =
"eim.in";
87 std::string rb_parameters =
"rb.in";
88 std::string main_parameters =
"reduced_basis_ex4.in";
89 GetPot infile(main_parameters);
91 unsigned int n_elem = infile(
"n_elem", 1);
92 const unsigned int dim = 2;
93 bool store_basis_functions = infile(
"store_basis_functions",
false);
96 GetPot command_line (argc, argv);
98 if (command_line.search(1,
"-online_mode"))
99 online_mode = command_line.next(online_mode);
121 equation_systems.
init ();
134 eim_construction.set_rb_evaluation(eim_rb_eval);
135 rb_construction.set_rb_evaluation(rb_eval);
140 eim_construction.process_parameters_file(eim_parameters);
141 eim_construction.print_info();
144 eim_construction.initialize_rb_construction();
145 eim_construction.train_reduced_basis();
147 #if defined(LIBMESH_HAVE_CAPNPROTO)
151 eim_construction.get_rb_evaluation().legacy_write_offline_data_to_files(
"eim_data");
155 rb_construction.process_parameters_file(rb_parameters);
158 eim_rb_eval.initialize_eim_theta_objects();
159 rb_eval.get_rb_theta_expansion().attach_multiple_F_theta(eim_rb_eval.get_eim_theta_objects());
162 eim_construction.initialize_eim_assembly_objects();
163 rb_construction.get_rb_assembly_expansion().attach_multiple_F_assembly(eim_construction.get_eim_assembly_objects());
166 rb_construction.print_info();
170 rb_construction.initialize_rb_construction();
171 rb_construction.train_reduced_basis();
173 #if defined(LIBMESH_HAVE_CAPNPROTO)
177 rb_construction.get_rb_evaluation().legacy_write_offline_data_to_files(
"rb_data");
181 if (store_basis_functions)
184 eim_construction.get_rb_evaluation().write_out_basis_functions(eim_construction.get_explicit_system(),
187 rb_construction.get_rb_evaluation().write_out_basis_functions(rb_construction,
193 #if defined(LIBMESH_HAVE_CAPNPROTO)
197 eim_rb_eval.legacy_read_offline_data_from_files(
"eim_data");
201 eim_rb_eval.initialize_eim_theta_objects();
202 rb_eval.get_rb_theta_expansion().attach_multiple_F_theta(eim_rb_eval.get_eim_theta_objects());
205 #if defined(LIBMESH_HAVE_CAPNPROTO)
209 rb_eval.legacy_read_offline_data_from_files(
"rb_data");
213 Real online_center_x = infile(
"online_center_x", 0.);
214 Real online_center_y = infile(
"online_center_y", 0.);
216 online_mu.
set_value(
"center_x", online_center_x);
217 online_mu.
set_value(
"center_y", online_center_y);
218 rb_eval.set_parameters(online_mu);
219 rb_eval.print_parameters();
220 rb_eval.rb_solve(rb_eval.get_n_basis_functions());
223 if (store_basis_functions)
226 eim_rb_eval.read_in_basis_functions(eim_construction.get_explicit_system(),
"eim_data");
227 rb_eval.read_in_basis_functions(rb_construction,
"rb_data");
229 eim_construction.load_rb_solution();
230 rb_construction.load_rb_solution();
231 #ifdef LIBMESH_HAVE_EXODUS_API
237 #endif // LIBMESH_ENABLE_DIRICHLET