45 double initialRelaxation = 0.01;
46 int maxIterationsUsed = 50;
47 int timeWindowsReused = 6;
48 int reusedTimeWindowsAtRestart = 0;
52 double singularityLimit = 1e-10;
53 double svdTruncationEps = 0.0;
54 bool enforceInitialRelaxation =
false;
55 bool alwaysBuildJacobian =
false;
56 const double windowStart = 0;
57 const double windowEnd = 1;
59 std::vector<int> dataIDs;
62 std::vector<double> factors;
63 factors.resize(2, 1.0);
69 restartType, chunkSize, reusedTimeWindowsAtRestart, svdTruncationEps, !exchangeSubsteps);
71 Eigen::VectorXd fcol1;
77 displacements->emplaceSampleAtTime(windowStart, {1.0, 1.0, 1.0, 1.0});
78 displacements->emplaceSampleAtTime(windowEnd, {1.0, 1.0, 1.0, 1.0});
79 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
80 forces->emplaceSampleAtTime(windowEnd, {0.2, 0.2, 0.2, 0.2});
86 data.insert(std::pair<int, cplscheme::PtrCouplingData>(0, dpcd));
87 data.insert(std::pair<int, cplscheme::PtrCouplingData>(1, fpcd));
88 dpcd->storeIteration();
89 fpcd->storeIteration();
93 displacements->emplaceSampleAtTime(windowEnd, {1.0, 2.0, 3.0, 4.0});
94 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
98 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(0), 1.00000000000000000000));
99 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(1), 1.01000000000000000888));
100 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(2), 1.02000000000000001776));
101 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(3), 1.03000000000000002665));
102 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(0), 0.199000000000000010214));
103 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(1), 0.199000000000000010214));
104 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(2), 0.199000000000000010214));
105 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(3), 0.199000000000000010214));
108 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
109 forces->setSampleAtTime(windowEnd, forces->sample());
113 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(0), -5.63401340929695848558e-01));
114 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(1), 6.10309919173602111186e-01));
115 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(2), 1.78402117927690184729e+00));
116 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(3), 2.95773243938020247157e+00));
117 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(0), 8.28025852497733250157e-02));
118 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(1), 8.28025852497733250157e-02));
119 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(2), 8.28025852497733250157e-02));
120 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(3), 8.28025852497733250157e-02));
143 double initialRelaxation = 0.01;
144 int maxIterationsUsed = 50;
145 int timeWindowsReused = 6;
147 double singularityLimit = 1e-3;
148 bool enforceInitialRelaxation =
false;
149 const double windowStart = 0;
150 const double windowEnd = 1;
152 std::vector<int> dataIDs;
153 std::vector<int> primaryDataIDs;
154 dataIDs.push_back(0);
155 dataIDs.push_back(1);
156 primaryDataIDs.push_back(0);
164 Eigen::VectorXd fcol1;
170 displacements->emplaceSampleAtTime(windowStart, {1.0, 1.0, 1.0, 1.0});
171 displacements->emplaceSampleAtTime(windowEnd, {1.0, 1.0, 1.0, 1.0});
172 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
173 forces->emplaceSampleAtTime(windowEnd, {0.2, 0.2, 0.2, 0.2});
179 data.insert(std::pair<int, cplscheme::PtrCouplingData>(0, dpcd));
180 data.insert(std::pair<int, cplscheme::PtrCouplingData>(1, fpcd));
181 dpcd->storeIteration();
182 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)->waveform().sample(windowEnd)(0), 1.00000000000000000000));
192 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(1), 1.01000000000000000888));
193 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(2), 1.02000000000000001776));
194 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(3), 1.03000000000000002665));
195 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(0), 0.199000000000000010214));
196 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(1), 0.199000000000000010214));
197 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(2), 0.199000000000000010214));
198 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(3), 0.199000000000000010214));
201 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
202 forces->setSampleAtTime(windowEnd, forces->sample());
207 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(0), -0.565217391304349));
208 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(1), 0.608695652173912));
209 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(2), 1.78260869565217));
210 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(3), 2.95652173913043));
211 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(0), 0.0827826086956522));
212 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(1), 0.0827826086956522));
213 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(2), 0.0827826086956522));
214 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(3), 0.0827826086956522));
222 double initialRelaxation = 0.01;
223 int maxIterationsUsed = 50;
224 int timeWindowsReused = 6;
226 double singularityLimit = 1e-10;
227 bool enforceInitialRelaxation =
false;
228 std::vector<int> dataIDs;
229 const double windowStart = 0;
230 const double windowEnd = 1;
232 dataIDs.push_back(0);
233 dataIDs.push_back(1);
234 std::vector<double> factors;
235 factors.resize(2, 1.0);
238 std::map<int, double> scalings;
239 scalings.insert(std::make_pair(0, 1.0));
240 scalings.insert(std::make_pair(1, 1.0));
250 displacements->emplaceSampleAtTime(windowStart, {1.0, 1.0, 1.0, 1.0});
251 displacements->emplaceSampleAtTime(windowEnd, {1.0, 1.0, 1.0, 1.0});
252 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
253 forces->emplaceSampleAtTime(windowEnd, {0.2, 0.2, 0.2, 0.2});
258 dpcd->storeIteration();
259 fpcd->storeIteration();
262 data.insert(std::pair<int, cplscheme::PtrCouplingData>(0, dpcd));
263 data.insert(std::pair<int, cplscheme::PtrCouplingData>(1, fpcd));
267 displacements->emplaceSampleAtTime(windowEnd, {1.0, 2.0, 3.0, 4.0});
268 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
272 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(0), 1.00));
273 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(1), 1.01));
274 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(2), 1.02));
275 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(3), 1.03));
276 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(0), 0.199));
277 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(1), 0.199));
278 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(2), 0.199));
279 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(3), 0.199));
281 Eigen::VectorXd newdvalues;
287 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), newdvalues));
288 forces->setSampleAtTime(windowEnd, forces->sample());
292 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(0), -5.63401340929692295845e-01));
293 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(1), 6.10309919173607440257e-01));
294 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(2), 1.78402117927690717636e+00));
295 BOOST_TEST(
testing::equals(data.at(0)->waveform().sample(windowEnd)(3), 2.95773243938020513610e+00));
296 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(0), 8.28025852497733944046e-02));
297 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(1), 8.28025852497733944046e-02));
298 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(2), 8.28025852497733944046e-02));
299 BOOST_TEST(
testing::equals(data.at(1)->waveform().sample(windowEnd)(3), 8.28025852497733944046e-02));
321 double relaxation = 0.4;
322 std::vector<int> dataIDs{0, 1};
324 const double windowStart = 0;
325 const double windowEnd = 1;
329 mesh::PtrData displacements = std::make_shared<mesh::Data>(
"dvalues", -1, 1);
330 mesh::PtrData forces = std::make_shared<mesh::Data>(
"fvalues", -1, 1);
333 displacements->emplaceSampleAtTime(windowStart, {1.0, 2.0, 3.0, 4.0});
334 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
336 bool exchangeSubsteps =
false;
342 data.insert(std::pair<int, cplscheme::PtrCouplingData>(0, dpcd));
343 data.insert(std::pair<int, cplscheme::PtrCouplingData>(1, fpcd));
344 dpcd->storeIteration();
345 fpcd->storeIteration();
349 displacements->emplaceSampleAtTime(windowEnd, {3.5, 2.0, 2.0, 1.0});
350 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
354 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 2);
355 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 2);
356 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(2) == 2.6);
357 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(3) == 2.8);
358 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 0.16);
359 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 0.16);
360 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(2) == 0.16);
361 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(3) == 0.16);
363 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
364 forces->setSampleAtTime(windowEnd, forces->sample());
368 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 4.6);
369 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 5.2);
370 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(2) == 5.8);
371 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(3) == 6.4);
372 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 0.184);
373 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 0.184);
374 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(2) == 0.184);
375 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(3) == 0.184);
383 double relaxation = 0.4;
384 std::vector<int> dataIDs{0, 1};
385 std::vector<double> factors{1, 1};
387 const double windowStart = 0;
388 const double windowEnd = 1;
393 mesh::PtrData displacements = std::make_shared<mesh::Data>(
"dvalues", -1, 1);
394 mesh::PtrData forces = std::make_shared<mesh::Data>(
"fvalues", -1, 1);
397 displacements->emplaceSampleAtTime(windowStart, {1.0, 2.0, 3.0, 4.0});
398 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
404 data.insert(std::pair<int, cplscheme::PtrCouplingData>(0, dpcd));
405 data.insert(std::pair<int, cplscheme::PtrCouplingData>(1, fpcd));
406 dpcd->storeIteration();
407 fpcd->storeIteration();
411 displacements->emplaceSampleAtTime(windowEnd, {3.5, 2.0, 2.0, 1.0});
412 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
416 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 2);
417 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 2);
418 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(2) == 2.6);
419 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(3) == 2.8);
420 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 0.16);
421 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 0.16);
422 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(2) == 0.16);
423 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(3) == 0.16);
425 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
426 forces->setSampleAtTime(windowEnd, forces->sample());
430 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 1.2689851805508461);
431 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 2.2390979382674185);
432 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(2) == 3.2092106959839914);
433 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(3) == 4.1793234537005644);
434 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 0.19880451030866292);
435 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 0.19880451030866292);
436 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(2) == 0.19880451030866292);
437 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(3) == 0.19880451030866292);
445 double relaxation = 0.8;
446 std::vector<int> dataIDs{0, 1, 2, 3};
449 double windowStart = 0;
450 double windowEnd = 1;
456 mesh::PtrData data1 = std::make_shared<mesh::Data>(
"dvalues", -1, 1);
457 mesh::PtrData data2 = std::make_shared<mesh::Data>(
"fvalues", -1, 1);
458 mesh::PtrData data3 = std::make_shared<mesh::Data>(
"gvalues", -1, 2);
459 mesh::PtrData data4 = std::make_shared<mesh::Data>(
"hvalues", -1, 2);
462 data1->emplaceSampleAtTime(windowStart, {40, 80});
463 data2->emplaceSampleAtTime(windowStart, {5, 5});
464 data3->emplaceSampleAtTime(windowStart, {1, 2, 3, 4});
465 data4->emplaceSampleAtTime(windowStart, {20, 40, 60, 80});
473 data.insert(std::pair<int, cplscheme::PtrCouplingData>(0, dpcd));
474 data.insert(std::pair<int, cplscheme::PtrCouplingData>(1, fpcd));
475 data.insert(std::pair<int, cplscheme::PtrCouplingData>(2, gpcd));
476 data.insert(std::pair<int, cplscheme::PtrCouplingData>(3, hpcd));
477 dpcd->storeIteration();
478 fpcd->storeIteration();
479 gpcd->storeIteration();
480 hpcd->storeIteration();
484 data1->emplaceSampleAtTime(windowEnd, {1, 7});
485 data2->emplaceSampleAtTime(windowEnd, {10, 10});
486 data3->emplaceSampleAtTime(windowEnd, {10, 11, 12, 13});
487 data4->emplaceSampleAtTime(windowEnd, {40, 60, 80, 100});
491 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 8.8);
492 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 21.6);
493 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 9);
494 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 9);
495 BOOST_TEST(data.at(2)->waveform().sample(windowEnd)(0) == 8.2);
496 BOOST_TEST(data.at(2)->waveform().sample(windowEnd)(1) == 9.2);
497 BOOST_TEST(data.at(2)->waveform().sample(windowEnd)(2) == 10.2);
498 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(0) == 36);
499 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(1) == 56);
500 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(2) == 76);
501 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(3) == 96);
503 data1->emplaceSampleAtTime(windowEnd, {2, 14});
504 data2->emplaceSampleAtTime(windowEnd, {8, 8});
505 data3->emplaceSampleAtTime(windowEnd, {13, 14, 15, 16});
506 data4->emplaceSampleAtTime(windowEnd, {41, 61, 81, 90});
510 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == -17.745640722103754);
511 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == -20.295060201548626);
512 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 9.5588663727976648);
513 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 9.5588663727976648);
514 BOOST_TEST(data.at(2)->waveform().sample(windowEnd)(0) == 19.235465491190659);
515 BOOST_TEST(data.at(2)->waveform().sample(windowEnd)(1) == 20.235465491190659);
516 BOOST_TEST(data.at(2)->waveform().sample(windowEnd)(2) == 21.235465491190659);
517 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(0) == 51.912064609583652);
518 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(1) == 71.912064609583652);
519 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(2) == 91.912064609583652);
520 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(3) == 95.196221242658879);
522 data1->emplaceSampleAtTime(windowEnd, {2.1, 14.1});
523 data2->emplaceSampleAtTime(windowEnd, {8, 8});
524 data3->emplaceSampleAtTime(windowEnd, {13.05, 14.07, 15.1, 16.1});
525 data4->emplaceSampleAtTime(windowEnd, {42, 60, 81.3, 91});
537 data1->emplaceSampleAtTime(windowEnd, {3, 16});
538 data2->emplaceSampleAtTime(windowEnd, {7, 7});
539 data3->emplaceSampleAtTime(windowEnd, {18, 19, 20, 21});
540 data4->emplaceSampleAtTime(windowEnd, {50, 70, 90, 110});
544 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 10.4);
545 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 28.8);
546 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 6.6);
547 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 6.6);
548 BOOST_TEST(data.at(2)->waveform().sample(windowEnd)(0) == 14.6);
549 BOOST_TEST(data.at(2)->waveform().sample(windowEnd)(1) == 15.6);
550 BOOST_TEST(data.at(2)->waveform().sample(windowEnd)(2) == 16.6);
551 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(0) == 44);
552 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(1) == 64);
553 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(2) == 84);
554 BOOST_TEST(data.at(3)->waveform().sample(windowEnd)(3) == 104);
562 double relaxation = 0.4;
563 std::vector<int> dataIDs{0, 1};
566 const double windowStart = 0;
567 const double windowEnd = 1;
571 mesh::PtrData displacements = std::make_shared<mesh::Data>(
"dvalues", -1, 1);
572 mesh::PtrData forces = std::make_shared<mesh::Data>(
"fvalues", -1, 1);
575 displacements->requireDataGradient();
576 Eigen::MatrixXd displacementGradient(displacements->gradients());
577 displacementGradient.resize(dim, 4);
578 for (
unsigned int r = 0; r < dim; ++r) {
579 for (
unsigned int c = 0; c < 4; ++c)
580 displacementGradient(r, c) = r + r * c;
582 displacements->setSampleAtTime(windowStart,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{1.0, 2.0, 3.0, 4.0}, displacementGradient));
584 forces->requireDataGradient();
585 Eigen::MatrixXd forcesGradient(forces->gradients());
586 forcesGradient.resize(dim, 4);
587 forcesGradient.setConstant(-2);
588 forces->setSampleAtTime(windowStart,
time::Sample(forces->getDimensions(), Eigen::Vector4d{0.2, 0.2, 0.2, 0.2}, forcesGradient));
590 bool exchangeSubsteps =
true;
596 data.insert(std::pair<int, cplscheme::PtrCouplingData>(0, dpcd));
597 data.insert(std::pair<int, cplscheme::PtrCouplingData>(1, fpcd));
598 dpcd->storeIteration();
599 fpcd->storeIteration();
603 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{3.5, 2.0, 2.0, 1.0}, Eigen::MatrixXd(displacements->gradients()).setConstant(2.5)));
604 forces->setSampleAtTime(windowEnd,
time::Sample(forces->getDimensions(), Eigen::Vector4d{0.1, 0.1, 0.1, 0.1}, Eigen::MatrixXd(forces->gradients()).setConstant(3)));
609 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 2);
610 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 2);
611 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(2) == 2.6);
612 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(3) == 2.8);
613 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 0.16);
614 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 0.16);
615 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(2) == 0.16);
616 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(3) == 0.16);
619 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1);
620 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1);
621 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1);
622 BOOST_TEST(data.at(0)->gradients()(1, 0) == 1.6);
623 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.2);
624 BOOST_TEST(data.at(0)->gradients()(1, 2) == 2.8);
625 BOOST_TEST(data.at(1)->gradients()(0, 0) == 0);
626 BOOST_TEST(data.at(1)->gradients()(0, 1) == 0);
627 BOOST_TEST(data.at(1)->gradients()(0, 2) == 0);
628 BOOST_TEST(data.at(1)->gradients()(1, 0) == 0);
629 BOOST_TEST(data.at(1)->gradients()(1, 1) == 0);
630 BOOST_TEST(data.at(1)->gradients()(1, 2) == 0);
632 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{10, 10, 10, 10}, Eigen::MatrixXd(displacements->gradients()).setConstant(4)));
633 forces->setSampleAtTime(windowEnd, forces->sample());
638 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 4.6);
639 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 5.2);
640 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(2) == 5.8);
641 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(3) == 6.4);
642 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 0.184);
643 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 0.184);
644 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(2) == 0.184);
645 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(3) == 0.184);
647 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1.6);
648 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1.6);
649 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1.6);
650 BOOST_TEST(data.at(0)->gradients()(1, 0) == 2.2);
651 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.8);
652 BOOST_TEST(data.at(0)->gradients()(1, 2) == 3.4);
660 double relaxation = 0.4;
661 std::vector<int> dataIDs{0, 1};
663 const double windowStart = 0;
664 const double windowEnd = 1;
668 mesh::PtrData displacements = std::make_shared<mesh::Data>(
"dvalues", -1, 1);
669 mesh::PtrData forces = std::make_shared<mesh::Data>(
"fvalues", -1, 1);
671 displacements->emplaceSampleAtTime(windowStart, {1.0, 2.0, 3.0, 4.0});
672 forces->emplaceSampleAtTime(windowStart, {0.2, 0.2, 0.2, 0.2});
674 bool exchangeSubsteps =
false;
680 data.insert(std::pair<int, cplscheme::PtrCouplingData>(0, dpcd));
681 data.insert(std::pair<int, cplscheme::PtrCouplingData>(1, fpcd));
682 dpcd->storeIteration();
683 fpcd->storeIteration();
687 displacements->emplaceSampleAtTime(windowEnd, {3.5, 2.0, 2.0, 1.0});
688 forces->emplaceSampleAtTime(windowEnd, {0.1, 0.1, 0.1, 0.1});
692 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 2);
693 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 2);
694 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(2) == 2.6);
695 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(3) == 2.8);
696 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 0.16);
697 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 0.16);
698 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(2) == 0.16);
699 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(3) == 0.16);
701 displacements->emplaceSampleAtTime(windowEnd, {10, 10, 10, 10});
703 forces->setSampleAtTime(windowEnd, forces->sample());
707 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 4.6);
708 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 5.2);
709 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(2) == 5.8);
710 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(3) == 6.4);
711 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 0.184);
712 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 0.184);
713 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(2) == 0.184);
714 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(3) == 0.184);
722 double relaxation = 0.4;
723 std::vector<int> dataIDs{0, 1};
726 const double windowStart = 0;
727 const double windowEnd = 1;
731 mesh::PtrData displacements = std::make_shared<mesh::Data>(
"dvalues", -1, 1);
732 mesh::PtrData forces = std::make_shared<mesh::Data>(
"fvalues", -1, 1);
735 displacements->requireDataGradient();
736 Eigen::MatrixXd displacementGradient(displacements->gradients());
737 displacementGradient.resize(dim, 4);
738 for (
unsigned int r = 0; r < dim; ++r) {
739 for (
unsigned int c = 0; c < 4; ++c)
740 displacementGradient(r, c) = r + r * c;
742 displacements->setSampleAtTime(windowStart,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{1.0, 2.0, 3.0, 4.0}, displacementGradient));
744 forces->requireDataGradient();
745 Eigen::MatrixXd forcesGradient(forces->gradients());
746 forcesGradient.resize(dim, 4);
747 forcesGradient.setConstant(-2);
748 forces->setSampleAtTime(windowStart,
time::Sample(forces->getDimensions(), Eigen::Vector4d{0.2, 0.2, 0.2, 0.2}, forcesGradient));
750 bool exchangeSubsteps =
false;
756 data.insert(std::pair<int, cplscheme::PtrCouplingData>(0, dpcd));
757 data.insert(std::pair<int, cplscheme::PtrCouplingData>(1, fpcd));
758 dpcd->storeIteration();
759 fpcd->storeIteration();
763 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{3.5, 2.0, 2.0, 1.0}, Eigen::MatrixXd(displacements->gradients()).setConstant(2.5)));
764 forces->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{0.1, 0.1, 0.1, 0.1}, Eigen::MatrixXd(displacements->gradients()).setConstant(3)));
769 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 2);
770 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 2);
771 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(2) == 2.6);
772 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(3) == 2.8);
773 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 0.16);
774 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 0.16);
775 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(2) == 0.16);
776 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(3) == 0.16);
779 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1);
780 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1);
781 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1);
782 BOOST_TEST(data.at(0)->gradients()(1, 0) == 1.6);
783 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.2);
784 BOOST_TEST(data.at(0)->gradients()(1, 2) == 2.8);
785 BOOST_TEST(data.at(1)->gradients()(0, 0) == 0);
786 BOOST_TEST(data.at(1)->gradients()(0, 1) == 0);
787 BOOST_TEST(data.at(1)->gradients()(0, 2) == 0);
788 BOOST_TEST(data.at(1)->gradients()(1, 0) == 0);
789 BOOST_TEST(data.at(1)->gradients()(1, 1) == 0);
790 BOOST_TEST(data.at(1)->gradients()(1, 2) == 0);
792 displacements->setSampleAtTime(windowEnd,
time::Sample(displacements->getDimensions(), Eigen::Vector4d{10, 10, 10, 10}, Eigen::MatrixXd(displacements->gradients()).setConstant(4)));
793 forces->setSampleAtTime(windowEnd, forces->sample());
798 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(0) == 4.6);
799 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(1) == 5.2);
800 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(2) == 5.8);
801 BOOST_TEST(data.at(0)->waveform().sample(windowEnd)(3) == 6.4);
802 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(0) == 0.184);
803 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(1) == 0.184);
804 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(2) == 0.184);
805 BOOST_TEST(data.at(1)->waveform().sample(windowEnd)(3) == 0.184);
807 BOOST_TEST(data.at(0)->gradients()(0, 0) == 1.6);
808 BOOST_TEST(data.at(0)->gradients()(0, 1) == 1.6);
809 BOOST_TEST(data.at(0)->gradients()(0, 2) == 1.6);
810 BOOST_TEST(data.at(0)->gradients()(1, 0) == 2.2);
811 BOOST_TEST(data.at(0)->gradients()(1, 1) == 2.8);
812 BOOST_TEST(data.at(0)->gradients()(1, 2) == 3.4);