43 double initialRelaxation = 0.01;
44 int maxIterationsUsed = 50;
45 int timeWindowsReused = 6;
46 int reusedTimeWindowsAtRestart = 0;
50 double singularityLimit = 1e-10;
51 double svdTruncationEps = 0.0;
52 bool enforceInitialRelaxation =
false;
53 bool alwaysBuildJacobian =
false;
54 const double windowStart = 0;
55 const double windowEnd = 1;
66 timeWindowsReused, filter, singularityLimit, dataIDs, prec, alwaysBuildJacobian,
67 restartType, chunkSize, reusedTimeWindowsAtRestart, svdTruncationEps, !exchangeSubsteps);
69 Eigen::VectorXd fcol1;
75 displacements->emplaceSampleAtTime(windowStart, {1.0, 1.0, 1.0, 1.0});
76 displacements->emplaceSampleAtTime(windowEnd, {1.0, 1.0, 1.0, 1.0});
77 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
78 forces->emplaceSampleAtTime(windowEnd, {0.2, 0.2, 0.2, 0.2});
86 dpcd->storeIteration();
87 fpcd->storeIteration();
91 displacements->emplaceSampleAtTime(windowEnd, {1.0, 2.0, 3.0, 4.0});
92 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
96 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(0), 1.00000000000000000000));
97 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(1), 1.01000000000000000888));
98 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(2), 1.02000000000000001776));
99 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(3), 1.03000000000000002665));
100 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(0), 0.199000000000000010214));
101 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(1), 0.199000000000000010214));
102 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(2), 0.199000000000000010214));
103 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(3), 0.199000000000000010214));
106 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
107 forces->setSampleAtTime(windowEnd, forces->sample());
111 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(0), -5.63401340929695848558e-01));
112 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(1), 6.10309919173602111186e-01));
113 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(2), 1.78402117927690184729e+00));
114 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(3), 2.95773243938020247157e+00));
115 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(0), 8.28025852497733250157e-02));
116 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(1), 8.28025852497733250157e-02));
117 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(2), 8.28025852497733250157e-02));
118 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(3), 8.28025852497733250157e-02));
140 double initialRelaxation = 0.01;
141 int maxIterationsUsed = 50;
142 int timeWindowsReused = 6;
143 int filter = acceleration::BaseQNAcceleration::QR1FILTER;
144 double singularityLimit = 1e-10;
145 bool enforceInitialRelaxation =
false;
147 const double windowStart = 0;
148 const double windowEnd = 1;
162 timeWindowsReused, filter, singularityLimit, dataIDs, prec, !exchangeSubsteps);
168 displacements->emplaceSampleAtTime(windowStart, {1.0, 1.0, 1.0, 1.0});
169 displacements->emplaceSampleAtTime(windowEnd, {1.0, 1.0, 1.0, 1.0});
170 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
171 forces->emplaceSampleAtTime(windowEnd, {0.2, 0.2, 0.2, 0.2});
176 dpcd->storeIteration();
177 fpcd->storeIteration();
185 displacements->emplaceSampleAtTime(windowEnd, {1.0, 2.0, 3.0, 4.0});
186 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
190 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(0), 1.00));
191 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(1), 1.01));
192 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(2), 1.02));
193 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(3), 1.03));
194 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(0), 0.199));
195 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(1), 0.199));
196 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(2), 0.199));
197 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(3), 0.199));
199 Eigen::VectorXd newdvalues;
205 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), newdvalues));
206 forces->setSampleAtTime(windowEnd, forces->sample());
210 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(0), -5.63401340929692295845e-01));
211 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(1), 6.10309919173607440257e-01));
212 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(2), 1.78402117927690717636e+00));
213 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(3), 2.95773243938020513610e+00));
214 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(0), 8.28025852497733944046e-02));
215 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(1), 8.28025852497733944046e-02));
216 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(2), 8.28025852497733944046e-02));
217 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(3), 8.28025852497733944046e-02));
239 double relaxation = 0.4;
242 const double windowStart = 0;
243 const double windowEnd = 1;
251 displacements->emplaceSampleAtTime(windowStart, {1.0, 2.0, 3.0, 4.0});
252 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
254 bool exchangeSubsteps =
false;
262 dpcd->storeIteration();
263 fpcd->storeIteration();
267 displacements->emplaceSampleAtTime(windowEnd, {3.5, 2.0, 2.0, 1.0});
268 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
272 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 2);
273 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2);
274 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 2.6);
275 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 2.8);
276 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.16);
277 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.16);
278 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.16);
279 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.16);
281 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
282 forces->setSampleAtTime(windowEnd, forces->sample());
286 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 4.6);
287 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 5.2);
288 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 5.8);
289 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 6.4);
290 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.184);
291 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.184);
292 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.184);
293 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.184);
301 double relaxation = 0.4;
305 const double windowStart = 0;
306 const double windowEnd = 1;
315 displacements->emplaceSampleAtTime(windowStart, {1.0, 2.0, 3.0, 4.0});
316 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
324 dpcd->storeIteration();
325 fpcd->storeIteration();
329 displacements->emplaceSampleAtTime(windowEnd, {3.5, 2.0, 2.0, 1.0});
330 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
334 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 2);
335 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2);
336 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 2.6);
337 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 2.8);
338 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.16);
339 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.16);
340 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.16);
341 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.16);
343 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
344 forces->setSampleAtTime(windowEnd, forces->sample());
348 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 1.2689851805508461);
349 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2.2390979382674185);
350 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 3.2092106959839914);
351 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 4.1793234537005644);
352 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.19880451030866292);
353 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.19880451030866292);
354 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.19880451030866292);
355 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.19880451030866292);
363 double relaxation = 0.8;
367 double windowStart = 0;
368 double windowEnd = 1;
380 data1->emplaceSampleAtTime(windowStart, {40, 80});
381 data2->emplaceSampleAtTime(windowStart, {5, 5});
382 data3->emplaceSampleAtTime(windowStart, {1, 2, 3, 4});
383 data4->emplaceSampleAtTime(windowStart, {20, 40, 60, 80});
395 dpcd->storeIteration();
396 fpcd->storeIteration();
397 gpcd->storeIteration();
398 hpcd->storeIteration();
402 data1->emplaceSampleAtTime(windowEnd, {1, 7});
403 data2->emplaceSampleAtTime(windowEnd, {10, 10});
404 data3->emplaceSampleAtTime(windowEnd, {10, 11, 12, 13});
405 data4->emplaceSampleAtTime(windowEnd, {40, 60, 80, 100});
409 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 8.8);
410 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 21.6);
411 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 9);
412 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 9);
413 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(0) == 8.2);
414 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(1) == 9.2);
415 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(2) == 10.2);
416 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(0) == 36);
417 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(1) == 56);
418 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(2) == 76);
419 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(3) == 96);
421 data1->emplaceSampleAtTime(windowEnd, {2, 14});
422 data2->emplaceSampleAtTime(windowEnd, {8, 8});
423 data3->emplaceSampleAtTime(windowEnd, {13, 14, 15, 16});
424 data4->emplaceSampleAtTime(windowEnd, {41, 61, 81, 90});
428 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == -17.745640722103754);
429 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == -20.295060201548626);
430 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 9.5588663727976648);
431 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 9.5588663727976648);
432 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(0) == 19.235465491190659);
433 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(1) == 20.235465491190659);
434 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(2) == 21.235465491190659);
435 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(0) == 51.912064609583652);
436 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(1) == 71.912064609583652);
437 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(2) == 91.912064609583652);
438 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(3) == 95.196221242658879);
440 data1->emplaceSampleAtTime(windowEnd, {2.1, 14.1});
441 data2->emplaceSampleAtTime(windowEnd, {8, 8});
442 data3->emplaceSampleAtTime(windowEnd, {13.05, 14.07, 15.1, 16.1});
443 data4->emplaceSampleAtTime(windowEnd, {42, 60, 81.3, 91});
455 data1->emplaceSampleAtTime(windowEnd, {3, 16});
456 data2->emplaceSampleAtTime(windowEnd, {7, 7});
457 data3->emplaceSampleAtTime(windowEnd, {18, 19, 20, 21});
458 data4->emplaceSampleAtTime(windowEnd, {50, 70, 90, 110});
462 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 10.4);
463 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 28.8);
464 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 6.6);
465 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 6.6);
466 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(0) == 14.6);
467 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(1) == 15.6);
468 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(2) == 16.6);
469 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(0) == 44);
470 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(1) == 64);
471 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(2) == 84);
472 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(3) == 104);
480 double relaxation = 0.4;
484 const double windowStart = 0;
485 const double windowEnd = 1;
493 displacements->requireDataGradient();
494 Eigen::MatrixXd displacementGradient(displacements->gradients());
495 displacementGradient.resize(dim, 4);
496 for (
unsigned int r = 0; r < dim; ++r) {
497 for (
unsigned int c = 0; c < 4; ++c)
498 displacementGradient(r, c) = r + r * c;
500 displacements->setSampleAtTime(windowStart,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{1.0, 2.0, 3.0, 4.0}, displacementGradient));
502 forces->requireDataGradient();
503 Eigen::MatrixXd forcesGradient(forces->gradients());
504 forcesGradient.resize(dim, 4);
505 forcesGradient.setConstant(-2);
506 forces->setSampleAtTime(windowStart,
time::Sample(forces->getDimensions(), Eigen::Vector4d{0.2, 0.2, 0.2, 0.2}, forcesGradient));
508 bool exchangeSubsteps =
true;
516 dpcd->storeIteration();
517 fpcd->storeIteration();
521 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{3.5, 2.0, 2.0, 1.0}, Eigen::MatrixXd(displacements->gradients()).setConstant(2.5)));
522 forces->setSampleAtTime(windowEnd,
time::Sample(forces->getDimensions(), Eigen::Vector4d{0.1, 0.1, 0.1, 0.1}, Eigen::MatrixXd(forces->gradients()).setConstant(3)));
527 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 2);
528 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2);
529 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 2.6);
530 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 2.8);
531 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.16);
532 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.16);
533 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.16);
534 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.16);
537 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1);
538 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1);
539 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1);
540 BOOST_TEST(data.at(0)->gradients()(1, 0) == 1.6);
541 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.2);
542 BOOST_TEST(data.at(0)->gradients()(1, 2) == 2.8);
543 BOOST_TEST(data.at(1)->gradients()(0, 0) == 0);
544 BOOST_TEST(data.at(1)->gradients()(0, 1) == 0);
545 BOOST_TEST(data.at(1)->gradients()(0, 2) == 0);
546 BOOST_TEST(data.at(1)->gradients()(1, 0) == 0);
547 BOOST_TEST(data.at(1)->gradients()(1, 1) == 0);
548 BOOST_TEST(data.at(1)->gradients()(1, 2) == 0);
550 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{10, 10, 10, 10}, Eigen::MatrixXd(displacements->gradients()).setConstant(4)));
551 forces->setSampleAtTime(windowEnd, forces->sample());
556 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 4.6);
557 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 5.2);
558 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 5.8);
559 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 6.4);
560 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.184);
561 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.184);
562 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.184);
563 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.184);
565 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1.6);
566 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1.6);
567 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1.6);
568 BOOST_TEST(data.at(0)->gradients()(1, 0) == 2.2);
569 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.8);
570 BOOST_TEST(data.at(0)->gradients()(1, 2) == 3.4);
578 double relaxation = 0.4;
581 const double windowStart = 0;
582 const double windowEnd = 1;
589 displacements->emplaceSampleAtTime(windowStart, {1.0, 2.0, 3.0, 4.0});
590 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
592 bool exchangeSubsteps =
false;
600 dpcd->storeIteration();
601 fpcd->storeIteration();
605 displacements->emplaceSampleAtTime(windowEnd, {3.5, 2.0, 2.0, 1.0});
606 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
610 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 2);
611 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2);
612 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 2.6);
613 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 2.8);
614 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.16);
615 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.16);
616 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.16);
617 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.16);
619 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
621 forces->setSampleAtTime(windowEnd, forces->sample());
625 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 4.6);
626 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 5.2);
627 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 5.8);
628 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 6.4);
629 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.184);
630 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.184);
631 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.184);
632 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.184);
640 double relaxation = 0.4;
644 const double windowStart = 0;
645 const double windowEnd = 1;
653 displacements->requireDataGradient();
654 Eigen::MatrixXd displacementGradient(displacements->gradients());
655 displacementGradient.resize(dim, 4);
656 for (
unsigned int r = 0; r < dim; ++r) {
657 for (
unsigned int c = 0; c < 4; ++c)
658 displacementGradient(r, c) = r + r * c;
660 displacements->setSampleAtTime(windowStart,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{1.0, 2.0, 3.0, 4.0}, displacementGradient));
662 forces->requireDataGradient();
663 Eigen::MatrixXd forcesGradient(forces->gradients());
664 forcesGradient.resize(dim, 4);
665 forcesGradient.setConstant(-2);
666 forces->setSampleAtTime(windowStart,
time::Sample(forces->getDimensions(), Eigen::Vector4d{0.2, 0.2, 0.2, 0.2}, forcesGradient));
668 bool exchangeSubsteps =
false;
676 dpcd->storeIteration();
677 fpcd->storeIteration();
681 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{3.5, 2.0, 2.0, 1.0}, Eigen::MatrixXd(displacements->gradients()).setConstant(2.5)));
682 forces->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{0.1, 0.1, 0.1, 0.1}, Eigen::MatrixXd(displacements->gradients()).setConstant(3)));
687 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 2);
688 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2);
689 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 2.6);
690 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 2.8);
691 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.16);
692 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.16);
693 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.16);
694 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.16);
697 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1);
698 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1);
699 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1);
700 BOOST_TEST(data.at(0)->gradients()(1, 0) == 1.6);
701 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.2);
702 BOOST_TEST(data.at(0)->gradients()(1, 2) == 2.8);
703 BOOST_TEST(data.at(1)->gradients()(0, 0) == 0);
704 BOOST_TEST(data.at(1)->gradients()(0, 1) == 0);
705 BOOST_TEST(data.at(1)->gradients()(0, 2) == 0);
706 BOOST_TEST(data.at(1)->gradients()(1, 0) == 0);
707 BOOST_TEST(data.at(1)->gradients()(1, 1) == 0);
708 BOOST_TEST(data.at(1)->gradients()(1, 2) == 0);
710 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{10, 10, 10, 10}, Eigen::MatrixXd(displacements->gradients()).setConstant(4)));
711 forces->setSampleAtTime(windowEnd, forces->sample());
716 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 4.6);
717 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 5.2);
718 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 5.8);
719 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 6.4);
720 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.184);
721 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.184);
722 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.184);
723 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.184);
725 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1.6);
726 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1.6);
727 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1.6);
728 BOOST_TEST(data.at(0)->gradients()(1, 0) == 2.2);
729 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.8);
730 BOOST_TEST(data.at(0)->gradients()(1, 2) == 3.4);