libMesh
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Attributes | List of all members
libMesh::RBSCMConstruction Class Reference

This class is part of the rbOOmit framework. More...

#include <rb_scm_construction.h>

Inheritance diagram for libMesh::RBSCMConstruction:
[legend]

Public Types

typedef RBSCMConstruction sys_type
 The type of system. More...
 
typedef RBConstructionBase< CondensedEigenSystemParent
 The type of the parent. More...
 
typedef std::map< std::string, NumericVector< Number > * >::iterator vectors_iterator
 Vector iterator typedefs. More...
 
typedef std::map< std::string, NumericVector< Number > * >::const_iterator const_vectors_iterator
 

Public Member Functions

 RBSCMConstruction (EquationSystems &es, const std::string &name_in, const unsigned int number_in)
 Constructor. More...
 
virtual ~RBSCMConstruction ()
 Destructor. More...
 
virtual void clear () libmesh_override
 Clear all the data structures associated with the system. More...
 
void set_rb_scm_evaluation (RBSCMEvaluation &rb_scm_eval_in)
 Set the RBSCMEvaluation object. More...
 
RBSCMEvaluationget_rb_scm_evaluation ()
 Get a reference to the RBSCMEvaluation object. More...
 
RBThetaExpansionget_rb_theta_expansion ()
 Get a reference to the RBThetaExpansion object. More...
 
virtual void resize_SCM_vectors ()
 Clear and resize the SCM data vectors. More...
 
virtual void process_parameters_file (const std::string &parameters_filename)
 Read in the parameters from file specified by parameters_filename and set the this system's member variables accordingly. More...
 
virtual void print_info ()
 Print out info that describes the current setup of this RBSCMConstruction. More...
 
virtual void set_eigensolver_properties (int)
 This function is called before truth eigensolves in compute_SCM_bounding_box and evaluate_stability_constant. More...
 
void set_RB_system_name (const std::string &new_name)
 Set the name of the associated RB system — we need this to load the (symmetrized) affine operators. More...
 
Real get_SCM_training_tolerance () const
 Get/set SCM_training_tolerance: tolerance for SCM greedy. More...
 
void set_SCM_training_tolerance (Real SCM_training_tolerance_in)
 
virtual void perform_SCM_greedy ()
 Perform the SCM greedy algorithm to develop a lower bound over the training set. More...
 
virtual void attach_deflation_space ()
 Attach the deflation space defined by the specified vector, can be useful in solving constrained eigenvalue problems. More...
 
sys_typesystem ()
 
numeric_index_type get_n_training_samples () const
 Get the total number of training samples. More...
 
numeric_index_type get_local_n_training_samples () const
 Get the total number of training samples local to this processor. More...
 
numeric_index_type get_first_local_training_index () const
 Get the first local index of the training parameters. More...
 
numeric_index_type get_last_local_training_index () const
 Get the last local index of the training parameters. More...
 
virtual void initialize_training_parameters (const RBParameters &mu_min, const RBParameters &mu_max, unsigned int n_training_parameters, std::map< std::string, bool > log_param_scale, bool deterministic=true)
 Initialize the parameter ranges and indicate whether deterministic or random training parameters should be used and whether or not we want the parameters to be scaled logarithmically. More...
 
virtual void load_training_set (std::map< std::string, std::vector< Number >> &new_training_set)
 Overwrite the training parameters with new_training_set. More...
 
void broadcast_parameters (unsigned int proc_id)
 Broadcasts parameters on processor proc_id to all processors. More...
 
void set_training_random_seed (unsigned int seed)
 Set the seed that is used to randomly generate training parameters. More...
 
void set_deterministic_training_parameter_name (const std::string &name)
 In some cases we only want to allow discrete parameter values, instead of parameters that may take any value in a specified interval. More...
 
const std::string & get_deterministic_training_parameter_name () const
 Get the name of the parameter that we will generate deterministic training parameters for. More...
 
void set_deterministic_training_parameter_repeats (unsigned int repeats)
 Set the number of times each sample of the deterministic training parameter is repeated. More...
 
unsigned int get_deterministic_training_parameter_repeats () const
 Get the number of times each sample of the deterministic training parameter is repeated. More...
 
void initialize_condensed_dofs (const std::set< dof_id_type > &global_condensed_dofs_set=std::set< dof_id_type >())
 Loop over the dofs on each processor to initialize the list of non-condensed dofs. More...
 
dof_id_type n_global_non_condensed_dofs () const
 
virtual void solve () libmesh_override
 Override to solve the condensed eigenproblem with the dofs in local_non_condensed_dofs_vector stripped out of the system matrices on each processor. More...
 
virtual std::pair< Real, Realget_eigenpair (dof_id_type i) libmesh_override
 Override get_eigenpair() to retrieve the eigenpair for the condensed eigensolve. More...
 
virtual void reinit () libmesh_override
 Reinitializes the member data fields associated with the system, so that, e.g., assemble() may be used. More...
 
virtual void assemble () libmesh_override
 Assembles the system matrix. More...
 
virtual std::string system_type () const libmesh_override
 
virtual unsigned int n_matrices () const libmesh_override
 
unsigned int get_n_converged () const
 
unsigned int get_n_iterations () const
 
void set_eigenproblem_type (EigenProblemType ept)
 Sets the type of the current eigen problem. More...
 
EigenProblemType get_eigenproblem_type () const
 
bool generalized () const
 
void init ()
 Initializes degrees of freedom on the current mesh. More...
 
virtual void reinit_constraints ()
 Reinitializes the constraints for this system. More...
 
bool is_initialized ()
 
virtual void update ()
 Update the local values to reflect the solution on neighboring processors. More...
 
virtual void assemble_qoi (const QoISet &qoi_indices=QoISet())
 Calls user qoi function. More...
 
virtual void assemble_qoi_derivative (const QoISet &qoi_indices=QoISet(), bool include_liftfunc=true, bool apply_constraints=true)
 Calls user qoi derivative function. More...
 
virtual void assemble_residual_derivatives (const ParameterVector &parameters)
 Calls residual parameter derivative function. More...
 
virtual void restrict_solve_to (const SystemSubset *subset, const SubsetSolveMode subset_solve_mode=SUBSET_ZERO)
 After calling this method, any solve will be restricted to the given subdomain. More...
 
virtual std::pair< unsigned int, Realsensitivity_solve (const ParameterVector &parameters)
 Solves the sensitivity system, for the provided parameters. More...
 
virtual std::pair< unsigned int, Realweighted_sensitivity_solve (const ParameterVector &parameters, const ParameterVector &weights)
 Assembles & solves the linear system(s) (dR/du)*u_w = sum(w_p*-dR/dp), for those parameters p contained within parameters weighted by the values w_p found within weights. More...
 
virtual std::pair< unsigned int, Realadjoint_solve (const QoISet &qoi_indices=QoISet())
 Solves the adjoint system, for the specified qoi indices, or for every qoi if qoi_indices is NULL. More...
 
virtual std::pair< unsigned int, Realweighted_sensitivity_adjoint_solve (const ParameterVector &parameters, const ParameterVector &weights, const QoISet &qoi_indices=QoISet())
 Assembles & solves the linear system(s) (dR/du)^T*z_w = sum(w_p*(d^2q/dudp - d^2R/dudp*z)), for those parameters p contained within parameters, weighted by the values w_p found within weights. More...
 
bool is_adjoint_already_solved () const
 Accessor for the adjoint_already_solved boolean. More...
 
void set_adjoint_already_solved (bool setting)
 Setter for the adjoint_already_solved boolean. More...
 
virtual void qoi_parameter_sensitivity (const QoISet &qoi_indices, const ParameterVector &parameters, SensitivityData &sensitivities)
 Solves for the derivative of each of the system's quantities of interest q in qoi[qoi_indices] with respect to each parameter in parameters, placing the result for qoi i and parameter j into sensitivities[i][j]. More...
 
virtual void adjoint_qoi_parameter_sensitivity (const QoISet &qoi_indices, const ParameterVector &parameters, SensitivityData &sensitivities)
 Solves for parameter sensitivities using the adjoint method. More...
 
virtual void forward_qoi_parameter_sensitivity (const QoISet &qoi_indices, const ParameterVector &parameters, SensitivityData &sensitivities)
 Solves for parameter sensitivities using the forward method. More...
 
virtual void qoi_parameter_hessian (const QoISet &qoi_indices, const ParameterVector &parameters, SensitivityData &hessian)
 For each of the system's quantities of interest q in qoi[qoi_indices], and for a vector of parameters p, the parameter sensitivity Hessian H_ij is defined as H_ij = (d^2 q)/(d p_i d p_j) This Hessian is the output of this method, where for each q_i, H_jk is stored in hessian.second_derivative(i,j,k). More...
 
virtual void qoi_parameter_hessian_vector_product (const QoISet &qoi_indices, const ParameterVector &parameters, const ParameterVector &vector, SensitivityData &product)
 For each of the system's quantities of interest q in qoi[qoi_indices], and for a vector of parameters p, the parameter sensitivity Hessian H_ij is defined as H_ij = (d^2 q)/(d p_i d p_j) The Hessian-vector product, for a vector v_k in parameter space, is S_j = H_jk v_k This product is the output of this method, where for each q_i, S_j is stored in sensitivities[i][j]. More...
 
virtual bool compare (const System &other_system, const Real threshold, const bool verbose) const
 
const std::string & name () const
 
void project_solution (FunctionBase< Number > *f, FunctionBase< Gradient > *g=libmesh_nullptr) const
 Projects arbitrary functions onto the current solution. More...
 
void project_solution (FEMFunctionBase< Number > *f, FEMFunctionBase< Gradient > *g=libmesh_nullptr) const
 Projects arbitrary functions onto the current solution. More...
 
void project_solution (Number fptr(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name), Gradient gptr(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name), const Parameters &parameters) const
 Projects arbitrary functions onto the current solution. More...
 
void project_vector (NumericVector< Number > &new_vector, FunctionBase< Number > *f, FunctionBase< Gradient > *g=libmesh_nullptr, int is_adjoint=-1) const
 Projects arbitrary functions onto a vector of degree of freedom values for the current system. More...
 
void project_vector (NumericVector< Number > &new_vector, FEMFunctionBase< Number > *f, FEMFunctionBase< Gradient > *g=libmesh_nullptr, int is_adjoint=-1) const
 Projects arbitrary functions onto a vector of degree of freedom values for the current system. More...
 
void project_vector (Number fptr(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name), Gradient gptr(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name), const Parameters &parameters, NumericVector< Number > &new_vector, int is_adjoint=-1) const
 Projects arbitrary functions onto a vector of degree of freedom values for the current system. More...
 
void boundary_project_solution (const std::set< boundary_id_type > &b, const std::vector< unsigned int > &variables, FunctionBase< Number > *f, FunctionBase< Gradient > *g=libmesh_nullptr)
 Projects arbitrary boundary functions onto a vector of degree of freedom values for the current system. More...
 
void boundary_project_solution (const std::set< boundary_id_type > &b, const std::vector< unsigned int > &variables, Number fptr(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name), Gradient gptr(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name), const Parameters &parameters)
 Projects arbitrary boundary functions onto a vector of degree of freedom values for the current system. More...
 
void boundary_project_vector (const std::set< boundary_id_type > &b, const std::vector< unsigned int > &variables, NumericVector< Number > &new_vector, FunctionBase< Number > *f, FunctionBase< Gradient > *g=libmesh_nullptr, int is_adjoint=-1) const
 Projects arbitrary boundary functions onto a vector of degree of freedom values for the current system. More...
 
void boundary_project_vector (const std::set< boundary_id_type > &b, const std::vector< unsigned int > &variables, Number fptr(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name), Gradient gptr(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name), const Parameters &parameters, NumericVector< Number > &new_vector, int is_adjoint=-1) const
 Projects arbitrary boundary functions onto a vector of degree of freedom values for the current system. More...
 
unsigned int number () const
 
void update_global_solution (std::vector< Number > &global_soln) const
 Fill the input vector global_soln so that it contains the global solution on all processors. More...
 
void update_global_solution (std::vector< Number > &global_soln, const processor_id_type dest_proc) const
 Fill the input vector global_soln so that it contains the global solution on processor dest_proc. More...
 
const MeshBaseget_mesh () const
 
MeshBaseget_mesh ()
 
const DofMapget_dof_map () const
 
DofMapget_dof_map ()
 
const EquationSystemsget_equation_systems () const
 
EquationSystemsget_equation_systems ()
 
bool active () const
 
void activate ()
 Activates the system. More...
 
void deactivate ()
 Deactivates the system. More...
 
void set_basic_system_only ()
 Sets the system to be "basic only": i.e. More...
 
vectors_iterator vectors_begin ()
 Beginning of vectors container. More...
 
const_vectors_iterator vectors_begin () const
 Beginning of vectors container. More...
 
vectors_iterator vectors_end ()
 End of vectors container. More...
 
const_vectors_iterator vectors_end () const
 End of vectors container. More...
 
NumericVector< Number > & add_vector (const std::string &vec_name, const bool projections=true, const ParallelType type=PARALLEL)
 Adds the additional vector vec_name to this system. More...
 
void remove_vector (const std::string &vec_name)
 Removes the additional vector vec_name from this system. More...
 
bool & project_solution_on_reinit (void)
 Tells the System whether or not to project the solution vector onto new grids when the system is reinitialized. More...
 
bool have_vector (const std::string &vec_name) const
 
const NumericVector< Number > * request_vector (const std::string &vec_name) const
 
NumericVector< Number > * request_vector (const std::string &vec_name)
 
const NumericVector< Number > * request_vector (const unsigned int vec_num) const
 
NumericVector< Number > * request_vector (const unsigned int vec_num)
 
const NumericVector< Number > & get_vector (const std::string &vec_name) const
 
NumericVector< Number > & get_vector (const std::string &vec_name)
 
const NumericVector< Number > & get_vector (const unsigned int vec_num) const
 
NumericVector< Number > & get_vector (const unsigned int vec_num)
 
const std::string & vector_name (const unsigned int vec_num) const
 
const std::string & vector_name (const NumericVector< Number > &vec_reference) const
 
void set_vector_as_adjoint (const std::string &vec_name, int qoi_num)
 Allows one to set the QoI index controlling whether the vector identified by vec_name represents a solution from the adjoint (qoi_num >= 0) or primal (qoi_num == -1) space. More...
 
int vector_is_adjoint (const std::string &vec_name) const
 
void set_vector_preservation (const std::string &vec_name, bool preserve)
 Allows one to set the boolean controlling whether the vector identified by vec_name should be "preserved": projected to new meshes, saved, etc. More...
 
bool vector_preservation (const std::string &vec_name) const
 
NumericVector< Number > & add_adjoint_solution (unsigned int i=0)
 
NumericVector< Number > & get_adjoint_solution (unsigned int i=0)
 
const NumericVector< Number > & get_adjoint_solution (unsigned int i=0) const
 
NumericVector< Number > & add_sensitivity_solution (unsigned int i=0)
 
NumericVector< Number > & get_sensitivity_solution (unsigned int i=0)
 
const NumericVector< Number > & get_sensitivity_solution (unsigned int i=0) const
 
NumericVector< Number > & add_weighted_sensitivity_adjoint_solution (unsigned int i=0)
 
NumericVector< Number > & get_weighted_sensitivity_adjoint_solution (unsigned int i=0)
 
const NumericVector< Number > & get_weighted_sensitivity_adjoint_solution (unsigned int i=0) const
 
NumericVector< Number > & add_weighted_sensitivity_solution ()
 
NumericVector< Number > & get_weighted_sensitivity_solution ()
 
const NumericVector< Number > & get_weighted_sensitivity_solution () const
 
NumericVector< Number > & add_adjoint_rhs (unsigned int i=0)
 
NumericVector< Number > & get_adjoint_rhs (unsigned int i=0)
 
const NumericVector< Number > & get_adjoint_rhs (unsigned int i=0) const
 
NumericVector< Number > & add_sensitivity_rhs (unsigned int i=0)
 
NumericVector< Number > & get_sensitivity_rhs (unsigned int i=0)
 
const NumericVector< Number > & get_sensitivity_rhs (unsigned int i=0) const
 
unsigned int n_vectors () const
 
unsigned int n_vars () const
 
unsigned int n_variable_groups () const
 
unsigned int n_components () const
 
dof_id_type n_dofs () const
 
dof_id_type n_active_dofs () const
 
dof_id_type n_constrained_dofs () const
 
dof_id_type n_local_constrained_dofs () const
 
dof_id_type n_local_dofs () const
 
unsigned int add_variable (const std::string &var, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=libmesh_nullptr)
 Adds the variable var to the list of variables for this system. More...
 
unsigned int add_variable (const std::string &var, const Order order=FIRST, const FEFamily=LAGRANGE, const std::set< subdomain_id_type > *const active_subdomains=libmesh_nullptr)
 Adds the variable var to the list of variables for this system. More...
 
unsigned int add_variables (const std::vector< std::string > &vars, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=libmesh_nullptr)
 Adds the variable var to the list of variables for this system. More...
 
unsigned int add_variables (const std::vector< std::string > &vars, const Order order=FIRST, const FEFamily=LAGRANGE, const std::set< subdomain_id_type > *const active_subdomains=libmesh_nullptr)
 Adds the variable var to the list of variables for this system. More...
 
const Variablevariable (unsigned int var) const
 Return a constant reference to Variable var. More...
 
const VariableGroupvariable_group (unsigned int vg) const
 Return a constant reference to VariableGroup vg. More...
 
bool has_variable (const std::string &var) const
 
const std::string & variable_name (const unsigned int i) const
 
unsigned short int variable_number (const std::string &var) const
 
void get_all_variable_numbers (std::vector< unsigned int > &all_variable_numbers) const
 Fills all_variable_numbers with all the variable numbers for the variables that have been added to this system. More...
 
unsigned int variable_scalar_number (const std::string &var, unsigned int component) const
 
unsigned int variable_scalar_number (unsigned int var_num, unsigned int component) const
 
const FETypevariable_type (const unsigned int i) const
 
const FETypevariable_type (const std::string &var) const
 
bool identify_variable_groups () const
 
void identify_variable_groups (const bool)
 Toggle automatic VariableGroup identification. More...
 
Real calculate_norm (const NumericVector< Number > &v, unsigned int var, FEMNormType norm_type, std::set< unsigned int > *skip_dimensions=libmesh_nullptr) const
 
Real calculate_norm (const NumericVector< Number > &v, const SystemNorm &norm, std::set< unsigned int > *skip_dimensions=libmesh_nullptr) const
 
void read_header (Xdr &io, const std::string &version, const bool read_header=true, const bool read_additional_data=true, const bool read_legacy_format=false)
 Reads the basic data header for this System. More...
 
void read_legacy_data (Xdr &io, const bool read_additional_data=true)
 Reads additional data, namely vectors, for this System. More...
 
template<typename ValType >
void read_serialized_data (Xdr &io, const bool read_additional_data=true)
 Reads additional data, namely vectors, for this System. More...
 
void read_serialized_data (Xdr &io, const bool read_additional_data=true)
 Non-templated version for backward compatibility. More...
 
template<typename InValType >
std::size_t read_serialized_vectors (Xdr &io, const std::vector< NumericVector< Number > * > &vectors) const
 Read a number of identically distributed vectors. More...
 
std::size_t read_serialized_vectors (Xdr &io, const std::vector< NumericVector< Number > * > &vectors) const
 Non-templated version for backward compatibility. More...
 
template<typename InValType >
void read_parallel_data (Xdr &io, const bool read_additional_data)
 Reads additional data, namely vectors, for this System. More...
 
void read_parallel_data (Xdr &io, const bool read_additional_data)
 Non-templated version for backward compatibility. More...
 
void write_header (Xdr &io, const std::string &version, const bool write_additional_data) const
 Writes the basic data header for this System. More...
 
void write_serialized_data (Xdr &io, const bool write_additional_data=true) const
 Writes additional data, namely vectors, for this System. More...
 
std::size_t write_serialized_vectors (Xdr &io, const std::vector< const NumericVector< Number > * > &vectors) const
 Serialize & write a number of identically distributed vectors. More...
 
void write_parallel_data (Xdr &io, const bool write_additional_data) const
 Writes additional data, namely vectors, for this System. More...
 
std::string get_info () const
 
void attach_init_function (void fptr(EquationSystems &es, const std::string &name))
 Register a user function to use in initializing the system. More...
 
void attach_init_object (Initialization &init)
 Register a user class to use to initialize the system. More...
 
void attach_assemble_function (void fptr(EquationSystems &es, const std::string &name))
 Register a user function to use in assembling the system matrix and RHS. More...
 
void attach_assemble_object (Assembly &assemble)
 Register a user object to use in assembling the system matrix and RHS. More...
 
void attach_constraint_function (void fptr(EquationSystems &es, const std::string &name))
 Register a user function for imposing constraints. More...
 
void attach_constraint_object (Constraint &constrain)
 Register a user object for imposing constraints. More...
 
void attach_QOI_function (void fptr(EquationSystems &es, const std::string &name, const QoISet &qoi_indices))
 Register a user function for evaluating the quantities of interest, whose values should be placed in System::qoi. More...
 
void attach_QOI_object (QOI &qoi)
 Register a user object for evaluating the quantities of interest, whose values should be placed in System::qoi. More...
 
void attach_QOI_derivative (void fptr(EquationSystems &es, const std::string &name, const QoISet &qoi_indices, bool include_liftfunc, bool apply_constraints))
 Register a user function for evaluating derivatives of a quantity of interest with respect to test functions, whose values should be placed in System::rhs. More...
 
void attach_QOI_derivative_object (QOIDerivative &qoi_derivative)
 Register a user object for evaluating derivatives of a quantity of interest with respect to test functions, whose values should be placed in System::rhs. More...
 
virtual void user_initialization ()
 Calls user's attached initialization function, or is overridden by the user in derived classes. More...
 
virtual void user_assembly ()
 Calls user's attached assembly function, or is overridden by the user in derived classes. More...
 
virtual void user_constrain ()
 Calls user's attached constraint function, or is overridden by the user in derived classes. More...
 
virtual void user_QOI (const QoISet &qoi_indices)
 Calls user's attached quantity of interest function, or is overridden by the user in derived classes. More...
 
virtual void user_QOI_derivative (const QoISet &qoi_indices=QoISet(), bool include_liftfunc=true, bool apply_constraints=true)
 Calls user's attached quantity of interest derivative function, or is overridden by the user in derived classes. More...
 
virtual void re_update ()
 Re-update the local values when the mesh has changed. More...
 
virtual void restrict_vectors ()
 Restrict vectors after the mesh has coarsened. More...
 
virtual void prolong_vectors ()
 Prolong vectors after the mesh has refined. More...
 
virtual void disable_cache ()
 Avoids use of any cached data that might affect any solve result. More...
 
Number current_solution (const dof_id_type global_dof_number) const
 
Number point_value (unsigned int var, const Point &p, const bool insist_on_success=true) const
 
Number point_value (unsigned int var, const Point &p, const Elem &e) const
 
Number point_value (unsigned int var, const Point &p, const Elem *e) const
 Calls the version of point_value() which takes a reference. More...
 
Gradient point_gradient (unsigned int var, const Point &p, const bool insist_on_success=true) const
 
Gradient point_gradient (unsigned int var, const Point &p, const Elem &e) const
 
Gradient point_gradient (unsigned int var, const Point &p, const Elem *e) const
 Calls the version of point_gradient() which takes a reference. More...
 
Tensor point_hessian (unsigned int var, const Point &p, const bool insist_on_success=true) const
 
Tensor point_hessian (unsigned int var, const Point &p, const Elem &e) const
 
Tensor point_hessian (unsigned int var, const Point &p, const Elem *e) const
 Calls the version of point_hessian() which takes a reference. More...
 
void local_dof_indices (const unsigned int var, std::set< dof_id_type > &var_indices) const
 Fills the std::set with the degrees of freedom on the local processor corresponding the the variable number passed in. More...
 
void zero_variable (NumericVector< Number > &v, unsigned int var_num) const
 Zeroes all dofs in v that correspond to variable number var_num. More...
 
bool & hide_output ()
 
const Parallel::Communicatorcomm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 
void initialize_parameters (const RBParameters &mu_min_in, const RBParameters &mu_max_in, const std::map< std::string, std::vector< Real >> &discrete_parameter_values)
 Initialize the parameter ranges and set current_parameters. More...
 
void initialize_parameters (const RBParametrized &rb_parametrized)
 Initialize the parameter ranges and set current_parameters. More...
 
unsigned int get_n_params () const
 Get the number of parameters. More...
 
unsigned int get_n_continuous_params () const
 Get the number of continuous parameters. More...
 
unsigned int get_n_discrete_params () const
 Get the number of discrete parameters. More...
 
std::set< std::string > get_parameter_names () const
 Get a set that stores the parameter names. More...
 
const RBParametersget_parameters () const
 Get the current parameters. More...
 
void set_parameters (const RBParameters &params)
 Set the current parameters to params. More...
 
const RBParametersget_parameters_min () const
 Get an RBParameters object that specifies the minimum allowable value for each parameter. More...
 
const RBParametersget_parameters_max () const
 Get an RBParameters object that specifies the maximum allowable value for each parameter. More...
 
Real get_parameter_min (const std::string &param_name) const
 Get minimum allowable value of parameter param_name. More...
 
Real get_parameter_max (const std::string &param_name) const
 Get maximum allowable value of parameter param_name. More...
 
void print_parameters () const
 Print the current parameters. More...
 
void write_parameter_data_to_files (const std::string &continuous_param_file_name, const std::string &discrete_param_file_name, const bool write_binary_data)
 Write out the parameter ranges to files. More...
 
void read_parameter_data_from_files (const std::string &continuous_param_file_name, const std::string &discrete_param_file_name, const bool read_binary_data)
 Read in the parameter ranges from files. More...
 
bool is_discrete_parameter (const std::string &mu_name) const
 Is parameter mu_name discrete? More...
 
const std::map< std::string, std::vector< Real > > & get_discrete_parameter_values () const
 Get a const reference to the discrete parameter values. More...
 
void print_discrete_parameter_values () const
 Print out all the discrete parameter values. More...
 

Static Public Member Functions

static std::string get_info ()
 Gets a string containing the reference information. More...
 
static std::string get_info ()
 Gets a string containing the reference information. More...
 
static void print_info (std::ostream &out=libMesh::out)
 Prints the reference information, by default to libMesh::out. More...
 
static void print_info (std::ostream &out=libMesh::out)
 Prints the reference information, by default to libMesh::out. More...
 
static unsigned int n_objects ()
 Prints the number of outstanding (created, but not yet destroyed) objects. More...
 
