@@ -111,11 +111,12 @@ namespace GridKit
111111 success *= (model.verify () == 0 );
112112 model.initialize ();
113113
114- success *= vss_node.linked ();
115- success *= (vss_node.getVariableIndex () == static_cast <IdxT>(VSS ));
116- success *= isEqual (model.y ()[V7 ], test.expected_v7 , tol_);
117- success *= isEqual (model.y ()[VSS ], test.expected_vss , loose_tol);
118- success *= isEqual (vss_node.read (), test.expected_vss , loose_tol);
114+ success *= vss_node.linked ();
115+ success *= (vss_node.getVariableIndex () == static_cast <IdxT>(VSS ));
116+ const auto * y = model.y ().getData ();
117+ success *= isEqual (y[V7 ], test.expected_v7 , tol_);
118+ success *= isEqual (y[VSS ], test.expected_vss , loose_tol);
119+ success *= isEqual (vss_node.read (), test.expected_vss , loose_tol);
119120 }
120121
121122 const std::string name = orderedName (__func__, order);
@@ -162,13 +163,15 @@ namespace GridKit
162163 success *= (model.evaluateResidual () == 0 );
163164
164165 // The smooth clamp keeps the VSS row only approximately zero.
165- const auto loose_tol = static_cast <RealT>(1.0e-4 );
166- for (size_t i = 0 ; i < model.getResidual ().size (); ++i)
166+ const auto loose_tol = static_cast <RealT>(1.0e-4 );
167+ const auto & residual = model.getResidual ();
168+ const auto * f = residual.getData ();
169+ for (size_t i = 0 ; i < residual.getSize (); ++i)
167170 {
168- if (!isEqual (model. getResidual () [i], static_cast <ScalarT>(0.0 ), loose_tol))
171+ if (!isEqual (f [i], static_cast <ScalarT>(0.0 ), loose_tol))
169172 {
170173 std::cout << " Nonzero initial residual at row " << i << " : "
171- << std::setprecision (15 ) << model. getResidual () [i] << " \n " ;
174+ << std::setprecision (15 ) << f [i] << " \n " ;
172175 success = false ;
173176 }
174177 }
@@ -202,13 +205,18 @@ namespace GridKit
202205
203206 const auto y_values = stateValues<order>();
204207 const auto yp_values = derivativeValues<order>();
208+ auto * y = model.y ().getData ();
209+ auto * yp = model.yp ().getData ();
205210 for (size_t i = 0 ; i < y_values.size (); ++i)
206211 {
207- model. y () [i] = y_values[i];
208- model. yp () [i] = yp_values[i];
212+ y [i] = y_values[i];
213+ yp [i] = yp_values[i];
209214 }
215+ model.y ().setDataUpdated ();
216+ model.yp ().setDataUpdated ();
210217
211218 model.evaluateResidual ();
219+ const auto * f = model.getResidual ().getData ();
212220
213221 // The smooth clamp on the VSS row carries approximation error, so
214222 // that row is compared with a looser tolerance.
@@ -218,11 +226,11 @@ namespace GridKit
218226 for (size_t i = 0 ; i < expected.size (); ++i)
219227 {
220228 const auto test_tol = (i == VSS ) ? loose_tol : tol_;
221- if (!isEqual (model. getResidual () [i], expected[i], test_tol))
229+ if (!isEqual (f [i], expected[i], test_tol))
222230 {
223231 std::cout << " Incorrect residual for order " << order
224232 << " row " << i << " : "
225- << std::setprecision (15 ) << model. getResidual () [i]
233+ << std::setprecision (15 ) << f [i]
226234 << " != " << expected[i] << " \n " ;
227235 success = false ;
228236 }
@@ -443,13 +451,18 @@ namespace GridKit
443451
444452 const auto y_values = stateValues<4 >();
445453 const auto yp_values = derivativeValues<4 >();
454+ auto * y = stabilizer->y ().getData ();
455+ auto * yp = stabilizer->yp ().getData ();
446456 for (size_t i = 0 ; i < y_values.size (); ++i)
447457 {
448- stabilizer-> y () [i] = y_values[i];
449- stabilizer-> yp () [i] = yp_values[i];
458+ y [i] = y_values[i];
459+ yp [i] = yp_values[i];
450460 }
461+ stabilizer->y ().setDataUpdated ();
462+ stabilizer->yp ().setDataUpdated ();
451463
452464 stabilizer->evaluateResidual ();
465+ const auto * f = stabilizer->getResidual ().getData ();
453466
454467 // Derived with the a1 and a3 residual terms dropped:
455468 // x4_rhs = (0.5 - 0.1 - 0.6 * 0.3) / 0.08 = 2.75
@@ -463,10 +476,10 @@ namespace GridKit
463476 for (size_t i = 0 ; i < expected.size (); ++i)
464477 {
465478 const auto test_tol = (i == VSS ) ? loose_tol : tol_;
466- if (!isEqual (stabilizer-> getResidual () [i], expected[i], test_tol))
479+ if (!isEqual (f [i], expected[i], test_tol))
467480 {
468481 std::cout << " Incorrect symmetric-notch residual row " << i << " : "
469- << std::setprecision (15 ) << stabilizer-> getResidual () [i]
482+ << std::setprecision (15 ) << f [i]
470483 << " != " << expected[i] << " \n " ;
471484 success = false ;
472485 }
@@ -510,44 +523,54 @@ namespace GridKit
510523 model.allocate ();
511524 model.initialize ();
512525
526+ auto * y = model.y ().getData ();
527+ auto * yp = model.yp ().getData ();
513528 for (size_t i = 0 ; i < model.size (); ++i)
514529 {
515- model. y () [i].setVariableNumber (i);
530+ y [i].setVariableNumber (i);
516531 }
517532 u_value.setVariableNumber (model.size ());
518533 u_value.setValue (0.5 );
519534
520535 for (size_t i = 0 ; i < y_values.size (); ++i)
521536 {
522- model. y () [i].setValue (y_values[i]);
537+ y [i].setValue (y_values[i]);
523538 }
524539 for (size_t i = 0 ; i < yp_values.size (); ++i)
525540 {
526- model. yp () [i].setValue (yp_values[i]);
541+ yp [i].setValue (yp_values[i]);
527542 }
543+ model.y ().setDataUpdated ();
544+ model.yp ().setDataUpdated ();
528545
529546 model.evaluateResidual ();
530- std::vector<DepVar> residual_y = model.getResidual ();
547+ const auto & residual_y_view = model.getResidual ();
548+ std::vector<DepVar> residual_y (residual_y_view.getData (),
549+ residual_y_view.getData () + residual_y_view.getSize ());
531550
532551 model.initialize ();
533552 for (size_t i = 0 ; i < model.size (); ++i)
534553 {
535- model. y () [i] = model. y () [i].getValue ();
536- model. yp () [i].setVariableNumber (i);
554+ y [i] = y [i].getValue ();
555+ yp [i].setVariableNumber (i);
537556 }
538557 u_value = 0.5 ;
539558
540559 for (size_t i = 0 ; i < y_values.size (); ++i)
541560 {
542- model. y () [i].setValue (y_values[i]);
561+ y [i].setValue (y_values[i]);
543562 }
544563 for (size_t i = 0 ; i < yp_values.size (); ++i)
545564 {
546- model. yp () [i].setValue (yp_values[i]);
565+ yp [i].setValue (yp_values[i]);
547566 }
567+ model.y ().setDataUpdated ();
568+ model.yp ().setDataUpdated ();
548569
549570 model.evaluateResidual ();
550- std::vector<DepVar> residual_yp = model.getResidual ();
571+ const auto & residual_yp_view = model.getResidual ();
572+ std::vector<DepVar> residual_yp (residual_yp_view.getData (),
573+ residual_yp_view.getData () + residual_yp_view.getSize ());
551574
552575 dependency_tracking_jacobian.resize (residual_y.size ());
553576 for (size_t i = 0 ; i < residual_y.size (); ++i)
@@ -598,11 +621,15 @@ namespace GridKit
598621 model.allocate ();
599622 model.initialize ();
600623
624+ auto * y = model.y ().getData ();
625+ auto * yp = model.yp ().getData ();
601626 for (size_t i = 0 ; i < y_values.size (); ++i)
602627 {
603- model. y () [i] = y_values[i];
604- model. yp () [i] = yp_values[i];
628+ y [i] = y_values[i];
629+ yp [i] = yp_values[i];
605630 }
631+ model.y ().setDataUpdated ();
632+ model.yp ().setDataUpdated ();
606633
607634 model.updateTime (0.0 , 1.0 );
608635 model.evaluateResidual ();
0 commit comments