libMesh
Loading...
Searching...
No Matches
transient_rb_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_TRANSIENT_RB_CONSTRUCTION_H
21#define LIBMESH_TRANSIENT_RB_CONSTRUCTION_H
22
23// rbOOmit includes
24#include "libmesh/rb_construction.h"
25#include "libmesh/transient_rb_evaluation.h"
26#include "libmesh/rb_temporal_discretization.h"
27
28// libMesh includes
29#include "libmesh/transient_system.h"
30
31// C++ includes
32
33namespace libMesh
34{
35
49{
50public:
51
57 const std::string & name,
58 const unsigned int number);
59
70
75
80
85 virtual void clear () override;
86
95 virtual void initialize_rb_construction(bool skip_matrix_assembly=false,
96 bool skip_vector_assembly=false) override;
97
101 virtual Real truth_solve(int write_interval) override;
102
110 virtual Real train_reduced_basis(const bool resize_rb_eval_data=true) override;
111
116 virtual void process_parameters_file (const std::string & parameters_filename) override;
117
121 virtual void print_info() const override;
122
127 virtual bool greedy_termination_test(Real abs_greedy_error,
128 Real initial_greedy_error,
129 int count) override;
130
135 virtual void assemble_all_affine_operators() override;
136
140 virtual void assemble_misc_matrices() override;
141
145 void assemble_L2_matrix(SparseMatrix<Number> * input_matrix,
146 bool apply_dirichlet_bc=true);
147
152 void assemble_mass_matrix(SparseMatrix<Number> * input_matrix);
153
158 void add_scaled_mass_matrix(Number scalar,
159 SparseMatrix<Number> * input_matrix);
160
168
172 void set_L2_assembly(ElemAssembly & L2_assembly_in);
173
178
182 void assemble_Mq_matrix(unsigned int q,
183 SparseMatrix<Number> * input_matrix,
184 bool apply_dirichlet_bc=true);
185
189 SparseMatrix<Number> * get_M_q(unsigned int q);
190
195
199 virtual void get_all_matrices(std::map<std::string, SparseMatrix<Number> *> & all_matrices) override;
200
204 virtual void truth_assembly() override;
205
215 void set_max_truth_solves(int max_truth_solves_in) { this->max_truth_solves = max_truth_solves_in; }
216
220 Real get_POD_tol() const { return POD_tol; }
221 void set_POD_tol(const Real POD_tol_in) { this->POD_tol = POD_tol_in; }
222
227 void set_delta_N(const unsigned int new_delta_N) { this->delta_N = new_delta_N; }
228
233 virtual void load_rb_solution() override;
234
242
249
254 virtual void write_riesz_representors_to_files(const std::string & riesz_representors_dir,
255 const bool write_binary_residual_representors) override;
256
261 virtual void read_riesz_representors_from_files(const std::string & riesz_representors_dir,
262 const bool write_binary_residual_representors) override;
263
264
265 //----------- PUBLIC DATA MEMBERS -----------//
266
270 std::unique_ptr<SparseMatrix<Number>> L2_matrix;
271
276 std::unique_ptr<SparseMatrix<Number>> non_dirichlet_L2_matrix;
277
281 std::vector<std::unique_ptr<SparseMatrix<Number>>> M_q_vector;
282
288 std::vector<std::unique_ptr<SparseMatrix<Number>>> non_dirichlet_M_q_vector;
289
294 std::vector<std::vector<Number>> truth_outputs_all_k;
295
301
308
313 std::string init_filename;
314
315protected:
316
321 virtual void allocate_data_structures() override;
322
327 virtual void assemble_affine_expansion(bool skip_matrix_assembly,
328 bool skip_vector_assembly) override;
329
335 virtual void initialize_truth();
336
342
347 void add_IC_to_RB_space();
348
354 virtual void enrich_RB_space() override;
355
359 virtual void update_system() override;
360
364 virtual void update_RB_system_matrices() override;
365
370 virtual void update_residual_terms(bool compute_inner_products) override;
371
378
379 //----------- PROTECTED DATA MEMBERS -----------//
380
387
395
400
406
407private:
408
409 //----------- PRIVATE DATA MEMBERS -----------//
410
414 std::vector<std::unique_ptr<NumericVector<Number>>> temporal_data;
415};
416
417} // namespace libMesh
418
419#endif // LIBMESH_TRANSIENT_RB_CONSTRUCTION_H
Defines a dense vector for use in Finite Element-type computations.
ElemAssembly provides a per-element (interior and boundary) assembly functionality.
This is the EquationSystems class.
Provides a uniform interface to vector storage schemes for different linear algebra libraries.
unsigned int delta_N
The number of basis functions that we add at each greedy step.
Define a class that encapsulates the details of a "generalized Euler" temporal discretization to be u...
Generic sparse matrix.
const std::string & name() const
Definition system.h:2385
unsigned int number() const
Definition system.h:2393
This class is part of the rbOOmit framework.
virtual void truth_assembly() override
Assemble the truth system in the transient linear case.
void assemble_Mq_matrix(unsigned int q, SparseMatrix< Number > *input_matrix, bool apply_dirichlet_bc=true)
Assemble the q^th affine term of the mass matrix and store it in input_matrix.
void update_RB_initial_condition_all_N()
Compute the L2 projection of the initial condition onto the RB space for 1 <= N <= RB_size and store ...
virtual void write_riesz_representors_to_files(const std::string &riesz_representors_dir, const bool write_binary_residual_representors) override
Write out all the Riesz representor data to files.
std::vector< std::vector< Number > > truth_outputs_all_k
The truth outputs for all time-levels from the most recent truth_solve.
std::vector< std::unique_ptr< SparseMatrix< Number > > > non_dirichlet_M_q_vector
We sometimes also need a second set of M_q matrices that do not have the Dirichlet boundary condition...
Real get_POD_tol() const
Get/set POD_tol.
TransientRBConstruction(const TransientRBConstruction &)=delete
const NumericVector< Number > & get_error_temporal_data()
Get the column of temporal_data corresponding to the current time level.
int get_max_truth_solves() const
Get/set max_truth_solves, the maximum number of RB truth solves we are willing to compute in the tran...
virtual Real truth_solve(int write_interval) override
Perform a truth solve at the current parameter.
virtual void update_residual_terms(bool compute_inner_products) override
Compute the terms that are combined ‘online’ to determine the dual norm of the residual.
Number set_error_temporal_data()
Set column k (i.e.
virtual SparseMatrix< Number > & get_matrix_for_output_dual_solves() override
Override to return the L2 product matrix for output dual norm solves for transient state problems.
virtual void read_riesz_representors_from_files(const std::string &riesz_representors_dir, const bool write_binary_residual_representors) override
Write out all the Riesz representor data to files.
std::unique_ptr< SparseMatrix< Number > > L2_matrix
The L2 matrix.
TransientSystem< RBConstruction > Parent
The type of the parent.
TransientRBConstruction(TransientRBConstruction &&)=default
Special functions.
virtual void initialize_rb_construction(bool skip_matrix_assembly=false, bool skip_vector_assembly=false) override
Allocate all the data structures necessary for the construction stage of the RB method.
virtual bool greedy_termination_test(Real abs_greedy_error, Real initial_greedy_error, int count) override
Function that indicates when to terminate the Greedy basis training.
Real POD_tol
If positive, this tolerance determines the number of POD modes we add to the space on a call to enric...
SparseMatrix< Number > * get_non_dirichlet_M_q(unsigned int q)
Get a pointer to non_dirichlet_M_q.
void assemble_mass_matrix(SparseMatrix< Number > *input_matrix)
Assemble the mass matrix at the current parameter and store it in input_matrix.
void assemble_L2_matrix(SparseMatrix< Number > *input_matrix, bool apply_dirichlet_bc=true)
Assemble the L2 matrix.
virtual void initialize_truth()
This function imposes a truth initial condition, defaults to zero initial condition if the flag nonze...
std::vector< std::unique_ptr< SparseMatrix< Number > > > M_q_vector
Vector storing the Q_m matrices from the mass operator.
virtual void clear() override
Clear all the data structures associated with the system.
virtual Real train_reduced_basis(const bool resize_rb_eval_data=true) override
Train the reduced basis.
virtual void print_info() const override
Print out info that describes the current setup of this RBConstruction.
bool compute_truth_projection_error
Boolean flag that indicates whether we will compute the projection error for the truth solution into ...
virtual void enrich_RB_space() override
Add a new basis functions to the RB space.
void add_IC_to_RB_space()
Initialize RB space by adding the truth initial condition as the first RB basis function.
void set_max_truth_solves(int max_truth_solves_in)
virtual void update_system() override
Update the system after enriching the RB space.
virtual void assemble_all_affine_operators() override
Assemble and store all the affine operators.
virtual void assemble_misc_matrices() override
Override to assemble the L2 matrix as well.
std::unique_ptr< SparseMatrix< Number > > non_dirichlet_L2_matrix
The L2 matrix without Dirichlet conditions enforced.
TransientRBConstruction & operator=(const TransientRBConstruction &)=delete
bool nonzero_initialization
Boolean flag to indicate whether we are using a non-zero initialization.
std::string init_filename
The filename of the file containing the initial condition projected onto the truth mesh.
virtual void update_RB_system_matrices() override
Compute the reduced basis matrices for the current basis.
virtual void get_all_matrices(std::map< std::string, SparseMatrix< Number > * > &all_matrices) override
Get a map that stores pointers to all of the matrices.
ElemAssembly * L2_assembly
Function pointer for assembling the L2 matrix.
virtual void load_rb_solution() override
Load the RB solution from the current time-level into the libMesh solution vector.
SparseMatrix< Number > * get_M_q(unsigned int q)
Get a pointer to M_q.
DenseVector< Number > RB_ic_proj_rhs_all_N
The vector that stores the right-hand side for the initial condition projections.
void set_delta_N(const unsigned int new_delta_N)
Set delta_N, the number of basis functions we add to the RB space from each POD.
std::vector< std::unique_ptr< NumericVector< Number > > > temporal_data
Dense matrix to store the data that we use for the temporal POD.
TransientRBConstruction sys_type
The type of system.
void mass_matrix_scaled_matvec(Number scalar, NumericVector< Number > &dest, NumericVector< Number > &arg)
Perform a matrix-vector multiplication with the current mass matrix and store the result in dest.
int max_truth_solves
Maximum number of truth solves in the POD-Greedy.
virtual void process_parameters_file(const std::string &parameters_filename) override
Read in the parameters from file and set up the system accordingly.
void add_scaled_mass_matrix(Number scalar, SparseMatrix< Number > *input_matrix)
Add the scaled mass matrix (assembled for the current parameter) to input_matrix.
void set_L2_assembly(ElemAssembly &L2_assembly_in)
Set the L2 object.
virtual void allocate_data_structures() override
Helper function that actually allocates all the data structures required by this class.
virtual void assemble_affine_expansion(bool skip_matrix_assembly, bool skip_vector_assembly) override
Override assemble_affine_expansion to also initialize RB_ic_proj_rhs_all_N, if necessary.
Manages storage and variables for transient systems.
The libMesh namespace provides an interface to certain functionality in the library.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real