21 #include "libmesh/xdr_cxx.h" 
   24 #include "libmesh/rb_parametrized.h" 
   40   parameters_initialized(false)
 
   62                                            const std::map<std::string, std::vector<Real>> & discrete_parameter_values)
 
   66     const std::string err_string = 
"Error: Invalid mu_min/mu_max in RBParameters constructor.";
 
   69       libmesh_error_msg(err_string);
 
   73         for (
const auto & pr : mu_min_in)
 
   75             const std::string & param_name = pr.first;
 
   76             if (mu_min_in.get_value(param_name) > mu_max_in.
get_value(param_name))
 
   77               libmesh_error_msg(err_string);
 
   86     for (
const auto & pr : discrete_parameter_values)
 
   88         if (pr.second.empty())
 
   89           libmesh_error_msg(
"Error: List of discrete parameters for " << pr.first << 
" is empty.");
 
   91         Real min_val = *std::min_element(pr.second.begin(), pr.second.end());
 
   92         Real max_val = *std::max_element(pr.second.begin(), pr.second.end());
 
   94         libmesh_assert_less_equal(min_val,max_val);
 
  118     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::get_n_params");
 
  128     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::get_n_continuous_params");
 
  138     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::get_n_discrete_params");
 
  140   return cast_int<unsigned int>
 
  147     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::get_parameter_names");
 
  149   std::set<std::string> parameter_names;
 
  152   return parameter_names;
 
  158     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::set_current_parameters");
 
  169     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::get_current_parameters");
 
  177     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::get_parameters_min");
 
  185     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::get_parameters_max");
 
  193     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::get_parameter_min");
 
  201     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::get_parameter_max");
 
  209     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::print_current_parameters");
 
  215                                                    const std::string & discrete_param_file_name,
 
  216                                                    const bool write_binary_data)
 
  223                                                     const bool write_binary_data)
 
  229   Xdr parameter_ranges_out(file_name, mode);
 
  231   parameter_ranges_out << n_continuous_params;
 
  235       std::string param_name = pr.first;
 
  238           Real param_value = pr.second;
 
  239           parameter_ranges_out << param_name << param_value;
 
  245       std::string param_name = pr.first;
 
  248           Real param_value = pr.second;
 
  249           parameter_ranges_out << param_name << param_value;
 
  252   parameter_ranges_out.
close();
 
  256                                                              const bool write_binary_data)
 
  264       Xdr discrete_parameters_out(file_name, mode);
 
  266       discrete_parameters_out << n_discrete_params;
 
  270           std::string param_name = pr.first;
 
  271           unsigned int n_discrete_values = cast_int<unsigned int>
 
  273           discrete_parameters_out << param_name << n_discrete_values;
 
  275           for (
unsigned int i=0; i<n_discrete_values; i++)
 
  277               Real discrete_value = pr.second[i];
 
  278               discrete_parameters_out << discrete_value;
 
  285                                                     const std::string & discrete_param_file_name,
 
  286                                                     const bool read_binary_data)
 
  295   std::map<std::string, std::vector<Real>> discrete_parameter_values_in;
 
  298                                            discrete_parameter_values_in);
 
  304                                                      const bool read_binary_data,
 
  312   Xdr parameter_ranges_in(file_name, mode);
 
  313   unsigned int n_continuous_params;
 
  314   parameter_ranges_in >> n_continuous_params;
 
  316   for (
unsigned int i=0; i<n_continuous_params; i++)
 
  318       std::string param_name;
 
  321       parameter_ranges_in >> param_name;
 
  322       parameter_ranges_in >> param_value;
 
  324       param_min.
set_value(param_name, param_value);
 
  326   for (
unsigned int i=0; i<n_continuous_params; i++)
 
  328       std::string param_name;
 
  331       parameter_ranges_in >> param_name;
 
  332       parameter_ranges_in >> param_value;
 
  334       param_max.
set_value(param_name, param_value);
 
  337   parameter_ranges_in.
close();
 
  341                                                               const bool read_binary_data,
 
  342                                                               std::map<std::string, std::vector<Real>> & discrete_parameter_values)
 
  345   std::ifstream check_if_file_exists(file_name.c_str());
 
  346   if (check_if_file_exists.good())
 
  352       Xdr discrete_parameter_values_in(file_name, mode);
 
  353       unsigned int n_discrete_params;
 
  354       discrete_parameter_values_in >> n_discrete_params;
 
  356       for (
unsigned int i=0; i<n_discrete_params; i++)
 
  358           std::string param_name;
 
  359           discrete_parameter_values_in >> param_name;
 
  361           unsigned int n_discrete_values;
 
  362           discrete_parameter_values_in >> n_discrete_values;
 
  364           std::vector<Real> discrete_values(n_discrete_values);
 
  365           for (
auto & val : discrete_values)
 
  366             discrete_parameter_values_in >> val;
 
  368           discrete_parameter_values[param_name] = discrete_values;
 
  376     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::is_discrete_parameter");
 
  384     libmesh_error_msg(
"Error: parameters not initialized in RBParametrized::get_discrete_parameter_values");
 
  393       libMesh::out << 
"Discrete parameter " << pr.first << 
", values: ";
 
  395       const std::vector<Real> & values = pr.second;
 
  396       for (
const auto & 
value : values)
 
  405     libmesh_error_msg(
"Error: Number of parameters don't match");
 
  410       for (
const auto & pr : params)
 
  412           const std::string & param_name = pr.first;
 
  427         libMesh::out << 
"Warning: parameter is outside parameter range" << std::endl;
 
  435   if (list_of_values.empty())
 
  436     libmesh_error_msg(
"Error: list_of_values is empty.");
 
  438   Real min_distance = std::numeric_limits<Real>::max();
 
  439   Real closest_val = 0.;
 
  440   for (
const auto & current_value : list_of_values)
 
  446           closest_val = current_value;
 
  459   if (rel_error <= tol)
 
  467   return (abs_error <= tol);