preCICE v3.1.2
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
precice::acceleration::impl::ResidualSumPreconditioner Class Reference

Preconditioner that uses the residuals of all iterations of the current time window summed up to scale the quasi-Newton system. This is somewhat similar to what is done in the Marks and Luke paper. More...

#include <ResidualSumPreconditioner.hpp>

Inheritance diagram for precice::acceleration::impl::ResidualSumPreconditioner:
[legend]
Collaboration diagram for precice::acceleration::impl::ResidualSumPreconditioner:
[legend]

Public Member Functions

 ResidualSumPreconditioner (int maxNonConstTimeWindows)
 
virtual ~ResidualSumPreconditioner ()
 Destructor, empty.
 
virtual void initialize (std::vector< size_t > &svs)
 initialize the preconditioner
 
- Public Member Functions inherited from precice::acceleration::impl::Preconditioner
 Preconditioner (int maxNonConstTimeWindows)
 
virtual ~Preconditioner ()
 Destructor, empty.
 
void apply (Eigen::MatrixXd &M, bool transpose)
 Apply preconditioner to matrix.
 
void revert (Eigen::MatrixXd &M, bool transpose)
 Apply inverse preconditioner to matrix.
 
void apply (Eigen::MatrixXd &M)
 To transform physical values to balanced values. Matrix version.
 
void apply (Eigen::VectorXd &v)
 To transform physical values to balanced values. Vector version.
 
void revert (Eigen::MatrixXd &M)
 To transform balanced values back to physical values. Matrix version.
 
void revert (Eigen::VectorXd &v)
 To transform balanced values back to physical values. Vector version.
 
void update (bool timeWindowComplete, const Eigen::VectorXd &oldValues, const Eigen::VectorXd &res)
 Update the scaling after every FSI iteration and require a new QR decomposition (if necessary)
 
bool requireNewQR ()
 returns true if a QR decomposition from scratch is necessary
 
void newQRfulfilled ()
 to tell the preconditioner that QR-decomposition has been recomputed
 
std::vector< double > & getWeights ()
 
bool isConst ()
 

Private Member Functions

virtual void _update_ (bool timeWindowComplete, const Eigen::VectorXd &oldValues, const Eigen::VectorXd &res)
 Update the scaling after every FSI iteration.
 

Private Attributes

logging::Logger _log {"acceleration::ResidualSumPreconditioner"}
 
std::vector< double > _residualSum
 

Additional Inherited Members

- Protected Attributes inherited from precice::acceleration::impl::Preconditioner
std::vector< double > _weights
 Weights used to scale the matrix V and the residual.
 
std::vector< double > _invWeights
 Inverse weights (for efficiency reasons)
 
std::vector< size_t > _subVectorSizes
 Sizes of each sub-vector, i.e. each coupling data.
 
int _maxNonConstTimeWindows
 maximum number of non-const time windows, i.e., after this number of time windows, the preconditioner is frozen with the current weights and becomes a constant preconditioner
 
int _nbNonConstTimeWindows = 0
 Counts the number of completed time windows with a non-const weighting.
 
bool _requireNewQR = false
 True if a QR decomposition from scratch is necessary.
 
bool _frozen = false
 True if _nbNonConstTimeWindows >= _maxNonConstTimeWindows, i.e., preconditioner is not updated any more.
 

Detailed Description

Preconditioner that uses the residuals of all iterations of the current time window summed up to scale the quasi-Newton system. This is somewhat similar to what is done in the Marks and Luke paper.

Definition at line 18 of file ResidualSumPreconditioner.hpp.

Constructor & Destructor Documentation

◆ ResidualSumPreconditioner()

precice::acceleration::impl::ResidualSumPreconditioner::ResidualSumPreconditioner ( int maxNonConstTimeWindows)

Definition at line 11 of file ResidualSumPreconditioner.cpp.

◆ ~ResidualSumPreconditioner()

virtual precice::acceleration::impl::ResidualSumPreconditioner::~ResidualSumPreconditioner ( )
inlinevirtual

Destructor, empty.

Definition at line 24 of file ResidualSumPreconditioner.hpp.

Member Function Documentation

◆ _update_()

void precice::acceleration::impl::ResidualSumPreconditioner::_update_ ( bool timeWindowComplete,
const Eigen::VectorXd & oldValues,
const Eigen::VectorXd & res )
privatevirtual

Update the scaling after every FSI iteration.

Parameters
[in]timeWindowCompleteTrue if this FSI iteration also completed a time window

Implements precice::acceleration::impl::Preconditioner.

Definition at line 25 of file ResidualSumPreconditioner.cpp.

Here is the call graph for this function:

◆ initialize()

void precice::acceleration::impl::ResidualSumPreconditioner::initialize ( std::vector< size_t > & svs)
virtual

initialize the preconditioner

Parameters
sizeof the pp system (e.g. rows of V)

Reimplemented from precice::acceleration::impl::Preconditioner.

Definition at line 17 of file ResidualSumPreconditioner.cpp.

Here is the call graph for this function:

Member Data Documentation

◆ _log

logging::Logger precice::acceleration::impl::ResidualSumPreconditioner::_log {"acceleration::ResidualSumPreconditioner"}
private

Definition at line 36 of file ResidualSumPreconditioner.hpp.

◆ _residualSum

std::vector<double> precice::acceleration::impl::ResidualSumPreconditioner::_residualSum
private

Definition at line 38 of file ResidualSumPreconditioner.hpp.


The documentation for this class was generated from the following files: