118 "--enable-petsc, --enable-trilinos, or --enable-eigen");
120 #if !defined(LIBMESH_HAVE_XDR)
122 libmesh_example_requires(
false,
"--enable-xdr");
123 #elif defined(LIBMESH_DEFAULT_SINGLE_PRECISION)
125 libmesh_example_requires(
false,
"--disable-singleprecision");
126 #elif defined(LIBMESH_DEFAULT_TRIPLE_PRECISION)
128 libmesh_example_requires(
false,
"double precision");
129 #elif defined(LIBMESH_ENABLE_BLOCKED_STORAGE)
132 libmesh_example_requires(
false,
"--disable-blocked-storage");
136 libmesh_example_requires(3 == LIBMESH_DIM,
"3D support");
138 #ifndef LIBMESH_ENABLE_DIRICHLET
139 libmesh_example_requires(
false,
"--enable-dirichlet");
143 std::string eim_parameters =
"eim.in";
144 std::string rb_parameters =
"rb.in";
145 std::string main_parameters =
"reduced_basis_ex6.in";
146 GetPot infile(main_parameters);
148 unsigned int n_elem_xy = infile(
"n_elem_xy", 1);
149 unsigned int n_elem_z = infile(
"n_elem_z", 1);
152 bool store_basis_functions = infile(
"store_basis_functions",
true);
155 GetPot command_line (argc, argv);
157 if (command_line.search(1,
"-online_mode"))
158 online_mode = command_line.next(online_mode);
167 n_elem_xy, n_elem_xy, n_elem_z,
182 equation_systems.
init ();
185 equation_systems.print_info();
195 eim_construction.set_rb_evaluation(eim_rb_eval);
196 rb_construction.set_rb_evaluation(rb_eval);
201 eim_construction.process_parameters_file(eim_parameters);
202 eim_construction.print_info();
205 eim_construction.initialize_rb_construction();
207 eim_construction.train_reduced_basis();
209 #if defined(LIBMESH_HAVE_CAPNPROTO)
211 rb_eim_eval_writer.write_to_file(
"rb_eim_eval.bin");
213 eim_construction.get_rb_evaluation().legacy_write_offline_data_to_files(
"eim_data");
217 rb_construction.process_parameters_file(rb_parameters);
220 eim_rb_eval.initialize_eim_theta_objects();
221 rb_eval.get_rb_theta_expansion().attach_multiple_A_theta(eim_rb_eval.get_eim_theta_objects());
224 eim_construction.initialize_eim_assembly_objects();
225 rb_construction.get_rb_assembly_expansion().attach_multiple_A_assembly(eim_construction.get_eim_assembly_objects());
228 rb_construction.print_info();
232 rb_construction.initialize_rb_construction();
233 rb_construction.train_reduced_basis();
235 #if defined(LIBMESH_HAVE_CAPNPROTO)
239 rb_construction.get_rb_evaluation().legacy_write_offline_data_to_files(
"rb_data");
243 if (store_basis_functions)
246 eim_construction.get_rb_evaluation().write_out_basis_functions(eim_construction.get_explicit_system(),
248 rb_construction.get_rb_evaluation().write_out_basis_functions(rb_construction,
254 #if defined(LIBMESH_HAVE_CAPNPROTO)
256 rb_eim_eval_reader.read_from_file(
"rb_eim_eval.bin");
258 eim_rb_eval.legacy_read_offline_data_from_files(
"eim_data");
262 eim_rb_eval.initialize_eim_theta_objects();
263 rb_eval.get_rb_theta_expansion().attach_multiple_A_theta(eim_rb_eval.get_eim_theta_objects());
266 #if defined(LIBMESH_HAVE_CAPNPROTO)
268 rb_eval_reader.read_from_file(
"rb_eval.bin",
true);
270 rb_eval.legacy_read_offline_data_from_files(
"rb_data");
274 Real online_curvature = infile(
"online_curvature", 0.);
275 Real online_Bi = infile(
"online_Bi", 0.);
276 Real online_kappa = infile(
"online_kappa", 0.);
278 online_mu.
set_value(
"curvature", online_curvature);
280 online_mu.
set_value(
"kappa", online_kappa);
281 rb_eval.set_parameters(online_mu);
282 rb_eval.print_parameters();
283 rb_eval.rb_solve(rb_eval.get_n_basis_functions());
286 if (store_basis_functions)
289 eim_rb_eval.read_in_basis_functions(
290 eim_construction.get_explicit_system(),
"eim_data");
291 rb_eval.read_in_basis_functions(rb_construction,
"rb_data");
293 eim_construction.load_rb_solution();
294 rb_construction.load_rb_solution();
300 #endif // LIBMESH_ENABLE_DIRICHLET