Merge pull request #2143 from shimwell/adding_years_to_get_time

added option for year as time units
This commit is contained in:
Paul Romano 2022-08-04 06:33:24 -05:00 committed by GitHub
commit 5fc70d8a67
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 13 deletions

View file

@ -16,6 +16,19 @@ __all__ = ["Results", "ResultsList"]
def _get_time_as(seconds, units):
"""Converts the time in seconds to time in different units
Parameters
----------
seconds : float
The time to convert expressed in seconds
units : {"s", "min", "h", "d", "a"}
The units to convert time into. Available options are seconds ``"s"``,
minutes ``"min"``, hours ``"h"`` days ``"d"``, Julian years ``"a"``
"""
if units == "a":
return seconds / (60 * 60 * 24 * 365.25) # 365.25 due to the leap year
if units == "d":
return seconds / (60 * 60 * 24)
elif units == "h":
@ -95,9 +108,10 @@ class Results(list):
Units for the returned concentration. Default is ``"atoms"``
.. versionadded:: 0.12
time_units : {"s", "min", "h", "d"}, optional
time_units : {"s", "min", "h", "d", "a"}, optional
Units for the returned time array. Default is ``"s"`` to
return the value in seconds.
return the value in seconds. Other options are minutes ``"min"``,
hours ``"h"``, days ``"d"``, and Julian years ``"a"``.
.. versionadded:: 0.12
@ -109,7 +123,7 @@ class Results(list):
Concentration of specified nuclide in units of ``nuc_units``
"""
cv.check_value("time_units", time_units, {"s", "d", "min", "h"})
cv.check_value("time_units", time_units, {"s", "d", "min", "h", "a"})
cv.check_value("nuc_units", nuc_units,
{"atoms", "atom/b-cm", "atom/cm3"})
@ -190,8 +204,10 @@ class Results(list):
Parameters
----------
time_units : {"s", "d", "h", "min"}, optional
Desired units for the times array
time_units : {"s", "d", "min", "h", "a"}, optional
Desired units for the times array. Options are seconds ``"s"``,
minutes ``"min"``, hours ``"h"``, days ``"d"``, and Julian years
``"a"``.
Returns
-------
@ -203,7 +219,7 @@ class Results(list):
1 contains the associated uncertainty
"""
cv.check_value("time_units", time_units, {"s", "d", "min", "h"})
cv.check_value("time_units", time_units, {"s", "d", "min", "h", "a"})
times = np.empty_like(self, dtype=float)
eigenvalues = np.empty((len(self), 2), dtype=float)
@ -257,9 +273,10 @@ class Results(list):
Parameters
----------
time_units : {"s", "d", "h", "min"}, optional
time_units : {"s", "d", "min", "h", "a"}, optional
Return the vector in these units. Default is to
convert to days
convert to days ``"d"``. Other options are seconds ``"s"``, minutes
``"min"``, hours ``"h"``, days ``"d"``, and Julian years ``"a"``.
Returns
-------
@ -267,7 +284,7 @@ class Results(list):
1-D vector of time points
"""
cv.check_value("time_units", time_units, {"s", "d", "min", "h"})
cv.check_value("time_units", time_units, {"s", "d", "min", "h", "a"})
times = np.fromiter(
(r.time[0] for r in self),
@ -296,8 +313,9 @@ class Results(list):
----------
time : float
Desired point in time
time_units : {"s", "d", "min", "h"}, optional
Units on ``time``. Default: days
time_units : {"s", "d", "min", "h", "a"}, optional
Units on ``time``. Default: days ``"d"``. Other options are seconds
``"s"``, minutes ``"min"``, hours ``"h"`` and Julian years ``"a"``.
atol : float, optional
Absolute tolerance (in ``time_units``) if ``time`` is not
found.

View file

@ -70,14 +70,16 @@ def test_get_keff(res):
np.testing.assert_allclose(k[:, 1], u_ref)
@pytest.mark.parametrize("unit", ("s", "d", "min", "h"))
@pytest.mark.parametrize("unit", ("s", "d", "min", "h", "a"))
def test_get_steps(unit):
# Make a Results full of near-empty Result instances
# Just fill out a time schedule
results = openmc.deplete.Results()
# Time in units of unit
times = np.linspace(0, 100, num=5)
if unit == "d":
if unit == "a":
conversion_to_seconds = 60 * 60 * 24 * 365.25
elif unit == "d":
conversion_to_seconds = 60 * 60 * 24
elif unit == "h":
conversion_to_seconds = 60 * 60