@@ -306,46 +306,42 @@ TEST(JacobianTests, test_wall_jacobian_build)
306306 // create first reactor
307307 auto sol1 = newSolution (" h2o2.yaml" );
308308 sol1->thermo ()->setState_TPY (1000.0 , OneAtm, " O2:1.0" );
309- IdealGasMoleReactor reactor1;
310- reactor1.setSolution (sol1);
311- reactor1.setInitialVolume (1.0 );
309+ auto reactor1 = make_shared<IdealGasMoleReactor>(sol1);
310+ reactor1->setInitialVolume (1.0 );
312311 // create second reactor
313312 auto sol2 = newSolution (" h2o2.yaml" );
314313 sol2->thermo ()->setState_TPY (900.0 , OneAtm, " O2:1.0" );
315- IdealGasConstPressureMoleReactor reactor2;
316- reactor2.setSolution (sol2);
317- reactor2.setInitialVolume (1.0 );
314+ auto reactor2 = make_shared<IdealGasConstPressureMoleReactor>(sol2);
315+ reactor2->setInitialVolume (1.0 );
318316 // create the wall
319- Wall w;
320- w.install (reactor1, reactor2);
317+ Wall w (reactor1, reactor2);
321318 w.setArea (2.0 );
322319 w.setHeatTransferCoeff (3.0 );
323320 // setup reactor network and integrate
324- ReactorNet network;
325- network.addReactor (reactor1);
326- network.addReactor (reactor2);
321+ vector<shared_ptr<ReactorBase>> reactors = {reactor1, reactor2};
322+ ReactorNet network (reactors);
327323 network.initialize ();
328324 // create jacobian the size of network
329325 Eigen::SparseMatrix<double > wallJacMat;
330326 wallJacMat.resize (network.neq (), network.neq ());
331327 // manually get wall jacobian elements
332328 vector<Eigen::Triplet<double >> wallJac;
333329 // build jac for reactor 1 wall only
334- w.buildReactorJacobian (& reactor1, wallJac);
330+ w.buildReactorJacobian (reactor1. get () , wallJac);
335331 wallJacMat.setFromTriplets (wallJac.begin (), wallJac.end ());
336332 // check that wall jacobian forms correct value
337333 double v1 = sol1->thermo ()->temperature () * w.area () * w.getHeatTransferCoeff ();
338334 for (int k = 0 ; k < wallJacMat.outerSize (); k++) {
339335 for (Eigen::SparseMatrix<double >::InnerIterator it (wallJacMat, k); it; ++it) {
340336 EXPECT_DOUBLE_EQ (it.value (), v1);
341337 EXPECT_EQ (it.row (), 0 ); // check that it is the first row
342- EXPECT_GE (it.col (), reactor1. speciesOffset ());
343- EXPECT_LT (it.col (), reactor1. neq ());
338+ EXPECT_GE (it.col (), reactor1-> speciesOffset ());
339+ EXPECT_LT (it.col (), reactor1-> neq ());
344340 }
345341 }
346342 // build jac for reactor 2 wall only
347343 wallJac.clear ();
348- w.buildReactorJacobian (& reactor2, wallJac);
344+ w.buildReactorJacobian (reactor2. get () , wallJac);
349345 wallJacMat.setZero ();
350346 wallJacMat.setFromTriplets (wallJac.begin (), wallJac.end ());
351347 // check that wall jacobian forms correct value
@@ -354,8 +350,8 @@ TEST(JacobianTests, test_wall_jacobian_build)
354350 for (Eigen::SparseMatrix<double >::InnerIterator it (wallJacMat, k); it; ++it) {
355351 EXPECT_DOUBLE_EQ (it.value (), -v2);
356352 EXPECT_EQ (it.row (), 0 ); // check that it is the first row
357- EXPECT_GE (it.col (), reactor2. speciesOffset ());
358- EXPECT_LT (it.col (), reactor2. neq ());
353+ EXPECT_GE (it.col (), reactor2-> speciesOffset ());
354+ EXPECT_LT (it.col (), reactor2-> neq ());
359355 }
360356 }
361357 // build jac for network terms
@@ -370,13 +366,13 @@ TEST(JacobianTests, test_wall_jacobian_build)
370366 if (it.value () < 0 ) {
371367 EXPECT_DOUBLE_EQ (it.value (), -5400.0 );
372368 EXPECT_EQ (it.row (), 0 ); // check that it is the first row
373- EXPECT_GE (it.col (), reactor1. neq () + reactor2. speciesOffset ());
374- EXPECT_LT (it.col (), reactor1. neq () + reactor2. neq ());
369+ EXPECT_GE (it.col (), reactor1-> neq () + reactor2-> speciesOffset ());
370+ EXPECT_LT (it.col (), reactor1-> neq () + reactor2-> neq ());
375371 } else {
376372 EXPECT_DOUBLE_EQ (it.value (), 6000.0 );
377- EXPECT_EQ (it.row (), reactor1. neq ()); // check that it is the first row
378- EXPECT_GE (it.col (), reactor2. speciesOffset ());
379- EXPECT_LT (it.col (), reactor1. neq ());
373+ EXPECT_EQ (it.row (), reactor1-> neq ()); // check that it is the first row
374+ EXPECT_GE (it.col (), reactor2-> speciesOffset ());
375+ EXPECT_LT (it.col (), reactor1-> neq ());
380376 }
381377 }
382378 }
@@ -387,24 +383,20 @@ TEST(JacobianTests, test_flow_jacobian_not_implemented)
387383 // create reservoir reactor
388384 auto sol = newSolution (" h2o2.yaml" );
389385 sol->thermo ()->setState_TPY (1000.0 , OneAtm, " O2:1.0" );
390- Reservoir res;
391- res.setSolution (sol);
386+ auto res = make_shared<Reservoir>(sol);
392387 // create reactor
393- IdealGasConstPressureMoleReactor reactor;
394- reactor.setSolution (sol);
395- reactor.setInitialVolume (1.0 );
388+ auto reactor = make_shared<IdealGasConstPressureMoleReactor>(sol);
389+ reactor->setInitialVolume (1.0 );
396390 // create the flow device
397- MassFlowController mfc;
398- mfc.install (res, reactor);
391+ MassFlowController mfc (res, reactor);
399392 mfc.setMassFlowCoeff (1.0 );
400393 // setup reactor network and integrate
401- ReactorNet network;
402- network.addReactor (reactor);
394+ ReactorNet network (reactor);
403395 network.initialize ();
404396 // manually get wall jacobian elements
405397 vector<Eigen::Triplet<double >> flowJac;
406398 // expect errors from building jacobians
407- EXPECT_THROW (mfc.buildReactorJacobian (& reactor, flowJac), NotImplementedError);
399+ EXPECT_THROW (mfc.buildReactorJacobian (reactor. get () , flowJac), NotImplementedError);
408400 // check the jacobian calculated flag and throw/catch errors accordingly
409401 EXPECT_THROW (mfc.buildNetworkJacobian (flowJac), NotImplementedError);
410402}
0 commit comments