3#include <boost/range/adaptor/map.hpp>
32 "Initial relaxation factor for Aitken acceleration has to "
33 "be larger than zero and smaller or equal to one. "
34 "Current initial relaxation is: {}",
52 _values = Eigen::VectorXd::Zero(entries);
111 const DataMap &cplData,
double windowStart)
121 const DataMap &cplData,
const std::vector<DataID> &dataIDs, Eigen::VectorXd &targetValues, Eigen::VectorXd &targetOldValues,
double windowStart,
double windowEnd)
const
123 Eigen::Index offset = 0;
125 for (
auto id : dataIDs) {
126 Eigen::Index size = cplData.
at(
id)->getSize();
128 auto valuesSample = cplData.
at(
id)->timeStepsStorage().sample(windowEnd);
129 auto oldValuesSample = cplData.
at(
id)->getPreviousValuesAtTime(windowEnd);
131 PRECICE_ASSERT(valuesSample.values().size() == size, valuesSample.values().size(), size);
132 PRECICE_ASSERT(oldValuesSample.values().size() == size, oldValuesSample.values().size(), size);
133 PRECICE_ASSERT(targetValues.size() >= offset + size,
"Target vector was not initialized.", targetValues.size(), offset + size);
134 PRECICE_ASSERT(targetOldValues.size() >= offset + size,
"Target vector was not initialized.");
135 for (Eigen::Index i = 0; i < size; i++) {
136 targetValues(i + offset) = valuesSample.values()(i);
137 targetOldValues(i + offset) = oldValuesSample.values()(i);
#define PRECICE_DEBUG(...)
#define PRECICE_TRACE(...)
#define PRECICE_CHECK(check,...)
#define PRECICE_ASSERT(...)
T back_inserter(T... args)
static void applyRelaxation(double omega, DataMap &cplData, double windowStart)
performs a relaxation given a relaxation factor omega
void checkDataIDs(const DataMap &cplData) const
Checks if all dataIDs are contained in cplData.
std::map< int, cplscheme::PtrCouplingData > DataMap
Map from data ID to data values.
Eigen::VectorXd _oldResiduals
void performAcceleration(DataMap &cpldata, double windowStart, double windowEnd) final override
void initialize(const DataMap &cpldata) final override
const double _initialRelaxation
const std::vector< int > _primaryDataIDs
AitkenAcceleration(double initialRelaxationFactor, std::vector< int > dataIDs, impl::PtrPreconditioner preconditioner)
void concatenateCouplingData(const DataMap &cplData, const std::vector< DataID > &dataIDs, Eigen::VectorXd &targetValues, Eigen::VectorXd &targetOldValues, double windowStart, double windowEnd) const
Concatenates the data and old data in cplData into two long vectors.
Eigen::VectorXd _oldValues
impl::PtrPreconditioner _preconditioner
Preconditioner for data vector if multiple data sets are used.
void iterationsConverged(const DataMap &cpldata, double windowStart) final override
static double dot(const Eigen::VectorXd &vec1, const Eigen::VectorXd &vec2)
std::shared_ptr< Preconditioner > PtrPreconditioner
contains implementations of acceleration schemes.
int sign(double number)
Return the sign, one of {-1, 0, 1}.
bool contained(const ELEMENT_T &element, const std::vector< ELEMENT_T > &vec)
Returns true, if given element is in vector, otherwise false.