diff --git a/docs/source/pythonapi/deplete.rst b/docs/source/pythonapi/deplete.rst index 9f7d8c447..151e728d5 100644 --- a/docs/source/pythonapi/deplete.rst +++ b/docs/source/pythonapi/deplete.rst @@ -40,18 +40,18 @@ transport-depletion coupling algorithms `_. SICELIIntegrator SILEQIIntegrator -Each of these classes expects a "transport operator" to be passed. An operator -specific to OpenMC is available using the following class: - +Each of these classes expects a "transport operator" to be passed. .. autosummary:: :toctree: generated :nosignatures: :template: mycallable.rst Operator + FluxDepletionOperator -The :class:`Operator` must also have some knowledge of how nuclides transmute -and decay. This is handled by the :class:`Chain`. +The :class:`Operator` and :class:`FluxDepletionOperator` classes must also have +some knowledge of how nuclides transmute and decay. This is handled by the +:class:`Chain`. Minimal Example --------------- diff --git a/docs/source/usersguide/depletion.rst b/docs/source/usersguide/depletion.rst index 57619611f..f4f0ac869 100644 --- a/docs/source/usersguide/depletion.rst +++ b/docs/source/usersguide/depletion.rst @@ -19,14 +19,13 @@ transmutation equations and the method used for advancing time. At present, the :class:`openmc.deplete.Operator` (which uses the OpenMC transport solver), but in principle additional operator classes based on other transport codes could be implemented and no changes to the depletion solver itself would be needed. The -operator class requires a :class:`openmc.Geometry` instance and a -:class:`openmc.Settings` instance:: +operator class requires a :class:`openmc.model.Model` instance containing +material, geometry, and settings information:: - geom = openmc.Geometry() - settings = openmc.Settings() + model = openmc.model.Model() ... - op = openmc.deplete.Operator(geom, settings) + op = openmc.deplete.Operator(model) Any material that contains a fissionable nuclide is depleted by default, but this can behavior can be changed with the :attr:`Material.depletable` attribute. @@ -81,7 +80,7 @@ When constructing the :class:`~openmc.deplete.Operator`, you should indicate that normalization of tally results will be done based on the source rate rather than a power or power density:: - op = openmc.deplete.Operator(geometry, settings, normalization_mode='source-rate') + op = openmc.deplete.Operator(model, normalization_mode='source-rate') Finally, when creating a depletion integrator, use the ``source_rates`` argument:: @@ -127,7 +126,7 @@ A more complete way to model the energy deposition is to use the modified heating reactions described in :ref:`methods_heating`. These values can be used to normalize reaction rates instead of using the fission reaction rates with:: - op = openmc.deplete.Operator(geometry, settings, "chain.xml", + op = openmc.deplete.Operator(model, "chain.xml", normalization_mode="energy-deposition") These modified heating libraries can be generated by running the latest version @@ -160,7 +159,7 @@ the next transport step. This can be countered by instructing the operator to treat repeated instances of the same material as a unique material definition with:: - op = openmc.deplete.Operator(geometry, settings, chain_file, + op = openmc.deplete.Operator(model, chain_file, diff_burnable_mats=True) For our example problem, this would deplete fuel on the outer region of the @@ -177,3 +176,39 @@ across all material instances. This will increase the total memory usage and run time due to an increased number of tallies and material definitions. +Transport-independent depletion +------------------------------- + +.. note:: + + This is a brand-new feature and is under heavy development. API changes are + possible and likely in the near future. + +OpenMC also supports transport-independent depletion calculations using the +:class:`FluxDepletionOperator` class. Rather than taking a +:class:`openmc.model.Model` object, this class accepts a volume, +a dictionary of nuclide concentrations, a flux spectra, and one-group +microscopic cross sections as a pandas dataframe. The class includes +helper functions to constructe the dataframe from a csv file or from +data arrays:: + + ... + micro_xs = FluxDepletionOperator.create_micro_xs_from_csv(micro_xs_path) + nuclides = {'U234':8.92e18, + 'U235':9.98e20, + 'U238':2.22e22, + 'U236':4.57e18, + 'O16':4.64e22, + 'O17':1.76e19} + volume = 0.5 + flux = 1.16e15 + + op = FluxDepletionOperator(volume, nuclides, micro_xs, flux. chain_file) + + +A user can then define an integrator class as they would for a coupled +transport-depletion calculation and follow the steps from there. +present in the depletion chain. + +.. note:: Ideally, one-group cross section data should be available for every reaction + in the depletion chain.