Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
f3e7c7c
Support for passing fission yields to Chain.form_matrix
drewejohnson Jul 24, 2019
72bf884
Pass fission yields to depletion matrix_func
drewejohnson Aug 2, 2019
8cd71be
Store depletion fission yields with common yield matrix
drewejohnson Aug 2, 2019
599d473
Add FissionYieldHelper for energy-dependent fission yields
drewejohnson Aug 2, 2019
27f2c6b
Guard against divide by zero in fission yield helper
drewejohnson Aug 5, 2019
c732336
Avert bad numpy slices unpacking fission yields with no materials
drewejohnson Aug 6, 2019
5fb8ec2
Document and test the default Chain fission yields
drewejohnson Aug 8, 2019
3f42fc8
Remove FissionYieldHelper.libraries; Return from compute_yields
drewejohnson Aug 8, 2019
d10b83e
Document FissionYieldDistribution
drewejohnson Aug 8, 2019
7268113
Apply suggestions from code review
drewejohnson Aug 9, 2019
fab8599
Document openmc.deplete.nuclide.FissionYield
drewejohnson Aug 12, 2019
6d4d25a
Implement add, imul, rmul for openmc.deplete.FissionYield
drewejohnson Aug 13, 2019
2cfbb21
Provide abstract FissionYieldHelper class
drewejohnson Aug 13, 2019
d8b9f5d
Add ConstantFissionYieldHelper concrete class
drewejohnson Aug 13, 2019
ca435b0
Add TalliedFissionYieldHelper abstract helper
drewejohnson Aug 13, 2019
f82dc83
Add FissionYieldCutoffHelper for weighting yields by a cutoff energy
drewejohnson Aug 13, 2019
ebf2f25
Make number of burnable materials optional for TalliedFissionYieldHelper
drewejohnson Aug 13, 2019
1d7f79e
Determine fission yield helper based on Operator arguments
drewejohnson Aug 13, 2019
46ce147
Revert ebf2f25ab and add from_operator class method
drewejohnson Aug 13, 2019
0944503
Document Chain.fission_yields attribute
drewejohnson Aug 14, 2019
c1d66bc
Ensure # fission yields == # burnable materials in cram.deplete
drewejohnson Aug 14, 2019
6556abc
Add empty fission yields to tests.TestChain
drewejohnson Aug 14, 2019
0931b58
Fix wonky layout in test_deplete_fission_yields
drewejohnson Aug 14, 2019
f2fa86f
Delegate Nuclide yield properties to FissionYieldDistribution
drewejohnson Aug 14, 2019
454e6cc
Add AveragedFissionYieldHelper operator helper
drewejohnson Aug 14, 2019
aa86aa5
Improve documentation for FissionYieldHelpers
drewejohnson Aug 14, 2019
d8b5752
Make n_bmat required only for FissionYieldCutoffHelper
drewejohnson Aug 15, 2019
73a3ad3
Guard against using FPY tally results if not needed
drewejohnson Aug 16, 2019
0cf3ea3
Improve updating of nuclides on tallied FPY helpers
drewejohnson Aug 19, 2019
2aa1849
Apply suggestions from code review
drewejohnson Aug 21, 2019
1d046ab
Support kwargs for FissionYieldHelper.from_operator
drewejohnson Aug 21, 2019
6735657
Don't append to Tally filters on FY helpers
drewejohnson Aug 21, 2019
b19a2db
Respond to reviewer comments on FY helpers
drewejohnson Aug 21, 2019
f977962
Support passing nuclide name to Nuclide objects
drewejohnson Aug 21, 2019
60f8979
Use dictionary to create FissionYieldDistribution
drewejohnson Aug 21, 2019
687d287
Allow Nuclide.yield_data to be None
drewejohnson Aug 21, 2019
8e2bb0b
Improve testing for FY helpers using C API
drewejohnson Aug 21, 2019
93d68a2
Merge branch 'develop' into chain-fission-yields
drewejohnson Aug 21, 2019
4f46aa8
Teach deplete.Nuclide.validate about new fission yields
drewejohnson Aug 21, 2019
7b17596
Use constant FY if cutoff energy outside provided yields
drewejohnson Aug 22, 2019
91c08ef
Improve/expand special methods for FissionYield
drewejohnson Aug 22, 2019
6123224
Update documentation for FissionYieldDistribution
drewejohnson Aug 22, 2019
1e5cfe0
Return list of str from FY helpers update_tally_nuclides
drewejohnson Aug 22, 2019
991a36d
Pass strings to os functions in test_deplete_fission_yields
drewejohnson Aug 22, 2019
129ee7e
Merge branch 'develop' into chain-fission-yields
drewejohnson Aug 23, 2019
6c5dfd6
Merge branch 'develop' into chain-fission-yields
drewejohnson Aug 30, 2019
399b77e
Clean up internals for AveragedFissionYieldHelper
drewejohnson Aug 30, 2019
c486b41
Use python API for setup in test_deplete_fission_yields
drewejohnson Aug 30, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions docs/source/pythonapi/deplete.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

