https://mooseframework.inl.gov
PODMapping.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include "VariableMappingBase.h"
14 #include "UserObjectInterface.h"
15 
16 #include <slepcsvd.h>
17 #include "POD.h"
18 
24 {
25 public:
28 
29  virtual void buildMapping(const VariableName & vname) override;
30 
38  void map(const VariableName & vname,
39  const DenseVector<Real> & full_order_vector,
40  std::vector<Real> & reduced_order_vector) const override;
41 
50  void map(const VariableName & vname,
51  const unsigned int global_sample_i,
52  std::vector<Real> & reduced_order_vector) const override;
53 
61  void inverse_map(const VariableName & vname,
62  const std::vector<Real> & reduced_order_vector,
63  DenseVector<Real> & full_order_vector) const override;
64 
69  const std::vector<DenseVector<Real>> & leftBasis(const VariableName & vname);
70 
75  const std::vector<DenseVector<Real>> & rightBasis(const VariableName & vname);
76 
81  const std::vector<Real> & singularValues(const VariableName & vname);
82 
88  const DenseVector<Real> & leftBasisFunction(const VariableName & vname,
89  const unsigned int base_i);
90 
96  const DenseVector<Real> & rightBasisFunction(const VariableName & vname,
97  const unsigned int base_i);
98 
99 protected:
101  const std::vector<dof_id_type> _num_modes;
102 
104  const std::vector<Real> & _energy_threshold;
105 
107  std::map<VariableName, std::vector<DenseVector<Real>>> & _left_basis_functions;
108 
110  std::map<VariableName, std::vector<DenseVector<Real>>> & _right_basis_functions;
111 
113  std::map<VariableName, std::vector<Real>> & _singular_values;
114 
116  const std::string & _extra_slepc_options;
117 
118 private:
121 
124 };
const std::vector< Real > & singularValues(const VariableName &vname)
Return all of the singular values for a given variable.
Definition: PODMapping.C:263
const std::vector< DenseVector< Real > > & leftBasis(const VariableName &vname)
Return all of the left basis functions for a given variable.
Definition: PODMapping.C:241
static InputParameters validParams()
Definition: PODMapping.C:18
std::map< VariableName, std::vector< DenseVector< Real > > > & _left_basis_functions
Restartable container holding the basis functions for each variable.
Definition: PODMapping.h:107
virtual void buildMapping(const VariableName &vname) override
Abstract function for building mapping for a given variable.
Definition: PODMapping.C:100
Class which computes a Proper Orthogonal Decomposition (POD) for snapshots stored in ParallelSolution...
Definition: POD.h:25
PODMapping(const InputParameters &parameters)
Definition: PODMapping.C:45
std::map< VariableName, std::vector< Real > > & _singular_values
Restartable container holding the singular values.
Definition: PODMapping.h:113
const std::string & _extra_slepc_options
Variable holding additional petsc options for the singular value solve.
Definition: PODMapping.h:116
void inverse_map(const VariableName &vname, const std::vector< Real > &reduced_order_vector, DenseVector< Real > &full_order_vector) const override
Method used for mapping reduced-order solutions for a given variable onto the full-order space...
Definition: PODMapping.C:181
const std::vector< dof_id_type > _num_modes
The number of modes which need to be computed.
Definition: PODMapping.h:101
const ParallelSolutionStorage *const _parallel_storage
Link to the parallel storage which holds the solution fields that are used for the SVD...
Definition: PODMapping.h:120
void map(const VariableName &vname, const DenseVector< Real > &full_order_vector, std::vector< Real > &reduced_order_vector) const override
Method used for mapping full-order solutions for a given variable onto a latent space.
Definition: PODMapping.C:163
const DenseVector< Real > & rightBasisFunction(const VariableName &vname, const unsigned int base_i)
Get the base_i-th right basis function for a given variable.
Definition: PODMapping.C:225
std::map< VariableName, std::vector< DenseVector< Real > > > & _right_basis_functions
Restartable container holding the basis functions for each variable.
Definition: PODMapping.h:110
Class which provides a Proper Orthogonal Decomposition (POD)-based mapping between full-order and red...
Definition: PODMapping.h:23
const InputParameters & parameters() const
const DenseVector< Real > & leftBasisFunction(const VariableName &vname, const unsigned int base_i)
Get the base_i-th left basis function for a given variable.
Definition: PODMapping.C:209
This is an abstract base class for objects that provide mapping between a full-order and a latent spa...
const std::vector< DenseVector< Real > > & rightBasis(const VariableName &vname)
Return all of the right basis functions for a given variable.
Definition: PODMapping.C:252
const StochasticTools::POD _pod
The POD object which can be used to compute the basis functions/vectors.
Definition: PODMapping.h:123
A Reporter which stores serialized solution fields for given variables in a distributed fashion...
const std::vector< Real > & _energy_threshold
The energy thresholds for truncation of the number of modes, defined by the user. ...
Definition: PODMapping.h:104