@@ -312,46 +312,42 @@ TEST(JacobianTests, test_wall_jacobian_build)
312312 // create first reactor
313313 auto sol1 = newSolution (" h2o2.yaml" );
314314 sol1->thermo ()->setState_TPY (1000.0 , OneAtm, " O2:1.0" );
315- IdealGasMoleReactor reactor1;
316- reactor1.setSolution (sol1);
317- reactor1.setInitialVolume (1.0 );
315+ auto reactor1 = make_shared<IdealGasMoleReactor>(sol1);
316+ reactor1->setInitialVolume (1.0 );
318317 // create second reactor
319318 auto sol2 = newSolution (" h2o2.yaml" );
320319 sol2->thermo ()->setState_TPY (900.0 , OneAtm, " O2:1.0" );
321- IdealGasConstPressureMoleReactor reactor2;
322- reactor2.setSolution (sol2);
323- reactor2.setInitialVolume (1.0 );
320+ auto reactor2 = make_shared<IdealGasConstPressureMoleReactor>(sol2);
321+ reactor2->setInitialVolume (1.0 );
324322 // create the wall
325- Wall w;
326- w.install (reactor1, reactor2);
323+ Wall w (reactor1, reactor2);
327324 w.setArea (2.0 );
328325 w.setHeatTransferCoeff (3.0 );
329326 // setup reactor network and integrate
330- ReactorNet network;
331- network.addReactor (reactor1);
332- network.addReactor (reactor2);
327+ vector<shared_ptr<ReactorBase>> reactors = {reactor1, reactor2};
328+ ReactorNet network (reactors);
333329 network.initialize ();
334330 // create jacobian the size of network
335331 Eigen::SparseMatrix<double > wallJacMat;
336332 wallJacMat.resize (network.neq (), network.neq ());
337333 // manually get wall jacobian elements
338334 vector<Eigen::Triplet<double >> wallJac;
339335 // build jac for reactor 1 wall only
340- w.buildReactorJacobian (& reactor1, wallJac);
336+ w.buildReactorJacobian (reactor1. get () , wallJac);
341337 wallJacMat.setFromTriplets (wallJac.begin (), wallJac.end ());
342338 // check that wall jacobian forms correct value
343339 double v1 = sol1->thermo ()->temperature () * w.area () * w.getHeatTransferCoeff ();
344340 for (int k = 0 ; k < wallJacMat.outerSize (); k++) {
345341 for (Eigen::SparseMatrix<double >::InnerIterator it (wallJacMat, k); it; ++it) {
346342 EXPECT_DOUBLE_EQ (it.value (), v1);
347343 EXPECT_EQ (it.row (), 0 ); // check that it is the first row
348- EXPECT_GE (it.col (), reactor1. speciesOffset ());
349- EXPECT_LT (it.col (), reactor1. neq ());
344+ EXPECT_GE (it.col (), reactor1-> speciesOffset ());
345+ EXPECT_LT (it.col (), reactor1-> neq ());
350346 }
351347 }
352348 // build jac for reactor 2 wall only
353349 wallJac.clear ();
354- w.buildReactorJacobian (& reactor2, wallJac);
350+ w.buildReactorJacobian (reactor2. get () , wallJac);
355351 wallJacMat.setZero ();
356352 wallJacMat.setFromTriplets (wallJac.begin (), wallJac.end ());
357353 // check that wall jacobian forms correct value
@@ -360,8 +356,8 @@ TEST(JacobianTests, test_wall_jacobian_build)
360356 for (Eigen::SparseMatrix<double >::InnerIterator it (wallJacMat, k); it; ++it) {
361357 EXPECT_DOUBLE_EQ (it.value (), -v2);
362358 EXPECT_EQ (it.row (), 0 ); // check that it is the first row
363- EXPECT_GE (it.col (), reactor2. speciesOffset ());
364- EXPECT_LT (it.col (), reactor2. neq ());
359+ EXPECT_GE (it.col (), reactor2-> speciesOffset ());
360+ EXPECT_LT (it.col (), reactor2-> neq ());
365361 }
366362 }
367363 // build jac for network terms
@@ -376,13 +372,13 @@ TEST(JacobianTests, test_wall_jacobian_build)
376372 if (it.value () < 0 ) {
377373 EXPECT_DOUBLE_EQ (it.value (), -5400.0 );
378374 EXPECT_EQ (it.row (), 0 ); // check that it is the first row
379- EXPECT_GE (it.col (), reactor1. neq () + reactor2. speciesOffset ());
380- EXPECT_LT (it.col (), reactor1. neq () + reactor2. neq ());
375+ EXPECT_GE (it.col (), reactor1-> neq () + reactor2-> speciesOffset ());
376+ EXPECT_LT (it.col (), reactor1-> neq () + reactor2-> neq ());
381377 } else {
382378 EXPECT_DOUBLE_EQ (it.value (), 6000.0 );
383- EXPECT_EQ (it.row (), reactor1. neq ()); // check that it is the first row
384- EXPECT_GE (it.col (), reactor2. speciesOffset ());
385- EXPECT_LT (it.col (), reactor1. neq ());
379+ EXPECT_EQ (it.row (), reactor1-> neq ()); // check that it is the first row
380+ EXPECT_GE (it.col (), reactor2-> speciesOffset ());
381+ EXPECT_LT (it.col (), reactor1-> neq ());
386382 }
387383 }
388384 }
@@ -393,24 +389,20 @@ TEST(JacobianTests, test_flow_jacobian_not_implemented)
393389 // create reservoir reactor
394390 auto sol = newSolution (" h2o2.yaml" );
395391 sol->thermo ()->setState_TPY (1000.0 , OneAtm, " O2:1.0" );
396- Reservoir res;
397- res.setSolution (sol);
392+ auto res = make_shared<Reservoir>(sol);
398393 // create reactor
399- IdealGasConstPressureMoleReactor reactor;
400- reactor.setSolution (sol);
401- reactor.setInitialVolume (1.0 );
394+ auto reactor = make_shared<IdealGasConstPressureMoleReactor>(sol);
395+ reactor->setInitialVolume (1.0 );
402396 // create the flow device
403- MassFlowController mfc;
404- mfc.install (res, reactor);
397+ MassFlowController mfc (res, reactor);
405398 mfc.setMassFlowCoeff (1.0 );
406399 // setup reactor network and integrate
407- ReactorNet network;
408- network.addReactor (reactor);
400+ ReactorNet network (reactor);
409401 network.initialize ();
410402 // manually get wall jacobian elements
411403 vector<Eigen::Triplet<double >> flowJac;
412404 // expect errors from building jacobians
413- EXPECT_THROW (mfc.buildReactorJacobian (& reactor, flowJac), NotImplementedError);
405+ EXPECT_THROW (mfc.buildReactorJacobian (reactor. get () , flowJac), NotImplementedError);
414406 // check the jacobian calculated flag and throw/catch errors accordingly
415407 EXPECT_THROW (mfc.buildNetworkJacobian (flowJac), NotImplementedError);
416408}
0 commit comments