libMesh
Loading...
Searching...
No Matches
rb_evaluation.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_EVALUATION_H
21#define LIBMESH_RB_EVALUATION_H
22
23// rbOOmit includes
24#include "libmesh/rb_parametrized.h"
25
26// libMesh includes
27#include "libmesh/dense_matrix.h"
28#include "libmesh/dense_vector.h"
29#include "libmesh/parallel_object.h"
30
31// C++ includes
32#include <memory>
33
34namespace libMesh
35{
36
37class System;
38template <typename T> class NumericVector;
39class RBThetaExpansion;
40
51 public ParallelObject
52{
53public:
54
59
66 RBEvaluation (RBEvaluation &&) = default;
67 RBEvaluation (const RBEvaluation &) = delete;
70 virtual ~RBEvaluation ();
71
76 virtual void clear() override;
77
81 void set_rb_theta_expansion(RBThetaExpansion & rb_theta_expansion_in);
82
88
93
100 virtual void resize_data_structures(const unsigned int Nmax,
101 bool resize_error_bound_data=true);
102
107 const NumericVector<Number> & get_basis_function(unsigned int i) const;
108
118 virtual Real rb_solve(unsigned int N);
119
124 virtual Real rb_solve(unsigned int N,
125 const std::vector<Number> * evaluated_thetas);
126
132
137 virtual Real compute_residual_dual_norm(const unsigned int N);
138
143 virtual Real compute_residual_dual_norm(const unsigned int N,
144 const std::vector<Number> * evaluated_thetas);
145
151 virtual Real residual_scaling_denom(Real alpha_LB);
152
158 Real eval_output_dual_norm(unsigned int n, const std::vector<Number> * evaluated_thetas);
159
165
169 virtual unsigned int get_n_basis_functions() const
170 { return cast_int<unsigned int>(basis_functions.size()); }
171
176 virtual void set_n_basis_functions(unsigned int n_bfs);
177
183 virtual void clear_riesz_representors();
184
191 virtual void legacy_write_offline_data_to_files(const std::string & directory_name = "offline_data",
192 const bool write_binary_data=true);
193
200 virtual void legacy_read_offline_data_from_files(const std::string & directory_name = "offline_data",
201 bool read_error_bound_data=true,
202 const bool read_binary_data=true);
203
211 virtual void write_out_basis_functions(System & sys,
212 const std::string & directory_name = "offline_data",
213 const bool write_binary_basis_functions = true);
214
219 static void write_out_vectors(System & sys,
220 std::vector<NumericVector<Number>*> & vectors,
221 const std::string & directory_name = "offline_data",
222 const std::string & data_name = "bf",
223 const bool write_binary_basis_functions = true);
224
232 virtual void read_in_basis_functions(System & sys,
233 const std::string & directory_name = "offline_data",
234 const bool read_binary_basis_functions = true);
235
241 static void read_in_vectors(System & sys,
242 std::vector<std::unique_ptr<NumericVector<Number>>> & vectors,
243 const std::string & directory_name,
244 const std::string & data_name,
245 const bool read_binary_vectors);
246
254 std::vector<std::vector<std::unique_ptr<NumericVector<Number>>> *> multiple_vectors,
255 const std::vector<std::string> & multiple_directory_names,
256 const std::vector<std::string> & multiple_data_names,
257 const bool read_binary_vectors);
258
259 //----------- PUBLIC DATA MEMBERS -----------//
260
265 std::vector<std::unique_ptr<NumericVector<Number>>> basis_functions;
266
271 std::vector<RBParameters> greedy_param_list;
272
280
284 std::vector<DenseMatrix<Number>> RB_Aq_vector;
285
289 std::vector<DenseVector<Number>> RB_Fq_vector;
290
295
299 std::vector<std::vector<DenseVector<Number>>> RB_output_vectors;
300
305 std::vector<Number > RB_outputs;
306 std::vector<Real > RB_output_error_bounds;
307
314 std::vector<Number> Fq_representor_innerprods;
315
323 std::vector<std::vector<std::vector<Number>>> Fq_Aq_representor_innerprods;
324 std::vector<std::vector<std::vector<Number>>> Aq_Aq_representor_innerprods;
325
332 std::vector<std::vector<Number >> output_dual_innerprods;
333
340 std::vector<std::vector<std::unique_ptr<NumericVector<Number>>>> Aq_representor;
341
347
352
353protected:
354
358 static void assert_file_exists(const std::string & file_name);
359
360private:
361
369
375 void check_evaluated_thetas_size(const std::vector<Number> * evaluated_thetas) const;
376};
377
378}
379
380#endif // LIBMESH_RB_EVALUATION_H
Defines a dense matrix for use in Finite Element-type computations.
Defines a dense vector for use in Finite Element-type computations.
Provides a uniform interface to vector storage schemes for different linear algebra libraries.
An object whose state is distributed along a set of processors.
const Parallel::Communicator & comm() const
This class is part of the rbOOmit framework.
NumericVector< Number > & get_basis_function(unsigned int i)
Get a reference to the i^th basis function.
virtual Real residual_scaling_denom(Real alpha_LB)
Specifies the residual scaling on the denominator to be used in the a posteriori error bound.
DenseMatrix< Number > RB_inner_product_matrix
The inner product matrix.
virtual void legacy_write_offline_data_to_files(const std::string &directory_name="offline_data", const bool write_binary_data=true)
Write out all the data to text files in order to segregate the Offline stage from the Online stage.
RBThetaExpansion * rb_theta_expansion
A pointer to to the object that stores the theta expansion.
std::vector< Number > Fq_representor_innerprods
Vectors storing the residual representor inner products to be used in computing the residuals online.
std::vector< std::unique_ptr< NumericVector< Number > > > basis_functions
The libMesh vectors storing the finite element coefficients of the RB basis functions.
static void write_out_vectors(System &sys, std::vector< NumericVector< Number > * > &vectors, const std::string &directory_name="offline_data", const std::string &data_name="bf", const bool write_binary_basis_functions=true)
Same as write_out_basis_functions, except in this case we pass in the vectors to be written.
std::vector< Real > RB_output_error_bounds
virtual void resize_data_structures(const unsigned int Nmax, bool resize_error_bound_data=true)
Resize and clear the data vectors corresponding to the value of Nmax.
virtual Real rb_solve(unsigned int N)
Perform online solve with the N RB basis functions, for the set of parameters in current_params,...
bool compute_RB_inner_product
Boolean flag to indicate whether we compute the RB_inner_product_matrix.
std::vector< std::vector< std::unique_ptr< NumericVector< Number > > > > Aq_representor
Vector storing the residual representors associated with the left-hand side.
void set_rb_theta_expansion(RBThetaExpansion &rb_theta_expansion_in)
Set the RBThetaExpansion object.
virtual Real get_stability_lower_bound()
Get a lower bound for the stability constant (e.g.
virtual void set_n_basis_functions(unsigned int n_bfs)
Set the number of basis functions.
virtual Real get_error_bound_normalization()
bool evaluate_RB_error_bound
Boolean to indicate whether we evaluate a posteriori error bounds when rb_solve is called.
std::vector< std::vector< std::vector< Number > > > Aq_Aq_representor_innerprods
bool is_rb_theta_expansion_initialized() const
RBEvaluation(const RBEvaluation &)=delete
virtual unsigned int get_n_basis_functions() const
Get the current number of basis functions.
std::vector< std::vector< std::vector< Number > > > Fq_Aq_representor_innerprods
Vectors storing the residual representor inner products to be used in computing the residuals online.
std::vector< std::vector< DenseVector< Number > > > RB_output_vectors
The vectors storing the RB output vectors.
Real eval_output_dual_norm(unsigned int n, const std::vector< Number > *evaluated_thetas)
Evaluate the dual norm of output n for the current parameters, or using the pre-evaluted theta values...
RBThetaExpansion & get_rb_theta_expansion()
Get a reference to the rb_theta_expansion.
RBEvaluation(RBEvaluation &&)=default
Special functions.
std::vector< RBParameters > greedy_param_list
The list of parameters selected by the Greedy algorithm in generating the Reduced Basis associated wi...
virtual void clear_riesz_representors()
Clear all the Riesz representors that are used to compute the RB residual (and hence error bound).
std::vector< std::vector< Number > > output_dual_innerprods
The vector storing the dual norm inner product terms for each output.
void check_evaluated_thetas_size(const std::vector< Number > *evaluated_thetas) const
For interfaces like rb_solve() and compute_residual_dual_norm() that optinally take a vector of "pre-...
static void read_in_vectors_from_multiple_files(System &sys, std::vector< std::vector< std::unique_ptr< NumericVector< Number > > > * > multiple_vectors, const std::vector< std::string > &multiple_directory_names, const std::vector< std::string > &multiple_data_names, const bool read_binary_vectors)
Performs read_in_vectors for a list of directory names and data names.
std::vector< Number > RB_outputs
The vectors storing the RB output values and corresponding error bounds.
static void assert_file_exists(const std::string &file_name)
Helper function that checks if file_name exists.
virtual Real compute_residual_dual_norm(const unsigned int N)
Compute the dual norm of the residual for the solution saved in RB_solution_vector.
static void read_in_vectors(System &sys, std::vector< std::unique_ptr< NumericVector< Number > > > &vectors, const std::string &directory_name, const std::string &data_name, const bool read_binary_vectors)
Same as read_in_basis_functions, except in this case we pass in the vectors to be written.
virtual void clear() override
Clear this RBEvaluation object.
virtual void write_out_basis_functions(System &sys, const std::string &directory_name="offline_data", const bool write_binary_basis_functions=true)
Write out all the basis functions to file.
RBEvaluation & operator=(const RBEvaluation &)=delete
virtual void read_in_basis_functions(System &sys, const std::string &directory_name="offline_data", const bool read_binary_basis_functions=true)
Read in all the basis functions from file.
std::vector< DenseVector< Number > > RB_Fq_vector
Dense vector for the RHS.
DenseVector< Number > RB_solution
The RB solution vector.
virtual void legacy_read_offline_data_from_files(const std::string &directory_name="offline_data", bool read_error_bound_data=true, const bool read_binary_data=true)
Read in the saved Offline reduced basis data to initialize the system for Online solves.
std::vector< DenseMatrix< Number > > RB_Aq_vector
Dense matrices for the RB computations.
This class is part of the rbOOmit framework.
This class stores the set of RBTheta functor objects that define the "parameter-dependent expansion" ...
Manages consistently variables, degrees of freedom, and coefficient vectors.
Definition system.h:100
The libMesh namespace provides an interface to certain functionality in the library.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real