44 double initialRelaxation = 0.01;
45 int maxIterationsUsed = 50;
46 int timeWindowsReused = 6;
47 int reusedTimeWindowsAtRestart = 0;
51 double singularityLimit = 1e-10;
52 double svdTruncationEps = 0.0;
53 bool enforceInitialRelaxation =
false;
54 bool alwaysBuildJacobian =
false;
55 const double windowStart = 0;
56 const double windowEnd = 1;
67 timeWindowsReused, filter, singularityLimit, dataIDs, prec, alwaysBuildJacobian,
68 restartType, chunkSize, reusedTimeWindowsAtRestart, svdTruncationEps, !exchangeSubsteps);
70 Eigen::VectorXd fcol1;
76 displacements->emplaceSampleAtTime(windowStart, {1.0, 1.0, 1.0, 1.0});
77 displacements->emplaceSampleAtTime(windowEnd, {1.0, 1.0, 1.0, 1.0});
78 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
79 forces->emplaceSampleAtTime(windowEnd, {0.2, 0.2, 0.2, 0.2});
87 dpcd->storeIteration();
88 fpcd->storeIteration();
92 displacements->emplaceSampleAtTime(windowEnd, {1.0, 2.0, 3.0, 4.0});
93 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
97 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(0), 1.00000000000000000000));
98 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(1), 1.01000000000000000888));
99 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(2), 1.02000000000000001776));
100 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(3), 1.03000000000000002665));
101 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(0), 0.199000000000000010214));
102 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(1), 0.199000000000000010214));
103 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(2), 0.199000000000000010214));
104 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(3), 0.199000000000000010214));
107 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
108 forces->setSampleAtTime(windowEnd, forces->sample());
112 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(0), -5.63401340929695848558e-01));
113 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(1), 6.10309919173602111186e-01));
114 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(2), 1.78402117927690184729e+00));
115 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(3), 2.95773243938020247157e+00));
116 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(0), 8.28025852497733250157e-02));
117 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(1), 8.28025852497733250157e-02));
118 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(2), 8.28025852497733250157e-02));
119 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(3), 8.28025852497733250157e-02));
141 double initialRelaxation = 0.01;
142 int maxIterationsUsed = 50;
143 int timeWindowsReused = 6;
145 double singularityLimit = 1e-10;
146 bool enforceInitialRelaxation =
false;
148 const double windowStart = 0;
149 const double windowEnd = 1;
163 timeWindowsReused, filter, singularityLimit, dataIDs, prec, !exchangeSubsteps);
169 displacements->emplaceSampleAtTime(windowStart, {1.0, 1.0, 1.0, 1.0});
170 displacements->emplaceSampleAtTime(windowEnd, {1.0, 1.0, 1.0, 1.0});
171 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
172 forces->emplaceSampleAtTime(windowEnd, {0.2, 0.2, 0.2, 0.2});
177 dpcd->storeIteration();
178 fpcd->storeIteration();
186 displacements->emplaceSampleAtTime(windowEnd, {1.0, 2.0, 3.0, 4.0});
187 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
191 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(0), 1.00));
192 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(1), 1.01));
193 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(2), 1.02));
194 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(3), 1.03));
195 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(0), 0.199));
196 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(1), 0.199));
197 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(2), 0.199));
198 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(3), 0.199));
200 Eigen::VectorXd newdvalues;
206 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), newdvalues));
207 forces->setSampleAtTime(windowEnd, forces->sample());
211 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(0), -5.63401340929692295845e-01));
212 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(1), 6.10309919173607440257e-01));
213 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(2), 1.78402117927690717636e+00));
214 BOOST_TEST(
testing::equals(data.at(0)->timeStepsStorage().sample(windowEnd)(3), 2.95773243938020513610e+00));
215 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(0), 8.28025852497733944046e-02));
216 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(1), 8.28025852497733944046e-02));
217 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(2), 8.28025852497733944046e-02));
218 BOOST_TEST(
testing::equals(data.at(1)->timeStepsStorage().sample(windowEnd)(3), 8.28025852497733944046e-02));
240 double relaxation = 0.4;
243 const double windowStart = 0;
244 const double windowEnd = 1;
252 displacements->emplaceSampleAtTime(windowStart, {1.0, 2.0, 3.0, 4.0});
253 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
255 bool exchangeSubsteps =
false;
263 dpcd->storeIteration();
264 fpcd->storeIteration();
268 displacements->emplaceSampleAtTime(windowEnd, {3.5, 2.0, 2.0, 1.0});
269 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
273 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 2);
274 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2);
275 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 2.6);
276 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 2.8);
277 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.16);
278 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.16);
279 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.16);
280 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.16);
282 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
283 forces->setSampleAtTime(windowEnd, forces->sample());
287 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 4.6);
288 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 5.2);
289 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 5.8);
290 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 6.4);
291 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.184);
292 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.184);
293 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.184);
294 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.184);
302 double relaxation = 0.4;
306 const double windowStart = 0;
307 const double windowEnd = 1;
316 displacements->emplaceSampleAtTime(windowStart, {1.0, 2.0, 3.0, 4.0});
317 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
325 dpcd->storeIteration();
326 fpcd->storeIteration();
330 displacements->emplaceSampleAtTime(windowEnd, {3.5, 2.0, 2.0, 1.0});
331 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
335 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 2);
336 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2);
337 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 2.6);
338 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 2.8);
339 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.16);
340 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.16);
341 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.16);
342 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.16);
344 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
345 forces->setSampleAtTime(windowEnd, forces->sample());
349 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 1.2689851805508461);
350 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2.2390979382674185);
351 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 3.2092106959839914);
352 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 4.1793234537005644);
353 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.19880451030866292);
354 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.19880451030866292);
355 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.19880451030866292);
356 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.19880451030866292);
364 double relaxation = 0.8;
368 double windowStart = 0;
369 double windowEnd = 1;
381 data1->emplaceSampleAtTime(windowStart, {40, 80});
382 data2->emplaceSampleAtTime(windowStart, {5, 5});
383 data3->emplaceSampleAtTime(windowStart, {1, 2, 3, 4});
384 data4->emplaceSampleAtTime(windowStart, {20, 40, 60, 80});
396 dpcd->storeIteration();
397 fpcd->storeIteration();
398 gpcd->storeIteration();
399 hpcd->storeIteration();
403 data1->emplaceSampleAtTime(windowEnd, {1, 7});
404 data2->emplaceSampleAtTime(windowEnd, {10, 10});
405 data3->emplaceSampleAtTime(windowEnd, {10, 11, 12, 13});
406 data4->emplaceSampleAtTime(windowEnd, {40, 60, 80, 100});
410 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 8.8);
411 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 21.6);
412 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 9);
413 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 9);
414 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(0) == 8.2);
415 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(1) == 9.2);
416 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(2) == 10.2);
417 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(0) == 36);
418 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(1) == 56);
419 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(2) == 76);
420 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(3) == 96);
422 data1->emplaceSampleAtTime(windowEnd, {2, 14});
423 data2->emplaceSampleAtTime(windowEnd, {8, 8});
424 data3->emplaceSampleAtTime(windowEnd, {13, 14, 15, 16});
425 data4->emplaceSampleAtTime(windowEnd, {41, 61, 81, 90});
429 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == -17.745640722103754);
430 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == -20.295060201548626);
431 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 9.5588663727976648);
432 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 9.5588663727976648);
433 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(0) == 19.235465491190659);
434 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(1) == 20.235465491190659);
435 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(2) == 21.235465491190659);
436 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(0) == 51.912064609583652);
437 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(1) == 71.912064609583652);
438 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(2) == 91.912064609583652);
439 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(3) == 95.196221242658879);
441 data1->emplaceSampleAtTime(windowEnd, {2.1, 14.1});
442 data2->emplaceSampleAtTime(windowEnd, {8, 8});
443 data3->emplaceSampleAtTime(windowEnd, {13.05, 14.07, 15.1, 16.1});
444 data4->emplaceSampleAtTime(windowEnd, {42, 60, 81.3, 91});
456 data1->emplaceSampleAtTime(windowEnd, {3, 16});
457 data2->emplaceSampleAtTime(windowEnd, {7, 7});
458 data3->emplaceSampleAtTime(windowEnd, {18, 19, 20, 21});
459 data4->emplaceSampleAtTime(windowEnd, {50, 70, 90, 110});
463 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 10.4);
464 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 28.8);
465 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 6.6);
466 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 6.6);
467 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(0) == 14.6);
468 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(1) == 15.6);
469 BOOST_TEST(data.at(2)->timeStepsStorage().sample(windowEnd)(2) == 16.6);
470 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(0) == 44);
471 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(1) == 64);
472 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(2) == 84);
473 BOOST_TEST(data.at(3)->timeStepsStorage().sample(windowEnd)(3) == 104);
481 double relaxation = 0.4;
485 const double windowStart = 0;
486 const double windowEnd = 1;
494 displacements->requireDataGradient();
495 Eigen::MatrixXd displacementGradient(displacements->gradients());
496 displacementGradient.resize(dim, 4);
497 for (
unsigned int r = 0; r < dim; ++r) {
498 for (
unsigned int c = 0; c < 4; ++c)
499 displacementGradient(r, c) = r + r * c;
501 displacements->setSampleAtTime(windowStart,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{1.0, 2.0, 3.0, 4.0}, displacementGradient));
503 forces->requireDataGradient();
504 Eigen::MatrixXd forcesGradient(forces->gradients());
505 forcesGradient.resize(dim, 4);
506 forcesGradient.setConstant(-2);
507 forces->setSampleAtTime(windowStart,
time::Sample(forces->getDimensions(), Eigen::Vector4d{0.2, 0.2, 0.2, 0.2}, forcesGradient));
509 bool exchangeSubsteps =
true;
517 dpcd->storeIteration();
518 fpcd->storeIteration();
522 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{3.5, 2.0, 2.0, 1.0}, Eigen::MatrixXd(displacements->gradients()).setConstant(2.5)));
523 forces->setSampleAtTime(windowEnd,
time::Sample(forces->getDimensions(), Eigen::Vector4d{0.1, 0.1, 0.1, 0.1}, Eigen::MatrixXd(forces->gradients()).setConstant(3)));
528 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 2);
529 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2);
530 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 2.6);
531 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 2.8);
532 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.16);
533 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.16);
534 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.16);
535 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.16);
538 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1);
539 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1);
540 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1);
541 BOOST_TEST(data.at(0)->gradients()(1, 0) == 1.6);
542 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.2);
543 BOOST_TEST(data.at(0)->gradients()(1, 2) == 2.8);
544 BOOST_TEST(data.at(1)->gradients()(0, 0) == 0);
545 BOOST_TEST(data.at(1)->gradients()(0, 1) == 0);
546 BOOST_TEST(data.at(1)->gradients()(0, 2) == 0);
547 BOOST_TEST(data.at(1)->gradients()(1, 0) == 0);
548 BOOST_TEST(data.at(1)->gradients()(1, 1) == 0);
549 BOOST_TEST(data.at(1)->gradients()(1, 2) == 0);
551 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{10, 10, 10, 10}, Eigen::MatrixXd(displacements->gradients()).setConstant(4)));
552 forces->setSampleAtTime(windowEnd, forces->sample());
557 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 4.6);
558 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 5.2);
559 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 5.8);
560 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 6.4);
561 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.184);
562 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.184);
563 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.184);
564 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.184);
566 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1.6);
567 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1.6);
568 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1.6);
569 BOOST_TEST(data.at(0)->gradients()(1, 0) == 2.2);
570 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.8);
571 BOOST_TEST(data.at(0)->gradients()(1, 2) == 3.4);
579 double relaxation = 0.4;
582 const double windowStart = 0;
583 const double windowEnd = 1;
590 displacements->emplaceSampleAtTime(windowStart, {1.0, 2.0, 3.0, 4.0});
591 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
593 bool exchangeSubsteps =
false;
601 dpcd->storeIteration();
602 fpcd->storeIteration();
606 displacements->emplaceSampleAtTime(windowEnd, {3.5, 2.0, 2.0, 1.0});
607 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
611 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 2);
612 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2);
613 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 2.6);
614 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 2.8);
615 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.16);
616 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.16);
617 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.16);
618 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.16);
620 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
622 forces->setSampleAtTime(windowEnd, forces->sample());
626 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 4.6);
627 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 5.2);
628 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 5.8);
629 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 6.4);
630 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.184);
631 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.184);
632 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.184);
633 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.184);
641 double relaxation = 0.4;
645 const double windowStart = 0;
646 const double windowEnd = 1;
654 displacements->requireDataGradient();
655 Eigen::MatrixXd displacementGradient(displacements->gradients());
656 displacementGradient.resize(dim, 4);
657 for (
unsigned int r = 0; r < dim; ++r) {
658 for (
unsigned int c = 0; c < 4; ++c)
659 displacementGradient(r, c) = r + r * c;
661 displacements->setSampleAtTime(windowStart,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{1.0, 2.0, 3.0, 4.0}, displacementGradient));
663 forces->requireDataGradient();
664 Eigen::MatrixXd forcesGradient(forces->gradients());
665 forcesGradient.resize(dim, 4);
666 forcesGradient.setConstant(-2);
667 forces->setSampleAtTime(windowStart,
time::Sample(forces->getDimensions(), Eigen::Vector4d{0.2, 0.2, 0.2, 0.2}, forcesGradient));
669 bool exchangeSubsteps =
false;
677 dpcd->storeIteration();
678 fpcd->storeIteration();
682 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{3.5, 2.0, 2.0, 1.0}, Eigen::MatrixXd(displacements->gradients()).setConstant(2.5)));
683 forces->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{0.1, 0.1, 0.1, 0.1}, Eigen::MatrixXd(displacements->gradients()).setConstant(3)));
688 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 2);
689 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 2);
690 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 2.6);
691 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 2.8);
692 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.16);
693 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.16);
694 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.16);
695 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.16);
698 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1);
699 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1);
700 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1);
701 BOOST_TEST(data.at(0)->gradients()(1, 0) == 1.6);
702 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.2);
703 BOOST_TEST(data.at(0)->gradients()(1, 2) == 2.8);
704 BOOST_TEST(data.at(1)->gradients()(0, 0) == 0);
705 BOOST_TEST(data.at(1)->gradients()(0, 1) == 0);
706 BOOST_TEST(data.at(1)->gradients()(0, 2) == 0);
707 BOOST_TEST(data.at(1)->gradients()(1, 0) == 0);
708 BOOST_TEST(data.at(1)->gradients()(1, 1) == 0);
709 BOOST_TEST(data.at(1)->gradients()(1, 2) == 0);
711 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{10, 10, 10, 10}, Eigen::MatrixXd(displacements->gradients()).setConstant(4)));
712 forces->setSampleAtTime(windowEnd, forces->sample());
717 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(0) == 4.6);
718 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(1) == 5.2);
719 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(2) == 5.8);
720 BOOST_TEST(data.at(0)->timeStepsStorage().sample(windowEnd)(3) == 6.4);
721 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(0) == 0.184);
722 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(1) == 0.184);
723 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(2) == 0.184);
724 BOOST_TEST(data.at(1)->timeStepsStorage().sample(windowEnd)(3) == 0.184);
726 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1.6);
727 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1.6);
728 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1.6);
729 BOOST_TEST(data.at(0)->gradients()(1, 0) == 2.2);
730 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.8);
731 BOOST_TEST(data.at(0)->gradients()(1, 2) == 3.4);