def test_restart(run_in_tmpdir, scheme): # set up the problem bundle = dummy_operator.SCHEMES[scheme] operator = dummy_operator.DummyOperator() # take first step bundle.solver(operator, [0.75], 1.0).integrate() # restart prev_res = openmc.deplete.ResultsList.from_hdf5( operator.output_dir / "depletion_results.h5") operator = dummy_operator.DummyOperator(prev_res) # take second step bundle.solver(operator, [0.75], 1.0).integrate() # compare results results = openmc.deplete.ResultsList.from_hdf5( operator.output_dir / "depletion_results.h5") _t, y1 = results.get_atoms("1", "1") _t, y2 = results.get_atoms("1", "2") assert y1 == pytest.approx(bundle.atoms_1) assert y2 == pytest.approx(bundle.atoms_2)
def test_restart_cecm_predictor(run_in_tmpdir): """Integral regression test of integrator algorithm using CE/CM for the first run then predictor for the restart run.""" op = dummy_operator.DummyOperator() output_dir = "test_restart_cecm_predictor" op.output_dir = output_dir # Perform simulation using the MCNPX/MCNP6 algorithm dt = [0.75] power = 1.0 cecm = openmc.deplete.CECMIntegrator(op, dt, power) cecm.integrate() # Load the files prev_res = openmc.deplete.ResultsList.from_hdf5( op.output_dir / "depletion_results.h5") # Re-create depletion operator and load previous results op = dummy_operator.DummyOperator(prev_res) op.output_dir = output_dir # check ValueError is raised, indicating previous and current stages with pytest.raises(ValueError, match="incompatible.* 2.*1"): openmc.deplete.PredictorIntegrator(op, dt, power)
def test_transfer_volumes(run_in_tmpdir): """Unit test of volume transfer in restart calculations.""" op = dummy_operator.DummyOperator() op.output_dir = "test_transfer_volumes" # Perform simulation using the predictor algorithm dt = [0.75] power = 1.0 PredictorIntegrator(op, dt, power).integrate() # Load the files res = openmc.deplete.ResultsList.from_hdf5(op.output_dir / "depletion_results.h5") # Create a dictionary of volumes to transfer res[0].volume['1'] = 1.5 res[0].volume['2'] = 2.5 # Create dummy geometry mat1 = openmc.Material(material_id=1) mat1.depletable = True mat2 = openmc.Material(material_id=2) cell = openmc.Cell() cell.fill = [mat1, mat2] root = openmc.Universe() root.add_cell(cell) geometry = openmc.Geometry(root) # Transfer volumes res[0].transfer_volumes(openmc.Model(geometry)) assert mat1.volume == 1.5 assert mat2.volume is None
def test_restart_predictor_cecm(run_in_tmpdir): """Test to ensure that schemes with different stages are not compatible""" op = dummy_operator.DummyOperator() output_dir = "test_restart_predictor_cecm" op.output_dir = output_dir # Perform simulation using the predictor algorithm dt = [0.75] power = 1.0 openmc.deplete.PredictorIntegrator(op, dt, power).integrate() # Load the files prev_res = openmc.deplete.ResultsList.from_hdf5( op.output_dir / "depletion_results.h5") # Re-create depletion operator and load previous results op = dummy_operator.DummyOperator(prev_res) op.output_dir = output_dir # check ValueError is raised, indicating previous and current stages with pytest.raises(ValueError, match="incompatible.* 1.*2"): openmc.deplete.CECMIntegrator(op, dt, power)
def test_integrator(run_in_tmpdir, scheme): """Test the integrators against their expected values""" bundle = dummy_operator.SCHEMES[scheme] operator = dummy_operator.DummyOperator() bundle.solver(operator, [0.75, 0.75], 1.0).integrate() # get expected results res = ResultsList.from_hdf5( operator.output_dir / "depletion_results.h5") t1, y1 = res.get_atoms("1", "1") t2, y2 = res.get_atoms("1", "2") assert (t1 == [0.0, 0.75, 1.5]).all() assert y1 == pytest.approx(bundle.atoms_1) assert (t2 == [0.0, 0.75, 1.5]).all() assert y2 == pytest.approx(bundle.atoms_2) # test structure of depletion time dataset dep_time = res.get_depletion_time() assert dep_time.shape == (2, ) assert all(dep_time > 0) integrator = bundle.solver(operator, [0.75], 1, solver=cram.CRAM48) assert integrator.solver is cram.CRAM48 integrator = bundle.solver(operator, [0.75], 1, solver="cram16") assert integrator.solver is cram.CRAM16 integrator.solver = mock_good_solver assert integrator.solver is mock_good_solver lfunc = lambda A, n, t: mock_good_solver(A, n, t) integrator.solver = lfunc assert integrator.solver is lfunc