libMesh
Loading...
Searching...
No Matches
rb_scm_construction.h
Go to the documentation of this file.
1// rbOOmit: An implementation of the Certified Reduced Basis method.
2// Copyright (C) 2009, 2010 David J. Knezevic
3
4// This file is part of rbOOmit.
5
6// rbOOmit is free software; you can redistribute it and/or
7// modify it under the terms of the GNU Lesser General Public
8// License as published by the Free Software Foundation; either
9// version 2.1 of the License, or (at your option) any later version.
10
11// rbOOmit is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// Lesser General Public License for more details.
15
16// You should have received a copy of the GNU Lesser General Public
17// License along with this library; if not, write to the Free Software
18// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
20#ifndef LIBMESH_RB_SCM_CONSTRUCTION_H
21#define LIBMESH_RB_SCM_CONSTRUCTION_H
22
23// Configuration data
24#include "libmesh/libmesh_config.h"
25
26// Currently, the RBSCMConstruction is only usable
27// if SLEPc is enabled.
28#if defined(LIBMESH_HAVE_SLEPC) && (LIBMESH_HAVE_GLPK)
29
30// rbOOmit includes
31#include "libmesh/rb_construction_base.h"
32
33// libMesh includes
34#include "libmesh/condensed_eigen_system.h"
35
36// C++ includes
37
38namespace libMesh
39{
40
41// Forward declarations
42class RBSCMEvaluation;
43
53class RBSCMConstruction : public RBConstructionBase<CondensedEigenSystem>
54{
55public:
56
62 const std::string & name_in,
63 const unsigned int number_in);
64
75
80
85
90 virtual void clear () override;
91
95 void set_rb_scm_evaluation(RBSCMEvaluation & rb_scm_eval_in);
96
101
106
111 virtual void resize_SCM_vectors ();
112
117 virtual void process_parameters_file(const std::string & parameters_filename);
118
122 virtual void print_info();
123
133 virtual void set_eigensolver_properties(int) {}
134
139 void set_RB_system_name(const std::string & new_name)
140 { RB_system_name = new_name; }
141
146 void set_SCM_training_tolerance(Real SCM_training_tolerance_in) { this->SCM_training_tolerance = SCM_training_tolerance_in; }
147
152 virtual void perform_SCM_greedy();
153
162 virtual void attach_deflation_space() {}
163
164protected:
165
170 virtual void add_scaled_symm_Aq(unsigned int q_a, Number scalar);
171
177 virtual void load_matrix_B();
178
182 virtual void compute_SCM_bounding_box();
183
189 virtual void evaluate_stability_constant();
190
195 virtual void enrich_C_J(unsigned int new_C_J_index);
196
203 virtual std::pair<unsigned int,Real> compute_SCM_bounds_on_training_set();
204
210
215 Number Aq_inner_product(unsigned int q,
216 const NumericVector<Number> & v,
217 const NumericVector<Number> & w);
218
224 virtual Real SCM_greedy_error_indicator(Real LB, Real UB) { return fabs(UB-LB)/fabs(UB); }
225
226 //----------- PROTECTED DATA MEMBERS -----------//
227
232
236 std::string RB_system_name;
237
238private:
239
245};
246
247} // namespace libMesh
248
249#endif // LIBMESH_HAVE_SLEPC && LIBMESH_HAVE_GLPK
250
251#endif // LIBMESH_RB_SCM_CONSTRUCTION_H
This is the EquationSystems class.
Provides a uniform interface to vector storage schemes for different linear algebra libraries.
This class is part of the rbOOmit framework.
This class is part of the rbOOmit framework.
void set_rb_scm_evaluation(RBSCMEvaluation &rb_scm_eval_in)
Set the RBSCMEvaluation object.
virtual void print_info()
Print out info that describes the current setup of this RBSCMConstruction.
virtual void compute_SCM_bounding_box()
Compute the SCM bounding box.
RBConstructionBase< CondensedEigenSystem > Parent
The type of the parent.
virtual void load_matrix_B()
Copy over the matrix to store in matrix_B, usually this is the mass or inner-product matrix,...
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.
virtual Real SCM_greedy_error_indicator(Real LB, Real UB)
Helper function which provides an error indicator to be used in the SCM greedy.
virtual void attach_deflation_space()
Attach the deflation space defined by the specified vector, can be useful in solving constrained eige...
virtual void set_eigensolver_properties(int)
This function is called before truth eigensolves in compute_SCM_bounding_box and evaluate_stability_c...
std::string RB_system_name
The name of the associated RB system.
RBSCMConstruction(RBSCMConstruction &&)=default
Special functions.
Real get_SCM_training_tolerance() const
Get/set SCM_training_tolerance: tolerance for SCM greedy.
RBSCMConstruction & operator=(const RBSCMConstruction &)=delete
RBSCMEvaluation & get_rb_scm_evaluation()
Get a reference to the RBSCMEvaluation object.
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 va...
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.
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.
RBSCMConstruction sys_type
The type of system.
void set_SCM_training_tolerance(Real SCM_training_tolerance_in)
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 an...
RBSCMConstruction(const RBSCMConstruction &)=delete
virtual void perform_SCM_greedy()
Perform the SCM greedy algorithm to develop a lower bound over the training set.
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.
virtual std::pair< unsigned int, Real > compute_SCM_bounds_on_training_set()
Compute upper and lower bounds for each SCM training point.
virtual void evaluate_stability_constant()
Compute the stability constant for current_parameters by solving a generalized eigenvalue problem ove...
RBThetaExpansion & get_rb_theta_expansion()
Get a reference to the RBThetaExpansion object.
virtual void clear() override
Clear all the data structures associated with the system.
virtual void resize_SCM_vectors()
Clear and resize the SCM data vectors.
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.
This class is part of the rbOOmit framework.
This class stores the set of RBTheta functor objects that define the "parameter-dependent expansion" ...
The libMesh namespace provides an interface to certain functionality in the library.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real