20 #ifndef LIBMESH_RB_EIM_CONSTRUCTION_H    21 #define LIBMESH_RB_EIM_CONSTRUCTION_H    24 #include "libmesh/rb_construction.h"    25 #include "libmesh/rb_assembly_expansion.h"    26 #include "libmesh/rb_eim_assembly.h"    27 #include "libmesh/rb_eim_evaluation.h"    30 #include "libmesh/mesh_function.h"    31 #include "libmesh/coupling_matrix.h"    34 #include <unordered_map>    78                      const std::string & 
name,
    79                      const unsigned int number);
   110   virtual void clear() 
override;
   144                                       bool deterministic_training_in,
   145                                       int training_parameters_random_seed_in,
   147                                       unsigned int Nmax_in,
   148                                       Real rel_training_tolerance_in,
   149                                       Real abs_training_tolerance_in,
   152                                       const std::map<std::string, std::vector<Real>> & discrete_parameter_values_in,
   153                                       const std::map<std::string,bool> & log_scaling,
   154                                       std::map<std::string, std::vector<RBParameter>> * training_sample_list=
nullptr);
   239   virtual void set_Nmax(
unsigned int Nmax);
   322                                          bool add_basis_function,
   329                                          bool add_basis_function,
   336                                              bool add_basis_function,
   393   template <
class DataMap>
   398     for (
const auto & pr : v)
   400         const auto & v_comp_and_qp = pr.second;
   402         for (
const auto & comp : 
index_range(v_comp_and_qp))
   404             Real comp_scaling = 1.;
   409                                     "Invalid vector index");
   413             const std::vector<Number> & v_qp = v_comp_and_qp[comp];
   415               max_value = std::max(max_value, std::abs(
value * comp_scaling));
   433                                 bool add_basis_function,
   439   template<
class DataMap>
   443     for (
auto & pr : local_pf)
   445         auto & comp_and_qp = pr.second;
   449             std::vector<Number> & qp_values = comp_and_qp[comp];
   453                 qp_values[qp] *= scaling_factor;
   624 #endif // LIBMESH_RB_EIM_CONSTRUCTION_H 
Real get_max_abs_value(const DataMap &v) const
Get the maximum absolute value from a vector stored in the format that we use for basis functions...
 
This is the EquationSystems class. 
 
std::map< std::pair< dof_id_type, unsigned int >, std::vector< std::vector< Number > > > SideQpDataMap
Type of the data structure used to map from (elem id, side index) -> [n_vars][n_qp] data...
 
Real get_max_abs_value_in_training_set() const
Get the maximum value (across all processors) from the parametrized functions in the training set...
 
std::unordered_map< dof_id_type, boundary_id_type > _local_node_boundary_ids
 
bool enrich_eim_approximation_on_nodes(const NodeDataMap &node_pf, bool add_basis_function, EimPointData *eim_point_data)
Implementation of enrich_eim_approximation() for the case of element nodes. 
 
std::map< dof_id_type, std::vector< Number > > NodeDataMap
Type of the data structure used to map from (node id) -> [n_vars] data. 
 
void initialize_eim_construction()
Perform initialization of this object to prepare for running train_eim_approximation(). 
 
RBEIMEvaluation & get_rb_eim_evaluation()
Get a reference to the RBEvaluation object. 
 
void enable_set_Nmax_from_n_snapshots(int increment)
Call this method to set _set_Nmax_from_n_snapshots=true and _Nmax_from_n_snapshots_increment=incremen...
 
virtual Real train_eim_approximation()
Generate the EIM approximation for the specified parametrized function using either POD or the Greedy...
 
std::vector< SideQpDataMap > _local_side_parametrized_functions_for_training
Same as _local_parametrized_functions_for_training except for side data. 
 
Number side_inner_product(const SideQpDataMap &v, const SideQpDataMap &w, bool apply_comp_scaling)
Same as inner_product() except for side data. 
 
This class is part of the rbOOmit framework. 
 
std::map< std::pair< dof_id_type, unsigned int >, unsigned int > _local_side_quad_point_side_types
For side data, we also store "side type" info. 
 
std::unordered_map< dof_id_type, std::vector< Real > > _local_quad_point_JxW
 
This struct is used to encapsulate the arguments required to specify an EIM point that we may add to ...
 
virtual ~RBEIMConstruction()
 
virtual void set_best_fit_type_flag(const std::string &best_fit_type_string)
Specify which type of "best fit" we use to guide the EIM greedy algorithm. 
 
void reinit_eim_projection_matrix()
Zero the _eim_projection_matrix and resize it to be get_Nmax() x get_Nmax(). 
 
virtual void process_parameters_file(const std::string ¶meters_filename)
Read parameters in from file and set up this system accordingly. 
 
Real _max_abs_value_in_training_set
Maximum value in _local_parametrized_functions_for_training across all processors. 
 