.. module:: openmc.deplete

Several functions are provided that implement different time-integration
Several classes are provided that implement different time-integration
algorithms for depletion calculations, which are described in detail in Colin
Josey's thesis, `Development and analysis of high order neutron
transport-depletion coupling algorithms <http://hdl.handle.net/1721.1/113721>`_.
Expand All @@ -25,7 +25,7 @@ transport-depletion coupling algorithms <http://hdl.handle.net/1721.1/113721>`_.
SICELIIntegrator
SILEQIIntegrator

Each of these functions expects a "transport operator" to be passed. An operator
Each of these classes expects a "transport operator" to be passed. An operator
specific to OpenMC is available using the following class:

.. autosummary::
Expand Down Expand Up @@ -65,6 +65,8 @@ for a depletion chain:
DecayTuple
Nuclide
ReactionTuple
FissionYieldDistribution
FissionYield

The following classes are used during a depletion simulation and store auxiliary
data, such as number densities and reaction rates for each material.
Expand All @@ -75,13 +77,25 @@ data, such as number densities and reaction rates for each material.
:template: myclass.rst

AtomNumber
ChainFissionHelper
DirectReactionRateHelper
OperatorResult
ReactionRates
Results
ResultsList

The following classes are used to help the :class:`openmc.deplete.Operator`
compute quantities like effective fission yields, reaction rates, and
total system energy.

.. autosummary::
:toctree: generated
:nosignatures:
:template: myclass.rst

helpers.AveragedFissionYieldHelper
helpers.ChainFissionHelper
helpers.ConstantFissionYieldHelper
helpers.DirectReactionRateHelper
helpers.FissionYieldCutoffHelper

The following classes are abstract classes that can be used to extend the
:mod:`openmc.deplete` capabilities:
Expand All @@ -91,8 +105,10 @@ The following classes are abstract classes that can be used to extend the
:nosignatures:
:template: myclass.rst

ReactionRateHelper
EnergyHelper
FissionYieldHelper
ReactionRateHelper
TalliedFissionYieldHelper
TransportOperator

Custom integrators can be developed by subclassing from the following abstract
Expand Down
83 changes: 42 additions & 41 deletions openmc/deplete/_matrix_funcs.py
Original file line number Diff line number Diff line change
@@ -1,77 +1,78 @@
"""Functions to form the special matrix for depletion"""


def celi_f1(chain, rates):
return (5 / 12 * chain.form_matrix(rates[0])
+ 1 / 12 * chain.form_matrix(rates[1]))
def celi_f1(chain, rates, fission_yields=None):
return (5 / 12 * chain.form_matrix(rates[0], fission_yields)
+ 1 / 12 * chain.form_matrix(rates[1], fission_yields))


def celi_f2(chain, rates):
return (1 / 12 * chain.form_matrix(rates[0])
+ 5 / 12 * chain.form_matrix(rates[1]))
def celi_f2(chain, rates, fission_yields=None):
return (1 / 12 * chain.form_matrix(rates[0], fission_yields)
+ 5 / 12 * chain.form_matrix(rates[1], fission_yields))


def cf4_f1(chain, rates):
return 1 / 2 * chain.form_matrix(rates)
def cf4_f1(chain, rates, fission_yields=None):
return 1 / 2 * chain.form_matrix(rates, fission_yields)


def cf4_f2(chain, rates):
return -1 / 2 * chain.form_matrix(rates[0]) + chain.form_matrix(rates[1])
def cf4_f2(chain, rates, fission_yields=None):
return (-1 / 2 * chain.form_matrix(rates[0], fission_yields)
+ chain.form_matrix(rates[1], fission_yields))


