Store and test storage of process time for cecm, celi, epc_rk4

This commit is contained in:
Andrew Johnson 2019-06-21 12:08:33 -05:00
parent 3a963b4183
commit f1157e90d4
No known key found for this signature in database
GPG key ID: 253418E91B7F6FEB
8 changed files with 74 additions and 34 deletions

View file

@ -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)

View file

@ -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]

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)