85 #include "libmesh/libmesh.h" 
   86 #include "libmesh/mesh.h" 
   87 #include "libmesh/mesh_generation.h" 
   88 #include "libmesh/exodusII_io.h" 
   89 #include "libmesh/equation_systems.h" 
   90 #include "libmesh/dof_map.h" 
   91 #include "libmesh/getpot.h" 
   92 #include "libmesh/elem.h" 
   93 #include "libmesh/rb_data_serialization.h" 
   94 #include "libmesh/rb_data_deserialization.h" 
   95 #include "libmesh/enum_solver_package.h" 
   98 #include "rb_classes.h" 
   99 #include "eim_classes.h" 
  100 #include "assembly.h" 
  108                              const std::string & filename);
 
  111 int main (
int argc, 
char ** argv)
 
  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 ();
 
  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) 
  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) 
  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) 
  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 
  305 #ifdef LIBMESH_ENABLE_DIRICHLET 
  309                              const std::string & filename)
 
  319       (*node)(0) = -1./curvature + (1./curvature + x)*cos(curvature*z);
 
  320       (*node)(2) = (1./curvature + x)*sin(curvature*z);
 
  323 #ifdef LIBMESH_HAVE_EXODUS_API 
  328 #endif // LIBMESH_ENABLE_DIRICHLET