def cf4_f3(chain, rates):
return (1 / 4 * chain.form_matrix(rates[0])
+ 1 / 6 * chain.form_matrix(rates[1])
+ 1 / 6 * chain.form_matrix(rates[2])
- 1 / 12 * chain.form_matrix(rates[3]))
def cf4_f3(chain, rates, fission_yields=None):
return (1 / 4 * chain.form_matrix(rates[0], fission_yields)
+ 1 / 6 * chain.form_matrix(rates[1], fission_yields)
+ 1 / 6 * chain.form_matrix(rates[2], fission_yields)
- 1 / 12 * chain.form_matrix(rates[3], fission_yields))


def cf4_f4(chain, rates):
return (-1 / 12 * chain.form_matrix(rates[0])
+ 1 / 6 * chain.form_matrix(rates[1])
+ 1 / 6 * chain.form_matrix(rates[2])
+ 1 / 4 * chain.form_matrix(rates[3]))
def cf4_f4(chain, rates, fission_yields=None):
return (-1 / 12 * chain.form_matrix(rates[0], fission_yields)
+ 1 / 6 * chain.form_matrix(rates[1], fission_yields)
+ 1 / 6 * chain.form_matrix(rates[2], fission_yields)
+ 1 / 4 * chain.form_matrix(rates[3], fission_yields))


def rk4_f1(chain, rates):
return 1 / 2 * chain.form_matrix(rates)
def rk4_f1(chain, rates, fission_yields=None):
return 1 / 2 * chain.form_matrix(rates, fission_yields)


def rk4_f4(chain, rates):
return (1 / 6 * chain.form_matrix(rates[0])
+ 1 / 3 * chain.form_matrix(rates[1])
+ 1 / 3 * chain.form_matrix(rates[2])
+ 1 / 6 * chain.form_matrix(rates[3]))
def rk4_f4(chain, rates, fission_yields=None):
return (1 / 6 * chain.form_matrix(rates[0], fission_yields)
+ 1 / 3 * chain.form_matrix(rates[1], fission_yields)
+ 1 / 3 * chain.form_matrix(rates[2], fission_yields)
+ 1 / 6 * chain.form_matrix(rates[3], fission_yields))


def leqi_f1(chain, inputs):
f1 = chain.form_matrix(inputs[0])
f2 = chain.form_matrix(inputs[1])
def leqi_f1(chain, inputs, fission_yields):
f1 = chain.form_matrix(inputs[0], fission_yields)
f2 = chain.form_matrix(inputs[1], fission_yields)
dt_l, dt = inputs[2], inputs[3]
return -dt / (12 * dt_l) * f1 + (dt + 6 * dt_l) / (12 * dt_l) * f2


def leqi_f2(chain, inputs):
f1 = chain.form_matrix(inputs[0])
f2 = chain.form_matrix(inputs[1])
def leqi_f2(chain, inputs, fission_yields=None):
f1 = chain.form_matrix(inputs[0], fission_yields)
f2 = chain.form_matrix(inputs[1], fission_yields)
dt_l, dt = inputs[2], inputs[3]
return -5 * dt / (12 * dt_l) * f1 + (5 * dt + 6 * dt_l) / (12 * dt_l) * f2


def leqi_f3(chain, inputs):
f1 = chain.form_matrix(inputs[0])
f2 = chain.form_matrix(inputs[1])
f3 = chain.form_matrix(inputs[2])
def leqi_f3(chain, inputs, fission_yields=None):
f1 = chain.form_matrix(inputs[0], fission_yields)
f2 = chain.form_matrix(inputs[1], fission_yields)
f3 = chain.form_matrix(inputs[2], fission_yields)
dt_l, dt = inputs[3], inputs[4]
return (-dt ** 2 / (12 * dt_l * (dt + dt_l)) * f1
+ (dt ** 2 + 6 * dt * dt_l + 5 * dt_l ** 2)
/ (12 * dt_l * (dt + dt_l)) * f2 + dt_l / (12 * (dt + dt_l)) * f3)


def leqi_f4(chain, inputs):
f1 = chain.form_matrix(inputs[0])
f2 = chain.form_matrix(inputs[1])
f3 = chain.form_matrix(inputs[2])
def leqi_f4(chain, inputs, fission_yields=None):
f1 = chain.form_matrix(inputs[0], fission_yields)
f2 = chain.form_matrix(inputs[1], fission_yields)
f3 = chain.form_matrix(inputs[2], fission_yields)
dt_l, dt = inputs[3], inputs[4]
return (-dt ** 2 / (12 * dt_l * (dt + dt_l)) * f1
+ (dt ** 2 + 2 * dt * dt_l + dt_l ** 2)
Expand Down
Loading