21 #include "libmesh/libmesh_config.h" 
   25 #if defined(LIBMESH_HAVE_SLEPC) && (LIBMESH_HAVE_GLPK) 
   28 #include "libmesh/rb_scm_evaluation.h" 
   29 #include "libmesh/rb_theta_expansion.h" 
   32 #include "libmesh/dof_map.h" 
   33 #include "libmesh/equation_systems.h" 
   34 #include "libmesh/getpot.h" 
   35 #include "libmesh/int_range.h" 
   36 #include "libmesh/libmesh_logging.h" 
   37 #include "libmesh/numeric_vector.h" 
   38 #include "libmesh/sparse_matrix.h" 
   39 #include "libmesh/xdr_cxx.h" 
   42 #include <sys/types.h> 
   75     libmesh_error_msg(
"Error: rb_theta_expansion hasn't been initialized yet");
 
   83     libmesh_error_msg(
"Error: Input parameter j is too large in set_C_J_stability_constraint.");
 
   95     libmesh_error_msg(
"Error: Input parameter j is too large in get_C_J_stability_constraint.");
 
  104     libmesh_error_msg(
"Error: We must have j < J in set_SCM_UB_vector.");
 
  108     libmesh_error_msg(
"Error: q is too large in set_SCM_UB_vector.");
 
  117     libmesh_error_msg(
"Error: We must have j < J in get_SCM_UB_vector.");
 
  120     libmesh_error_msg(
"Error: q is too large in get_SCM_UB_vector.");
 
  128     libmesh_error_msg(
"Error: Input parameter j is too large in get_C_J.");
 
  135   if (q >= 
B_min.size())
 
  136     libmesh_error_msg(
"Error: q is too large in get_B_min.");
 
  144   if (q >= 
B_max.size())
 
  145     libmesh_error_msg(
"Error: q is too large in get_B_max.");
 
  152   if (q >= 
B_min.size())
 
  153     libmesh_error_msg(
"Error: q is too large in set_B_min.");
 
  155   B_min[q] = B_min_val;
 
  160   if (q >= 
B_max.size())
 
  161     libmesh_error_msg(
"Error: q is too large in set_B_max.");
 
  163   B_max[q] = B_max_val;
 
  168   LOG_SCOPE(
"get_SCM_LB()", 
"RBSCMEvaluation");
 
  172   lp = glp_create_prob();
 
  173   glp_set_obj_dir(lp,GLP_MIN);
 
  186           glp_set_col_bnds(lp, q+1, GLP_FR, 0., 0.);
 
  191           glp_set_col_bnds(lp, q+1, GLP_DB, 
B_min[q], 
B_max[q]);
 
  202   unsigned int n_rows = cast_int<unsigned int>(
C_J.size());
 
  203   glp_add_rows(lp, n_rows);
 
  209   std::vector<int> ia(matrix_size+1);
 
  210   std::vector<int> ja(matrix_size+1);
 
  211   std::vector<double> ar(matrix_size+1);
 
  212   unsigned int count=0;
 
  213   for (
unsigned int m=0; m<n_rows; m++)
 
  240   glp_load_matrix(lp, matrix_size, ia.data(), ja.data(), ar.data());
 
  255   glp_init_smcp(&parm);
 
  256   parm.msg_lev = GLP_MSG_ERR;
 
  257   parm.meth = GLP_DUAL;
 
  261   glp_simplex(lp, &parm);
 
  263   Real min_J_obj = glp_get_obj_val(lp);
 
  284   LOG_SCOPE(
"get_SCM_UB()", 
"RBSCMEvaluation");
 
  289   unsigned int n_rows = cast_int<unsigned int>(
C_J.size());
 
  296   for (
unsigned int m=0; m<n_rows; m++)
 
  306       if ((m==0) || (J_obj < min_J_obj))
 
  331                                                          const bool write_binary_data)
 
  333   LOG_SCOPE(
"legacy_write_offline_data_to_files()", 
"RBSCMEvaluation");
 
  338       if (
mkdir(directory_name.c_str(), 0777) == -1)
 
  340           libMesh::out << 
"In RBSCMEvaluation::write_offline_data_to_files, directory " 
  341                        << directory_name << 
" already exists, overwriting contents." << std::endl;
 
  348       const std::string suffix = write_binary_data ? 
".xdr" : 
".dat";
 
  351       std::ostringstream file_name;
 
  355       file_name << directory_name << 
