28 double initialRelaxation,
29 bool forceInitialRelaxation,
30 int maxIterationsUsed,
31 int pastTimeWindowsReused,
33 double singularityLimit,
37 :
BaseQNAcceleration(initialRelaxation, forceInitialRelaxation, maxIterationsUsed, pastTimeWindowsReused,
38 filter, singularityLimit,
std::move(dataIDs),
std::move(preconditioner), reducedTimeGrid)
59 auto Q =
_qrV.matrixQ();
60 auto R =
_qrV.matrixR();
68 Eigen::VectorXd _local_b = Eigen::VectorXd::Zero(
_qrV.cols());
69 Eigen::VectorXd _global_b;
80 utils::append(c, Eigen::VectorXd(Eigen::VectorXd::Zero(_local_b.size())));
86 c = R.triangularView<Eigen::Upper>().solve<Eigen::OnTheLeft>(_local_b);
98 utils::append(_global_b, Eigen::VectorXd(Eigen::VectorXd::Zero(_local_b.size())));
105 c = R.triangularView<Eigen::Upper>().solve<Eigen::OnTheLeft>(_global_b);
#define PRECICE_WARN(...)
#define PRECICE_DEBUG(...)
#define PRECICE_TRACE(...)
#define PRECICE_ASSERT(...)
std::map< int, cplscheme::PtrCouplingData > DataMap
Map from data ID to data values.
virtual void updateDifferenceMatrices(const DataMap &cplData)
Updates the V, W matrices (as well as the matrices for the secondary data)
int getLSSystemCols() const
: computes number of cols in least squares system, i.e, number of cols in _matrixV,...
Eigen::VectorXd _primaryResiduals
Current iteration residuals of primary IQN data. Temporary.
bool _hasNodesOnInterface
Eigen::MatrixXd _matrixV
Stores residual deltas.
virtual void removeMatrixColumn(int columnIndex)
Removes one iteration from V,W matrices and adapts _matrixCols.
Eigen::MatrixXd _matrixW
Stores x tilde deltas, where x tilde are values computed by solvers.
BaseQNAcceleration(double initialRelaxation, bool forceInitialRelaxation, int maxIterationsUsed, int timeWindowsReused, int filter, double singularityLimit, std::vector< int > dataIDs, impl::PtrPreconditioner preconditioner, bool reducedTimeGrid)
std::deque< int > _matrixCols
Indices (of columns in W, V matrices) of 1st iterations of time windows.
impl::PtrPreconditioner _preconditioner
Preconditioner for least-squares system if vectorial system is used.
impl::QRFactorization _qrV
Stores the current QR decomposition ov _matrixV, can be updated via deletion/insertion of columns.
IQNILSAcceleration(double initialRelaxation, bool forceInitialRelaxation, int maxIterationsUsed, int pastTimeWindowsReused, int filter, double singularityLimit, std::vector< int > dataIDs, impl::PtrPreconditioner preconditioner, bool reducedTimeGrid)
void specializedIterationsConverged(const DataMap &cplData) override
Marks a iteration sequence as converged.
void removeMatrixColumn(int columnIndex) override
Removes one iteration from V,W matrices and adapts _matrixCols.
void computeQNUpdate(Eigen::VectorXd &xUpdate) override
computes the IQN-ILS update using QR decomposition
void updateDifferenceMatrices(const DataMap &cplData) override
updates the V, W matrices (as well as the matrices for the secondary data)
static bool isPrimary()
True if this process is running the primary rank.
static void broadcast(bool &value)
static bool isParallel()
True if this process is running in parallel.
static com::PtrCommunication & getCommunication()
Intra-participant communication.
static void reduceSum(precice::span< const double > sendData, precice::span< double > rcvData)
std::shared_ptr< Preconditioner > PtrPreconditioner
contains implementations of acceleration schemes.
std::shared_ptr< CouplingData > PtrCouplingData
void append(Eigen::VectorXd &v, double value)