const Parallel::Communicator & comm() const
 
RBEIMEvaluation * _rb_eim_eval
The RBEIMEvaluation object that we use to perform the EIM training. 
 
const QpDataMap & get_parametrized_function_from_training_set(unsigned int training_index) const
Get a const reference to the specified parametrized function from the training set. 
 
RBEIMConstruction(EquationSystems &es, const std::string &name, const unsigned int number)
Constructor. 
 
virtual void clear() override
Clear this object. 
 
EimPointData get_random_point(const QpDataMap &v)
Helper function that identifies a random EIM point from v. 
 
The libMesh namespace provides an interface to certain functionality in the library. 
 
void set_abs_training_tolerance(Real new_training_tolerance)
Get/set the absolute tolerance for the basis training. 
 
void update_eim_matrices(bool set_eim_error_indicator)
Update the matrices used in training the EIM approximation. 
 
virtual Real train_eim_approximation_with_greedy()
Generate the EIM approximation for the specified parametrized function using the Greedy Algorithm...
 
Number node_inner_product(const NodeDataMap &v, const NodeDataMap &w, bool apply_comp_scaling)
Same as inner_product() except for node data. 
 
virtual void set_Nmax(unsigned int Nmax)
 
virtual void print_info()
Print out info that describes the current setup of this RBConstruction. 
 
std::map< std::pair< dof_id_type, unsigned int >, subdomain_id_type > _local_side_quad_point_subdomain_ids
 
Real get_node_max_abs_value(const NodeDataMap &v) const
Get the maximum absolute value from a vector stored in the format that we use for basis functions...
 
const std::unordered_map< dof_id_type, std::vector< Real > > & get_local_quad_point_JxW()
Get the interior and side quadrature weights. 
 
Real get_rel_training_tolerance()
 
Real get_abs_training_tolerance()
 
unsigned int number() const
 
std::vector< QpDataMap > _local_parametrized_functions_for_training
The parametrized functions that are used for training. 
 
Real _abs_training_tolerance
 
std::vector< NodeDataMap > _local_node_parametrized_functions_for_training
Same as _local_parametrized_functions_for_training except for node data. 
 
unsigned int _Nmax
Maximum number of EIM basis functions we are willing to use. 
 
std::map< dof_id_type, std::vector< std::vector< Number > > > QpDataMap
Type of the data structure used to map from (elem id) -> [n_vars][n_qp] data. 
 
std::map< std::pair< dof_id_type, unsigned int >, std::vector< Real > > _local_side_quad_point_JxW
 
virtual void init_context(FEMContext &)
Pre-request FE data needed for calculations. 
 
void store_eim_solutions_for_training_set()
Get the EIM solution vector at all parametrized functions in the training set. 
 