"/parameter_ranges" << suffix;
 
  356       std::string continuous_param_file_name = file_name.str();
 
  360       file_name << directory_name << 
"/discrete_parameter_values" << suffix;
 
  361       std::string discrete_param_file_name = file_name.str();
 
  364                                     discrete_param_file_name,
 
  369       file_name << directory_name << 
"/B_min" << suffix;
 
  370       Xdr B_min_out(file_name.str(), mode);
 
  375           B_min_out << B_min_i;
 
  382       file_name << directory_name << 
"/B_max" << suffix;
 
  383       Xdr B_max_out(file_name.str(), mode);
 
  388           B_max_out << B_max_i;
 
  394       file_name << directory_name << 
"/C_J_length" << suffix;
 
  395       Xdr C_J_length_out(file_name.str(), mode);
 
  397       unsigned int C_J_length = cast_int<unsigned int>(
C_J.size());
 
  398       C_J_length_out << C_J_length;
 
  399       C_J_length_out.
close();
 
  403       file_name << directory_name << 
"/C_J_stability_vector" << suffix;
 
  404       Xdr C_J_stability_vector_out(file_name.str(), mode);
 
  409           C_J_stability_vector_out << C_J_stability_constraint_i;
 
  411       C_J_stability_vector_out.close();
 
  415       file_name << directory_name << 
"/C_J" << suffix;
 
  416       Xdr C_J_out(file_name.str(), mode);
 
  418       for (
auto & param : 
C_J)
 
  419         for (
const auto & item : param)
 
  423             Real param_value = item.second;
 
  424             C_J_out << param_value;
 
  430       file_name << directory_name << 
"/SCM_UB_vectors" << suffix;
 
  431       Xdr SCM_UB_vectors_out(file_name.str(), mode);
 
  437             SCM_UB_vectors_out << SCM_UB_vector_ij;
 
  439       SCM_UB_vectors_out.close();
 
  445                                                           const bool read_binary_data)
 
  447   LOG_SCOPE(
"legacy_read_offline_data_from_files()", 
"RBSCMEvaluation");
 
  453   const std::string suffix = read_binary_data ? 
".xdr" : 
".dat";
 
  456   std::ostringstream file_name;
 
  460   file_name << directory_name << 
"/parameter_ranges" << suffix;
 
  461   std::string continuous_param_file_name = file_name.str();
 
  465   file_name << directory_name << 
"/discrete_parameter_values" << suffix;
 
  466   std::string discrete_param_file_name = file_name.str();
 
  468                                  discrete_param_file_name,
 
  474   file_name << directory_name << 
"/B_min" << suffix;
 
  475   Xdr B_min_in(file_name.str(), mode);
 
  481       B_min_in >> B_min_val;
 
  482       B_min.push_back(B_min_val);
 
  490   file_name << directory_name << 
"/B_max" << suffix;
 
  491   Xdr B_max_in(file_name.str(), mode);
 
  497       B_max_in >> B_max_val;
 
  498       B_max.push_back(B_max_val);
 
  503   file_name << directory_name << 
"/C_J_length" << suffix;
 
  504   Xdr C_J_length_in(file_name.str(), mode);
 
  506   unsigned int C_J_length;
 
  507   C_J_length_in >> C_J_length;
 
  508   C_J_length_in.
close();
 
  512   file_name << directory_name << 
"/C_J_stability_vector" << suffix;
 
  513   Xdr C_J_stability_vector_in(file_name.str(), mode);
 
  516   for (
unsigned int i=0; i<C_J_length; i++)
 
  518       Real C_J_stability_val;
 
  519       C_J_stability_vector_in >> C_J_stability_val;
 
  522   C_J_stability_vector_in.close();
 
  526   file_name << directory_name << 
"/C_J" << suffix;
 
  527   Xdr C_J_in(file_name.str(), mode);
 
  530   C_J.resize( C_J_length );
 
  531   for (
auto & params : 
C_J)
 
  534         const std::string & param_name = pr.first;
 
  536         C_J_in >> param_value;
 
  537         params.set_value(param_name, param_value);
 
  544   file_name << directory_name << 
"/SCM_UB_vectors" << suffix;
 
  545   Xdr SCM_UB_vectors_in(file_name.str(), mode);
 
  557   SCM_UB_vectors_in.close();
 
  562 #endif // LIBMESH_HAVE_SLEPC && LIBMESH_HAVE_GLPK