static unsigned int n_objects ()
 Prints the number of outstanding (created, but not yet destroyed) objects. More...
 
static void enable_print_counter_info ()
 Methods to enable/disable the reference counter output from print_info() More...
 
static void enable_print_counter_info ()
 Methods to enable/disable the reference counter output from print_info() More...
 
static void disable_print_counter_info ()
 
static void disable_print_counter_info ()
 
static Real get_closest_value (Real value, const std::vector< Real > &list_of_values)
 

Public Attributes

UniquePtr< SparseMatrix< Number > > condensed_matrix_A
 The (condensed) system matrix for standard eigenvalue problems. More...
 
UniquePtr< SparseMatrix< Number > > condensed_matrix_B
 A second (condensed) system matrix for generalized eigenvalue problems. More...
 
std::vector< dof_id_typelocal_non_condensed_dofs_vector
 Vector storing the local dof indices that will not be condensed. More...
 
UniquePtr< SparseMatrix< Number > > matrix_A
 The system matrix for standard eigenvalue problems. More...
 
UniquePtr< SparseMatrix< Number > > matrix_B
 A second system matrix for generalized eigenvalue problems. More...
 
UniquePtr< EigenSolver< Number > > eigen_solver
 The EigenSolver, defining which interface, i.e solver package to use. More...
 
bool assemble_before_solve
 Flag which tells the system to whether or not to call the user assembly function during each call to solve(). More...
 
bool use_fixed_solution
 A boolean to be set to true by systems using elem_fixed_solution, for optional use by e.g. More...
 
int extra_quadrature_order
 A member int that can be employed to indicate increased or reduced quadrature order. More...
 
UniquePtr< NumericVector< Number > > solution
 Data structure to hold solution values. More...
 
UniquePtr< NumericVector< Number > > current_local_solution
 All the values I need to compute my contribution to the simulation at hand. More...
 
Real time
 For time-dependent problems, this is the time t at the beginning of the current timestep. More...
 
std::vector< Numberqoi
 Values of the quantities of interest. More...
 
bool verbose_mode
 Public boolean to toggle verbose mode. More...
 

Protected Types

typedef std::map< std::string, std::pair< unsigned int, unsigned int > > Counts
 Data structure to log the information. More...
 
typedef std::map< std::string, std::pair< unsigned int, unsigned int > > Counts
 Data structure to log the information. More...
 

Protected Member Functions

virtual void add_scaled_symm_Aq (unsigned int q_a, Number scalar)
 Add the scaled symmetrized affine matrix from the associated RBSystem to matrix_A. More...
 
virtual void load_matrix_B ()
 Copy over the matrix to store in matrix_B, usually this is the mass or inner-product matrix, but needs to be implemented in subclass. More...
 
virtual void compute_SCM_bounding_box ()
 Compute the SCM bounding box. More...
 
virtual void evaluate_stability_constant ()
 Compute the stability constant for current_parameters by solving a generalized eigenvalue problem over the truth space. More...
 
virtual void enrich_C_J (unsigned int new_C_J_index)
 Enrich C_J by adding the element of SCM_training_samples that has the largest gap between alpha_LB and alpha_LB. More...
 
virtual std::pair< unsigned int, Realcompute_SCM_bounds_on_training_set ()
 Compute upper and lower bounds for each SCM training point. More...
 
Number B_inner_product (const NumericVector< Number > &v, const NumericVector< Number > &w) const
 Compute the inner product between two vectors using the system's matrix_B. More...
 
Number Aq_inner_product (unsigned int q, const NumericVector< Number > &v, const NumericVector< Number > &w)
 Compute the inner product between two vectors using matrix Aq. More...
 
virtual Real SCM_greedy_error_indicator (Real LB, Real UB)
 Helper function which provides an error indicator to be used in the SCM greedy. More...
 
virtual void init_data ()
 Initializes the member data fields associated with the system, so that, e.g., assemble() may be used. More...
 
RBParameters get_params_from_training_set (unsigned int index)
 Return the RBParameters in index index of training set. More...
 
void set_params_from_training_set (unsigned int index)
 Set parameters to the RBParameters stored in index index of the training set. More...
 
virtual void set_params_from_training_set_and_broadcast (unsigned int index)
 Load the specified training parameter and then broadcast to all processors. More...
 
virtual void init_matrices ()
 Initializes the matrices associated with the system. More...
 
void set_n_converged (unsigned int nconv)
 Set the _n_converged_eigenpairs member, useful for subclasses of EigenSystem. More...
 
void set_n_iterations (unsigned int its)
 Set the _n_iterations member, useful for subclasses of EigenSystem. More...
 
void project_vector (NumericVector< Number > &, int is_adjoint=-1) const
 Projects the vector defined on the old mesh onto the new mesh. More...
 
void project_vector (const NumericVector< Number > &, NumericVector< Number > &, int is_adjoint=-1) const
 Projects the vector defined on the old mesh onto the new mesh. More...
 
void increment_constructor_count (const std::string &name)
 Increments the construction counter. More...
 
void increment_constructor_count (const std::string &name)
 Increments the construction counter. More...
 
void increment_destructor_count (const std::string &name)
 Increments the destruction counter. More...
 
void increment_destructor_count (const std::string &name)
 Increments the destruction counter. More...
 

Static Protected Member Functions

static void get_global_max_error_pair (const Parallel::Communicator &communicator, std::pair< numeric_index_type, Real > &error_pair)
 Static function to return the error pair (index,error) that is corresponds to the largest error on all processors. More...
 
static void generate_training_parameters_random (const Parallel::Communicator &communicator, std::map< std::string, bool > log_param_scale, std::map< std::string, NumericVector< Number > * > &training_parameters_in, unsigned int n_training_samples_in, const RBParameters &min_parameters, const RBParameters &max_parameters, int training_parameters_random_seed=-1, bool serial_training_set=false)
 Static helper function for generating a randomized set of parameters. More...
 
static void generate_training_parameters_deterministic (const Parallel::Communicator &communicator, std::map< std::string, bool > log_param_scale, std::map< std::string, NumericVector< Number > * > &training_parameters_in, unsigned int n_training_samples_in, const RBParameters &min_parameters, const RBParameters &max_parameters, bool serial_training_set=false)
 Static helper function for generating a deterministic set of parameters. More...
 

Protected Attributes

Real SCM_training_tolerance
 Tolerance which controls when to terminate the SCM Greedy. More...
 
std::string RB_system_name
 The name of the associated RB system. More...
 
bool serial_training_set
 This boolean flag indicates whether or not the training set should be the same on all processors. More...
 
UniquePtr< NumericVector< Number > > inner_product_storage_vector
 We keep an extra temporary vector that is useful for performing inner products (avoids unnecessary memory allocation/deallocation). More...
 
const Parallel::Communicator_communicator
 

Static Protected Attributes

static Counts _counts
 Actually holds the data. More...
 
static Counts _counts
 Actually holds the data. More...
 
static Threads::atomic< unsigned int_n_objects
 The number of objects. More...
 
static Threads::atomic< unsigned int_n_objects
 The number of objects. More...
 
static Threads::spin_mutex _mutex
 Mutual exclusion object to enable thread-safe reference counting. More...
 
static Threads::spin_mutex _mutex
 Mutual exclusion object to enable thread-safe reference counting. More...
 
static bool _enable_print_counter = true
 Flag to control whether reference count information is printed when print_info is called. More...
 
static bool _enable_print_counter = true
 Flag to control whether reference count information is printed when print_info is called. More...
 

Private Attributes

RBSCMEvaluationrb_scm_eval
 The current RBSCMEvaluation object we are using to perform the Evaluation stage of the SCM. More...
 

Detailed Description

This class is part of the rbOOmit framework.

RBSCMConstruction implements the the Successive Constraint Method (SCM) for computing rigorous lower bounds for stability constants.

Author
David J. Knezevic
Date
2009

Definition at line 53 of file rb_scm_construction.h.

Member Typedef Documentation

typedef std::map<std::string, NumericVector<Number> *>::const_iterator libMesh::System::const_vectors_iterator
inherited

Definition at line 749 of file system.h.

typedef std::map<std::string, std::pair<unsigned int, unsigned int> > libMesh::ReferenceCounter::Counts
protectedinherited

Data structure to log the information.

The log is identified by the class name.

Definition at line 119 of file reference_counter.h.

typedef std::map<std::string, std::pair<unsigned int, unsigned int> > libMesh::ReferenceCounter::Counts
protectedinherited

Data structure to log the information.

The log is identified by the class name.

Definition at line 119 of file reference_counter.h.

The type of the parent.

Definition at line 78 of file rb_scm_construction.h.

The type of system.

Definition at line 73 of file rb_scm_construction.h.

typedef std::map<std::string, NumericVector<Number> *>::iterator libMesh::System::vectors_iterator
inherited

Vector iterator typedefs.

Definition at line 748 of file system.h.

Constructor & Destructor Documentation

libMesh::RBSCMConstruction::RBSCMConstruction ( EquationSystems es,
const std::string &  name_in,
const unsigned int  number_in 
)

Constructor.

Optionally initializes required data structures.

Definition at line 46 of file rb_scm_construction.C.

References libMesh::System::assemble_before_solve, libMesh::GHEP, and libMesh::EigenSystem::set_eigenproblem_type().

49  : Parent(es, name_in, number_in),
51  RB_system_name(""),
53 {
54 
55  // set assemble_before_solve flag to false
56  // so that we control matrix assembly.
57  assemble_before_solve = false;
58 
59  // We symmetrize all operators hence use symmetric solvers
61 
62 }
const class libmesh_nullptr_t libmesh_nullptr
RBSCMEvaluation * rb_scm_eval
The current RBSCMEvaluation object we are using to perform the Evaluation stage of the SCM...
Real SCM_training_tolerance
Tolerance which controls when to terminate the SCM Greedy.
std::string RB_system_name
The name of the associated RB system.
RBConstructionBase< CondensedEigenSystem > Parent
The type of the parent.
void set_eigenproblem_type(EigenProblemType ept)
Sets the type of the current eigen problem.
Definition: eigen_system.C:78
bool assemble_before_solve
Flag which tells the system to whether or not to call the user assembly function during each call to ...
Definition: system.h:1477
libMesh::RBSCMConstruction::~RBSCMConstruction ( )
virtual

Destructor.

Definition at line 64 of file rb_scm_construction.C.

References clear().

65 {
66  this->clear();
67 }
virtual void clear() libmesh_override
Clear all the data structures associated with the system.

Member Function Documentation

void libMesh::System::activate ( )
inherited

Activates the system.

Only active systems are solved.

Definition at line 2054 of file system.h.

References libMesh::System::_active.

Referenced by libMesh::System::get_equation_systems().

2055 {
2056  _active = true;
2057 }
bool _active
Flag stating if the system is active or not.
Definition: system.h:1908
bool libMesh::System::active ( ) const
inherited
Returns
true if the system is active, false otherwise. An active system will be solved.

Definition at line 2046 of file system.h.

References libMesh::System::_active.

Referenced by libMesh::System::get_equation_systems().

2047 {
2048  return _active;
2049 }
bool _active
Flag stating if the system is active or not.
Definition: system.h:1908
NumericVector< Number > & libMesh::System::add_adjoint_rhs ( unsigned int  i = 0)
inherited
Returns
A reference to one of the system's adjoint rhs vectors, by default the one corresponding to the first qoi. Creates the vector if it doesn't already exist.

Definition at line 1041 of file system.C.

References libMesh::System::add_vector().

Referenced by libMesh::ExplicitSystem::assemble_qoi_derivative(), libMesh::FEMSystem::assemble_qoi_derivative(), and libMesh::System::project_solution_on_reinit().

1042 {
1043  std::ostringstream adjoint_rhs_name;
1044  adjoint_rhs_name << "adjoint_rhs" << i;
1045 
1046  return this->add_vector(adjoint_rhs_name.str(), false);
1047 }
NumericVector< Number > & add_vector(const std::string &vec_name, const bool projections=true, const ParallelType type=PARALLEL)
Adds the additional vector vec_name to this system.
Definition: system.C:681
NumericVector< Number > & libMesh::System::add_adjoint_solution ( unsigned int  i = 0)
inherited
Returns
A reference to one of the system's adjoint solution vectors, by default the one corresponding to the first qoi. Creates the vector if it doesn't already exist.

Definition at line 977 of file system.C.

References libMesh::System::add_vector(), and libMesh::System::set_vector_as_adjoint().

Referenced by libMesh::ImplicitSystem::adjoint_solve(), and libMesh::System::project_solution_on_reinit().

978 {
979  std::ostringstream adjoint_name;
980  adjoint_name << "adjoint_solution" << i;
981 
982  NumericVector<Number> & returnval = this->add_vector(adjoint_name.str());
983  this->set_vector_as_adjoint(adjoint_name.str(), i);
984  return returnval;
985 }
void set_vector_as_adjoint(const std::string &vec_name, int qoi_num)
Allows one to set the QoI index controlling whether the vector identified by vec_name represents a so...
Definition: system.C:905
NumericVector< Number > & add_vector(const std::string &vec_name, const bool projections=true, const ParallelType type=PARALLEL)
Adds the additional vector vec_name to this system.
Definition: system.C:681
void libMesh::RBSCMConstruction::add_scaled_symm_Aq ( unsigned int  q_a,
Number  scalar 
)
protectedvirtual

Add the scaled symmetrized affine matrix from the associated RBSystem to matrix_A.

Definition at line 213 of file rb_scm_construction.C.

References libMesh::RBConstruction::add_scaled_Aq(), libMesh::System::get_equation_systems(), libMesh::EquationSystems::get_system(), libMesh::EigenSystem::matrix_A, and RB_system_name.

Referenced by Aq_inner_product(), attach_deflation_space(), compute_SCM_bounding_box(), and evaluate_stability_constant().

214 {
215  LOG_SCOPE("add_scaled_symm_Aq()", "RBSCMConstruction");
216  // Load the operators from the RBConstruction
217  EquationSystems & es = this->get_equation_systems();
218  RBConstruction & rb_system = es.get_system<RBConstruction>(RB_system_name);
219  rb_system.add_scaled_Aq(scalar, q_a, matrix_A.get(), true);
220 }
UniquePtr< SparseMatrix< Number > > matrix_A
The system matrix for standard eigenvalue problems.
Definition: eigen_system.h:150
std::string RB_system_name
The name of the associated RB system.
const EquationSystems & get_equation_systems() const
Definition: system.h:712
NumericVector< Number > & libMesh::System::add_sensitivity_rhs ( unsigned int  i = 0)
inherited
Returns
A reference to one of the system's sensitivity rhs vectors, by default the one corresponding to the first parameter. Creates the vector if it doesn't already exist.

Definition at line 1071 of file system.C.

References libMesh::System::add_vector().

Referenced by libMesh::ImplicitSystem::assemble_residual_derivatives(), and libMesh::System::project_solution_on_reinit().

1072 {
1073  std::ostringstream sensitivity_rhs_name;
1074  sensitivity_rhs_name << "sensitivity_rhs" << i;
1075 
1076  return this->add_vector(sensitivity_rhs_name.str(), false);
1077 }
NumericVector< Number > & add_vector(const std::string &vec_name, const bool projections=true, const ParallelType type=PARALLEL)
Adds the additional vector vec_name to this system.
Definition: system.C:681
NumericVector< Number > & libMesh::System::add_sensitivity_solution ( unsigned int  i = 0)
inherited
Returns
A reference to one of the system's solution sensitivity vectors, by default the one corresponding to the first parameter. Creates the vector if it doesn't already exist.

Definition at line 926 of file system.C.

References libMesh::System::add_vector().

Referenced by libMesh::System::project_solution_on_reinit(), and libMesh::ImplicitSystem::sensitivity_solve().

927 {
928  std::ostringstream sensitivity_name;
929  sensitivity_name << "sensitivity_solution" << i;
930 
931  return this->add_vector(sensitivity_name.str());
932 }
NumericVector< Number > & add_vector(const std::string &vec_name, const bool projections=true, const ParallelType type=PARALLEL)
Adds the additional vector vec_name to this system.
Definition: system.C:681
unsigned int libMesh::System::add_variable ( const std::string &  var,
const FEType type,
const std::set< subdomain_id_type > *const  active_subdomains = libmesh_nullptr 
)
inherited

Adds the variable var to the list of variables for this system.

Returns
The index number for the new variable.

Definition at line 1101 of file system.C.

References libMesh::System::_variable_groups, libMesh::System::_variable_numbers, libMesh::System::_variables, libMesh::System::add_variables(), libMesh::VariableGroup::append(), libMesh::System::identify_variable_groups(), libMesh::System::is_initialized(), libMesh::libmesh_assert(), libmesh_nullptr, libMesh::System::n_variable_groups(), libMesh::System::n_vars(), libMesh::System::number(), libMesh::System::variable_name(), and libMesh::System::variable_type().

Referenced by libMesh::DifferentiableSystem::add_second_order_dot_vars(), libMesh::System::add_variable(), assemble_and_solve(), SolidSystem::init_data(), CurlCurlSystem::init_data(), HeatSystem::init_data(), main(), libMesh::ErrorVector::plot_error(), libMesh::System::project_solution_on_reinit(), ParsedFEMFunctionTest::setUp(), FETest< order, family, elem_type >::setUp(), SlitMeshRefinedSystemTest::setUp(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), DefaultCouplingTest::testCoupling(), PointNeighborCouplingTest::testCoupling(), DofMapTest::testDofOwner(), EquationSystemsTest::testPostInitAddElem(), EquationSystemsTest::testPostInitAddRealSystem(), SystemsTest::testProjectCube(), SystemsTest::testProjectCubeWithMeshFunction(), SystemsTest::testProjectLine(), SystemsTest::testProjectSquare(), EquationSystemsTest::testRefineThenReinitPreserveFlags(), BoundaryInfoTest::testShellFaceConstraints(), and WriteVecAndScalar::testWrite().

1104 {
1105  libmesh_assert(!this->is_initialized());
1106 
1107  // Make sure the variable isn't there already
1108  // or if it is, that it's the type we want
1109  for (unsigned int v=0; v<this->n_vars(); v++)
1110  if (this->variable_name(v) == var)
1111  {
1112  if (this->variable_type(v) == type)
1113  return _variables[v].number();
1114 
1115  libmesh_error_msg("ERROR: incompatible variable " << var << " has already been added for this system!");
1116  }
1117 
1118  // Optimize for VariableGroups here - if the user is adding multiple
1119  // variables of the same FEType and subdomain restriction, catch
1120  // that here and add them as members of the same VariableGroup.
1121  //
1122  // start by setting this flag to whatever the user has requested
1123  // and then consider the conditions which should negate it.
1124  bool should_be_in_vg = this->identify_variable_groups();
1125 
1126  // No variable groups, nothing to add to
1127  if (!this->n_variable_groups())
1128  should_be_in_vg = false;
1129 
1130  else
1131  {
1132  VariableGroup & vg(_variable_groups.back());
1133 
1134  // get a pointer to their subdomain restriction, if any.
1135  const std::set<subdomain_id_type> * const
1136  their_active_subdomains (vg.implicitly_active() ?
1137  libmesh_nullptr : &vg.active_subdomains());
1138 
1139  // Different types?
1140  if (vg.type() != type)
1141  should_be_in_vg = false;
1142 
1143  // they are restricted, we aren't?
1144  if (their_active_subdomains && !active_subdomains)
1145  should_be_in_vg = false;
1146 
1147  // they aren't restricted, we are?
1148  if (!their_active_subdomains && active_subdomains)
1149  should_be_in_vg = false;
1150 
1151  if (their_active_subdomains && active_subdomains)
1152  // restricted to different sets?
1153  if (*their_active_subdomains != *active_subdomains)
1154  should_be_in_vg = false;
1155 
1156  // OK, after all that, append the variable to the vg if none of the conditions
1157  // were violated
1158  if (should_be_in_vg)
1159  {
1160  const unsigned short curr_n_vars = cast_int<unsigned short>
1161  (this->n_vars());
1162 
1163  vg.append (var);
1164 
1165  _variables.push_back(vg(vg.n_variables()-1));
1166  _variable_numbers[var] = curr_n_vars;
1167  return curr_n_vars;
1168  }
1169  }
1170 
1171  // otherwise, fall back to adding a single variable group
1172  return this->add_variables (std::vector<std::string>(1, var),
1173  type,
1174  active_subdomains);
1175 }
std::map< std::string, unsigned short int > _variable_numbers
The variable numbers corresponding to user-specified names, useful for name-based lookups...
Definition: system.h:1903
const std::string & variable_name(const unsigned int i) const
Definition: system.h:2134
const class libmesh_nullptr_t libmesh_nullptr
std::vector< Variable > _variables
The Variable in this System.
Definition: system.h:1892
const FEType & variable_type(const unsigned int i) const
Definition: system.h:2164
libmesh_assert(j)
unsigned int n_variable_groups() const
Definition: system.h:2094
std::vector< VariableGroup > _variable_groups
The VariableGroup in this System.
Definition: system.h:1897
bool is_initialized()
Definition: system.h:2070
bool identify_variable_groups() const
Definition: system.h:2182
unsigned int number() const
Definition: system.h:2006
unsigned int add_variables(const std::vector< std::string > &vars, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=libmesh_nullptr)
Adds the variable var to the list of variables for this system.
Definition: system.C:1191
unsigned int n_vars() const
Definition: system.h:2086
unsigned int libMesh::System::add_variable ( const std::string &  var,
const Order  order = FIRST,
const FEFamily  family = LAGRANGE,
const std::set< subdomain_id_type > *const  active_subdomains = libmesh_nullptr 
)
inherited

Adds the variable var to the list of variables for this system.

Same as before, but assumes LAGRANGE as default value for FEType.family.

Definition at line 1179 of file system.C.

References libMesh::System::add_variable().

1183 {
1184  return this->add_variable(var,
1185  FEType(order, family),
1186  active_subdomains);
1187 }
unsigned int add_variable(const std::string &var, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=libmesh_nullptr)
Adds the variable var to the list of variables for this system.
Definition: system.C:1101
unsigned int libMesh::System::add_variables ( const std::vector< std::string > &  vars,
const FEType type,
const std::set< subdomain_id_type > *const  active_subdomains = libmesh_nullptr 
)
inherited

Adds the variable var to the list of variables for this system.

Returns
The index number for the new variable.

Definition at line 1191 of file system.C.

References libMesh::System::_variable_groups, libMesh::System::_variable_numbers, libMesh::System::_variables, libMesh::System::is_initialized(), libMesh::libmesh_assert(), libmesh_nullptr, libMesh::System::n_components(), libMesh::System::n_vars(), libMesh::System::number(), libMesh::System::variable_name(), and libMesh::System::variable_type().

Referenced by libMesh::System::add_variable(), libMesh::System::add_variables(), and libMesh::System::project_solution_on_reinit().

1194 {
1195  libmesh_assert(!this->is_initialized());
1196 
1197  // Make sure the variable isn't there already
1198  // or if it is, that it's the type we want
1199  for (std::size_t ov=0; ov<vars.size(); ov++)
1200  for (unsigned int v=0; v<this->n_vars(); v++)
1201  if (this->variable_name(v) == vars[ov])
1202  {
1203  if (this->variable_type(v) == type)
1204  return _variables[v].number();
1205 
1206  libmesh_error_msg("ERROR: incompatible variable " << vars[ov] << " has already been added for this system!");
1207  }
1208 
1209  const unsigned short curr_n_vars = cast_int<unsigned short>
1210  (this->n_vars());
1211 
1212  const unsigned int next_first_component = this->n_components();
1213 
1214  // Add the variable group to the list
1215  _variable_groups.push_back((active_subdomains == libmesh_nullptr) ?
1216  VariableGroup(this, vars, curr_n_vars,
1217  next_first_component, type) :
1218  VariableGroup(this, vars, curr_n_vars,
1219  next_first_component, type, *active_subdomains));
1220 
1221  const VariableGroup & vg (_variable_groups.back());
1222 
1223  // Add each component of the group individually
1224  for (std::size_t v=0; v<vars.size(); v++)
1225  {
1226  _variables.push_back (vg(v));
1227  _variable_numbers[vars[v]] = cast_int<unsigned short>
1228  (curr_n_vars+v);
1229  }
1230 
1231  libmesh_assert_equal_to ((curr_n_vars+vars.size()), this->n_vars());
1232 
1233  // BSK - Defer this now to System::init_data() so we can detect
1234  // VariableGroups 12/28/2012
1235  // // Add the variable group to the _dof_map
1236  // _dof_map->add_variable_group (vg);
1237 
1238  // Return the number of the new variable
1239  return cast_int<unsigned int>(curr_n_vars+vars.size()-1);
1240 }
std::map< std::string, unsigned short int > _variable_numbers
The variable numbers corresponding to user-specified names, useful for name-based lookups...
Definition: system.h:1903
const std::string & variable_name(const unsigned int i) const
Definition: system.h:2134
const class libmesh_nullptr_t libmesh_nullptr
std::vector< Variable > _variables
The Variable in this System.
Definition: system.h:1892
const FEType & variable_type(const unsigned int i) const
Definition: system.h:2164
libmesh_assert(j)
unsigned int n_components() const
Definition: system.h:2102
std::vector< VariableGroup > _variable_groups
The VariableGroup in this System.
Definition: system.h:1897
bool is_initialized()
Definition: system.h:2070
unsigned int number() const
Definition: system.h:2006
unsigned int n_vars() const
Definition: system.h:2086
unsigned int libMesh::System::add_variables ( const std::vector< std::string > &  vars,
const Order  order = FIRST,
const FEFamily  family = LAGRANGE,
const std::set< subdomain_id_type > *const  active_subdomains = libmesh_nullptr 
)
inherited

Adds the variable var to the list of variables for this system.

Same as before, but assumes LAGRANGE as default value for FEType.family.

Definition at line 1244 of file system.C.

References libMesh::System::add_variables().

1248 {
1249  return this->add_variables(vars,
1250  FEType(order, family),
1251  active_subdomains);
1252 }
unsigned int add_variables(const std::vector< std::string > &vars, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=libmesh_nullptr)
Adds the variable var to the list of variables for this system.
Definition: system.C:1191
NumericVector< Number > & libMesh::System::add_vector ( const std::string &  vec_name,
const bool  projections = true,
const ParallelType  type = PARALLEL 
)
inherited

Adds the additional vector vec_name to this system.

All the additional vectors are similarly distributed, like the solution, and initialized to zero.

By default vectors added by add_vector are projected to changed grids by reinit(). To zero them instead (more efficient), pass "false" as the second argument