This class provides all data required for a physics package (e.g. 
 
unsigned int _max_abs_value_in_training_set_index
The training sample index at which we found _max_abs_value_in_training_set. 
 
RBEIMConstruction & operator=(const RBEIMConstruction &)=delete
 
This class is part of the rbOOmit framework. 
 
void apply_normalization_to_solution_snapshots()
Rescale solution snapshots so that they all have unity norm. 
 
virtual std::unique_ptr< ElemAssembly > build_eim_assembly(unsigned int bf_index)=0
Build an element assembly object that will access basis function bf_index. 
 
BEST_FIT_TYPE best_fit_type_flag
Enum that indicates which type of "best fit" algorithm we should use. 
 
DenseMatrix< Number > _eim_projection_matrix
The matrix we use in order to perform L2 projections of parametrized functions as part of EIM trainin...
 
EimPointData get_random_point_from_training_sample()
Get a random point using the 0^th training sample as input to get_random_point(). ...
 
static void scale_parametrized_function(DataMap &local_pf, Number scaling_factor)
Scale all values in pf by scaling_factor. 
 
int _Nmax_from_n_snapshots_increment
 
bool _set_Nmax_from_n_snapshots
If _set_Nmax_from_n_snapshots=true, then we overrule Nmax to be Nmax += _Nmax_from_n_snapshots_increm...
 
void set_rb_eim_evaluation(RBEIMEvaluation &rb_eim_eval_in)
Set the RBEIMEvaluation object. 
 
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
 
std::map< std::pair< dof_id_type, unsigned int >, boundary_id_type > _local_side_quad_point_boundary_ids
 
std::unordered_map< dof_id_type, Point > _local_node_locations
Same as above except for node data. 
 
const SideQpDataMap & get_side_parametrized_function_from_training_set(unsigned int training_index) const
 
virtual void initialize_eim_assembly_objects()
Build a vector of ElemAssembly objects that accesses the basis functions stored in this RBEIMConstruc...
 
void max(const T &r, T &o, Request &req) const
 
void set_rel_training_tolerance(Real new_training_tolerance)
Get/set the relative tolerance for the basis training. 
 
std::vector< std::unique_ptr< ElemAssembly > > & get_eim_assembly_objects()
 
Number inner_product(const QpDataMap &v, const QpDataMap &w, bool apply_comp_scaling)
Evaluate the inner product of vec1 and vec2 which specify values at quadrature points. 
 
bool enrich_eim_approximation_on_sides(const SideQpDataMap &side_pf, bool add_basis_function, EimPointData *eim_point_data)
Implementation of enrich_eim_approximation() for the case of element sides. 
 
const std::map< std::pair< dof_id_type, unsigned int >, std::vector< Real > > & get_local_side_quad_point_JxW()
 
void initialize_parametrized_functions_in_training_set()
Compute and store the parametrized function for each parameter in the training set at all the stored ...
 
unsigned int get_Nmax() const
Get/set Nmax, the maximum number of RB functions we are willing to compute. 
 
void disable_set_Nmax_from_n_snapshots()
Call this method to set _set_Nmax_from_n_snapshots=false and reset _Nmax_from_n_snapshots_increment t...
 
std::pair< Real, unsigned int > compute_max_eim_error()
Find the training sample that has the largest EIM approximation error based on the current EIM approx...
 
RBEIMEvaluation::NodeDataMap NodeDataMap
Type of the data structure used to map from node id -> [n_vars] data. 
 
This class is part of the rbOOmit framework. 
 
std::vector< Real > _component_scaling_in_training_set
Keep track of a scaling factor for each component of the parametrized functions in the training set w...
 
bool enrich_eim_approximation_on_interiors(const QpDataMap &interior_pf, bool add_basis_function, EimPointData *eim_point_data)
Implementation of enrich_eim_approximation() for the case of element interiors. 
 
void enrich_eim_approximation(unsigned int training_index, bool add_basis_function, EimPointData *eim_point_data)
Add a new basis function to the EIM approximation. 
 
Real _rel_training_tolerance
Relative and absolute tolerances for training the EIM approximation. 
 
RBEIMEvaluation::QpDataMap QpDataMap
Type of the data structure used to map from (elem id) -> [n_vars][n_qp] data. 
 
unsigned int get_n_parametrized_functions_for_training() const
Get the number of parametrized functions used for training. 
 
virtual Real train_eim_approximation_with_POD()
Generate the EIM approximation for the specified parametrized function using Proper Orthogonal Decomp...
 
const std::string & name() const
 
std::unordered_map< dof_id_type, std::vector< Point > > _local_quad_point_locations
The quadrature point locations, quadrature point weights (JxW), and subdomain IDs on every element lo...
 
const NodeDataMap & get_node_parametrized_function_from_training_set(unsigned int training_index) const
 
std::map< std::pair< dof_id_type, unsigned int >, std::vector< Point > > _local_side_quad_point_locations
Same as above except for side data. 
 
std::vector< std::unique_ptr< ElemAssembly > > _rb_eim_assembly_objects
The vector of assembly objects that are created to point to this RBEIMConstruction. 
 
RBEIMEvaluation::SideQpDataMap SideQpDataMap
Type of the data structure used to map from (elem id,side_index) -> [n_vars][n_qp] data...
 
std::map< std::pair< dof_id_type, unsigned int >, std::vector< std::vector< Point > > > _local_side_quad_point_locations_perturbations
 
This class enables evaluation of an Empirical Interpolation Method (EIM) approximation. 
 
void initialize_qp_data()
Initialize the data associated with each quad point (location, JxW, etc.) so that we can use this in ...
 
std::unordered_map< dof_id_type, std::vector< std::vector< Point > > > _local_quad_point_locations_perturbations
EIM approximations often arise when applying a geometric mapping to a Reduced Basis formulation...
 
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
 
static void scale_node_parametrized_function(NodeDataMap &local_pf, Number scaling_factor)
Scale all values in pf by scaling_factor The templated function above handles the elem and side cases...
 
void set_rb_construction_parameters(unsigned int n_training_samples_in, bool deterministic_training_in, int training_parameters_random_seed_in, bool quiet_mode_in, unsigned int Nmax_in, Real rel_training_tolerance_in, Real abs_training_tolerance_in, const RBParameters &mu_min_in, const RBParameters &mu_max_in, const std::map< std::string, std::vector< Real >> &discrete_parameter_values_in, const std::map< std::string, bool > &log_scaling, std::map< std::string, std::vector< RBParameter >> *training_sample_list=nullptr)
Set the state of this RBConstruction object based on the arguments to this function. 
 
std::unordered_map< dof_id_type, subdomain_id_type > _local_quad_point_subdomain_ids
 
static unsigned int get_random_int_0_to_n(unsigned int n)
Static helper function that is used by get_random_point().