11 result.
_timeSteps = data.timeStepsStorage().nTimes();
14 if (data.hasGradient()) {
42 if (data.hasGradient()) {
43 _gradients = Eigen::VectorXd(
_timeSteps * data.getSize() * data.meshDimensions() * data.getDimensions());
49 const int nValues = data.getSize();
51 for (
const auto &stample : data.stamples()) {
52 const Eigen::VectorXd &slice = stample.sample.values;
53 for (
int valueId = 0; valueId < nValues; valueId++) {
63 for (
const auto &stample : data.stamples()) {
64 const Eigen::VectorXd &slice = Eigen::VectorXd::Map(stample.sample.gradients.data(), data.gradientsRows() * data.gradientsCols());
65 for (
int valueId = 0; valueId < slice.size(); valueId++) {
76 data.timeStepsStorage().clear();
78 const auto dataDims = data.getDimensions();
80 for (
int timeId = 0; timeId < static_cast<int>(timeStamps.
size()); timeId++) {
81 const double time = timeStamps[timeId];
83 Eigen::VectorXd slice(data.getSize());
84 for (
int valueId = 0; valueId < slice.size(); valueId++) {
85 slice(valueId) =
_values(valueId * timeStamps.
size() + timeId);
88 if (!data.hasGradient()) {
93 Eigen::MatrixXd gradientSlice(data.gradientsRows(), data.gradientsCols());
94 auto gradientView = Eigen::VectorXd::Map(gradientSlice.data(), gradientSlice.rows() * gradientSlice.cols());
95 for (
int gradientId = 0; gradientId < gradientView.size(); gradientId++) {
96 gradientView(gradientId) =
_gradients(gradientId * timeStamps.
size() + timeId);
98 data.setSampleAtTime(
time,
time::Sample{dataDims, std::move(slice), std::move(gradientSlice)});
#define PRECICE_ASSERT(...)
Eigen::VectorXd _gradients
Buffer for serialized gradients of stamples.
static SerializedStamples serialize(const cplscheme::CouplingData &data)
Serializes a given CouplingData into SerializedStamples.
int _timeSteps
number of timesteps stored in SerializedStamples
void allocate(const cplscheme::CouplingData &data)
void deserializeInto(precice::span< const double > timeStamps, cplscheme::CouplingData &data)
Deserialize data from this SerializedStamples into provided CouplingData.
void deserialize(precice::span< const double > timeStamps, cplscheme::CouplingData &data) const
Deserialize _values and (if required by data) _gradients into timeStepsStorage of data....
static SerializedStamples empty(int nTimeSteps, const cplscheme::CouplingData &data)
Create SerializedStamples with allocated buffers according to size of CouplingData.
const Eigen::VectorXd & gradients() const
const reference to serialized gradients. Used for sending serialized gradients.
void serializeValues(const cplscheme::CouplingData &data)
Serialize values from timeStepsStorage of data into _values.
SerializedStamples()=default
Eigen::VectorXd _values
Buffer for serialized values of stamples.
void serializeGradients(const cplscheme::CouplingData &data)
Serialize gradients from timeStepsStorage of data into _gradients.
int nTimeSteps() const
Returns number of timeSteps.
const Eigen::VectorXd & values() const
const reference to serialized values. Used for sending serialized values.
A C++ 11 implementation of the non-owning C++20 std::span type.
constexpr size_type size() const noexcept
contains serialization logic
contains the time interpolation logic.