Definition at line 681 of file system.C.

References libMesh::System::_dof_map, libMesh::System::_is_initialized, libMesh::System::_vector_is_adjoint, libMesh::System::_vector_projections, libMesh::System::_vector_types, libMesh::System::_vectors, libMesh::NumericVector< T >::build(), libMesh::ParallelObject::comm(), libMesh::GHOSTED, libMesh::System::have_vector(), libMesh::NumericVector< T >::init(), libMesh::System::n_dofs(), and libMesh::System::n_local_dofs().

Referenced by libMesh::System::add_adjoint_rhs(), libMesh::System::add_adjoint_solution(), libMesh::System::add_sensitivity_rhs(), libMesh::System::add_sensitivity_solution(), libMesh::ExplicitSystem::add_system_rhs(), libMesh::System::add_weighted_sensitivity_adjoint_solution(), libMesh::System::add_weighted_sensitivity_solution(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::SecondOrderUnsteadySolver::init(), libMesh::UnsteadySolver::init(), libMesh::OptimizationSystem::init_data(), libMesh::ContinuationSystem::init_data(), main(), libMesh::NewmarkSystem::NewmarkSystem(), libMesh::FrequencySystem::set_frequencies(), libMesh::FrequencySystem::set_frequencies_by_range(), and libMesh::FrequencySystem::set_frequencies_by_steps().

684 {
685  // Return the vector if it is already there.
686  if (this->have_vector(vec_name))
687  return *(_vectors[vec_name]);
688 
689  // Otherwise build the vector
690  NumericVector<Number> * buf = NumericVector<Number>::build(this->comm()).release();
691  _vectors.insert (std::make_pair (vec_name, buf));
692  _vector_projections.insert (std::make_pair (vec_name, projections));
693 
694  _vector_types.insert (std::make_pair (vec_name, type));
695 
696  // Vectors are primal by default
697  _vector_is_adjoint.insert (std::make_pair (vec_name, -1));
698 
699  // Initialize it if necessary
700  if (_is_initialized)
701  {
702  if (type == GHOSTED)
703  {
704 #ifdef LIBMESH_ENABLE_GHOSTED
705  buf->init (this->n_dofs(), this->n_local_dofs(),
706  _dof_map->get_send_list(), false,
707  GHOSTED);
708 #else
709  libmesh_error_msg("Cannot initialize ghosted vectors when they are not enabled.");
710 #endif
711  }
712  else
713  buf->init (this->n_dofs(), this->n_local_dofs(), false, type);
714  }
715 
716  return *buf;
717 }
std::map< std::string, ParallelType > _vector_types
Holds the type of a vector.
Definition: system.h:1933
bool _is_initialized
true when additional vectors and variables do not require immediate initialization, false otherwise.
Definition: system.h:1952
UniquePtr< DofMap > _dof_map
Data structure describing the relationship between nodes, variables, etc...
Definition: system.h:1865
static UniquePtr< NumericVector< T > > build(const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
Builds a NumericVector on the processors in communicator comm using the linear solver package specifi...
bool have_vector(const std::string &vec_name) const
Definition: system.h:2206
std::map< std::string, int > _vector_is_adjoint
Holds non-negative if a vector by that name should be projected using adjoint constraints/BCs, -1 if primal.
Definition: system.h:1928
dof_id_type n_local_dofs() const
Definition: system.C:185
std::map< std::string, NumericVector< Number > * > _vectors
Some systems need an arbitrary number of vectors.
Definition: system.h:1916
const Parallel::Communicator & comm() const
std::map< std::string, bool > _vector_projections
Holds true if a vector by that name should be projected onto a changed grid, false if it should be ze...
Definition: system.h:1922
dof_id_type n_dofs() const
Definition: system.C:148
NumericVector< Number > & libMesh::System::add_weighted_sensitivity_adjoint_solution ( unsigned int  i = 0)
inherited
Returns
A reference to one of the system's weighted sensitivity adjoint solution vectors, by default the one corresponding to the first qoi. Creates the vector if it doesn't already exist.

Definition at line 1009 of file system.C.

References libMesh::System::add_vector(), and libMesh::System::set_vector_as_adjoint().

Referenced by libMesh::System::project_solution_on_reinit(), and libMesh::ImplicitSystem::weighted_sensitivity_adjoint_solve().

1010 {
1011  std::ostringstream adjoint_name;
1012  adjoint_name << "weighted_sensitivity_adjoint_solution" << i;
1013 
1014  NumericVector<Number> & returnval = this->add_vector(adjoint_name.str());
1015  this->set_vector_as_adjoint(adjoint_name.str(), i);
1016  return returnval;
1017 }
void set_vector_as_adjoint(const std::string &vec_name, int qoi_num)
Allows one to set the QoI index controlling whether the vector identified by vec_name represents a so...
Definition: system.C:905
NumericVector< Number > & add_vector(const std::string &vec_name, const bool projections=true, const ParallelType type=PARALLEL)
Adds the additional vector vec_name to this system.
Definition: system.C:681
NumericVector< Number > & libMesh::System::add_weighted_sensitivity_solution ( )
inherited
Returns
A reference to the solution of the last weighted sensitivity solve Creates the vector if it doesn't already exist.

Definition at line 956 of file system.C.

References libMesh::System::add_vector().

Referenced by libMesh::System::project_solution_on_reinit(), and libMesh::ImplicitSystem::weighted_sensitivity_solve().

957 {
958  return this->add_vector("weighted_sensitivity_solution");
959 }
NumericVector< Number > & add_vector(const std::string &vec_name, const bool projections=true, const ParallelType type=PARALLEL)
Adds the additional vector vec_name to this system.
Definition: system.C:681
void libMesh::System::adjoint_qoi_parameter_sensitivity ( const QoISet qoi_indices,
const ParameterVector parameters,
SensitivityData sensitivities 
)
virtualinherited

Solves for parameter sensitivities using the adjoint method.

This method is only implemented in some derived classes.

Reimplemented in libMesh::ImplicitSystem.

Definition at line 2291 of file system.h.

Referenced by libMesh::System::qoi_parameter_sensitivity(), and libMesh::System::set_adjoint_already_solved().

2294 {
2295  libmesh_not_implemented();
2296 }
std::pair< unsigned int, Real > libMesh::System::adjoint_solve ( const QoISet qoi_indices = QoISet())
virtualinherited

Solves the adjoint system, for the specified qoi indices, or for every qoi if qoi_indices is NULL.

Must be overridden in derived systems.

Returns
A pair with the total number of linear iterations performed and the (sum of the) final residual norms

This method is only implemented in some derived classes.

Reimplemented in libMesh::ImplicitSystem, and libMesh::DifferentiableSystem.

Definition at line 2275 of file system.h.

Referenced by libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::AdjointResidualErrorEstimator::estimate_error(), and libMesh::System::solve().

2276 {
2277  libmesh_not_implemented();
2278 }
Number libMesh::RBSCMConstruction::Aq_inner_product ( unsigned int  q,
const NumericVector< Number > &  v,
const NumericVector< Number > &  w 
)
protected

Compute the inner product between two vectors using matrix Aq.

Definition at line 412 of file rb_scm_construction.C.

References add_scaled_symm_Aq(), libMesh::NumericVector< T >::dot(), get_rb_theta_expansion(), libMesh::RBConstructionBase< CondensedEigenSystem >::inner_product_storage_vector, and libMesh::EigenSystem::matrix_A.

Referenced by attach_deflation_space(), and evaluate_stability_constant().

415 {
416  if (q >= get_rb_theta_expansion().get_n_A_terms())
417  libmesh_error_msg("Error: We must have q < Q_a in Aq_inner_product.");
418 
419  matrix_A->zero();
420  add_scaled_symm_Aq(q, 1.);
421  matrix_A->vector_mult(*inner_product_storage_vector, w);
422 
424 }
UniquePtr< NumericVector< Number > > inner_product_storage_vector
We keep an extra temporary vector that is useful for performing inner products (avoids unnecessary me...
UniquePtr< SparseMatrix< Number > > matrix_A
The system matrix for standard eigenvalue problems.
Definition: eigen_system.h:150
RBThetaExpansion & get_rb_theta_expansion()
Get a reference to the RBThetaExpansion object.
virtual void add_scaled_symm_Aq(unsigned int q_a, Number scalar)
Add the scaled symmetrized affine matrix from the associated RBSystem to matrix_A.
virtual T dot(const NumericVector< T > &v) const =0
void libMesh::EigenSystem::assemble ( )
virtualinherited

Assembles the system matrix.

Reimplemented from libMesh::System.

Definition at line 248 of file eigen_system.C.

References libMesh::System::assemble().

Referenced by libMesh::EigenSystem::solve(), libMesh::CondensedEigenSystem::solve(), and libMesh::EigenSystem::system().

249 {
250 
251  // Assemble the linear system
252  Parent::assemble ();
253 
254 }
virtual void assemble()
Prepares matrix and _dof_map for matrix assembly.
Definition: system.C:479
void libMesh::System::assemble_qoi ( const QoISet qoi_indices = QoISet())
virtualinherited

Calls user qoi function.

Can be overridden in derived classes.

Reimplemented in libMesh::FEMSystem, and libMesh::ExplicitSystem.

Definition at line 490 of file system.C.

References libMesh::System::user_QOI().

Referenced by libMesh::ExplicitSystem::assemble_qoi(), and libMesh::System::system().

491 {
492  // Log how long the user's assembly code takes
493  LOG_SCOPE("assemble_qoi()", "System");
494 
495  // Call the user-specified quantity of interest function
496  this->user_QOI(qoi_indices);
497 }
virtual void user_QOI(const QoISet &qoi_indices)
Calls user&#39;s attached quantity of interest function, or is overridden by the user in derived classes...
Definition: system.C:1978
void libMesh::System::assemble_qoi_derivative ( const QoISet qoi_indices = QoISet(),
bool  include_liftfunc = true,
bool  apply_constraints = true 
)
virtualinherited

Calls user qoi derivative function.

Can be overridden in derived classes.

Reimplemented in libMesh::FEMSystem, and libMesh::ExplicitSystem.

Definition at line 501 of file system.C.

References libMesh::System::user_QOI_derivative().

Referenced by libMesh::ExplicitSystem::assemble_qoi_derivative(), and libMesh::System::system().

504 {
505  // Log how long the user's assembly code takes
506  LOG_SCOPE("assemble_qoi_derivative()", "System");
507 
508  // Call the user-specified quantity of interest function
509  this->user_QOI_derivative(qoi_indices, include_liftfunc,
510  apply_constraints);
511 }
virtual void user_QOI_derivative(const QoISet &qoi_indices=QoISet(), bool include_liftfunc=true, bool apply_constraints=true)
Calls user&#39;s attached quantity of interest derivative function, or is overridden by the user in deriv...
Definition: system.C:1992
void libMesh::System::assemble_residual_derivatives ( const ParameterVector parameters)
virtualinherited

Calls residual parameter derivative function.

Library subclasses use finite differences by default.

This should assemble the sensitivity rhs vectors to hold -(partial R / partial p_i), making them ready to solve the forward sensitivity equation.

This method is only implemented in some derived classes.

Reimplemented in libMesh::ImplicitSystem.

Definition at line 2250 of file system.h.

Referenced by libMesh::System::system().

2251 {
2252  libmesh_not_implemented();
2253 }
void libMesh::System::attach_assemble_function ( void   fptrEquationSystems &es, const std::string &name)
inherited

Register a user function to use in assembling the system matrix and RHS.

Definition at line 1795 of file system.C.

References libMesh::System::_assemble_system_function, libMesh::System::_assemble_system_object, fptr(), libMesh::libmesh_assert(), libmesh_nullptr, and libMesh::out.

Referenced by assemble_and_solve(), main(), and libMesh::System::read_parallel_data().

1797 {
1799 
1801  {
1802  libmesh_here();
1803  libMesh::out << "WARNING: Cannot specify both assembly function and object!"
1804  << std::endl;
1805 
1807  }
1808 
1810 }
Assembly * _assemble_system_object
Object that assembles the system.
Definition: system.h:1822
const class libmesh_nullptr_t libmesh_nullptr
Number fptr(const Point &p, const Parameters &, const std::string &libmesh_dbg_var(sys_name), const std::string &unknown_name)
Definition: projection.C:78
libmesh_assert(j)
OStreamProxy out
void(* _assemble_system_function)(EquationSystems &es, const std::string &name)
Function that assembles the system.
Definition: system.h:1816
void libMesh::System::attach_assemble_object ( System::Assembly assemble_in)
inherited

Register a user object to use in assembling the system matrix and RHS.

Definition at line 1814 of file system.C.

References libMesh::System::_assemble_system_function, libMesh::System::_assemble_system_object, libmesh_nullptr, and libMesh::out.

Referenced by main(), and libMesh::System::read_parallel_data().

1815 {
1817  {
1818  libmesh_here();
1819  libMesh::out << "WARNING: Cannot specify both assembly object and function!"
1820  << std::endl;
1821 
1823  }
1824 
1825  _assemble_system_object = &assemble_in;
1826 }
Assembly * _assemble_system_object
Object that assembles the system.
Definition: system.h:1822
const class libmesh_nullptr_t libmesh_nullptr
OStreamProxy out
void(* _assemble_system_function)(EquationSystems &es, const std::string &name)
Function that assembles the system.
Definition: system.h:1816
void libMesh::System::attach_constraint_function ( void   fptrEquationSystems &es, const std::string &name)
inherited

Register a user function for imposing constraints.

Definition at line 1830 of file system.C.

References libMesh::System::_constrain_system_function, libMesh::System::_constrain_system_object, fptr(), libMesh::libmesh_assert(), libmesh_nullptr, and libMesh::out.

Referenced by libMesh::System::read_parallel_data().

1832 {
1834 
1836  {
1837  libmesh_here();
1838  libMesh::out << "WARNING: Cannot specify both constraint function and object!"
1839  << std::endl;
1840 
1842  }
1843 
1845 }
void(* _constrain_system_function)(EquationSystems &es, const std::string &name)
Function to impose constraints.
Definition: system.h:1827
Constraint * _constrain_system_object
Object that constrains the system.
Definition: system.h:1833
const class libmesh_nullptr_t libmesh_nullptr
Number fptr(const Point &p, const Parameters &, const std::string &libmesh_dbg_var(sys_name), const std::string &unknown_name)
Definition: projection.C:78
libmesh_assert(j)
OStreamProxy out
void libMesh::System::attach_constraint_object ( System::Constraint constrain)
inherited

Register a user object for imposing constraints.

Definition at line 1849 of file system.C.

References libMesh::System::_constrain_system_function, libMesh::System::_constrain_system_object, libmesh_nullptr, and libMesh::out.

Referenced by libMesh::System::read_parallel_data().

1850 {
1852  {
1853  libmesh_here();
1854  libMesh::out << "WARNING: Cannot specify both constraint object and function!"
1855  << std::endl;
1856 
1858  }
1859 
1860  _constrain_system_object = &constrain;
1861 }
void(* _constrain_system_function)(EquationSystems &es, const std::string &name)
Function to impose constraints.
Definition: system.h:1827
Constraint * _constrain_system_object
Object that constrains the system.
Definition: system.h:1833
const class libmesh_nullptr_t libmesh_nullptr
OStreamProxy out
virtual void libMesh::RBSCMConstruction::attach_deflation_space ( )
virtual

Attach the deflation space defined by the specified vector, can be useful in solving constrained eigenvalue problems.

This function is called at the start of perform_SCM_greedy and by default is does nothing. Override in subclass to attach a specific vector.

Definition at line 156 of file rb_scm_construction.h.

References add_scaled_symm_Aq(), Aq_inner_product(), B_inner_product(), compute_SCM_bounding_box(), compute_SCM_bounds_on_training_set(), enrich_C_J(), evaluate_stability_constant(), and load_matrix_B().

Referenced by perform_SCM_greedy().

156 {}
void libMesh::System::attach_init_function ( void   fptrEquationSystems &es, const std::string &name)
inherited

Register a user function to use in initializing the system.

Definition at line 1760 of file system.C.

References libMesh::System::_init_system_function, libMesh::System::_init_system_object, fptr(), libMesh::libmesh_assert(), libmesh_nullptr, and libMesh::out.

Referenced by main(), and libMesh::System::read_parallel_data().

1762 {
1764 
1766  {
1767  libmesh_here();
1768  libMesh::out << "WARNING: Cannot specify both initialization function and object!"
1769  << std::endl;
1770 
1772  }
1773 
1775 }
const class libmesh_nullptr_t libmesh_nullptr
Number fptr(const Point &p, const Parameters &, const std::string &libmesh_dbg_var(sys_name), const std::string &unknown_name)
Definition: projection.C:78
libmesh_assert(j)
Initialization * _init_system_object
Object that initializes the system.
Definition: system.h:1811
void(* _init_system_function)(EquationSystems &es, const std::string &name)
Function that initializes the system.
Definition: system.h:1805
OStreamProxy out
void libMesh::System::attach_init_object ( System::Initialization init_in)
inherited

Register a user class to use to initialize the system.

Note
This is exclusive with the attach_init_function.

Definition at line 1779 of file system.C.

References libMesh::System::_init_system_function, libMesh::System::_init_system_object, libmesh_nullptr, and libMesh::out.

Referenced by libMesh::System::read_parallel_data().

1780 {
1782  {
1783  libmesh_here();
1784  libMesh::out << "WARNING: Cannot specify both initialization object and function!"
1785  << std::endl;
1786 
1788  }
1789 
1790  _init_system_object = &init_in;
1791 }
const class libmesh_nullptr_t libmesh_nullptr
Initialization * _init_system_object
Object that initializes the system.
Definition: system.h:1811
void(* _init_system_function)(EquationSystems &es, const std::string &name)
Function that initializes the system.
Definition: system.h:1805
OStreamProxy out
void libMesh::System::attach_QOI_derivative ( void   fptrEquationSystems &es, const std::string &name, const QoISet &qoi_indices, bool include_liftfunc, bool apply_constraints)
inherited

Register a user function for evaluating derivatives of a quantity of interest with respect to test functions, whose values should be placed in System::rhs.

Definition at line 1901 of file system.C.

References libMesh::System::_qoi_evaluate_derivative_function, libMesh::System::_qoi_evaluate_derivative_object, fptr(), libMesh::libmesh_assert(), libmesh_nullptr, and libMesh::out.

Referenced by libMesh::System::read_parallel_data().

1903 {
1905 
1907  {
1908  libmesh_here();
1909  libMesh::out << "WARNING: Cannot specify both QOI derivative function and object!"
1910  << std::endl;
1911 
1913  }
1914 
1916 }
const class libmesh_nullptr_t libmesh_nullptr
Number fptr(const Point &p, const Parameters &, const std::string &libmesh_dbg_var(sys_name), const std::string &unknown_name)
Definition: projection.C:78
libmesh_assert(j)
QOIDerivative * _qoi_evaluate_derivative_object
Object to compute derivatives of quantities of interest.
Definition: system.h:1859
OStreamProxy out
void(* _qoi_evaluate_derivative_function)(EquationSystems &es, const std::string &name, const QoISet &qoi_indices, bool include_liftfunc, bool apply_constraints)
Function to evaluate quantity of interest derivative.
Definition: system.h:1850
void libMesh::System::attach_QOI_derivative_object ( QOIDerivative qoi_derivative)
inherited

Register a user object for evaluating derivatives of a quantity of interest with respect to test functions, whose values should be placed in System::rhs.

Definition at line 1920 of file system.C.

References libMesh::System::_qoi_evaluate_derivative_function, libMesh::System::_qoi_evaluate_derivative_object, libmesh_nullptr, and libMesh::out.

Referenced by libMesh::System::read_parallel_data().

1921 {
1923  {
1924  libmesh_here();
1925  libMesh::out << "WARNING: Cannot specify both QOI derivative object and function!"
1926  << std::endl;
1927 
1929  }
1930 
1931  _qoi_evaluate_derivative_object = &qoi_derivative;
1932 }
const class libmesh_nullptr_t libmesh_nullptr
QOIDerivative * _qoi_evaluate_derivative_object
Object to compute derivatives of quantities of interest.
Definition: system.h:1859
OStreamProxy out
void(* _qoi_evaluate_derivative_function)(EquationSystems &es, const std::string &name, const QoISet &qoi_indices, bool include_liftfunc, bool apply_constraints)
Function to evaluate quantity of interest derivative.
Definition: system.h:1850
void libMesh::System::attach_QOI_function ( void   fptrEquationSystems &es, const std::string &name, const QoISet &qoi_indices)
inherited

Register a user function for evaluating the quantities of interest, whose values should be placed in System::qoi.

Definition at line 1865 of file system.C.

References libMesh::System::_qoi_evaluate_function, libMesh::System::_qoi_evaluate_object, fptr(), libMesh::libmesh_assert(), libmesh_nullptr, and libMesh::out.

Referenced by libMesh::System::read_parallel_data().

1868 {
1870 
1872  {
1873  libmesh_here();
1874  libMesh::out << "WARNING: Cannot specify both QOI function and object!"
1875  << std::endl;
1876 
1878  }
1879 
1881 }
const class libmesh_nullptr_t libmesh_nullptr
void(* _qoi_evaluate_function)(EquationSystems &es, const std::string &name, const QoISet &qoi_indices)
Function to evaluate quantity of interest.
Definition: system.h:1838
Number fptr(const Point &p, const Parameters &, const std::string &libmesh_dbg_var(sys_name), const std::string &unknown_name)
Definition: projection.C:78
libmesh_assert(j)
QOI * _qoi_evaluate_object
Object to compute quantities of interest.
Definition: system.h:1845
OStreamProxy out
void libMesh::System::attach_QOI_object ( QOI qoi)
inherited

Register a user object for evaluating the quantities of interest, whose values should be placed in System::qoi.

Definition at line 1885 of file system.C.

References libMesh::System::_qoi_evaluate_function, libMesh::System::_qoi_evaluate_object, libmesh_nullptr, and libMesh::out.

Referenced by libMesh::System::read_parallel_data().

1886 {
1888  {
1889  libmesh_here();
1890  libMesh::out << "WARNING: Cannot specify both QOI object and function!"
1891  << std::endl;
1892 
1894  }
1895 
1896  _qoi_evaluate_object = &qoi_in;
1897 }
const class libmesh_nullptr_t libmesh_nullptr
void(* _qoi_evaluate_function)(EquationSystems &es, const std::string &name, const QoISet &qoi_indices)
Function to evaluate quantity of interest.
Definition: system.h:1838
QOI * _qoi_evaluate_object
Object to compute quantities of interest.
Definition: system.h:1845
OStreamProxy out
Number libMesh::RBSCMConstruction::B_inner_product ( const NumericVector< Number > &  v,
const NumericVector< Number > &  w 
) const
protected

Compute the inner product between two vectors using the system's matrix_B.

Definition at line 404 of file rb_scm_construction.C.

References libMesh::NumericVector< T >::dot(), libMesh::RBConstructionBase< CondensedEigenSystem >::inner_product_storage_vector, and libMesh::EigenSystem::matrix_B.

Referenced by attach_deflation_space(), and evaluate_stability_constant().

406 {
407  matrix_B->vector_mult(*inner_product_storage_vector, w);
408 
410 }
UniquePtr< NumericVector< Number > > inner_product_storage_vector
We keep an extra temporary vector that is useful for performing inner products (avoids unnecessary me...
UniquePtr< SparseMatrix< Number > > matrix_B
A second system matrix for generalized eigenvalue problems.
Definition: eigen_system.h:155
virtual T dot(const NumericVector< T > &v) const =0
void libMesh::System::boundary_project_solution ( const std::set< boundary_id_type > &  b,
const std::vector< unsigned int > &  variables,
FunctionBase< Number > *  f,
FunctionBase< Gradient > *  g = libmesh_nullptr 
)
inherited

Projects arbitrary boundary functions onto a vector of degree of freedom values for the current system.

This method projects an arbitrary boundary function onto the solution via L2 projections and nodal interpolations on each element.

Only degrees of freedom which affect the function's trace on a boundary in the set b are affected. Only degrees of freedom associated with the variables listed in the vector variables are projected. The function value f and its gradient g are user-provided cloneable functors. A gradient g is only required/used for projecting onto finite element spaces with continuous derivatives. If non-default Parameters are to be used, they can be provided in the parameters argument.

Definition at line 999 of file system_projection.C.

References libMesh::System::boundary_project_vector(), fptr(), and gptr().

Referenced by libMesh::System::project_vector(), and libMesh::System::system_type().

1003 {
1004  this->boundary_project_vector(b, variables, *solution, f, g);
1005 
1006  solution->localize(*current_local_solution);
1007 }
void boundary_project_vector(const std::set< boundary_id_type > &b, const std::vector< unsigned int > &variables, NumericVector< Number > &new_vector, FunctionBase< Number > *f, FunctionBase< Gradient > *g=libmesh_nullptr, int is_adjoint=-1) const
Projects arbitrary boundary functions onto a vector of degree of freedom values for the current syste...
UniquePtr< NumericVector< Number > > current_local_solution
All the values I need to compute my contribution to the simulation at hand.
Definition: system.h:1535
UniquePtr< NumericVector< Number > > solution
Data structure to hold solution values.
Definition: system.h:1523
void libMesh::System::boundary_project_solution ( const std::set< boundary_id_type > &  b,
const std::vector< unsigned int > &  variables,
Number   fptrconst Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name,
Gradient   gptrconst Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name,
const Parameters parameters 
)
inherited

Projects arbitrary boundary functions onto a vector of degree of freedom values for the current system.

Only degrees of freedom which affect the function's trace on a boundary in the set b are affected. Only degrees of freedom associated with the variables listed in the vector variables are projected. The function value fptr and its gradient gptr are represented by function pointers. A gradient gptr is only required/used for projecting onto finite element spaces with continuous derivatives.

void libMesh::System::boundary_project_vector ( const std::set< boundary_id_type > &  b,
const std::vector< unsigned int > &  variables,
NumericVector< Number > &  new_vector,
FunctionBase< Number > *  f,
FunctionBase< Gradient > *  g = libmesh_nullptr,
int  is_adjoint = -1 
) const
inherited

Projects arbitrary boundary functions onto a vector of degree of freedom values for the current system.

This method projects an arbitrary function via L2 projections and nodal interpolations on each element.

Only degrees of freedom which affect the function's trace on a boundary in the set b are affected. Only degrees of freedom associated with the variables listed in the vector variables are projected. The function value f and its gradient g are user-provided cloneable functors. A gradient g is only required/used for projecting onto finite element spaces with continuous derivatives. If non-default Parameters are to be used, they can be provided in the parameters argument.

Constrain the new vector using the requested adjoint rather than primal constraints if is_adjoint is non-negative.

Definition at line 1041 of file system_projection.C.

References libMesh::NumericVector< T >::close(), libMesh::get_dof_map(), and libMesh::Threads::parallel_for().

Referenced by libMesh::System::boundary_project_solution(), and libMesh::System::system_type().

1047 {
1048  LOG_SCOPE ("boundary_project_vector()", "System");
1049 
1051  (ConstElemRange (this->get_mesh().active_local_elements_begin(),
1052  this->get_mesh().active_local_elements_end() ),
1053  BoundaryProjectSolution(b, variables, *this, f, g,
1054  this->get_equation_systems().parameters,
1055  new_vector)
1056  );
1057 
1058  // We don't do SCALAR dofs when just projecting the boundary, so
1059  // we're done here.
1060 
1061  new_vector.close();
1062 
1063 #ifdef LIBMESH_ENABLE_CONSTRAINTS
1064  if (is_adjoint == -1)
1065  this->get_dof_map().enforce_constraints_exactly(*this, &new_vector);
1066  else if (is_adjoint >= 0)
1068  is_adjoint);
1069 #endif
1070 }
void parallel_for(const Range &range, const Body &body)
Execute the provided function object in parallel on the specified range.
Definition: threads_none.h:73
StoredRange< MeshBase::const_element_iterator, const Elem * > ConstElemRange
Definition: elem_range.h:34
const MeshBase & get_mesh() const
Definition: system.h:2014
const DofMap & get_dof_map() const
Definition: system.h:2030
void enforce_constraints_exactly(const System &system, NumericVector< Number > *v=libmesh_nullptr, bool homogeneous=false) const
Constrains the numeric vector v, which represents a solution defined on the mesh. ...
Definition: dof_map.h:1816
virtual void close()=0
Calls the NumericVector&#39;s internal assembly routines, ensuring that the values are consistent across ...
const EquationSystems & get_equation_systems() const
Definition: system.h:712
void enforce_adjoint_constraints_exactly(NumericVector< Number > &v, unsigned int q) const
Heterogenously constrains the numeric vector v, which represents an adjoint solution defined on the m...
Definition: dof_map.h:1820
void libMesh::System::boundary_project_vector ( const std::set< boundary_id_type > &  b,
const std::vector< unsigned int > &  variables,
Number   fptrconst Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name,
Gradient   gptrconst Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name,
const Parameters parameters,
NumericVector< Number > &  new_vector,
int  is_adjoint = -1 
) const
inherited

Projects arbitrary boundary functions onto a vector of degree of freedom values for the current system.

Only degrees of freedom which affect the function's trace on a boundary in the set b are affected. Only degrees of freedom associated with the variables listed in the vector variables are projected. The function value fptr and its gradient gptr are represented by function pointers. A gradient gptr is only required/used for projecting onto finite element spaces with continuous derivatives.

Constrain the new vector using the requested adjoint rather than primal constraints if is_adjoint is non-negative.

void libMesh::RBConstructionBase< CondensedEigenSystem >::broadcast_parameters ( unsigned int  proc_id)
inherited

Broadcasts parameters on processor proc_id to all processors.

Real libMesh::System::calculate_norm ( const NumericVector< Number > &  v,
unsigned int  var,
FEMNormType  norm_type,
std::set< unsigned int > *  skip_dimensions = libmesh_nullptr 
) const
inherited
Returns
A norm of variable var in the vector v, in the specified norm (e.g. L2, L_INF, H1)

Definition at line 1383 of file system.C.

References libMesh::DISCRETE_L1, libMesh::DISCRETE_L2, libMesh::DISCRETE_L_INF, libMesh::System::discrete_var_norm(), libMesh::L2, libMesh::System::n_vars(), and libMesh::Real.

Referenced by libMesh::AdaptiveTimeSolver::calculate_norm(), libMesh::UnsteadySolver::du(), main(), output_norms(), and libMesh::System::project_solution_on_reinit().

1387 {
1388  //short circuit to save time
1389  if (norm_type == DISCRETE_L1 ||
1390  norm_type == DISCRETE_L2 ||
1391  norm_type == DISCRETE_L_INF)
1392  return discrete_var_norm(v,var,norm_type);
1393 
1394  // Not a discrete norm
1395  std::vector<FEMNormType> norms(this->n_vars(), L2);
1396  std::vector<Real> weights(this->n_vars(), 0.0);
1397  norms[var] = norm_type;
1398  weights[var] = 1.0;
1399  Real val = this->calculate_norm(v, SystemNorm(norms, weights), skip_dimensions);
1400  return val;
1401 }
Real calculate_norm(const NumericVector< Number > &v, unsigned int var, FEMNormType norm_type, std::set< unsigned int > *skip_dimensions=libmesh_nullptr) const
Definition: system.C:1383
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
unsigned int n_vars() const
Definition: system.h:2086
Real discrete_var_norm(const NumericVector< Number > &v, unsigned int var, FEMNormType norm_type) const
Finds the discrete norm for the entries in the vector corresponding to Dofs associated with var...
Definition: system.C:1364
Real libMesh::System::calculate_norm ( const NumericVector< Number > &  v,
const SystemNorm norm,
std::set< unsigned int > *  skip_dimensions = libmesh_nullptr 
) const
inherited
Returns
A norm of the vector v, using component_norm and component_scale to choose and weight the norms of each variable.

Definition at line 1405 of file system.C.

References libMesh::System::_dof_map, libMesh::System::_mesh, std::abs(), libMesh::TypeVector< T >::add_scaled(), libMesh::TypeTensor< T >::add_scaled(), libMesh::FEGenericBase< OutputType >::build(), libMesh::NumericVector< T >::build(), libMesh::ParallelObject::comm(), libMesh::FEType::default_quadrature_rule(), dim, libMesh::DISCRETE_L1, libMesh::DISCRETE_L2, libMesh::DISCRETE_L_INF, libMesh::System::discrete_var_norm(), libMesh::DofMap::dof_indices(), libMesh::MeshBase::elem_dimensions(), libMesh::FEGenericBase< OutputType >::get_d2phi(), libMesh::System::get_dof_map(), libMesh::FEGenericBase< OutputType >::get_dphi(), libMesh::FEAbstract::get_JxW(), libMesh::System::get_mesh(), libMesh::FEGenericBase< OutputType >::get_phi(), libMesh::H1, libMesh::H1_SEMINORM, libMesh::H2, libMesh::H2_SEMINORM, libMesh::SystemNorm::is_discrete(), libMesh::L1, libMesh::NumericVector< T >::l1_norm(), libMesh::L2, libMesh::NumericVector< T >::l2_norm(), libMesh::L_INF, libMesh::libmesh_assert(), libmesh_nullptr, libMesh::NumericVector< T >::linfty_norm(), libMesh::NumericVector< T >::localize(), std::max(), libMesh::Parallel::Communicator::max(), libMesh::QBase::n_points(), libMesh::System::n_vars(), libMesh::TypeVector< T >::norm(), libMesh::TypeTensor< T >::norm(), libMesh::TensorTools::norm_sq(), libMesh::TypeVector< T >::norm_sq(), libMesh::TypeTensor< T >::norm_sq(), libMesh::Real, libMesh::FEAbstract::reinit(), libMesh::SERIAL, libMesh::NumericVector< T >::size(), libMesh::Parallel::Communicator::sum(), libMesh::SystemNorm::type(), libMesh::DofMap::variable_type(), libMesh::W1_INF_SEMINORM, libMesh::W2_INF_SEMINORM, libMesh::SystemNorm::weight(), and libMesh::SystemNorm::weight_sq().

1408 {
1409  // This function must be run on all processors at once
1410  parallel_object_only();
1411 
1412  LOG_SCOPE ("calculate_norm()", "System");
1413 
1414  // Zero the norm before summation
1415  Real v_norm = 0.;
1416 
1417  if (norm.is_discrete())
1418  {
1419  //Check to see if all weights are 1.0 and all types are equal
1420  FEMNormType norm_type0 = norm.type(0);
1421  unsigned int check_var = 0;
1422  for (; check_var != this->n_vars(); ++check_var)
1423  if ((norm.weight(check_var) != 1.0) || (norm.type(check_var) != norm_type0))
1424  break;
1425 
1426  //All weights were 1.0 so just do the full vector discrete norm
1427  if (check_var == this->n_vars())
1428  {
1429  if (norm_type0 == DISCRETE_L1)
1430  return v.l1_norm();
1431  if (norm_type0 == DISCRETE_L2)
1432  return v.l2_norm();
1433  if (norm_type0 == DISCRETE_L_INF)
1434  return v.linfty_norm();
1435  else
1436  libmesh_error_msg("Invalid norm_type0 = " << norm_type0);
1437  }
1438 
1439  for (unsigned int var=0; var != this->n_vars(); ++var)
1440  {
1441  // Skip any variables we don't need to integrate
1442  if (norm.weight(var) == 0.0)
1443  continue;
1444 
1445  v_norm += norm.weight(var) * discrete_var_norm(v, var, norm.type(var));
1446  }
1447 
1448  return v_norm;
1449  }
1450 
1451  // Localize the potentially parallel vector
1452  UniquePtr<NumericVector<Number>> local_v = NumericVector<Number>::build(this->comm());
1453  local_v->init(v.size(), true, SERIAL);
1454  v.localize (*local_v, _dof_map->get_send_list());
1455 
1456  // I'm not sure how best to mix Hilbert norms on some variables (for
1457  // which we'll want to square then sum then square root) with norms
1458  // like L_inf (for which we'll just want to take an absolute value
1459  // and then sum).
1460  bool using_hilbert_norm = true,
1461  using_nonhilbert_norm = true;
1462 
1463  // Loop over all variables
1464  for (unsigned int var=0; var != this->n_vars(); ++var)
1465  {
1466  // Skip any variables we don't need to integrate
1467  Real norm_weight_sq = norm.weight_sq(var);
1468  if (norm_weight_sq == 0.0)
1469  continue;
1470  Real norm_weight = norm.weight(var);
1471 
1472  // Check for unimplemented norms (rather than just returning 0).
1473  FEMNormType norm_type = norm.type(var);
1474  if ((norm_type==H1) ||
1475  (norm_type==H2) ||
1476  (norm_type==L2) ||
1477  (norm_type==H1_SEMINORM) ||
1478  (norm_type==H2_SEMINORM))
1479  {
1480  if (!using_hilbert_norm)
1481  libmesh_not_implemented();
1482  using_nonhilbert_norm = false;
1483  }
1484  else if ((norm_type==L1) ||
1485  (norm_type==L_INF) ||
1486  (norm_type==W1_INF_SEMINORM) ||
1487  (norm_type==W2_INF_SEMINORM))
1488  {
1489  if (!using_nonhilbert_norm)
1490  libmesh_not_implemented();
1491  using_hilbert_norm = false;
1492  }
1493  else
1494  libmesh_not_implemented();
1495 
1496  const FEType & fe_type = this->get_dof_map().variable_type(var);
1497 
1498  // Allow space for dims 0-3, even if we don't use them all
1499  std::vector<FEBase *> fe_ptrs(4,libmesh_nullptr);
1500  std::vector<QBase *> q_rules(4,libmesh_nullptr);
1501 
1502  const std::set<unsigned char> & elem_dims = _mesh.elem_dimensions();
1503 
1504  // Prepare finite elements for each dimension present in the mesh
1505  for (std::set<unsigned char>::const_iterator d_it = elem_dims.begin();
1506  d_it != elem_dims.end(); ++d_it)
1507  {
1508  if (skip_dimensions && skip_dimensions->find(*d_it) != skip_dimensions->end())
1509  continue;
1510 
1511  q_rules[*d_it] =
1512  fe_type.default_quadrature_rule (*d_it).release();
1513 
1514  // Construct finite element object
1515 
1516  fe_ptrs[*d_it] = FEBase::build(*d_it, fe_type).release();
1517 
1518  // Attach quadrature rule to FE object
1519  fe_ptrs[*d_it]->attach_quadrature_rule (q_rules[*d_it]);
1520  }
1521 
1522  std::vector<dof_id_type> dof_indices;
1523 
1524  // Begin the loop over the elements
1525  for (const auto & elem : this->get_mesh().active_local_element_ptr_range())
1526  {
1527  const unsigned int dim = elem->dim();
1528 
1529 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
1530 
1531  // One way for implementing this would be to exchange the fe with the FEInterface- class.
1532  // However, it needs to be discussed whether integral-norms make sense for infinite elements.
1533  // or in which sense they could make sense.
1534  if (elem->infinite() )
1535  libmesh_not_implemented();
1536 
1537 #endif
1538 
1539  if (skip_dimensions && skip_dimensions->find(dim) != skip_dimensions->end())
1540  continue;
1541 
1542  FEBase * fe = fe_ptrs[dim];
1543  QBase * qrule = q_rules[dim];
1544  libmesh_assert(fe);
1545  libmesh_assert(qrule);
1546 
1547  const std::vector<Real> & JxW = fe->get_JxW();
1548  const std::vector<std::vector<Real>> * phi = libmesh_nullptr;
1549  if (norm_type == H1 ||
1550  norm_type == H2 ||
1551  norm_type == L2 ||
1552  norm_type == L1 ||
1553  norm_type == L_INF)
1554  phi = &(fe->get_phi());
1555 
1556  const std::vector<std::vector<RealGradient>> * dphi = libmesh_nullptr;
1557  if (norm_type == H1 ||
1558  norm_type == H2 ||
1559  norm_type == H1_SEMINORM ||
1560  norm_type == W1_INF_SEMINORM)
1561  dphi = &(fe->get_dphi());
1562 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
1563  const std::vector<std::vector<RealTensor>> * d2phi = libmesh_nullptr;
1564  if (norm_type == H2 ||
1565  norm_type == H2_SEMINORM ||
1566  norm_type == W2_INF_SEMINORM)
1567  d2phi = &(fe->get_d2phi());
1568 #endif
1569 
1570  fe->reinit (elem);
1571 
1572  this->get_dof_map().dof_indices (elem, dof_indices, var);
1573 
1574  const unsigned int n_qp = qrule->n_points();
1575 
1576  const unsigned int n_sf = cast_int<unsigned int>
1577  (dof_indices.size());
1578 
1579  // Begin the loop over the Quadrature points.
1580  for (unsigned int qp=0; qp<n_qp; qp++)
1581  {
1582  if (norm_type == L1)
1583  {
1584  Number u_h = 0.;
1585  for (unsigned int i=0; i != n_sf; ++i)
1586  u_h += (*phi)[i][qp] * (*local_v)(dof_indices[i]);
1587  v_norm += norm_weight *
1588  JxW[qp] * std::abs(u_h);
1589  }
1590 
1591  if (norm_type == L_INF)
1592  {
1593  Number u_h = 0.;
1594  for (unsigned int i=0; i != n_sf; ++i)
1595  u_h += (*phi)[i][qp] * (*local_v)(dof_indices[i]);
1596  v_norm = std::max(v_norm, norm_weight * std::abs(u_h));
1597  }
1598 
1599  if (norm_type == H1 ||
1600  norm_type == H2 ||
1601  norm_type == L2)
1602  {
1603  Number u_h = 0.;
1604  for (unsigned int i=0; i != n_sf; ++i)
1605  u_h += (*phi)[i][qp] * (*local_v)(dof_indices[i]);
1606  v_norm += norm_weight_sq *
1607  JxW[qp] * TensorTools::norm_sq(u_h);
1608  }
1609 
1610  if (norm_type == H1 ||
1611  norm_type == H2 ||
1612  norm_type == H1_SEMINORM)
1613  {
1614  Gradient grad_u_h;
1615  for (unsigned int i=0; i != n_sf; ++i)
1616  grad_u_h.add_scaled((*dphi)[i][qp], (*local_v)(dof_indices[i]));
1617  v_norm += norm_weight_sq *
1618  JxW[qp] * grad_u_h.norm_sq();
1619  }
1620 
1621  if (norm_type == W1_INF_SEMINORM)
1622  {
1623  Gradient grad_u_h;
1624  for (unsigned int i=0; i != n_sf; ++i)
1625  grad_u_h.add_scaled((*dphi)[i][qp], (*local_v)(dof_indices[i]));
1626  v_norm = std::max(v_norm, norm_weight * grad_u_h.norm());
1627  }
1628 
1629 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
1630  if (norm_type == H2 ||
1631  norm_type == H2_SEMINORM)
1632  {
1633  Tensor hess_u_h;
1634  for (unsigned int i=0; i != n_sf; ++i)
1635  hess_u_h.add_scaled((*d2phi)[i][qp], (*local_v)(dof_indices[i]));
1636  v_norm += norm_weight_sq *
1637  JxW[qp] * hess_u_h.norm_sq();
1638  }
1639 
1640  if (norm_type == W2_INF_SEMINORM)
1641  {
1642  Tensor hess_u_h;
1643  for (unsigned int i=0; i != n_sf; ++i)
1644  hess_u_h.add_scaled((*d2phi)[i][qp], (*local_v)(dof_indices[i]));
1645  v_norm = std::max(v_norm, norm_weight * hess_u_h.norm());
1646  }
1647 #endif
1648  }
1649  }
1650 
1651  // Need to delete the FE and quadrature objects to prevent a memory leak
1652  for (std::size_t i=0; i<fe_ptrs.size(); i++)
1653  if (fe_ptrs[i])
1654  delete fe_ptrs[i];
1655 
1656  for (std::size_t i=0; i<q_rules.size(); i++)
1657  if (q_rules[i])
1658  delete q_rules[i];
1659  }
1660 
1661  if (using_hilbert_norm)
1662  {
1663  this->comm().sum(v_norm);
1664  v_norm = std::sqrt(v_norm);
1665  }
1666  else
1667  {
1668  this->comm().max(v_norm);
1669  }
1670 
1671  return v_norm;
1672 }
double abs(double a)
virtual numeric_index_type size() const =0
const FEType & variable_type(const unsigned int c) const
Definition: dof_map.h:1697
void max(T &r) const
Take a local variable and replace it with the maximum of it&#39;s values on all processors.
void add_scaled(const TypeTensor< T2 > &, const T)
Add a scaled tensor to this tensor without creating a temporary.
Definition: type_tensor.h:777
void add_scaled(const TypeVector< T2 > &, const T)
Add a scaled value to this vector without creating a temporary.
Definition: type_vector.h:624
virtual Real l2_norm() const =0
unsigned int dim
const class libmesh_nullptr_t libmesh_nullptr
virtual Real l1_norm() const =0
long double max(long double a, double b)
UniquePtr< DofMap > _dof_map
Data structure describing the relationship between nodes, variables, etc...
Definition: system.h:1865
libmesh_assert(j)
static UniquePtr< NumericVector< T > > build(const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
Builds a NumericVector on the processors in communicator comm using the linear solver package specifi...
const MeshBase & get_mesh() const
Definition: system.h:2014
const DofMap & get_dof_map() const
Definition: system.h:2030
NumberVectorValue Gradient
const std::set< unsigned char > & elem_dimensions() const
Definition: mesh_base.h:206
FEGenericBase< Real > FEBase
virtual Real linfty_norm() const =0
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
NumberTensorValue Tensor
const Parallel::Communicator & comm() const
ParallelType type() const
unsigned int n_vars() const
Definition: system.h:2086
void sum(T &r) const
Take a local variable and replace it with the sum of it&#39;s values on all processors.
MeshBase & _mesh
Constant reference to the mesh data structure used for the simulation.
Definition: system.h:1877
virtual void localize(std::vector< T > &v_local) const =0
Creates a copy of the global vector in the local vector v_local.
Real discrete_var_norm(const NumericVector< Number > &v, unsigned int var, FEMNormType norm_type) const
Finds the discrete norm for the entries in the vector corresponding to Dofs associated with var...
Definition: system.C:1364
FEMNormType
defines an enum for norms defined on vectors of finite element coefficients
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Fills the vector di with the global degree of freedom indices for the element.
Definition: dof_map.C:1917
static UniquePtr< FEGenericBase > build(const unsigned int dim, const FEType &type)
Builds a specific finite element type.
void libMesh::RBSCMConstruction::clear ( )
virtual

Clear all the data structures associated with the system.

Reimplemented from libMesh::RBConstructionBase< CondensedEigenSystem >.

Definition at line 70 of file rb_scm_construction.C.

References libMesh::RBConstructionBase< CondensedEigenSystem >::clear().

Referenced by ~RBSCMConstruction().

71 {
72  Parent::clear();
73 }
virtual void clear()
Clear all the data structures associated with the system.
const Parallel::Communicator& libMesh::ParallelObject::comm ( ) const
inherited
Returns
A reference to the Parallel::Communicator object used by this mesh.

Definition at line 87 of file parallel_object.h.

References libMesh::ParallelObject::_communicator.

Referenced by libMesh::__libmesh_petsc_diff_solver_monitor(), libMesh::__libmesh_petsc_diff_solver_residual(), libMesh::__libmesh_petsc_preconditioner_apply(), libMesh::__libmesh_petsc_snes_jacobian(), libMesh::__libmesh_petsc_snes_postcheck(), libMesh::__libmesh_petsc_snes_residual(), libMesh::__libmesh_tao_equality_constraints(), libMesh::__libmesh_tao_equality_constraints_jacobian(), libMesh::__libmesh_tao_gradient(), libMesh::__libmesh_tao_hessian(), libMesh::__libmesh_tao_inequality_constraints(), libMesh::__libmesh_tao_inequality_constraints_jacobian(), libMesh::__libmesh_tao_objective(), libMesh::MeshRefinement::_coarsen_elements(), libMesh::ExactSolution::_compute_error(), libMesh::ParmetisPartitioner::_do_repartition(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::BoundaryInfo::_find_id_maps(), libMesh::PetscLinearSolver< T >::_petsc_shell_matrix_get_diagonal(), libMesh::SlepcEigenSolver< T >::_petsc_shell_matrix_get_diagonal(), libMesh::PetscLinearSolver< T >::_petsc_shell_matrix_mult(), libMesh::SlepcEigenSolver< T >::_petsc_shell_matrix_mult(), libMesh::PetscLinearSolver< T >::_petsc_shell_matrix_mult_add(), libMesh::EquationSystems::_read_impl(), libMesh::MeshRefinement::_refine_elements(), libMesh::MeshRefinement::_smooth_flags(), add_cube_convex_hull_to_mesh(), libMesh::TransientRBConstruction::add_IC_to_RB_space(), libMesh::ImplicitSystem::add_matrix(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), libMesh::System::add_vector(), libMesh::EigenSparseLinearSolver< T >::adjoint_solve(), libMesh::UnstructuredMesh::all_second_order(), libMesh::MeshTools::Modification::all_tri(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::TransientRBConstruction::allocate_data_structures(), libMesh::RBConstruction::allocate_data_structures(), libMesh::TransientRBConstruction::assemble_affine_expansion(), libMesh::FEMSystem::assemble_qoi(), libMesh::MeshCommunication::assign_global_indices(), libMesh::ParmetisPartitioner::assign_partitioning(), libMesh::DofMap::attach_matrix(), libMesh::Parallel::BinSorter< KeyType, IdxType >::binsort(), libMesh::Parallel::Sort< KeyType, IdxType >::binsort(), libMesh::MeshCommunication::broadcast(), libMesh::SparseMatrix< T >::build(), libMesh::MeshTools::Generation::build_extrusion(), libMesh::Parallel::Histogram< KeyType, IdxType >::build_histogram(), libMesh::PetscNonlinearSolver< T >::build_mat_null_space(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::MeshBase::cache_elem_dims(), libMesh::System::calculate_norm(), libMesh::DofMap::check_dirichlet_bcid_consistency(), libMesh::Parallel::Sort< KeyType, IdxType >::communicate_bins(), libMesh::RBConstruction::compute_Fq_representor_innerprods(), libMesh::RBConstruction::compute_max_error_bound(), libMesh::Nemesis_IO_Helper::compute_num_global_elem_blocks(), libMesh::Nemesis_IO_Helper::compute_num_global_nodesets(), libMesh::Nemesis_IO_Helper::compute_num_global_sidesets(), libMesh::RBConstruction::compute_output_dual_innerprods(), compute_SCM_bounds_on_training_set(), libMesh::Problem_Interface::computeF(), libMesh::Problem_Interface::computeJacobian(), libMesh::Problem_Interface::computePreconditioner(), libMesh::ExodusII_IO::copy_elemental_solution(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::MeshTools::create_bounding_box(), libMesh::MeshTools::create_nodal_bounding_box(), libMesh::MeshRefinement::create_parent_error_vector(), libMesh::MeshTools::create_processor_bounding_box(), libMesh::MeshTools::create_subdomain_bounding_box(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::DofMap::distribute_dofs(), DMlibMeshFunction(), DMlibMeshJacobian(), DMlibMeshSetSystem_libMesh(), DMVariableBounds_libMesh(), libMesh::MeshRefinement::eliminate_unrefined_patches(), libMesh::RBEIMConstruction::enrich_RB_space(), libMesh::TransientRBConstruction::enrich_RB_space(), libMesh::RBConstruction::enrich_RB_space(), AssembleOptimization::equality_constraints(), libMesh::WeightedPatchRecoveryErrorEstimator::estimate_error(), libMesh::JumpErrorEstimator::estimate_error(), libMesh::PatchRecoveryErrorEstimator::estimate_error(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), libMesh::RBEIMConstruction::evaluate_mesh_function(), libMesh::MeshRefinement::flag_elements_by_elem_fraction(), libMesh::MeshRefinement::flag_elements_by_error_fraction(), libMesh::MeshRefinement::flag_elements_by_nelem_target(), libMesh::MeshCommunication::gather(), libMesh::MeshCommunication::gather_neighboring_elements(), libMesh::MeshfreeInterpolation::gather_remote_data(), libMesh::CondensedEigenSystem::get_eigenpair(), libMesh::DofMap::get_info(), libMesh::ImplicitSystem::get_linear_solver(), libMesh::EquationSystems::get_solution(), AssembleOptimization::inequality_constraints(), AssembleOptimization::inequality_constraints_jacobian(), libMesh::LocationMap< T >::init(), libMesh::TopologyMap::init(), libMesh::PetscDiffSolver::init(), libMesh::TimeSolver::init(), libMesh::TaoOptimizationSolver< T >::init(), libMesh::PetscNonlinearSolver< T >::init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::EigenSystem::init_data(), libMesh::EigenSystem::init_matrices(), libMesh::ParmetisPartitioner::initialize(), libMesh::OptimizationSystem::initialize_equality_constraints_storage(), libMesh::OptimizationSystem::initialize_inequality_constraints_storage(), libMesh::RBEIMConstruction::initialize_rb_construction(), integrate_function(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_topology_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_boundary_ids(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_flags(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_p_levels(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::MeshTools::libmesh_assert_valid_unique_ids(), libMesh::MeshRefinement::limit_level_mismatch_at_edge(), libMesh::MeshRefinement::limit_level_mismatch_at_node(), libMesh::MeshRefinement::limit_overrefined_boundary(), libMesh::MeshRefinement::limit_underrefined_boundary(), main(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshCommunication::make_elems_parallel_consistent(), libMesh::MeshRefinement::make_flags_parallel_consistent(), libMesh::MeshCommunication::make_new_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_new_nodes_parallel_consistent(), libMesh::MeshCommunication::make_node_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_unique_ids_parallel_consistent(), libMesh::MeshCommunication::make_nodes_parallel_consistent(), libMesh::MeshCommunication::make_p_levels_parallel_consistent(), libMesh::MeshRefinement::make_refinement_compatible(), libMesh::TransientRBConstruction::mass_matrix_scaled_matvec(), libMesh::FEMSystem::mesh_position_set(), libMesh::MeshSerializer::MeshSerializer(), LinearElasticityWithContact::move_mesh(), libMesh::DistributedMesh::n_active_elem(), libMesh::MeshTools::n_active_levels(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::CondensedEigenSystem::n_global_non_condensed_dofs(), libMesh::MeshTools::n_levels(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::MeshTools::n_p_levels(), libMesh::BoundaryInfo::n_shellface_conds(), new_function_base(), libMesh::DistributedMesh::parallel_max_elem_id(), libMesh::DistributedMesh::parallel_max_node_id(), libMesh::ReplicatedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_n_elem(), libMesh::DistributedMesh::parallel_n_nodes(), libMesh::SparsityPattern::Build::parallel_sync(), libMesh::MeshTools::paranoid_n_levels(), libMesh::Partitioner::partition(), libMesh::MetisPartitioner::partition_range(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::petsc_auto_fieldsplit(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::MeshBase::prepare_for_use(), libMesh::SparseMatrix< T >::print(), FEMParameters::read(), libMesh::Nemesis_IO::read(), libMesh::CheckpointIO::read(), libMesh::XdrIO::read(), libMesh::CheckpointIO::read_header(), libMesh::XdrIO::read_header(), libMesh::RBEvaluation::read_in_vectors_from_multiple_files(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs_helper(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::MeshBase::recalculate_n_partitions(), libMesh::MeshCommunication::redistribute(), libMesh::MeshRefinement::refine_and_coarsen_elements(), libMesh::DistributedMesh::renumber_dof_objects(), LinearElasticityWithContact::residual_and_jacobian(), libMesh::MeshCommunication::send_coarse_ghosts(), libMesh::TransientRBConstruction::set_error_temporal_data(), libMesh::RBEIMConstruction::set_explicit_sys_subvector(), libMesh::Partitioner::set_node_processor_ids(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::Partitioner::set_parent_processor_ids(), libMesh::LaplaceMeshSmoother::smooth(), libMesh::Parallel::Sort< KeyType, IdxType >::sort(), libMesh::MeshBase::subdomain_ids(), libMesh::BoundaryInfo::sync(), libMesh::Parallel::sync_element_data_by_parent_id(), libMesh::Parallel::sync_node_data_by_element_id(), libMesh::MeshRefinement::test_level_one(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), libMesh::MeshRefinement::test_unflagged(), PointLocatorTest::testLocator(), BoundaryInfoTest::testMesh(), SystemsTest::testProjectCubeWithMeshFunction(), libMesh::MeshTools::total_weight(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::MeshfreeSolutionTransfer::transfer(), libMesh::TransientRBConstruction::truth_assembly(), libMesh::RBConstruction::truth_assembly(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::TransientRBConstruction::update_RB_initial_condition_all_N(), libMesh::RBEIMConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_RB_system_matrices(), libMesh::RBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_residual_terms(), libMesh::RBConstruction::update_residual_terms(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::RBEvaluation::write_out_vectors(), libMesh::TransientRBConstruction::write_riesz_representors_to_files(), libMesh::RBConstruction::write_riesz_representors_to_files(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), libMesh::RBDataSerialization::RBEvaluationSerialization::write_to_file(), libMesh::RBDataSerialization::TransientRBEvaluationSerialization::write_to_file(), libMesh::RBDataSerialization::RBEIMEvaluationSerialization::write_to_file(), and libMesh::RBDataSerialization::RBSCMEvaluationSerialization::write_to_file().

88  { return _communicator; }
const Parallel::Communicator & _communicator
bool libMesh::System::compare ( const System other_system,
const Real  threshold,
const bool  verbose 
) const
virtualinherited
Returns
true when the other system contains identical data, up to the given threshold. Outputs some diagnostic info when verbose is set.

Definition at line 531 of file system.C.

References libMesh::System::_is_initialized, libMesh::System::_sys_name, libMesh::System::_vectors, libMesh::System::get_vector(), libMesh::libmesh_assert(), libMesh::System::n_vectors(), libMesh::System::name(), libMesh::out, and libMesh::System::solution.

Referenced by libMesh::EquationSystems::compare(), and libMesh::System::set_adjoint_already_solved().

534 {
535  // we do not care for matrices, but for vectors
537  libmesh_assert (other_system._is_initialized);
538 
539  if (verbose)
540  {
541  libMesh::out << " Systems \"" << _sys_name << "\"" << std::endl;
542  libMesh::out << " comparing matrices not supported." << std::endl;
543  libMesh::out << " comparing names...";
544  }
545 
546  // compare the name: 0 means identical
547  const int name_result = _sys_name.compare(other_system.name());
548  if (verbose)
549  {
550  if (name_result == 0)
551  libMesh::out << " identical." << std::endl;
552  else
553  libMesh::out << " names not identical." << std::endl;
554  libMesh::out << " comparing solution vector...";
555  }
556 
557 
558  // compare the solution: -1 means identical
559  const int solu_result = solution->compare (*other_system.solution.get(),
560  threshold);
561 
562  if (verbose)
563  {
564  if (solu_result == -1)
565  libMesh::out << " identical up to threshold." << std::endl;
566  else
567  libMesh::out << " first difference occurred at index = "
568  << solu_result << "." << std::endl;
569  }
570 
571 
572  // safety check, whether we handle at least the same number
573  // of vectors
574  std::vector<int> ov_result;
575 
576  if (this->n_vectors() != other_system.n_vectors())
577  {
578  if (verbose)
579  {
580  libMesh::out << " Fatal difference. This system handles "
581  << this->n_vectors() << " add'l vectors," << std::endl
582  << " while the other system handles "
583  << other_system.n_vectors()
584  << " add'l vectors." << std::endl
585  << " Aborting comparison." << std::endl;
586  }
587  return false;
588  }
589  else if (this->n_vectors() == 0)
590  {
591  // there are no additional vectors...
592  ov_result.clear ();
593  }
594  else
595  {
596  // compare other vectors
597  for (const_vectors_iterator pos = _vectors.begin();
598  pos != _vectors.end(); ++pos)
599  {
600  if (verbose)
601  libMesh::out << " comparing vector \""
602  << pos->first << "\" ...";
603 
604  // assume they have the same name
605  const NumericVector<Number> & other_system_vector =
606  other_system.get_vector(pos->first);
607 
608  ov_result.push_back(pos->second->compare (other_system_vector,
609  threshold));
610 
611  if (verbose)
612  {
613  if (ov_result[ov_result.size()-1] == -1)
614  libMesh::out << " identical up to threshold." << std::endl;
615  else
616  libMesh::out << " first difference occurred at" << std::endl
617  << " index = " << ov_result[ov_result.size()-1] << "." << std::endl;
618  }
619 
620  }
621 
622  } // finished comparing additional vectors
623 
624 
625  bool overall_result;
626 
627  // sum up the results
628  if ((name_result==0) && (solu_result==-1))
629  {
630  if (ov_result.size()==0)
631  overall_result = true;
632  else
633  {
634  bool ov_identical;
635  unsigned int n = 0;
636  do
637  {
638  ov_identical = (ov_result[n]==-1);
639  n++;
640  }
641  while (ov_identical && n<ov_result.size());
642  overall_result = ov_identical;
643  }
644  }
645  else
646  overall_result = false;
647 
648  if (verbose)
649  {
650  libMesh::out << " finished comparisons, ";
651  if (overall_result)
652  libMesh::out << "found no differences." << std::endl << std::endl;
653  else
654  libMesh::out << "found differences." << std::endl << std::endl;
655  }
656 
657  return overall_result;
658 }
bool _is_initialized
true when additional vectors and variables do not require immediate initialization, false otherwise.
Definition: system.h:1952
std::map< std::string, NumericVector< Number > * >::const_iterator const_vectors_iterator
Definition: system.h:749
libmesh_assert(j)
UniquePtr< NumericVector< Number > > solution
Data structure to hold solution values.
Definition: system.h:1523
std::map< std::string, NumericVector< Number > * > _vectors
Some systems need an arbitrary number of vectors.
Definition: system.h:1916
OStreamProxy out
const std::string _sys_name
A name associated with this system.
Definition: system.h:1882
unsigned int n_vectors() const
Definition: system.h:2214
void libMesh::RBSCMConstruction::compute_SCM_bounding_box ( )
protectedvirtual

Compute the SCM bounding box.

Definition at line 294 of file rb_scm_construction.C.

References add_scaled_symm_Aq(), libMesh::RBSCMEvaluation::B_max, libMesh::RBSCMEvaluation::B_min, libMesh::EigenSystem::eigen_solver, libMesh::RBSCMEvaluation::get_B_max(), libMesh::RBSCMEvaluation::get_B_min(), libMesh::CondensedEigenSystem::get_eigenpair(), libMesh::RBThetaExpansion::get_n_A_terms(), libMesh::EigenSystem::get_n_converged(), get_rb_theta_expansion(), libMesh::LARGEST_REAL, libMesh::EigenSystem::matrix_A, libMesh::out, rb_scm_eval, libMesh::RBSCMEvaluation::set_B_max(), libMesh::RBSCMEvaluation::set_B_min(), set_eigensolver_properties(), libMesh::SMALLEST_REAL, libMesh::CondensedEigenSystem::solve(), and libMesh::TOLERANCE.

Referenced by attach_deflation_space(), and perform_SCM_greedy().

295 {
296  LOG_SCOPE("compute_SCM_bounding_box()", "RBSCMConstruction");
297 
298  // Resize the bounding box vectors
299  rb_scm_eval->B_min.resize(get_rb_theta_expansion().get_n_A_terms());
300  rb_scm_eval->B_max.resize(get_rb_theta_expansion().get_n_A_terms());
301 
302  for (unsigned int q=0; q<get_rb_theta_expansion().get_n_A_terms(); q++)
303  {
304  matrix_A->zero();
305  add_scaled_symm_Aq(q, 1.);
306 
307  // Compute B_min(q)
308  eigen_solver->set_position_of_spectrum(SMALLEST_REAL);
310 
311  solve();
312  // TODO: Assert convergence for eigensolver
313 
314  unsigned int nconv = get_n_converged();
315  if (nconv != 0)
316  {
317  std::pair<Real, Real> eval = get_eigenpair(0);
318 
319  // ensure that the eigenvalue is real
320  libmesh_assert_less (eval.second, TOLERANCE);
321 
322  rb_scm_eval->set_B_min(q, eval.first);
323  libMesh::out << std::endl << "B_min("<<q<<") = " << rb_scm_eval->get_B_min(q) << std::endl;
324  }
325  else
326  libmesh_error_msg("Eigen solver for computing B_min did not converge");
327 
328  // Compute B_max(q)
329  eigen_solver->set_position_of_spectrum(LARGEST_REAL);
331 
332  solve();
333  // TODO: Assert convergence for eigensolver
334 
335  nconv = get_n_converged();
336  if (nconv != 0)
337  {
338  std::pair<Real, Real> eval = get_eigenpair(0);
339 
340  // ensure that the eigenvalue is real
341  libmesh_assert_less (eval.second, TOLERANCE);
342 
343  rb_scm_eval->set_B_max(q,eval.first);
344  libMesh::out << "B_max("<<q<<") = " << rb_scm_eval->get_B_max(q) << std::endl;
345  }
346  else
347  libmesh_error_msg("Eigen solver for computing B_max did not converge");
348  }
349 }
std::vector< Real > B_min
B_min, B_max define the bounding box.
Real get_B_min(unsigned int i) const
Get B_min and B_max.
unsigned int get_n_A_terms() const
Get Q_a, the number of terms in the affine expansion for the bilinear form.
virtual void solve() libmesh_override
Override to solve the condensed eigenproblem with the dofs in local_non_condensed_dofs_vector strippe...
unsigned int get_n_converged() const
Definition: eigen_system.h:124
static const Real TOLERANCE
Real get_B_max(unsigned int i) const
std::vector< Real > B_max
RBSCMEvaluation * rb_scm_eval
The current RBSCMEvaluation object we are using to perform the Evaluation stage of the SCM...
UniquePtr< SparseMatrix< Number > > matrix_A
The system matrix for standard eigenvalue problems.
Definition: eigen_system.h:150
void set_B_min(unsigned int i, Real B_min_val)
Set B_min and B_max.
virtual void set_eigensolver_properties(int)
This function is called before truth eigensolves in compute_SCM_bounding_box and evaluate_stability_c...
RBThetaExpansion & get_rb_theta_expansion()
Get a reference to the RBThetaExpansion object.
void set_B_max(unsigned int i, Real B_max_val)
virtual void add_scaled_symm_Aq(unsigned int q_a, Number scalar)
Add the scaled symmetrized affine matrix from the associated RBSystem to matrix_A.
UniquePtr< EigenSolver< Number > > eigen_solver
The EigenSolver, defining which interface, i.e solver package to use.
Definition: eigen_system.h:161
OStreamProxy out
virtual std::pair< Real, Real > get_eigenpair(dof_id_type i) libmesh_override
Override get_eigenpair() to retrieve the eigenpair for the condensed eigensolve.
std::pair< unsigned int, Real > libMesh::RBSCMConstruction::compute_SCM_bounds_on_training_set ( )
protectedvirtual

Compute upper and lower bounds for each SCM training point.

Return a pair containing the maximum SCM error, and the index of the parameter in the training set at which the max error is achieved.

Definition at line 426 of file rb_scm_construction.C.

References libMesh::ParallelObject::comm(), libMesh::RBConstructionBase< CondensedEigenSystem >::get_first_local_training_index(), libMesh::RBConstructionBase< CondensedEigenSystem >::get_global_max_error_pair(), libMesh::RBConstructionBase< CondensedEigenSystem >::get_local_n_training_samples(), libMesh::RBParametrized::get_parameters(), libMesh::RBSCMEvaluation::get_SCM_LB(), libMesh::RBSCMEvaluation::get_SCM_UB(), rb_scm_eval, libMesh::Real, SCM_greedy_error_indicator(), libMesh::RBParametrized::set_parameters(), and libMesh::RBConstructionBase< CondensedEigenSystem >::set_params_from_training_set().

Referenced by attach_deflation_space(), and perform_SCM_greedy().

427 {
428  LOG_SCOPE("compute_SCM_bounds_on_training_set()", "RBSCMConstruction");
429 
430  // Now compute the maximum bound error over training_parameters
431  unsigned int new_C_J_index = 0;
432  Real max_SCM_error = 0.;
433 
435  for (unsigned int i=0; i<get_local_n_training_samples(); i++)
436  {
437  set_params_from_training_set(first_index+i);
439  Real LB = rb_scm_eval->get_SCM_LB();
440  Real UB = rb_scm_eval->get_SCM_UB();
441 
442  Real error_i = SCM_greedy_error_indicator(LB, UB);
443 
444  if (error_i > max_SCM_error)
445  {
446  max_SCM_error = error_i;
447  new_C_J_index = i;
448  }
449  }
450 
451  numeric_index_type global_index = first_index + new_C_J_index;
452  std::pair<numeric_index_type,Real> error_pair(global_index, max_SCM_error);
453  get_global_max_error_pair(this->comm(),error_pair);
454 
455  return error_pair;
456 }
numeric_index_type get_local_n_training_samples() const
Get the total number of training samples local to this processor.
virtual Real get_SCM_UB()
Evaluate single SCM upper bound.
static void get_global_max_error_pair(const Parallel::Communicator &communicator, std::pair< numeric_index_type, Real > &error_pair)
Static function to return the error pair (index,error) that is corresponds to the largest error on al...
RBSCMEvaluation * rb_scm_eval
The current RBSCMEvaluation object we are using to perform the Evaluation stage of the SCM...
virtual Real get_SCM_LB()
Evaluate single SCM lower bound.
dof_id_type numeric_index_type
Definition: id_types.h:92
void set_parameters(const RBParameters &params)
Set the current parameters to params.
void set_params_from_training_set(unsigned int index)
Set parameters to the RBParameters stored in index index of the training set.
virtual Real SCM_greedy_error_indicator(Real LB, Real UB)
Helper function which provides an error indicator to be used in the SCM greedy.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
numeric_index_type get_first_local_training_index() const
Get the first local index of the training parameters.
const Parallel::Communicator & comm() const
const RBParameters & get_parameters() const
Get the current parameters.
Number libMesh::System::current_solution ( const dof_id_type  global_dof_number) const
inherited
Returns
The current solution for the specified global DOF.

Definition at line 192 of file system.C.

References libMesh::System::_dof_map, and libMesh::System::current_local_solution.

Referenced by libMesh::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::HPCoarsenTest::add_projection(), compute_stresses(), LinearElasticityWithContact::compute_stresses(), LinearElasticity::compute_stresses(), LargeDeformationElasticity::compute_stresses(), libMesh::ExactErrorEstimator::estimate_error(), main(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::HPCoarsenTest::select_refinement(), SolidSystem::side_time_derivative(), libMesh::EnsightIO::write_scalar_ascii(), and libMesh::EnsightIO::write_vector_ascii().

193 {
194  // Check the sizes
195  libmesh_assert_less (global_dof_number, _dof_map->n_dofs());
196  libmesh_assert_less (global_dof_number, current_local_solution->size());
197 
198  return (*current_local_solution)(global_dof_number);
199 }
UniquePtr< NumericVector< Number > > current_local_solution
All the values I need to compute my contribution to the simulation at hand.
Definition: system.h:1535
UniquePtr< DofMap > _dof_map
Data structure describing the relationship between nodes, variables, etc...
Definition: system.h:1865
void libMesh::System::deactivate ( )
inherited

Deactivates the system.

Only active systems are solved.

Definition at line 2062 of file system.h.

References libMesh::System::_active.

Referenced by libMesh::System::get_equation_systems().

2063 {
2064  _active = false;
2065 }
bool _active
Flag stating if the system is active or not.
Definition: system.h:1908
void libMesh::System::disable_cache ( )
virtualinherited

Avoids use of any cached data that might affect any solve result.

Should be overridden in derived systems.

Reimplemented in libMesh::ImplicitSystem.

Definition at line 2256 of file system.h.

References libMesh::System::assemble_before_solve.

Referenced by libMesh::UniformRefinementEstimator::_estimate_error().

2256 { assemble_before_solve = true; }
bool assemble_before_solve
Flag which tells the system to whether or not to call the user assembly function during each call to ...
Definition: system.h:1477
void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 107 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

Referenced by libMesh::LibMeshInit::LibMeshInit(), and libMesh::ReferenceCounter::n_objects().

108 {
109  _enable_print_counter = false;
110  return;
111 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...
void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 107 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

Referenced by libMesh::LibMeshInit::LibMeshInit(), and libMesh::ReferenceCounter::n_objects().

108 {
109  _enable_print_counter = false;
110  return;
111 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...
void libMesh::ReferenceCounter::enable_print_counter_info ( )
staticinherited

Methods to enable/disable the reference counter output from print_info()

Definition at line 101 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

Referenced by libMesh::ReferenceCounter::n_objects().

102 {
103  _enable_print_counter = true;
104  return;
105 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...
void libMesh::ReferenceCounter::enable_print_counter_info ( )
staticinherited

Methods to enable/disable the reference counter output from print_info()

Definition at line 101 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

Referenced by libMesh::ReferenceCounter::n_objects().

102 {
103  _enable_print_counter = true;
104  return;
105 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...
void libMesh::RBSCMConstruction::enrich_C_J ( unsigned int  new_C_J_index)
protectedvirtual

Enrich C_J by adding the element of SCM_training_samples that has the largest gap between alpha_LB and alpha_LB.

Definition at line 458 of file rb_scm_construction.C.

References libMesh::RBParameters::begin(), libMesh::RBSCMEvaluation::C_J, libMesh::RBSCMEvaluation::C_J_stability_vector, libMesh::RBParameters::end(), libMesh::RBParametrized::get_parameters(), get_rb_theta_expansion(), libMesh::RBParameters::get_value(), libMesh::out, rb_scm_eval, libMesh::RBSCMEvaluation::SCM_UB_vectors, and libMesh::RBConstructionBase< CondensedEigenSystem >::set_params_from_training_set_and_broadcast().

Referenced by attach_deflation_space(), and perform_SCM_greedy().

459 {
460  LOG_SCOPE("enrich_C_J()", "RBSCMConstruction");
461 
463 
464  rb_scm_eval->C_J.push_back(get_parameters());
465 
466  libMesh::out << std::endl << "SCM: Added mu = (";
467 
470  for ( ; it != it_end; ++it)
471  {
472  if (it != get_parameters().begin())
473  libMesh::out << ",";
474  std::string param_name = it->first;
475  RBParameters C_J_params = rb_scm_eval->C_J[rb_scm_eval->C_J.size()-1];
476  libMesh::out << C_J_params.get_value(param_name);
477  }
478  libMesh::out << ")" << std::endl;
479 
480  // Finally, resize C_J_stability_vector and SCM_UB_vectors
481  rb_scm_eval->C_J_stability_vector.push_back(0.);
482 
483  std::vector<Real> zero_vector(get_rb_theta_expansion().get_n_A_terms());
484  rb_scm_eval->SCM_UB_vectors.push_back(zero_vector);
485 }
RBSCMEvaluation * rb_scm_eval
The current RBSCMEvaluation object we are using to perform the Evaluation stage of the SCM...
std::vector< std::vector< Real > > SCM_UB_vectors
This matrix stores the infimizing vectors y_1( ),...,y_Q_a( ), for each in C_J, which are used in co...
virtual void set_params_from_training_set_and_broadcast(unsigned int index)
Load the specified training parameter and then broadcast to all processors.
std::vector< Real > C_J_stability_vector
Vector storing the (truth) stability values at the parameters in C_J.
std::vector< RBParameters > C_J
Vector storing the greedily selected parameters during SCM training.
const_iterator end() const
Get a constant iterator to the end of this RBParameters object.
Definition: rb_parameters.C:85
RBThetaExpansion & get_rb_theta_expansion()
Get a reference to the RBThetaExpansion object.
OStreamProxy out
const_iterator begin() const
Get a constant iterator to beginning of this RBParameters object.
Definition: rb_parameters.C:80
const RBParameters & get_parameters() const
Get the current parameters.
std::map< std::string, Real >::const_iterator const_iterator
Definition: rb_parameters.h:57
void libMesh::RBSCMConstruction::evaluate_stability_constant ( )
protectedvirtual

Compute the stability constant for current_parameters by solving a generalized eigenvalue problem over the truth space.

Definition at line 351 of file rb_scm_construction.C.

References add_scaled_symm_Aq(), Aq_inner_product(), B_inner_product(), libMesh::RBSCMEvaluation::C_J, libMesh::EigenSystem::eigen_solver, libMesh::RBSCMEvaluation::get_C_J_stability_constraint(), libMesh::CondensedEigenSystem::get_eigenpair(), libMesh::RBThetaExpansion::get_n_A_terms(), libMesh::EigenSystem::get_n_converged(), libMesh::RBParametrized::get_parameters(), get_rb_theta_expansion(), libMesh::libmesh_real(), libMesh::EigenSystem::matrix_A, libMesh::out, rb_scm_eval, libMesh::Real, libMesh::RBSCMEvaluation::set_C_J_stability_constraint(), set_eigensolver_properties(), libMesh::RBSCMEvaluation::set_SCM_UB_vector(), libMesh::SMALLEST_REAL, libMesh::System::solution, libMesh::CondensedEigenSystem::solve(), and libMesh::TOLERANCE.

Referenced by attach_deflation_space(), and perform_SCM_greedy().

352 {
353  LOG_SCOPE("evaluate_stability_constant()", "RBSCMConstruction");
354 
355  // Get current index of C_J
356  const unsigned int j = rb_scm_eval->C_J.size()-1;
357 
358  eigen_solver->set_position_of_spectrum(SMALLEST_REAL);
359 
360  // We assume B is set in system assembly
361  // For coercive problems, B is set to the inner product matrix
362  // For non-coercive time-dependent problems, B is set to the mass matrix
363 
364  // Set matrix A corresponding to mu_star
365  matrix_A->zero();
366  for (unsigned int q=0; q<get_rb_theta_expansion().get_n_A_terms(); q++)
367  {
369  }
370 
372  solve();
373  // TODO: Assert convergence for eigensolver
374 
375  unsigned int nconv = get_n_converged();
376  if (nconv != 0)
377  {
378  std::pair<Real, Real> eval = get_eigenpair(0);
379 
380  // ensure that the eigenvalue is real
381  libmesh_assert_less (eval.second, TOLERANCE);
382 
383  // Store the coercivity constant corresponding to mu_star
385  libMesh::out << std::endl << "Stability constant for C_J("<<j<<") = "
386  << rb_scm_eval->get_C_J_stability_constraint(j) << std::endl << std::endl;
387 
388  // Compute and store the vector y = (y_1, \ldots, y_Q) for the
389  // eigenvector currently stored in eigen_system.solution.
390  // We use this later to compute the SCM upper bounds.
392 
393  for (unsigned int q=0; q<get_rb_theta_expansion().get_n_A_terms(); q++)
394  {
395  Real norm_Aq2 = libmesh_real( Aq_inner_product(q, *solution, *solution) );
396 
397  rb_scm_eval->set_SCM_UB_vector(j,q,norm_Aq2/norm_B2);
398  }
399  }
400  else
401  libmesh_error_msg("Error: Eigensolver did not converge in evaluate_stability_constant");
402 }
T libmesh_real(T a)
Number Aq_inner_product(unsigned int q, const NumericVector< Number > &v, const NumericVector< Number > &w)
Compute the inner product between two vectors using matrix Aq.
void set_SCM_UB_vector(unsigned int j, unsigned int q, Real y_q)
Set entries of SCM_UB_vector, which stores the vector y, corresponding to the minimizing eigenvectors...
unsigned int get_n_A_terms() const
Get Q_a, the number of terms in the affine expansion for the bilinear form.
virtual void solve() libmesh_override
Override to solve the condensed eigenproblem with the dofs in local_non_condensed_dofs_vector strippe...
unsigned int get_n_converged() const
Definition: eigen_system.h:124
static const Real TOLERANCE
RBSCMEvaluation * rb_scm_eval
The current RBSCMEvaluation object we are using to perform the Evaluation stage of the SCM...
UniquePtr< SparseMatrix< Number > > matrix_A
The system matrix for standard eigenvalue problems.
Definition: eigen_system.h:150
Real get_C_J_stability_constraint(unsigned int j) const
Get stability constraints (i.e.
std::vector< RBParameters > C_J
Vector storing the greedily selected parameters during SCM training.
Number B_inner_product(const NumericVector< Number > &v, const NumericVector< Number > &w) const
Compute the inner product between two vectors using the system&#39;s matrix_B.
void set_C_J_stability_constraint(unsigned int j, Real stability_constraint_in)
Set stability constraints (i.e.
virtual void set_eigensolver_properties(int)
This function is called before truth eigensolves in compute_SCM_bounding_box and evaluate_stability_c...
UniquePtr< NumericVector< Number > > solution
Data structure to hold solution values.
Definition: system.h:1523
RBThetaExpansion & get_rb_theta_expansion()
Get a reference to the RBThetaExpansion object.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void add_scaled_symm_Aq(unsigned int q_a, Number scalar)
Add the scaled symmetrized affine matrix from the associated RBSystem to matrix_A.
UniquePtr< EigenSolver< Number > > eigen_solver
The EigenSolver, defining which interface, i.e solver package to use.
Definition: eigen_system.h:161
OStreamProxy out
const RBParameters & get_parameters() const
Get the current parameters.
virtual std::pair< Real, Real > get_eigenpair(dof_id_type i) libmesh_override
Override get_eigenpair() to retrieve the eigenpair for the condensed eigensolve.
void libMesh::System::forward_qoi_parameter_sensitivity ( const QoISet qoi_indices,
const ParameterVector parameters,
SensitivityData sensitivities 
)
virtualinherited

Solves for parameter sensitivities using the forward method.

This method is only implemented in some derived classes.

Reimplemented in libMesh::ImplicitSystem.

Definition at line 2300 of file system.h.

Referenced by libMesh::System::qoi_parameter_sensitivity(), and libMesh::System::set_adjoint_already_solved().

2303 {
2304  libmesh_not_implemented();
2305 }
bool libMesh::EigenSystem::generalized ( ) const
inherited
Returns
true if the underlying problem is generalized , false otherwise.

Definition at line 145 of file eigen_system.h.

References libMesh::EigenSystem::_is_generalized_eigenproblem.

Referenced by libMesh::CondensedEigenSystem::solve().

bool _is_generalized_eigenproblem
A boolean flag to indicate whether we are dealing with a generalized eigenvalue problem.
Definition: eigen_system.h:209
static void libMesh::RBConstructionBase< CondensedEigenSystem >::generate_training_parameters_deterministic ( const Parallel::Communicator communicator,
std::map< std::string, bool >  log_param_scale,
std::map< std::string, NumericVector< Number > * > &  training_parameters_in,
unsigned int  n_training_samples_in,
const RBParameters min_parameters,
const RBParameters max_parameters,
bool  serial_training_set = false 
)
staticprotectedinherited

Static helper function for generating a deterministic set of parameters.

Only works with 1 or 2 parameters (as defined by the lengths of min/max parameters vectors), otherwise throws an error.

static void libMesh::RBConstructionBase< CondensedEigenSystem >::generate_training_parameters_random ( const Parallel::Communicator communicator,
std::map< std::string, bool >  log_param_scale,
std::map< std::string, NumericVector< Number > * > &  training_parameters_in,
unsigned int  n_training_samples_in,
const RBParameters min_parameters,
const RBParameters max_parameters,
int  training_parameters_random_seed = -1,
bool  serial_training_set = false 
)
staticprotectedinherited

Static helper function for generating a randomized set of parameters.

NumericVector< Number > & libMesh::System::get_adjoint_rhs ( unsigned int  i = 0)
inherited
Returns
A reference to one of the system's adjoint rhs vectors, by default the one corresponding to the first qoi. This what the user's QoI derivative code should assemble when setting up an adjoint problem

Definition at line 1051 of file system.C.

References libMesh::System::get_vector().

Referenced by libMesh::ImplicitSystem::adjoint_solve(), libMesh::ImplicitSystem::forward_qoi_parameter_sensitivity(), libMesh::System::project_solution_on_reinit(), libMesh::ImplicitSystem::qoi_parameter_hessian(), libMesh::ImplicitSystem::qoi_parameter_hessian_vector_product(), and libMesh::ImplicitSystem::weighted_sensitivity_adjoint_solve().

1052 {
1053  std::ostringstream adjoint_rhs_name;
1054  adjoint_rhs_name << "adjoint_rhs" << i;
1055 
1056  return this->get_vector(adjoint_rhs_name.str());
1057 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
const NumericVector< Number > & libMesh::System::get_adjoint_rhs ( unsigned int  i = 0) const
inherited
Returns
A reference to one of the system's adjoint rhs vectors, by default the one corresponding to the first qoi.

Definition at line 1061 of file system.C.

References libMesh::System::get_vector().

1062 {
1063  std::ostringstream adjoint_rhs_name;
1064  adjoint_rhs_name << "adjoint_rhs" << i;
1065 
1066  return this->get_vector(adjoint_rhs_name.str());
1067 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
NumericVector< Number > & libMesh::System::get_adjoint_solution ( unsigned int  i = 0)
inherited
Returns
A reference to one of the system's adjoint solution vectors, by default the one corresponding to the first qoi.

Definition at line 989 of file system.C.

References libMesh::System::get_vector().

Referenced by libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::ImplicitSystem::adjoint_solve(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::AdjointResidualErrorEstimator::estimate_error(), HeatSystem::init_context(), main(), HeatSystem::perturb_accumulate_residuals(), libMesh::System::project_solution_on_reinit(), libMesh::ImplicitSystem::qoi_parameter_hessian(), libMesh::ImplicitSystem::qoi_parameter_hessian_vector_product(), and libMesh::ImplicitSystem::weighted_sensitivity_adjoint_solve().

990 {
991  std::ostringstream adjoint_name;
992  adjoint_name << "adjoint_solution" << i;
993 
994  return this->get_vector(adjoint_name.str());
995 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
const NumericVector< Number > & libMesh::System::get_adjoint_solution ( unsigned int  i = 0) const
inherited
Returns
A reference to one of the system's adjoint solution vectors, by default the one corresponding to the first qoi.

Definition at line 999 of file system.C.

References libMesh::System::get_vector().

1000 {
1001  std::ostringstream adjoint_name;
1002  adjoint_name << "adjoint_solution" << i;
1003 
1004  return this->get_vector(adjoint_name.str());
1005 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
void libMesh::System::get_all_variable_numbers ( std::vector< unsigned int > &  all_variable_numbers) const
inherited

Fills all_variable_numbers with all the variable numbers for the variables that have been added to this system.

Definition at line 1278 of file system.C.

References libMesh::System::_variable_numbers, and libMesh::System::n_vars().

Referenced by libMesh::RBEIMConstruction::initialize_rb_construction(), libMesh::System::project_solution_on_reinit(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), and SystemsTest::testProjectCubeWithMeshFunction().

1279 {
1280  all_variable_numbers.resize(n_vars());
1281 
1282  // Make sure the variable exists
1283  std::map<std::string, unsigned short int>::const_iterator
1284  it = _variable_numbers.begin();
1285  std::map<std::string, unsigned short int>::const_iterator
1286  it_end = _variable_numbers.end();
1287 
1288  unsigned int count = 0;
1289  for ( ; it != it_end; ++it)
1290  {
1291  all_variable_numbers[count] = it->second;
1292  count++;
1293  }
1294 }
std::map< std::string, unsigned short int > _variable_numbers
The variable numbers corresponding to user-specified names, useful for name-based lookups...
Definition: system.h:1903
unsigned int n_vars() const
Definition: system.h:2086
Real libMesh::RBParametrized::get_closest_value ( Real  value,
const std::vector< Real > &  list_of_values 
)
staticinherited
Returns
The closest entry to value from list_of_values.

Definition at line 464 of file rb_parametrized.C.

References std::abs(), distance(), std::max(), and libMesh::Real.

Referenced by libMesh::RBConstructionBase< Base >::initialize_training_parameters(), and libMesh::RBParametrized::is_value_in_list().

465 {
466  if (list_of_values.empty())
467  libmesh_error_msg("Error: list_of_values is empty.");
468 
469  std::vector<Real>::const_iterator it = list_of_values.begin();
470  std::vector<Real>::const_iterator it_end = list_of_values.end();
471 
472  Real min_distance = std::numeric_limits<Real>::max();
473  Real closest_val = 0.;
474  for ( ; it != it_end; ++it)
475  {
476  Real distance = std::abs(value - *it);
477  if (distance < min_distance)
478  {
479  min_distance = distance;
480  closest_val = *it;
481  }
482  }
483 
484  return closest_val;
485 }
double abs(double a)
long double max(long double a, double b)
Real distance(const Point &p)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:108
const std::string& libMesh::RBConstructionBase< CondensedEigenSystem >::get_deterministic_training_parameter_name ( ) const
inherited

Get the name of the parameter that we will generate deterministic training parameters for.

unsigned int libMesh::RBConstructionBase< CondensedEigenSystem >::get_deterministic_training_parameter_repeats ( ) const
inherited

Get the number of times each sample of the deterministic training parameter is repeated.

const std::map< std::string, std::vector< Real > > & libMesh::RBParametrized::get_discrete_parameter_values ( ) const
inherited

Get a const reference to the discrete parameter values.

Definition at line 403 of file rb_parametrized.C.

References libMesh::RBParametrized::_discrete_parameter_values, and libMesh::RBParametrized::parameters_initialized.

Referenced by libMesh::RBDataSerialization::add_parameter_ranges_to_builder(), libMesh::RBParametrized::get_n_discrete_params(), libMesh::RBParametrized::initialize_parameters(), libMesh::RBConstructionBase< Base >::initialize_training_parameters(), libMesh::RBParametrized::print_discrete_parameter_values(), libMesh::RBParametrized::valid_params(), and libMesh::RBParametrized::write_discrete_parameter_values_to_file().

404 {
406  libmesh_error_msg("Error: parameters not initialized in RBParametrized::get_discrete_parameter_values");
407 
409 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
std::map< std::string, std::vector< Real > > _discrete_parameter_values
Map that defines the allowable values of any discrete parameters.
const DofMap & libMesh::System::get_dof_map ( ) const
inherited
Returns
A constant reference to this system's _dof_map.

Definition at line 2030 of file system.h.

References libMesh::System::_dof_map.

Referenced by libMesh::__libmesh_petsc_diff_solver_residual(), libMesh::__libmesh_petsc_snes_postcheck(), libMesh::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::DifferentiableSystem::add_dot_var_dirichlet_bcs(), libMesh::HPCoarsenTest::add_projection(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), libMesh::UnsteadySolver::adjoint_advance_timestep(), libMesh::ImplicitSystem::adjoint_solve(), libMesh::NewmarkSolver::advance_timestep(), libMesh::UnsteadySolver::advance_timestep(), libMesh::EquationSystems::allgather(), libMesh::TransientRBConstruction::allocate_data_structures(), libMesh::RBConstruction::allocate_data_structures(), assemble(), LinearElasticity::assemble(), assemble_1D(), AssembleOptimization::assemble_A_and_F(), assemble_and_solve(), assemble_biharmonic(), assemble_elasticity(), assemble_ellipticdg(), assemble_helmholtz(), assemble_laplace(), assemble_mass(), assemble_matrices(), assemble_poisson(), assemble_shell(), assemble_stokes(), assemble_wave(), libMesh::EquationSystems::build_discontinuous_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::System::calculate_norm(), compute_stresses(), LinearElasticityWithContact::compute_stresses(), LinearElasticity::compute_stresses(), LargeDeformationElasticity::compute_stresses(), libMesh::Problem_Interface::computeF(), libMesh::Problem_Interface::computeJacobian(), libMesh::Problem_Interface::computePreconditioner(), libMesh::DofMap::constrain_nothing(), DMCreateDomainDecomposition_libMesh(), DMCreateFieldDecomposition_libMesh(), DMlibMeshFunction(), DMlibMeshJacobian(), DMlibMeshSetSystem_libMesh(), libMesh::RBEIMConstruction::enrich_RB_space(), libMesh::JumpErrorEstimator::estimate_error(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), libMesh::RBEIMAssembly::evaluate_basis_function(), libMesh::System::get_info(), libMesh::EquationSystems::get_solution(), libMesh::SystemSubsetBySubdomain::init(), libMesh::SecondOrderUnsteadySolver::init_data(), libMesh::UnsteadySolver::init_data(), HeatSystem::init_data(), libMesh::RBEIMConstruction::init_dof_map_between_systems(), libMesh::EigenSystem::init_matrices(), libMesh::ImplicitSystem::init_matrices(), libMesh::CondensedEigenSystem::initialize_condensed_dofs(), libMesh::OptimizationSystem::initialize_equality_constraints_storage(), libMesh::RBEIMAssembly::initialize_fe(), libMesh::OptimizationSystem::initialize_inequality_constraints_storage(), libMesh::RBEIMConstruction::initialize_rb_construction(), LaplaceYoung::jacobian(), LargeDeformationElasticity::jacobian(), libMesh::System::local_dof_indices(), AssembleOptimization::lower_and_upper_bounds(), main(), libMesh::DofMap::max_constraint_error(), LinearElasticityWithContact::move_mesh(), libMesh::DGFEMContext::neighbor_side_fe_reinit(), libMesh::UnsteadySolver::old_nonlinear_solution(), libMesh::SecondOrderUnsteadySolver::old_solution_accel(), libMesh::SecondOrderUnsteadySolver::old_solution_rate(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::operator()(), libMesh::BuildProjectionList::operator()(), libMesh::BoundaryProjectSolution::operator()(), perform_SCM_greedy(), libMesh::petsc_auto_fieldsplit(), libMesh::ErrorVector::plot_error(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::FEMContext::pre_fe_reinit(), libMesh::RBEIMAssembly::RBEIMAssembly(), libMesh::RBEIMConstruction::RBEIMConstruction(), libMesh::System::re_update(), libMesh::SecondOrderUnsteadySolver::reinit(), libMesh::UnsteadySolver::reinit(), libMesh::ImplicitSystem::reinit(), libMesh::EigenSystem::reinit(), libMesh::EquationSystems::reinit(), libMesh::System::reinit_constraints(), LaplaceYoung::residual(), LargeDeformationElasticity::residual(), LinearElasticityWithContact::residual_and_jacobian(), libMesh::UnsteadySolver::retrieve_timestep(), libMesh::HPCoarsenTest::select_refinement(), libMesh::ImplicitSystem::sensitivity_solve(), libMesh::RBConstruction::set_context_solution_vec(), set_system_parameters(), FETest< order, family, elem_type >::setUp(), SolidSystem::side_time_derivative(), libMesh::NewtonSolver::solve(), libMesh::PetscDiffSolver::solve(), libMesh::PetscNonlinearSolver< T >::solve(), libMesh::System::system_type(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), DefaultCouplingTest::testCoupling(), PointNeighborCouplingTest::testCoupling(), DofMapTest::testDofOwner(), SystemsTest::testProjectCubeWithMeshFunction(), BoundaryInfoTest::testShellFaceConstraints(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::BoundaryVolumeSolutionTransfer::transfer_boundary_volume(), libMesh::RBEIMConstruction::truth_solve(), libMesh::RBEIMConstruction::update_RB_system_matrices(), libMesh::ImplicitSystem::weighted_sensitivity_adjoint_solve(), libMesh::ImplicitSystem::weighted_sensitivity_solve(), libMesh::EnsightIO::write_scalar_ascii(), libMesh::EnsightIO::write_vector_ascii(), and libMesh::RBConstruction::zero_constrained_dofs_on_vector().

2031 {
2032  return *_dof_map;
2033 }
UniquePtr< DofMap > _dof_map
Data structure describing the relationship between nodes, variables, etc...
Definition: system.h:1865
DofMap & libMesh::System::get_dof_map ( )
inherited
Returns
A writable reference to this system's _dof_map.

Definition at line 2038 of file system.h.

References libMesh::System::_dof_map.

2039 {
2040  return *_dof_map;
2041 }
UniquePtr< DofMap > _dof_map
Data structure describing the relationship between nodes, variables, etc...
Definition: system.h:1865
std::pair< Real, Real > libMesh::CondensedEigenSystem::get_eigenpair ( dof_id_type  i)
virtualinherited

Override get_eigenpair() to retrieve the eigenpair for the condensed eigensolve.

We only set the non-condensed entries of the solution vector (the condensed entries are set to zero by default).

Reimplemented from libMesh::EigenSystem.

Definition at line 187 of file condensed_eigen_system.C.

References libMesh::NumericVector< T >::build(), libMesh::ParallelObject::comm(), libMesh::CondensedEigenSystem::condensed_dofs_initialized, libMesh::EigenSystem::eigen_solver, libMesh::EigenSystem::get_eigenpair(), libMesh::libmesh_assert(), libMesh::CondensedEigenSystem::local_non_condensed_dofs_vector, libMesh::PARALLEL, libMesh::System::solution, libMesh::Parallel::Communicator::sum(), and libMesh::System::update().

Referenced by compute_SCM_bounding_box(), evaluate_stability_constant(), main(), and libMesh::CondensedEigenSystem::system().

188 {
189  LOG_SCOPE("get_eigenpair()", "CondensedEigenSystem");
190 
191  // If we haven't initialized any condensed dofs,
192  // just use the default eigen_system
194  return Parent::get_eigenpair(i);
195 
196  // If we reach here, then there should be some non-condensed dofs
198 
199  // This function assumes that condensed_solve has just been called.
200  // If this is not the case, then we will trip an asset in get_eigenpair
201  UniquePtr<NumericVector<Number>> temp = NumericVector<Number>::build(this->comm());
203  dof_id_type n = n_local;
204  this->comm().sum(n);
205 
206  temp->init (n, n_local, false, PARALLEL);
207 
208  std::pair<Real, Real> eval = eigen_solver->get_eigenpair (i, *temp);
209 
210  // Now map temp to solution. Loop over local entries of local_non_condensed_dofs_vector
211  this->solution->zero();
212  for (std::size_t j=0; j<local_non_condensed_dofs_vector.size(); j++)
213  {
215  solution->set(index,(*temp)(temp->first_local_index()+j));
216  }
217 
218  solution->close();
219  this->update();
220 
221  return eval;
222 }
virtual std::pair< Real, Real > get_eigenpair(dof_id_type i)
Definition: eigen_system.C:257
libmesh_assert(j)
static UniquePtr< NumericVector< T > > build(const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
Builds a NumericVector on the processors in communicator comm using the linear solver package specifi...
UniquePtr< NumericVector< Number > > solution
Data structure to hold solution values.
Definition: system.h:1523
virtual void update()
Update the local values to reflect the solution on neighboring processors.
Definition: system.C:425
UniquePtr< EigenSolver< Number > > eigen_solver
The EigenSolver, defining which interface, i.e solver package to use.
Definition: eigen_system.h:161
const Parallel::Communicator & comm() const
std::vector< dof_id_type > local_non_condensed_dofs_vector
Vector storing the local dof indices that will not be condensed.
bool condensed_dofs_initialized
A private flag to indicate whether the condensed dofs have been initialized.
void sum(T &r) const
Take a local variable and replace it with the sum of it&#39;s values on all processors.
uint8_t dof_id_type
Definition: id_types.h:64
EigenProblemType libMesh::EigenSystem::get_eigenproblem_type ( ) const
inherited
Returns
The eigen problem type.

Definition at line 139 of file eigen_system.h.

References libMesh::EigenSystem::_eigen_problem_type.

139 {return _eigen_problem_type;}
EigenProblemType _eigen_problem_type
The type of the eigenvalue problem.
Definition: eigen_system.h:214
const EquationSystems& libMesh::System::get_equation_systems ( ) const
inherited
Returns
A constant reference to this system's parent EquationSystems object.

Definition at line 712 of file system.h.

References libMesh::System::_equation_systems.

Referenced by libMesh::UniformRefinementEstimator::_estimate_error(), add_scaled_symm_Aq(), libMesh::NewmarkSystem::clear(), libMesh::FrequencySystem::clear_all(), LinearElasticityWithContact::compute_stresses(), SolidSystem::element_time_derivative(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::AdjointResidualErrorEstimator::estimate_error(), libMesh::ExactErrorEstimator::find_squared_element_error(), libMesh::RBEIMConstruction::get_explicit_system(), libMesh::ImplicitSystem::get_linear_solve_parameters(), SolidSystem::init_data(), HeatSystem::init_data(), libMesh::FrequencySystem::init_data(), libMesh::RBEIMConstruction::init_data(), libMesh::RBEIMConstruction::initialize_rb_construction(), LaplaceYoung::jacobian(), load_matrix_B(), LinearElasticityWithContact::move_mesh(), libMesh::FrequencySystem::n_frequencies(), perform_SCM_greedy(), libMesh::RBEIMConstruction::plot_parametrized_functions_in_training_set(), libMesh::System::point_value(), LaplaceYoung::residual(), LinearElasticityWithContact::residual_and_jacobian(), SolidSystem::save_initial_mesh(), libMesh::FrequencySystem::set_current_frequency(), libMesh::FrequencySystem::set_frequencies(), libMesh::FrequencySystem::set_frequencies_by_range(), libMesh::FrequencySystem::set_frequencies_by_steps(), libMesh::NewmarkSystem::set_newmark_parameters(), libMesh::NonlinearImplicitSystem::set_solver_parameters(), SolidSystem::side_time_derivative(), libMesh::EigenSystem::solve(), libMesh::CondensedEigenSystem::solve(), libMesh::FrequencySystem::solve(), libMesh::LinearImplicitSystem::solve(), libMesh::RBConstruction::solve_for_matrix_and_rhs(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::DirectSolutionTransfer::transfer(), libMesh::MeshfreeSolutionTransfer::transfer(), libMesh::DTKSolutionTransfer::transfer(), libMesh::TransientRBConstruction::truth_solve(), libMesh::RBEIMConstruction::truth_solve(), libMesh::RBConstruction::truth_solve(), and libMesh::WrappedFunction< Output >::WrappedFunction().

712 { return _equation_systems; }
EquationSystems & _equation_systems
Constant reference to the EquationSystems object used for the simulation.
Definition: system.h:1871
EquationSystems& libMesh::System::get_equation_systems ( )
inherited
Returns
A reference to this system's parent EquationSystems object.

Definition at line 717 of file system.h.

References libMesh::System::_equation_systems, libMesh::System::activate(), libMesh::System::active(), libMesh::System::deactivate(), and libMesh::System::set_basic_system_only().

717 { return _equation_systems; }
EquationSystems & _equation_systems
Constant reference to the EquationSystems object used for the simulation.
Definition: system.h:1871
numeric_index_type libMesh::RBConstructionBase< CondensedEigenSystem >::get_first_local_training_index ( ) const
inherited

Get the first local index of the training parameters.

Referenced by compute_SCM_bounds_on_training_set().

static void libMesh::RBConstructionBase< CondensedEigenSystem >::get_global_max_error_pair ( const Parallel::Communicator communicator,
std::pair< numeric_index_type, Real > &  error_pair 
)
staticprotectedinherited

Static function to return the error pair (index,error) that is corresponds to the largest error on all processors.

Referenced by compute_SCM_bounds_on_training_set().

std::string libMesh::ReferenceCounter::get_info ( )
staticinherited

Gets a string containing the reference information.

Definition at line 47 of file reference_counter.C.

References libMesh::ReferenceCounter::_counts, and libMesh::Quality::name().

Referenced by libMesh::ReferenceCounter::print_info().

48 {
49 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
50 
51  std::ostringstream oss;
52 
53  oss << '\n'
54  << " ---------------------------------------------------------------------------- \n"
55  << "| Reference count information |\n"
56  << " ---------------------------------------------------------------------------- \n";
57 
58  for (Counts::iterator it = _counts.begin();
59  it != _counts.end(); ++it)
60  {
61  const std::string name(it->first);
62  const unsigned int creations = it->second.first;
63  const unsigned int destructions = it->second.second;
64 
65  oss << "| " << name << " reference count information:\n"
66  << "| Creations: " << creations << '\n'
67  << "| Destructions: " << destructions << '\n';
68  }
69 
70  oss << " ---------------------------------------------------------------------------- \n";
71 
72  return oss.str();
73 
74 #else
75 
76  return "";
77 
78 #endif
79 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:39
static Counts _counts
Actually holds the data.
std::string libMesh::ReferenceCounter::get_info ( )
staticinherited

Gets a string containing the reference information.

Definition at line 47 of file reference_counter.C.

References libMesh::ReferenceCounter::_counts, and libMesh::Quality::name().

Referenced by libMesh::ReferenceCounter::print_info().

48 {
49 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
50 
51  std::ostringstream oss;
52 
53  oss << '\n'
54  << " ---------------------------------------------------------------------------- \n"
55  << "| Reference count information |\n"
56  << " ---------------------------------------------------------------------------- \n";
57 
58  for (Counts::iterator it = _counts.begin();
59  it != _counts.end(); ++it)
60  {
61  const std::string name(it->first);
62  const unsigned int creations = it->second.first;
63  const unsigned int destructions = it->second.second;
64 
65  oss << "| " << name << " reference count information:\n"
66  << "| Creations: " << creations << '\n'
67  << "| Destructions: " << destructions << '\n';
68  }
69 
70  oss << " ---------------------------------------------------------------------------- \n";
71 
72  return oss.str();
73 
74 #else
75 
76  return "";
77 
78 #endif
79 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:39
static Counts _counts
Actually holds the data.
std::string libMesh::System::get_info ( ) const
inherited
Returns
A string containing information about the system.

Definition at line 1676 of file system.C.

References libMesh::FEType::family, libMesh::System::get_dof_map(), libMesh::DofMap::get_info(), libMesh::FEType::inf_map, libMesh::System::n_constrained_dofs(), libMesh::System::n_dofs(), libMesh::System::n_local_constrained_dofs(), libMesh::System::n_local_dofs(), libMesh::System::n_matrices(), libMesh::System::n_variable_groups(), libMesh::VariableGroup::n_variables(), libMesh::System::n_vectors(), libMesh::VariableGroup::name(), libMesh::System::name(), libMesh::System::number(), libMesh::FEType::order, libMesh::FEType::radial_family, libMesh::FEType::radial_order, libMesh::System::system_type(), libMesh::Variable::type(), libMesh::DofMap::variable_group(), and libMesh::System::variable_group().

Referenced by libMesh::System::read_parallel_data().

1677 {
1678  std::ostringstream oss;
1679 
1680 
1681  const std::string & sys_name = this->name();
1682 
1683  oss << " System #" << this->number() << ", \"" << sys_name << "\"\n"
1684  << " Type \"" << this->system_type() << "\"\n"
1685  << " Variables=";
1686 
1687  for (unsigned int vg=0; vg<this->n_variable_groups(); vg++)
1688  {
1689  const VariableGroup & vg_description (this->variable_group(vg));
1690 
1691  if (vg_description.n_variables() > 1) oss << "{ ";
1692  for (unsigned int vn=0; vn<vg_description.n_variables(); vn++)
1693  oss << "\"" << vg_description.name(vn) << "\" ";
1694  if (vg_description.n_variables() > 1) oss << "} ";
1695  }
1696 
1697  oss << '\n';
1698 
1699  oss << " Finite Element Types=";
1700 #ifndef LIBMESH_ENABLE_INFINITE_ELEMENTS
1701  for (unsigned int vg=0; vg<this->n_variable_groups(); vg++)
1702  oss << "\""
1703  << Utility::enum_to_string<FEFamily>(this->get_dof_map().variable_group(vg).type().family)
1704  << "\" ";
1705 #else
1706  for (unsigned int vg=0; vg<this->n_variable_groups(); vg++)
1707  {
1708  oss << "\""
1709  << Utility::enum_to_string<FEFamily>(this->get_dof_map().variable_group(vg).type().family)
1710  << "\", \""
1711  << Utility::enum_to_string<FEFamily>(this->get_dof_map().variable_group(vg).type().radial_family)
1712  << "\" ";
1713  }
1714 
1715  oss << '\n' << " Infinite Element Mapping=";
1716  for (unsigned int vg=0; vg<this->n_variable_groups(); vg++)
1717  oss << "\""
1718  << Utility::enum_to_string<InfMapType>(this->get_dof_map().variable_group(vg).type().inf_map)
1719  << "\" ";
1720 #endif
1721 
1722  oss << '\n';
1723 
1724  oss << " Approximation Orders=";
1725  for (unsigned int vg=0; vg<this->n_variable_groups(); vg++)
1726  {
1727 #ifndef LIBMESH_ENABLE_INFINITE_ELEMENTS
1728  oss << "\""
1729  << Utility::enum_to_string<Order>(this->get_dof_map().variable_group(vg).type().order)
1730  << "\" ";
1731 #else
1732  oss << "\""
1733  << Utility::enum_to_string<Order>(this->get_dof_map().variable_group(vg).type().order)
1734  << "\", \""
1735  << Utility::enum_to_string<Order>(this->get_dof_map().variable_group(vg).type().radial_order)
1736  << "\" ";
1737 #endif
1738  }
1739 
1740  oss << '\n';
1741 
1742  oss << " n_dofs()=" << this->n_dofs() << '\n';
1743  oss << " n_local_dofs()=" << this->n_local_dofs() << '\n';
1744 #ifdef LIBMESH_ENABLE_CONSTRAINTS
1745  oss << " n_constrained_dofs()=" << this->n_constrained_dofs() << '\n';
1746  oss << " n_local_constrained_dofs()=" << this->n_local_constrained_dofs() << '\n';
1747 #endif
1748 
1749  oss << " " << "n_vectors()=" << this->n_vectors() << '\n';
1750  oss << " " << "n_matrices()=" << this->n_matrices() << '\n';
1751  // oss << " " << "n_additional_matrices()=" << this->n_additional_matrices() << '\n';
1752 
1753  oss << this->get_dof_map().get_info();
1754 
1755  return oss.str();
1756 }
FEFamily family
The type of finite element.
Definition: fe_type.h:203
dof_id_type n_constrained_dofs() const
Definition: system.C:155
const FEType & type() const
Definition: variable.h:119
std::string get_info() const
Gets summary info about the sparsity bandwidth and constraints.
Definition: dof_map.C:2635
OrderWrapper radial_order
The approximation order in the base of the infinite element.
Definition: fe_type.h:236
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:197
const VariableGroup & variable_group(unsigned int vg) const
Return a constant reference to VariableGroup vg.
Definition: system.h:2124
const VariableGroup & variable_group(const unsigned int c) const
Definition: dof_map.h:1657
const std::string & name() const
Definition: system.h:1998
unsigned int n_variable_groups() const
Definition: system.h:2094
const DofMap & get_dof_map() const
Definition: system.h:2030
InfMapType inf_map
The coordinate mapping type of the infinite element.
Definition: fe_type.h:257
virtual unsigned int n_matrices() const
Definition: system.h:2220
FEFamily radial_family
For InfFE, family contains the radial shape family, while base_family contains the approximation type...
Definition: fe_type.h:249
dof_id_type n_local_dofs() const
Definition: system.C:185
virtual std::string system_type() const
Definition: system.h:471
dof_id_type n_local_constrained_dofs() const
Definition: system.C:170
unsigned int number() const
Definition: system.h:2006
dof_id_type n_dofs() const
Definition: system.C:148
unsigned int n_vectors() const
Definition: system.h:2214
numeric_index_type libMesh::RBConstructionBase< CondensedEigenSystem >::get_last_local_training_index ( ) const
inherited

Get the last local index of the training parameters.

numeric_index_type libMesh::RBConstructionBase< CondensedEigenSystem >::get_local_n_training_samples ( ) const
inherited

Get the total number of training samples local to this processor.

Referenced by compute_SCM_bounds_on_training_set().

const MeshBase & libMesh::System::get_mesh ( ) const
inherited
Returns
A constant reference to this systems's _mesh.

Definition at line 2014 of file system.h.

References libMesh::System::_mesh.

Referenced by libMesh::ExactSolution::_compute_error(), LinearElasticityWithContact::add_contact_edge_elements(), libMesh::HPCoarsenTest::add_projection(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), AssembleOptimization::assemble_A_and_F(), libMesh::FEMSystem::assemble_qoi(), libMesh::FEMSystem::assemble_qoi_derivative(), libMesh::FEMSystem::assembly(), AssemblyA0::boundary_assembly(), AssemblyF0::boundary_assembly(), AssemblyA1::boundary_assembly(), AssemblyF1::boundary_assembly(), AssemblyF2::boundary_assembly(), AssemblyA2::boundary_assembly(), libMesh::System::calculate_norm(), LinearElasticityWithContact::compute_stresses(), DMCreateDomainDecomposition_libMesh(), DMCreateFieldDecomposition_libMesh(), DMlibMeshSetSystem_libMesh(), SolidSystem::element_time_derivative(), libMesh::RBEIMConstruction::enrich_RB_space(), libMesh::WeightedPatchRecoveryErrorEstimator::estimate_error(), libMesh::JumpErrorEstimator::estimate_error(), libMesh::PatchRecoveryErrorEstimator::estimate_error(), libMesh::AdjointResidualErrorEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), LinearElasticityWithContact::get_least_and_max_gap_function(), libMesh::SystemSubsetBySubdomain::init(), SolidSystem::init_data(), libMesh::System::init_data(), libMesh::RBEIMConstruction::init_dof_map_between_systems(), libMesh::EigenSystem::init_matrices(), libMesh::ImplicitSystem::init_matrices(), LinearElasticityWithContact::initialize_contact_load_paths(), libMesh::RBEIMAssembly::initialize_fe(), libMesh::System::local_dof_indices(), libMesh::DofMap::max_constraint_error(), libMesh::FEMSystem::mesh_position_get(), libMesh::FEMSystem::mesh_position_set(), LinearElasticityWithContact::move_mesh(), libMesh::BoundaryProjectSolution::operator()(), libMesh::petsc_auto_fieldsplit(), libMesh::RBEIMConstruction::plot_parametrized_functions_in_training_set(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::FEMSystem::postprocess(), libMesh::RBEvaluation::read_in_vectors_from_multiple_files(), libMesh::ImplicitSystem::reinit(), libMesh::EigenSystem::reinit(), LinearElasticityWithContact::residual_and_jacobian(), SolidSystem::save_initial_mesh(), libMesh::HPSingularity::select_refinement(), libMesh::HPCoarsenTest::select_refinement(), SolidSystem::side_time_derivative(), libMesh::System::system_type(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::BoundaryVolumeSolutionTransfer::transfer(), libMesh::BoundaryVolumeSolutionTransfer::transfer_boundary_volume(), libMesh::BoundaryVolumeSolutionTransfer::transfer_volume_boundary(), libMesh::TransientRBConstruction::truth_solve(), libMesh::RBEIMConstruction::truth_solve(), libMesh::RBConstruction::truth_solve(), libMesh::RBEvaluation::write_out_vectors(), and libMesh::System::zero_variable().

2015 {
2016  return _mesh;
2017 }
MeshBase & _mesh
Constant reference to the mesh data structure used for the simulation.
Definition: system.h:1877
MeshBase & libMesh::System::get_mesh ( )
inherited
Returns
A reference to this systems's _mesh.

Definition at line 2022 of file system.h.

References libMesh::System::_mesh.

2023 {
2024  return _mesh;
2025 }
MeshBase & _mesh
Constant reference to the mesh data structure used for the simulation.
Definition: system.h:1877
unsigned int libMesh::RBParametrized::get_n_continuous_params ( ) const
inherited

Get the number of continuous parameters.

Definition at line 133 of file rb_parametrized.C.

References libMesh::RBParametrized::get_n_discrete_params(), libMesh::RBParametrized::get_n_params(), libMesh::libmesh_assert(), and libMesh::RBParametrized::parameters_initialized.

Referenced by libMesh::RBDataSerialization::add_parameter_ranges_to_builder(), and libMesh::RBParametrized::write_parameter_ranges_to_file().

134 {
136  libmesh_error_msg("Error: parameters not initialized in RBParametrized::get_n_continuous_params");
137 
139 
140  return static_cast<unsigned int>(get_n_params() - get_n_discrete_params());
141 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
unsigned int get_n_params() const
Get the number of parameters.
libmesh_assert(j)
unsigned int get_n_discrete_params() const
Get the number of discrete parameters.
unsigned int libMesh::EigenSystem::get_n_converged ( ) const
inherited
Returns
The number of converged eigenpairs.

Definition at line 124 of file eigen_system.h.

References libMesh::EigenSystem::_n_converged_eigenpairs.

Referenced by compute_SCM_bounding_box(), evaluate_stability_constant(), and main().

124 {return _n_converged_eigenpairs;}
unsigned int _n_converged_eigenpairs
The number of converged eigenpairs.
Definition: eigen_system.h:198
unsigned int libMesh::RBParametrized::get_n_discrete_params ( ) const
inherited

Get the number of discrete parameters.

Definition at line 143 of file rb_parametrized.C.

References libMesh::RBParametrized::get_discrete_parameter_values(), and libMesh::RBParametrized::parameters_initialized.

Referenced by libMesh::RBDataSerialization::add_parameter_ranges_to_builder(), libMesh::RBParametrized::get_n_continuous_params(), libMesh::RBConstructionBase< Base >::initialize_training_parameters(), and libMesh::RBParametrized::write_discrete_parameter_values_to_file().

144 {
146  libmesh_error_msg("Error: parameters not initialized in RBParametrized::get_n_discrete_params");
147 
148  return cast_int<unsigned int>
150 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
const std::map< std::string, std::vector< Real > > & get_discrete_parameter_values() const
Get a const reference to the discrete parameter values.
unsigned int libMesh::EigenSystem::get_n_iterations ( ) const
inherited
Returns
The number of eigen solver iterations.

Definition at line 129 of file eigen_system.h.

References libMesh::EigenSystem::_n_iterations, and libMesh::EigenSystem::set_eigenproblem_type().

129 {return _n_iterations;}
unsigned int _n_iterations
The number of iterations of the eigen solver algorithm.
Definition: eigen_system.h:203
unsigned int libMesh::RBParametrized::get_n_params ( ) const
inherited

Get the number of parameters.

Definition at line 123 of file rb_parametrized.C.

References libMesh::RBParameters::n_parameters(), libMesh::RBParametrized::parameters_initialized, libMesh::RBParametrized::parameters_max, and libMesh::RBParametrized::parameters_min.

Referenced by libMesh::RBConstruction::compute_max_error_bound(), libMesh::RBEIMTheta::evaluate(), libMesh::RBParametrized::get_n_continuous_params(), libMesh::RBConstructionBase< Base >::load_training_set(), print_info(), libMesh::RBConstruction::print_info(), and libMesh::RBParametrized::valid_params().

124 {
126  libmesh_error_msg("Error: parameters not initialized in RBParametrized::get_n_params");
127 
128  libmesh_assert_equal_to ( parameters_min.n_parameters(), parameters_max.n_parameters() );
129 
130  return parameters_min.n_parameters();
131 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
unsigned int n_parameters() const
Get the number of parameters that have been added.
Definition: rb_parameters.C:62
RBParameters parameters_min
Vectors that define the ranges (min and max) for the parameters.
numeric_index_type libMesh::RBConstructionBase< CondensedEigenSystem >::get_n_training_samples ( ) const
inherited

Get the total number of training samples.

Referenced by print_info().

Real libMesh::RBParametrized::get_parameter_max ( const std::string &  param_name) const
inherited

Get maximum allowable value of parameter param_name.

Definition at line 206 of file rb_parametrized.C.

References libMesh::RBParameters::get_value(), libMesh::RBParametrized::parameters_initialized, and libMesh::RBParametrized::parameters_max.

Referenced by print_info(), libMesh::RBConstruction::print_info(), and libMesh::RBParametrized::valid_params().

207 {
209  libmesh_error_msg("Error: parameters not initialized in RBParametrized::get_parameter_max");
210 
211  return parameters_max.get_value(param_name);
212 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
Real get_value(const std::string &param_name) const
Get the value of the specific parameter.
Definition: rb_parameters.C:45
Real libMesh::RBParametrized::get_parameter_min ( const std::string &  param_name) const
inherited

Get minimum allowable value of parameter param_name.

Definition at line 198 of file rb_parametrized.C.

References libMesh::RBParameters::get_value(), libMesh::RBParametrized::parameters_initialized, and libMesh::RBParametrized::parameters_min.

Referenced by print_info(), libMesh::RBConstruction::print_info(), and libMesh::RBParametrized::valid_params().

199 {
201  libmesh_error_msg("Error: parameters not initialized in RBParametrized::get_parameter_min");
202 
203  return parameters_min.get_value(param_name);
204 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
Real get_value(const std::string &param_name) const
Get the value of the specific parameter.
Definition: rb_parameters.C:45
RBParameters parameters_min
Vectors that define the ranges (min and max) for the parameters.
std::set< std::string > libMesh::RBParametrized::get_parameter_names ( ) const
inherited

Get a set that stores the parameter names.

Definition at line 152 of file rb_parametrized.C.

References libMesh::RBParameters::get_parameter_names(), libMesh::RBParametrized::parameters_initialized, and libMesh::RBParametrized::parameters_min.

Referenced by libMesh::RBDataSerialization::add_parameter_ranges_to_builder().

153 {
155  libmesh_error_msg("Error: parameters not initialized in RBParametrized::get_parameter_names");
156 
157  std::set<std::string> parameter_names;
158  parameters_min.get_parameter_names(parameter_names);
159 
160  return parameter_names;
161 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
void get_parameter_names(std::set< std::string > &param_names) const
Fill param_names with the names of the parameters.
Definition: rb_parameters.C:68
RBParameters parameters_min
Vectors that define the ranges (min and max) for the parameters.
const RBParameters & libMesh::RBParametrized::get_parameters ( ) const
inherited

Get the current parameters.

Definition at line 174 of file rb_parametrized.C.

References libMesh::RBParametrized::parameters, and libMesh::RBParametrized::parameters_initialized.

Referenced by libMesh::TransientRBConstruction::add_scaled_mass_matrix(), libMesh::RBConstructionBase< Base >::broadcast_parameters(), libMesh::TransientRBEvaluation::cache_online_residual_terms(), libMesh::RBEIMConstruction::compute_best_fit_error(), libMesh::RBEvaluation::compute_residual_dual_norm(), compute_SCM_bounds_on_training_set(), enrich_C_J(), libMesh::RBEIMConstruction::enrich_RB_space(), libMesh::RBEIMTheta::evaluate(), libMesh::RBEIMEvaluation::evaluate_parametrized_function(), evaluate_stability_constant(), libMesh::RBConstruction::get_RB_error_bound(), libMesh::RBSCMEvaluation::get_SCM_LB(), libMesh::RBSCMEvaluation::get_SCM_UB(), SimpleRBEvaluation::get_stability_lower_bound(), libMesh::RBConstruction::greedy_termination_test(), libMesh::RBSCMEvaluation::legacy_read_offline_data_from_files(), libMesh::TransientRBConstruction::mass_matrix_scaled_matvec(), print_info(), libMesh::RBConstruction::print_info(), libMesh::RBParametrized::print_parameters(), process_parameters_file(), libMesh::TransientRBEvaluation::rb_solve(), libMesh::RBEvaluation::rb_solve(), libMesh::RBEIMEvaluation::rb_solve(), libMesh::RBSCMEvaluation::save_current_parameters(), libMesh::TransientRBConstruction::truth_assembly(), libMesh::RBConstruction::truth_assembly(), libMesh::TransientRBConstruction::truth_solve(), libMesh::RBEIMConstruction::truth_solve(), libMesh::RBConstruction::truth_solve(), libMesh::TransientRBEvaluation::uncached_compute_residual_dual_norm(), and libMesh::RBConstruction::update_greedy_param_list().

175 {
177  libmesh_error_msg("Error: parameters not initialized in RBParametrized::get_current_parameters");
178 
179  return parameters;
180 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
RBParameters parameters
Vector storing the current parameters.
const RBParameters & libMesh::RBParametrized::get_parameters_max ( ) const
inherited

Get an RBParameters object that specifies the maximum allowable value for each parameter.

Definition at line 190 of file rb_parametrized.C.

References libMesh::RBParametrized::parameters_initialized, and libMesh::RBParametrized::parameters_max.

Referenced by libMesh::RBDataSerialization::add_parameter_ranges_to_builder(), libMesh::RBParametrized::initialize_parameters(), process_parameters_file(), libMesh::RBConstruction::set_rb_construction_parameters(), and libMesh::RBParametrized::write_parameter_ranges_to_file().

191 {
193  libmesh_error_msg("Error: parameters not initialized in RBParametrized::get_parameters_max");
194 
195  return parameters_max;
196 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
const RBParameters & libMesh::RBParametrized::get_parameters_min ( ) const
inherited

Get an RBParameters object that specifies the minimum allowable value for each parameter.

Definition at line 182 of file rb_parametrized.C.

References libMesh::RBParametrized::parameters_initialized, and libMesh::RBParametrized::parameters_min.

Referenced by libMesh::RBDataSerialization::add_parameter_ranges_to_builder(), libMesh::RBParametrized::initialize_parameters(), process_parameters_file(), libMesh::RBConstruction::set_rb_construction_parameters(), and libMesh::RBParametrized::write_parameter_ranges_to_file().

183 {
185  libmesh_error_msg("Error: parameters not initialized in RBParametrized::get_parameters_min");
186 
187  return parameters_min;
188 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
RBParameters parameters_min
Vectors that define the ranges (min and max) for the parameters.
RBParameters libMesh::RBConstructionBase< CondensedEigenSystem >::get_params_from_training_set ( unsigned int  index)
protectedinherited

Return the RBParameters in index index of training set.

RBSCMEvaluation & libMesh::RBSCMConstruction::get_rb_scm_evaluation ( )

Get a reference to the RBSCMEvaluation object.

Definition at line 80 of file rb_scm_construction.C.

References rb_scm_eval.

Referenced by get_rb_theta_expansion().

81 {
82  if (!rb_scm_eval)
83  libmesh_error_msg("Error: RBSCMEvaluation object hasn't been initialized yet");
84 
85  return *rb_scm_eval;
86 }
RBSCMEvaluation * rb_scm_eval
The current RBSCMEvaluation object we are using to perform the Evaluation stage of the SCM...
RBThetaExpansion & libMesh::RBSCMConstruction::get_rb_theta_expansion ( )

Get a reference to the RBThetaExpansion object.

Definition at line 88 of file rb_scm_construction.C.

References get_rb_scm_evaluation(), and libMesh::RBSCMEvaluation::get_rb_theta_expansion().

Referenced by Aq_inner_product(), compute_SCM_bounding_box(), enrich_C_J(), evaluate_stability_constant(), print_info(), and resize_SCM_vectors().

89 {
91 }
RBThetaExpansion & get_rb_theta_expansion()
Get a reference to the rb_theta_expansion.
RBSCMEvaluation & get_rb_scm_evaluation()
Get a reference to the RBSCMEvaluation object.
Real libMesh::RBSCMConstruction::get_SCM_training_tolerance ( ) const

Get/set SCM_training_tolerance: tolerance for SCM greedy.

Definition at line 139 of file rb_scm_construction.h.

References SCM_training_tolerance.

Referenced by print_info().

139 { return SCM_training_tolerance; }
Real SCM_training_tolerance
Tolerance which controls when to terminate the SCM Greedy.
NumericVector< Number > & libMesh::System::get_sensitivity_rhs ( unsigned int  i = 0)
inherited
Returns
A reference to one of the system's sensitivity rhs vectors, by default the one corresponding to the first parameter. By default these vectors are built by the library, using finite differences, when assemble_residual_derivatives() is called.

When assembled, this vector should hold -(partial R / partial p_i)

Definition at line 1081 of file system.C.

References libMesh::System::get_vector().

Referenced by libMesh::ImplicitSystem::adjoint_qoi_parameter_sensitivity(), libMesh::System::project_solution_on_reinit(), and libMesh::ImplicitSystem::sensitivity_solve().

1082 {
1083  std::ostringstream sensitivity_rhs_name;
1084  sensitivity_rhs_name << "sensitivity_rhs" << i;
1085 
1086  return this->get_vector(sensitivity_rhs_name.str());
1087 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
const NumericVector< Number > & libMesh::System::get_sensitivity_rhs ( unsigned int  i = 0) const
inherited
Returns
A reference to one of the system's sensitivity rhs vectors, by default the one corresponding to the first parameter.

Definition at line 1091 of file system.C.

References libMesh::System::get_vector().

1092 {
1093  std::ostringstream sensitivity_rhs_name;
1094  sensitivity_rhs_name << "sensitivity_rhs" << i;
1095 
1096  return this->get_vector(sensitivity_rhs_name.str());
1097 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
NumericVector< Number > & libMesh::System::get_sensitivity_solution ( unsigned int  i = 0)
inherited
Returns
A reference to one of the system's solution sensitivity vectors, by default the one corresponding to the first parameter.

Definition at line 936 of file system.C.

References libMesh::System::get_vector().

Referenced by libMesh::ImplicitSystem::forward_qoi_parameter_sensitivity(), libMesh::System::project_solution_on_reinit(), libMesh::ImplicitSystem::qoi_parameter_hessian(), and libMesh::ImplicitSystem::sensitivity_solve().

937 {
938  std::ostringstream sensitivity_name;
939  sensitivity_name << "sensitivity_solution" << i;
940 
941  return this->get_vector(sensitivity_name.str());
942 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
const NumericVector< Number > & libMesh::System::get_sensitivity_solution ( unsigned int  i = 0) const
inherited
Returns
A reference to one of the system's solution sensitivity vectors, by default the one corresponding to the first parameter.

Definition at line 946 of file system.C.

References libMesh::System::get_vector().

947 {
948  std::ostringstream sensitivity_name;
949  sensitivity_name << "sensitivity_solution" << i;
950 
951  return this->get_vector(sensitivity_name.str());
952 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
const NumericVector< Number > & libMesh::System::get_vector ( const std::string &  vec_name) const
inherited
Returns
A const reference to this system's additional vector named vec_name. Access is only granted when the vector is already properly initialized.

Definition at line 794 of file system.C.

References libMesh::System::_vectors.

Referenced by libMesh::UniformRefinementEstimator::_estimate_error(), add_M_C_K_helmholtz(), libMesh::UnsteadySolver::adjoint_advance_timestep(), libMesh::NewmarkSolver::advance_timestep(), libMesh::AdaptiveTimeSolver::advance_timestep(), libMesh::UnsteadySolver::advance_timestep(), apply_initial(), assemble(), libMesh::System::compare(), libMesh::NewmarkSolver::compute_initial_accel(), libMesh::UnsteadySolver::du(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::System::get_adjoint_rhs(), libMesh::System::get_adjoint_solution(), libMesh::System::get_sensitivity_rhs(), libMesh::System::get_sensitivity_solution(), libMesh::System::get_weighted_sensitivity_adjoint_solution(), libMesh::System::get_weighted_sensitivity_solution(), libMesh::NewmarkSystem::initial_conditions(), AssembleOptimization::lower_and_upper_bounds(), main(), libMesh::NewmarkSolver::project_initial_accel(), libMesh::SecondOrderUnsteadySolver::project_initial_rate(), libMesh::System::project_solution_on_reinit(), libMesh::SecondOrderUnsteadySolver::reinit(), libMesh::UnsteadySolver::reinit(), libMesh::MemorySolutionHistory::retrieve(), libMesh::UnsteadySolver::retrieve_timestep(), libMesh::TwostepTimeSolver::solve(), libMesh::TaoOptimizationSolver< T >::solve(), libMesh::NloptOptimizationSolver< T >::solve(), libMesh::FrequencySystem::solve(), libMesh::NewmarkSystem::update_rhs(), and libMesh::NewmarkSystem::update_u_v_a().

795 {
796  // Make sure the vector exists
797  const_vectors_iterator pos = _vectors.find(vec_name);
798 
799  if (pos == _vectors.end())
800  libmesh_error_msg("ERROR: vector " << vec_name << " does not exist in this system!");
801 
802  return *(pos->second);
803 }
std::map< std::string, NumericVector< Number > * >::const_iterator const_vectors_iterator
Definition: system.h:749
std::map< std::string, NumericVector< Number > * > _vectors
Some systems need an arbitrary number of vectors.
Definition: system.h:1916
NumericVector< Number > & libMesh::System::get_vector ( const std::string &  vec_name)
inherited
Returns
A writable reference to this system's additional vector named vec_name. Access is only granted when the vector is already properly initialized.

Definition at line 807 of file system.C.

References libMesh::System::_vectors.

808 {
809  // Make sure the vector exists
810  vectors_iterator pos = _vectors.find(vec_name);
811 
812  if (pos == _vectors.end())
813  libmesh_error_msg("ERROR: vector " << vec_name << " does not exist in this system!");
814 
815  return *(pos->second);
816 }
std::map< std::string, NumericVector< Number > * >::iterator vectors_iterator
Vector iterator typedefs.
Definition: system.h:748
std::map< std::string, NumericVector< Number > * > _vectors
Some systems need an arbitrary number of vectors.
Definition: system.h:1916
const NumericVector< Number > & libMesh::System::get_vector ( const unsigned int  vec_num) const
inherited
Returns
A const reference to this system's additional vector number vec_num (where the vectors are counted starting with 0).

Definition at line 820 of file system.C.

References libMesh::libmesh_assert(), libMesh::System::vectors_begin(), and libMesh::System::vectors_end().

821 {
824  unsigned int num = 0;
825  while ((num<vec_num) && (v!=v_end))
826  {
827  num++;
828  ++v;
829  }
830  libmesh_assert (v != v_end);
831  return *(v->second);
832 }
vectors_iterator vectors_end()
End of vectors container.
Definition: system.h:2238
std::map< std::string, NumericVector< Number > * >::const_iterator const_vectors_iterator
Definition: system.h:749
vectors_iterator vectors_begin()
Beginning of vectors container.
Definition: system.h:2226
libmesh_assert(j)
NumericVector< Number > & libMesh::System::get_vector ( const unsigned int  vec_num)
inherited
Returns
A writable reference to this system's additional vector number vec_num (where the vectors are counted starting with 0).

Definition at line 836 of file system.C.

References libMesh::libmesh_assert(), libMesh::System::vectors_begin(), and libMesh::System::vectors_end().

837 {
839  vectors_iterator v_end = vectors_end();
840  unsigned int num = 0;
841  while ((num<vec_num) && (v!=v_end))
842  {
843  num++;
844  ++v;
845  }
846  libmesh_assert (v != v_end);
847  return *(v->second);
848 }
vectors_iterator vectors_end()
End of vectors container.
Definition: system.h:2238
vectors_iterator vectors_begin()
Beginning of vectors container.
Definition: system.h:2226
libmesh_assert(j)
std::map< std::string, NumericVector< Number > * >::iterator vectors_iterator
Vector iterator typedefs.
Definition: system.h:748
NumericVector< Number > & libMesh::System::get_weighted_sensitivity_adjoint_solution ( unsigned int  i = 0)
inherited
Returns
A reference to one of the system's weighted sensitivity adjoint solution vectors, by default the one corresponding to the first qoi.

Definition at line 1021 of file system.C.

References libMesh::System::get_vector().

Referenced by libMesh::System::project_solution_on_reinit(), libMesh::ImplicitSystem::qoi_parameter_hessian_vector_product(), and libMesh::ImplicitSystem::weighted_sensitivity_adjoint_solve().

1022 {
1023  std::ostringstream adjoint_name;
1024  adjoint_name << "weighted_sensitivity_adjoint_solution" << i;
1025 
1026  return this->get_vector(adjoint_name.str());
1027 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
const NumericVector< Number > & libMesh::System::get_weighted_sensitivity_adjoint_solution ( unsigned int  i = 0) const
inherited
Returns
A reference to one of the system's weighted sensitivity adjoint solution vectors, by default the one corresponding to the first qoi.

Definition at line 1031 of file system.C.

References libMesh::System::get_vector().

1032 {
1033  std::ostringstream adjoint_name;
1034  adjoint_name << "weighted_sensitivity_adjoint_solution" << i;
1035 
1036  return this->get_vector(adjoint_name.str());
1037 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
NumericVector< Number > & libMesh::System::get_weighted_sensitivity_solution ( )
inherited
Returns
A reference to the solution of the last weighted sensitivity solve

Definition at line 963 of file system.C.

References libMesh::System::get_vector().

Referenced by libMesh::System::project_solution_on_reinit(), libMesh::ImplicitSystem::qoi_parameter_hessian_vector_product(), and libMesh::ImplicitSystem::weighted_sensitivity_solve().

964 {
965  return this->get_vector("weighted_sensitivity_solution");
966 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
const NumericVector< Number > & libMesh::System::get_weighted_sensitivity_solution ( ) const
inherited
Returns
A reference to the solution of the last weighted sensitivity solve

Definition at line 970 of file system.C.

References libMesh::System::get_vector().

971 {
972  return this->get_vector("weighted_sensitivity_solution");
973 }
const NumericVector< Number > & get_vector(const std::string &vec_name) const
Definition: system.C:794
bool libMesh::System::has_variable ( const std::string &  var) const
inherited
Returns
true if a variable named var exists in this System

Definition at line 1256 of file system.C.

References libMesh::System::_variable_numbers.

Referenced by libMesh::GMVIO::copy_nodal_solution(), main(), and libMesh::System::project_solution_on_reinit().

1257 {
1258  return _variable_numbers.count(var);
1259 }
std::map< std::string, unsigned short int > _variable_numbers
The variable numbers corresponding to user-specified names, useful for name-based lookups...
Definition: system.h:1903
bool libMesh::System::have_vector ( const std::string &  vec_name) const
inherited
Returns
true if this System has a vector associated with the given name, false otherwise.

Definition at line 2206 of file system.h.

References libMesh::System::_vectors.

Referenced by libMesh::System::add_vector(), and libMesh::System::project_solution_on_reinit().

2207 {
2208  return (_vectors.count(vec_name));
2209 }
std::map< std::string, NumericVector< Number > * > _vectors
Some systems need an arbitrary number of vectors.
Definition: system.h:1916
bool& libMesh::System::hide_output ( )
inherited
Returns
A writable reference to a boolean that determines if this system can be written to file or not. If set to true, then EquationSystems::write will ignore this system.

Definition at line 1657 of file system.h.

References libMesh::System::_hide_output, libMesh::System::discrete_var_norm(), end, libMesh::System::init_data(), libMesh::invalid_uint, libMesh::ReferenceCounter::n_objects(), libMesh::System::operator=(), libMesh::System::project_vector(), libMesh::System::read_SCALAR_dofs(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::System::read_serialized_vector(), libMesh::Real, and libMesh::System::System().

1657 { return _hide_output; }
bool _hide_output
Are we allowed to write this system to file? If _hide_output is true, then EquationSystems::write wil...
Definition: system.h:1990
bool libMesh::System::identify_variable_groups ( ) const
inherited
Returns
true when VariableGroup structures should be automatically identified, false otherwise.

Definition at line 2182 of file system.h.

References libMesh::System::_identify_variable_groups.

Referenced by libMesh::System::add_variable(), and libMesh::System::project_solution_on_reinit().

2183 {
2185 }
bool _identify_variable_groups
true when VariableGroup structures should be automatically identified, false otherwise.
Definition: system.h:1958
void libMesh::System::identify_variable_groups ( const bool  ivg)
inherited

Toggle automatic VariableGroup identification.

Definition at line 2190 of file system.h.

References libMesh::System::_identify_variable_groups.

2191 {
2193 }
bool _identify_variable_groups
true when VariableGroup structures should be automatically identified, false otherwise.
Definition: system.h:1958
void libMesh::ReferenceCounter::increment_constructor_count ( const std::string &  name)
protectedinherited

Increments the construction counter.

Should be called in the constructor of any derived class that will be reference counted.

Definition at line 185 of file reference_counter.h.

References libMesh::ReferenceCounter::_counts, libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCounter::n_objects(), and libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject().

186 {
187  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
188  std::pair<unsigned int, unsigned int> & p = _counts[name];
189 
190  p.first++;
191 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:39
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:29
static Counts _counts
Actually holds the data.
void libMesh::ReferenceCounter::increment_constructor_count ( const std::string &  name)
protectedinherited

Increments the construction counter.

Should be called in the constructor of any derived class that will be reference counted.

Definition at line 185 of file reference_counter.h.

References libMesh::ReferenceCounter::_counts, libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCounter::n_objects(), and libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject().

186 {
187  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
188  std::pair<unsigned int, unsigned int> & p = _counts[name];
189 
190  p.first++;
191 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:39
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:29
static Counts _counts
Actually holds the data.
void libMesh::ReferenceCounter::increment_destructor_count ( const std::string &  name)
protectedinherited

Increments the destruction counter.

Should be called in the destructor of any derived class that will be reference counted.

Definition at line 198 of file reference_counter.h.

References libMesh::ReferenceCounter::_counts, libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCounter::n_objects(), and libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().

199 {
200  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
201  std::pair<unsigned int, unsigned int> & p = _counts[name];
202 
203  p.second++;
204 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:39
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:29
static Counts _counts
Actually holds the data.
void libMesh::ReferenceCounter::increment_destructor_count ( const std::string &  name)
protectedinherited

Increments the destruction counter.

Should be called in the destructor of any derived class that will be reference counted.

Definition at line 198 of file reference_counter.h.

References libMesh::ReferenceCounter::_counts, libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCounter::n_objects(), and libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().

199 {
200  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
201  std::pair<unsigned int, unsigned int> & p = _counts[name];
202 
203  p.second++;
204 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:39
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:29
static Counts _counts
Actually holds the data.
void libMesh::System::init ( )
inherited

Initializes degrees of freedom on the current mesh.

Sets the

Definition at line 235 of file system.C.

References libMesh::System::_basic_system_only, libMesh::System::init_data(), libMesh::System::is_initialized(), libMesh::libmesh_assert(), libMesh::System::n_vars(), and libMesh::System::user_initialization().

Referenced by libMesh::System::system().

236 {
237  // Calling init() twice on the same system currently works evil
238  // magic, whether done directly or via EquationSystems::read()
239  libmesh_assert(!this->is_initialized());
240 
241  // First initialize any required data:
242  // either only the basic System data
243  if (_basic_system_only)
245  // or all the derived class' data too
246  else
247  this->init_data();
248 
249  // If no variables have been added to this system
250  // don't do anything
251  if (!this->n_vars())
252  return;
253 
254  // Then call the user-provided initialization function
255  this->user_initialization();
256 }
bool _basic_system_only
Holds true if the components of more advanced system types (e.g.
Definition: system.h:1946
virtual void init_data()
Initializes the data for the system.
Definition: system.C:260
virtual void user_initialization()
Calls user&#39;s attached initialization function, or is overridden by the user in derived classes...
Definition: system.C:1936
libmesh_assert(j)
bool is_initialized()
Definition: system.h:2070
unsigned int n_vars() const
Definition: system.h:2086
virtual void libMesh::RBConstructionBase< CondensedEigenSystem >::init_data ( )
protectedvirtualinherited

Initializes the member data fields associated with the system, so that, e.g., assemble() may be used.

Reimplemented from libMesh::EigenSystem.

void libMesh::EigenSystem::init_matrices ( )
protectedvirtualinherited

Initializes the matrices associated with the system.

Definition at line 136 of file eigen_system.C.

References libMesh::EigenSystem::_is_generalized_eigenproblem, libMesh::DofMap::attach_matrix(), libMesh::ParallelObject::comm(), libMesh::DofMap::compute_sparsity(), libMesh::System::get_dof_map(), libMesh::System::get_mesh(), libMesh::EigenSystem::matrix_A, and libMesh::EigenSystem::matrix_B.

Referenced by libMesh::EigenSystem::init_data().

137 {
138  DofMap & dof_map = this->get_dof_map();
139 
140  dof_map.attach_matrix(*matrix_A);
141 
142  // build matrix_B only in case of a
143  // generalized problem
145  {
146  matrix_B.reset(SparseMatrix<Number>::build(this->comm()).release());
147  dof_map.attach_matrix(*matrix_B);
148  }
149 
150  dof_map.compute_sparsity(this->get_mesh());
151 
152  // initialize and zero system matrix
153  matrix_A->init();
154  matrix_A->zero();
155 
156  // eventually initialize and zero system matrix_B
158  {
159  matrix_B->init();
160  matrix_B->zero();
161  }
162 }
UniquePtr< SparseMatrix< Number > > matrix_B
A second system matrix for generalized eigenvalue problems.
Definition: eigen_system.h:155
static UniquePtr< SparseMatrix< Number > > build(const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
Builds a SparseMatrix<T> using the linear solver package specified by solver_package.
UniquePtr< SparseMatrix< Number > > matrix_A
The system matrix for standard eigenvalue problems.
Definition: eigen_system.h:150
const MeshBase & get_mesh() const
Definition: system.h:2014
const DofMap & get_dof_map() const
Definition: system.h:2030
bool _is_generalized_eigenproblem
A boolean flag to indicate whether we are dealing with a generalized eigenvalue problem.
Definition: eigen_system.h:209
const Parallel::Communicator & comm() const
void libMesh::CondensedEigenSystem::initialize_condensed_dofs ( const std::set< dof_id_type > &  global_condensed_dofs_set = std::set<dof_id_type>())
inherited

Loop over the dofs on each processor to initialize the list of non-condensed dofs.

These are the dofs in the system that are not contained in global_dirichlet_dofs_set and are not subject to constraints due to adaptive mesh hanging nodes, periodic boundary conditions, or Dirichlet boundary conditions.

Most users will not need to use the global_condensed_dofs_set argument; simply call initialize_condensed_dofs() after any time the EquationSystems (and therefore its constraint equations) gets initialized or reinitialized.

Definition at line 45 of file condensed_eigen_system.C.

References libMesh::CondensedEigenSystem::condensed_dofs_initialized, libMesh::DofMap::end_dof(), libMesh::System::get_dof_map(), libMesh::DofMap::is_constrained_dof(), and libMesh::CondensedEigenSystem::local_non_condensed_dofs_vector.

Referenced by main(), perform_SCM_greedy(), and libMesh::CondensedEigenSystem::system().

46 {
47  const DofMap & dof_map = this->get_dof_map();
48 
49  // First, put all unconstrained local dofs into non_dirichlet_dofs_set
50  std::set<dof_id_type> local_non_condensed_dofs_set;
51  for (dof_id_type i=this->get_dof_map().first_dof(); i<this->get_dof_map().end_dof(); i++)
52  if (!dof_map.is_constrained_dof(i))
53  local_non_condensed_dofs_set.insert(i);
54 
55  // Now erase the condensed dofs
56  std::set<dof_id_type>::iterator iter = global_dirichlet_dofs_set.begin();
57  std::set<dof_id_type>::iterator iter_end = global_dirichlet_dofs_set.end();
58 
59  for ( ; iter != iter_end ; ++iter)
60  {
61  dof_id_type condensed_dof_index = *iter;
62  if ( (this->get_dof_map().first_dof() <= condensed_dof_index) &&
63  (condensed_dof_index < this->get_dof_map().end_dof()) )
64  {
65  local_non_condensed_dofs_set.erase(condensed_dof_index);
66  }
67  }
68 
69  // Finally, move local_non_condensed_dofs_set over to a vector for convenience in solve()
70  iter = local_non_condensed_dofs_set.begin();
71  iter_end = local_non_condensed_dofs_set.end();
72 
73  this->local_non_condensed_dofs_vector.clear();
74 
75  for ( ; iter != iter_end; ++iter)
76  {
77  dof_id_type non_condensed_dof_index = *iter;
78 
79  this->local_non_condensed_dofs_vector.push_back(non_condensed_dof_index);
80  }
81 
83 }
dof_id_type end_dof(const processor_id_type proc) const
Definition: dof_map.h:577
const DofMap & get_dof_map() const
Definition: system.h:2030
std::vector< dof_id_type > local_non_condensed_dofs_vector
Vector storing the local dof indices that will not be condensed.
bool condensed_dofs_initialized
A private flag to indicate whether the condensed dofs have been initialized.
uint8_t dof_id_type
Definition: id_types.h:64
void libMesh::RBParametrized::initialize_parameters ( const RBParameters mu_min_in,
const RBParameters mu_max_in,
const std::map< std::string, std::vector< Real >> &  discrete_parameter_values 
)
inherited

Initialize the parameter ranges and set current_parameters.

Definition at line 60 of file rb_parametrized.C.

References libMesh::RBParametrized::_discrete_parameter_values, libMesh::RBParameters::begin(), libMesh::RBParameters::end(), libMesh::RBParameters::get_value(), libMesh::RBParameters::n_parameters(), libMesh::RBParametrized::parameters_initialized, libMesh::RBParametrized::parameters_max, libMesh::RBParametrized::parameters_min, libMesh::Real, libMesh::RBParametrized::set_parameters(), and libMesh::RBParameters::set_value().

Referenced by libMesh::RBParametrized::initialize_parameters(), libMesh::RBEIMConstruction::initialize_parametrized_functions_in_training_set(), libMesh::RBDataDeserialization::load_parameter_ranges(), perform_SCM_greedy(), process_parameters_file(), libMesh::RBParametrized::read_parameter_data_from_files(), libMesh::RBConstruction::set_rb_construction_parameters(), and libMesh::RBConstruction::train_reduced_basis().

63 {
64  // Check that the min/max vectors are valid
65  {
66  const std::string err_string = "Error: Invalid mu_min/mu_max in RBParameters constructor.";
67  bool valid_min_max = (mu_min_in.n_parameters() == mu_max_in.n_parameters());
68  if (!valid_min_max)
69  libmesh_error_msg(err_string);
70 
71  else
72  {
73  RBParameters::const_iterator it = mu_min_in.begin();
74  RBParameters::const_iterator it_end = mu_min_in.end();
75  for ( ; it != it_end; ++it)
76  {
77  std::string param_name = it->first;
78  if (mu_min_in.get_value(param_name) > mu_max_in.get_value(param_name))
79  libmesh_error_msg(err_string);
80  }
81  }
82  }
83 
84  parameters_min = mu_min_in;
85  parameters_max = mu_max_in;
86 
87  // Add in min/max values due to the discrete parameters
88  {
89  std::map<std::string, std::vector<Real>>::const_iterator it =
90  discrete_parameter_values.begin();
91  const std::map<std::string, std::vector<Real>>::const_iterator it_end =
92  discrete_parameter_values.end();
93  for ( ; it != it_end; ++it)
94  {
95  if (it->second.empty())
96  libmesh_error_msg("Error: List of discrete parameters for " << it->first << " is empty.");
97 
98  Real min_val = *std::min_element(it->second.begin(), it->second.end());
99  Real max_val = *std::max_element(it->second.begin(), it->second.end());
100 
101  libmesh_assert_less_equal(min_val,max_val);
102 
103  parameters_min.set_value(it->first, min_val);
104  parameters_max.set_value(it->first, max_val);
105  }
106 
107  _discrete_parameter_values = discrete_parameter_values;
108  }
109 
110  parameters_initialized = true;
111 
112  // Initialize the current parameters to parameters_min
114 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
RBParameters parameters_min
Vectors that define the ranges (min and max) for the parameters.
void set_parameters(const RBParameters &params)
Set the current parameters to params.
std::map< std::string, std::vector< Real > > _discrete_parameter_values
Map that defines the allowable values of any discrete parameters.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void set_value(const std::string &param_name, Real value)
Set the value of the specified parameter.
Definition: rb_parameters.C:57
const_iterator begin() const
Get a constant iterator to beginning of this RBParameters object.
Definition: rb_parameters.C:80
std::map< std::string, Real >::const_iterator const_iterator
Definition: rb_parameters.h:57
void libMesh::RBParametrized::initialize_parameters ( const RBParametrized rb_parametrized)
inherited

Initialize the parameter ranges and set current_parameters.

Definition at line 116 of file rb_parametrized.C.

References libMesh::RBParametrized::get_discrete_parameter_values(), libMesh::RBParametrized::get_parameters_max(), libMesh::RBParametrized::get_parameters_min(), and libMesh::RBParametrized::initialize_parameters().

117 {
118  initialize_parameters(rb_parametrized.get_parameters_min(),
119  rb_parametrized.get_parameters_max(),
120  rb_parametrized.get_discrete_parameter_values());
121 }
void initialize_parameters(const RBParameters &mu_min_in, const RBParameters &mu_max_in, const std::map< std::string, std::vector< Real >> &discrete_parameter_values)
Initialize the parameter ranges and set current_parameters.
virtual void libMesh::RBConstructionBase< CondensedEigenSystem >::initialize_training_parameters ( const RBParameters mu_min,
const RBParameters mu_max,
unsigned int  n_training_parameters,
std::map< std::string, bool >  log_param_scale,
bool  deterministic = true 
)
virtualinherited

Initialize the parameter ranges and indicate whether deterministic or random training parameters should be used and whether or not we want the parameters to be scaled logarithmically.

Referenced by process_parameters_file().

bool libMesh::System::is_adjoint_already_solved ( ) const
inherited

Accessor for the adjoint_already_solved boolean.

Definition at line 372 of file system.h.

References libMesh::System::adjoint_already_solved.

Referenced by libMesh::ImplicitSystem::adjoint_qoi_parameter_sensitivity(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::AdjointResidualErrorEstimator::estimate_error(), libMesh::ImplicitSystem::qoi_parameter_hessian(), and libMesh::ImplicitSystem::qoi_parameter_hessian_vector_product().

373  { return adjoint_already_solved;}
bool adjoint_already_solved
Has the adjoint problem already been solved? If the user sets adjoint_already_solved to true...
Definition: system.h:1984
bool libMesh::RBParametrized::is_discrete_parameter ( const std::string &  mu_name) const
inherited

Is parameter mu_name discrete?

Definition at line 395 of file rb_parametrized.C.

References libMesh::RBParametrized::_discrete_parameter_values, and libMesh::RBParametrized::parameters_initialized.

Referenced by libMesh::RBDataSerialization::add_parameter_ranges_to_builder(), libMesh::RBConstructionBase< Base >::initialize_training_parameters(), libMesh::RBConstruction::print_info(), libMesh::RBParametrized::valid_params(), and libMesh::RBParametrized::write_parameter_ranges_to_file().

396 {
398  libmesh_error_msg("Error: parameters not initialized in RBParametrized::is_discrete_parameter");
399 
400  return (_discrete_parameter_values.find(mu_name) != _discrete_parameter_values.end());
401 }
bool parameters_initialized
Flag indicating whether the parameters have been initialized.
std::map< std::string, std::vector< Real > > _discrete_parameter_values
Map that defines the allowable values of any discrete parameters.
bool libMesh::System::is_initialized ( )
inherited
Returns
true iff this system has been initialized.

Definition at line 2070 of file system.h.

References libMesh::System::_is_initialized.

Referenced by libMesh::System::add_variable(), libMesh::System::add_variables(), libMesh::System::init(), and libMesh::System::system().

2071 {
2072  return _is_initialized;
2073 }
bool _is_initialized
true when additional vectors and variables do not require immediate initialization, false otherwise.
Definition: system.h:1952
void libMesh::RBSCMConstruction::load_matrix_B ( )
protectedvirtual

Copy over the matrix to store in matrix_B, usually this is the mass or inner-product matrix, but needs to be implemented in subclass.

Definition at line 222 of file rb_scm_construction.C.

References libMesh::System::get_equation_systems(), libMesh::RBConstruction::get_inner_product_matrix(), libMesh::EquationSystems::get_system(), libMesh::EigenSystem::matrix_B, and RB_system_name.

Referenced by attach_deflation_space(), and perform_SCM_greedy().

223 {
224  // Load the operators from the RBConstruction
225  EquationSystems & es = this->get_equation_systems();
226  RBConstruction & rb_system = es.get_system<RBConstruction>(RB_system_name);
227 
228  matrix_B->zero();
229  matrix_B->close();
230  matrix_B->add(1.,*rb_system.get_inner_product_matrix());
231 }
UniquePtr< SparseMatrix< Number > > matrix_B
A second system matrix for generalized eigenvalue problems.
Definition: eigen_system.h:155
std::string RB_system_name
The name of the associated RB system.
const EquationSystems & get_equation_systems() const
Definition: system.h:712
virtual void libMesh::RBConstructionBase< CondensedEigenSystem >::load_training_set ( std::map< std::string, std::vector< Number >> &  new_training_set)
virtualinherited

Overwrite the training parameters with new_training_set.

void libMesh::System::local_dof_indices ( const unsigned int  var,
std::set< dof_id_type > &  var_indices 
) const
inherited

Fills the std::set with the degrees of freedom on the local processor corresponding the the variable number passed in.

Definition at line 1297 of file system.C.

References libMesh::DofMap::dof_indices(), libMesh::DofMap::end_dof(), libMesh::DofMap::first_dof(), libMesh::System::get_dof_map(), and libMesh::System::get_mesh().

Referenced by libMesh::System::discrete_var_norm(), and libMesh::DirectSolutionTransfer::transfer().

1299 {
1300  // Make sure the set is clear
1301  var_indices.clear();
1302 
1303  std::vector<dof_id_type> dof_indices;
1304 
1305  const dof_id_type
1306  first_local = this->get_dof_map().first_dof(),
1307  end_local = this->get_dof_map().end_dof();
1308 
1309  // Begin the loop over the elements
1310  for (const auto & elem : this->get_mesh().active_local_element_ptr_range())
1311  {
1312  this->get_dof_map().dof_indices (elem, dof_indices, var);
1313 
1314  for (std::size_t i=0; i<dof_indices.size(); i++)
1315  {
1316  dof_id_type dof = dof_indices[i];
1317 
1318  //If the dof is owned by the local processor
1319  if (first_local <= dof && dof < end_local)
1320  var_indices.insert(dof_indices[i]);
1321  }
1322  }
1323 }
dof_id_type first_dof(const processor_id_type proc) const
Definition: dof_map.h:535
dof_id_type end_dof(const processor_id_type proc) const
Definition: dof_map.h:577
const MeshBase & get_mesh() const
Definition: system.h:2014
const DofMap & get_dof_map() const
Definition: system.h:2030
uint8_t dof_id_type
Definition: id_types.h:64
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Fills the vector di with the global degree of freedom indices for the element.
Definition: dof_map.C:1917
dof_id_type libMesh::System::n_active_dofs ( ) const
inherited
Returns
The number of active degrees of freedom for this System.

Definition at line 2198 of file system.h.

References libMesh::System::n_constrained_dofs(), and libMesh::System::n_dofs().

Referenced by libMesh::System::project_solution_on_reinit().

2199 {
2200  return this->n_dofs() - this->n_constrained_dofs();
2201 }
dof_id_type n_constrained_dofs() const
Definition: system.C:155