From f1157e90d43d9016058565627eeb8cb2756fe010 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Fri, 21 Jun 2019 12:08:33 -0500 Subject: [PATCH] Store and test storage of process time for cecm, celi, epc_rk4 --- openmc/deplete/integrator/cecm.py | 16 +++++++++---- openmc/deplete/integrator/celi.py | 12 +++++----- openmc/deplete/integrator/cf4.py | 30 ++++++++++++++---------- openmc/deplete/integrator/epc_rk4.py | 26 ++++++++++++-------- tests/unit_tests/test_deplete_cecm.py | 6 +++++ tests/unit_tests/test_deplete_celi.py | 6 +++++ tests/unit_tests/test_deplete_cf4.py | 6 +++++ tests/unit_tests/test_deplete_epc_rk4.py | 6 +++++ 8 files changed, 74 insertions(+), 34 deletions(-) diff --git a/openmc/deplete/integrator/cecm.py b/openmc/deplete/integrator/cecm.py index b1bcec448d..e463bca575 100644 --- a/openmc/deplete/integrator/cecm.py +++ b/openmc/deplete/integrator/cecm.py @@ -3,7 +3,7 @@ import copy from collections.abc import Iterable -from .cram import deplete +from .cram import timed_deplete from ..results import Results @@ -69,6 +69,8 @@ def cecm(operator, timesteps, power=None, power_density=None, print_out=True): chain = operator.chain + proc_time = None + for i, (dt, p) in enumerate(zip(timesteps, power)): # Get beginning-of-timestep concentrations and reaction rates # Avoid doing first transport run if already done in previous @@ -94,7 +96,8 @@ def cecm(operator, timesteps, power=None, power_density=None, print_out=True): op_results[0].rates *= ratio_power[0] # Deplete for first half of timestep - x_middle = deplete(chain, x[0], op_results[0].rates, dt/2, print_out) + proc_time, x_middle = timed_deplete( + chain, x[0], op_results[0].rates, dt/2, print_out) # Get middle-of-timestep reaction rates x.append(x_middle) @@ -102,10 +105,13 @@ def cecm(operator, timesteps, power=None, power_density=None, print_out=True): # Deplete for full timestep using beginning-of-step materials # and middle-of-timestep reaction rates - x_end = deplete(chain, x[0], op_results[1].rates, dt, print_out) + pt_end, x_end = timed_deplete( + chain, x[0], op_results[1].rates, dt, print_out) # Create results, write to disk - Results.save(operator, x, op_results, [t, t + dt], p, i_res + i) + Results.save( + operator, x, op_results, [t, t + dt], p, i_res + i, + proc_time + pt_end) # Advance time, update vector t += dt @@ -116,4 +122,4 @@ def cecm(operator, timesteps, power=None, power_density=None, print_out=True): op_results = [operator(x[0], power[-1])] # Create results, write to disk - Results.save(operator, x, op_results, [t, t], p, i_res + len(timesteps)) + Results.save(operator, x, op_results, [t, t], p, i_res + len(timesteps), None) diff --git a/openmc/deplete/integrator/celi.py b/openmc/deplete/integrator/celi.py index e7b8014990..b1fe4d5e89 100644 --- a/openmc/deplete/integrator/celi.py +++ b/openmc/deplete/integrator/celi.py @@ -3,7 +3,7 @@ import copy from collections.abc import Iterable -from .cram import deplete +from .cram import timed_deplete from ..results import Results @@ -88,7 +88,7 @@ def celi(operator, timesteps, power=None, power_density=None, op_results = [operator(x[0], power[-1])] # Create results, write to disk - Results.save(operator, x, op_results, [t, t], p, i_res + len(timesteps)) + Results.save(operator, x, op_results, [t, t], p, i_res + len(timesteps), None) def celi_inner(operator, vec, p, i, i_res, t, dt, print_out): @@ -149,19 +149,19 @@ def celi_inner(operator, vec, p, i, i_res, t, dt, print_out): op_results[0].rates *= ratio_power[0] # Deplete to end - x_new = deplete(chain, x[0], op_results[0].rates, dt, print_out) + proc_time, x_new = timed_deplete(chain, x[0], op_results[0].rates, dt, print_out) x.append(x_new) op_results.append(operator(x[1], p)) # Deplete with two matrix exponentials rates = list(zip(op_results[0].rates, op_results[1].rates)) - x_end = deplete(chain, x[0], rates, dt, print_out, + time_1, x_end = timed_deplete(chain, x[0], rates, dt, print_out, matrix_func=_celi_f1) - x_end = deplete(chain, x_end, rates, dt, print_out, + time_2, x_end = timed_deplete(chain, x_end, rates, dt, print_out, matrix_func=_celi_f2) # Create results, write to disk - Results.save(operator, x, op_results, [t, t + dt], p, i_res + i) + Results.save(operator, x, op_results, [t, t + dt], p, i_res + i, proc_time + time_1 + time_2) # return updated time and vectors return x_end, t + dt, op_results[0] diff --git a/openmc/deplete/integrator/cf4.py b/openmc/deplete/integrator/cf4.py index fecb917517..37d7023a84 100644 --- a/openmc/deplete/integrator/cf4.py +++ b/openmc/deplete/integrator/cf4.py @@ -3,7 +3,7 @@ import copy from collections.abc import Iterable -from .cram import deplete +from .cram import timed_deplete from ..results import Results @@ -119,34 +119,38 @@ def cf4(operator, timesteps, power=None, power_density=None, print_out=True): op_results[0].rates *= ratio_power[0] # Step 1: deplete with matrix 1/2*A(y0) - x_new = deplete(chain, x[0], op_results[0].rates, dt, print_out, - matrix_func=_cf4_f1) + time_1, x_new = timed_deplete( + chain, x[0], op_results[0].rates, dt, print_out, + matrix_func=_cf4_f1) x.append(x_new) op_results.append(operator(x_new, p)) # Step 2: deplete with matrix 1/2*A(y1) - x_new = deplete(chain, x[0], op_results[1].rates, dt, print_out, - matrix_func=_cf4_f1) + time_2, x_new = timed_deplete( + chain, x[0], op_results[1].rates, dt, print_out, + matrix_func=_cf4_f1) x.append(x_new) op_results.append(operator(x_new, p)) # Step 3: deplete with matrix -1/2*A(y0)+A(y2) rates = list(zip(op_results[0].rates, op_results[2].rates)) - x_new = deplete(chain, x[1], rates, dt, print_out, - matrix_func=_cf4_f2) + time_3, x_new = timed_deplete( + chain, x[1], rates, dt, print_out, matrix_func=_cf4_f2) x.append(x_new) op_results.append(operator(x_new, p)) # Step 4: deplete with two matrix exponentials rates = list(zip(op_results[0].rates, op_results[1].rates, op_results[2].rates, op_results[3].rates)) - x_end = deplete(chain, x[0], rates, dt, print_out, - matrix_func=_cf4_f3) - x_end = deplete(chain, x_end, rates, dt, print_out, - matrix_func=_cf4_f4) + time_4, x_end = timed_deplete( + chain, x[0], rates, dt, print_out, matrix_func=_cf4_f3) + time_5, x_end = timed_deplete( + chain, x_end, rates, dt, print_out, matrix_func=_cf4_f4) # Create results, write to disk - Results.save(operator, x, op_results, [t, t + dt], p, i_res + i) + Results.save( + operator, x, op_results, [t, t + dt], p, i_res + i, + sum((time_1, time_2, time_3, time_4, time_5))) # Advance time, update vector t += dt @@ -157,4 +161,4 @@ def cf4(operator, timesteps, power=None, power_density=None, print_out=True): op_results = [operator(x[0], power[-1])] # Create results, write to disk - Results.save(operator, x, op_results, [t, t], p, i_res + len(timesteps)) + Results.save(operator, x, op_results, [t, t], p, i_res + len(timesteps), None) diff --git a/openmc/deplete/integrator/epc_rk4.py b/openmc/deplete/integrator/epc_rk4.py index 58c4d08f7e..c57c71204a 100644 --- a/openmc/deplete/integrator/epc_rk4.py +++ b/openmc/deplete/integrator/epc_rk4.py @@ -3,7 +3,7 @@ import copy from collections.abc import Iterable -from .cram import deplete +from .cram import timed_deplete from ..results import Results @@ -105,30 +105,35 @@ def epc_rk4(operator, timesteps, power=None, power_density=None, print_out=True) op_results[0].rates *= ratio_power[0] # Step 1: deplete with matrix 1/2*A(y0) - x_new = deplete(chain, x[0], op_results[0].rates, dt, print_out, - matrix_func=_rk4_f1) + time_1, x_new = timed_deplete( + chain, x[0], op_results[0].rates, dt, print_out, + matrix_func=_rk4_f1) x.append(x_new) op_results.append(operator(x[1], p)) # Step 2: deplete with matrix 1/2*A(y1) - x_new = deplete(chain, x[0], op_results[1].rates, dt, print_out, - matrix_func=_rk4_f1) + time_2, x_new = timed_deplete( + chain, x[0], op_results[1].rates, dt, print_out, + matrix_func=_rk4_f1) x.append(x_new) op_results.append(operator(x[2], p)) # Step 3: deplete with matrix A(y2) - x_new = deplete(chain, x[0], op_results[2].rates, dt, print_out) + time_3, x_new = timed_deplete( + chain, x[0], op_results[2].rates, dt, print_out) x.append(x_new) op_results.append(operator(x[3], p)) # Step 4: deplete with matrix 1/6*A(y0)+1/3*A(y1)+1/3*A(y2)+1/6*A(y3) rates = list(zip(op_results[0].rates, op_results[1].rates, op_results[2].rates, op_results[3].rates)) - x_end = deplete(chain, x[0], rates, dt, print_out, - matrix_func=_rk4_f4) + time_4, x_end = timed_deplete( + chain, x[0], rates, dt, print_out, matrix_func=_rk4_f4) # Create results, write to disk - Results.save(operator, x, op_results, [t, t + dt], p, i_res + i) + Results.save( + operator, x, op_results, [t, t + dt], p, i_res + i, + sum((time_1, time_2, time_3, time_4))) # Advance time, update vector t += dt @@ -139,4 +144,5 @@ def epc_rk4(operator, timesteps, power=None, power_density=None, print_out=True) op_results = [operator(x[0], power[-1])] # Create results, write to disk - Results.save(operator, x, op_results, [t, t], p, i_res + len(timesteps)) + Results.save( + operator, x, op_results, [t, t], p, i_res + len(timesteps), None) diff --git a/tests/unit_tests/test_deplete_cecm.py b/tests/unit_tests/test_deplete_cecm.py index 466a2eec74..d143658af3 100644 --- a/tests/unit_tests/test_deplete_cecm.py +++ b/tests/unit_tests/test_deplete_cecm.py @@ -35,3 +35,9 @@ def test_cecm(run_in_tmpdir): assert y1[2] == approx(s2[0]) assert y2[2] == approx(s2[1]) + + # Test structure of depletion time dataset + + dep_time = res.get_depletion_time() + assert dep_time.shape == (len(dt), 1) + assert all(dep_time > 0) diff --git a/tests/unit_tests/test_deplete_celi.py b/tests/unit_tests/test_deplete_celi.py index 0b23b1a438..bb479f6cc2 100644 --- a/tests/unit_tests/test_deplete_celi.py +++ b/tests/unit_tests/test_deplete_celi.py @@ -35,3 +35,9 @@ def test_celi(run_in_tmpdir): assert y1[2] == approx(s2[0]) assert y2[2] == approx(s2[1]) + + # Test structure of depletion time dataset + + dep_time = res.get_depletion_time() + assert dep_time.shape == (len(dt), 1) + assert all(dep_time > 0) diff --git a/tests/unit_tests/test_deplete_cf4.py b/tests/unit_tests/test_deplete_cf4.py index 784d228beb..5b7d08c229 100644 --- a/tests/unit_tests/test_deplete_cf4.py +++ b/tests/unit_tests/test_deplete_cf4.py @@ -35,3 +35,9 @@ def test_cf4(run_in_tmpdir): assert y1[2] == approx(s2[0]) assert y2[2] == approx(s2[1]) + + # Test structure of depletion time dataset + + dep_time = res.get_depletion_time() + assert dep_time.shape == (len(dt), 1) + assert all(dep_time > 0) diff --git a/tests/unit_tests/test_deplete_epc_rk4.py b/tests/unit_tests/test_deplete_epc_rk4.py index dd15bf8e1d..0623f9e6e8 100644 --- a/tests/unit_tests/test_deplete_epc_rk4.py +++ b/tests/unit_tests/test_deplete_epc_rk4.py @@ -35,3 +35,9 @@ def test_epc_rk4(run_in_tmpdir): assert y1[2] == approx(s2[0]) assert y2[2] == approx(s2[1]) + + # Test structure of depletion time dataset + + dep_time = res.get_depletion_time() + assert dep_time.shape == (len(dt), 1) + assert all(dep_time > 0)