mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-27 05:35:49 -04:00
Merge pull request #753 from samuelshaner/mg-mode-delayed-matrix
Prompt and delayed nu-fission group-to-group matrices
This commit is contained in:
commit
59bf2cc528
18 changed files with 1277 additions and 42 deletions
|
|
@ -293,6 +293,7 @@ Multi-group Cross Sections
|
|||
openmc.mgxs.NuScatterXS
|
||||
openmc.mgxs.NuScatterMatrixXS
|
||||
openmc.mgxs.PromptNuFissionXS
|
||||
openmc.mgxs.PromptNuFissionMatrixXS
|
||||
openmc.mgxs.ScatterXS
|
||||
openmc.mgxs.ScatterMatrixXS
|
||||
openmc.mgxs.TotalXS
|
||||
|
|
@ -309,6 +310,7 @@ Multi-delayed-group Cross Sections
|
|||
openmc.mgxs.MDGXS
|
||||
openmc.mgxs.ChiDelayed
|
||||
openmc.mgxs.DelayedNuFissionXS
|
||||
openmc.mgxs.DelayedNuFissionMatrixXS
|
||||
openmc.mgxs.Beta
|
||||
openmc.mgxs.DecayRate
|
||||
|
||||
|
|
|
|||
|
|
@ -514,7 +514,7 @@ class Library(object):
|
|||
----------
|
||||
domain : Material or Cell or Universe or Integral
|
||||
The material, cell, or universe object of interest (or its ID)
|
||||
mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'multiplicity matrix', 'nu-fission matrix', chi', 'chi-prompt', 'inverse-velocity', 'prompt-nu-fission', 'delayed-nu-fission', 'chi-delayed', 'beta'}
|
||||
mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'multiplicity matrix', 'nu-fission matrix', chi', 'chi-prompt', 'inverse-velocity', 'prompt-nu-fission', 'prompt-nu-fission matrix', 'delayed-nu-fission', 'delayed-nu-fission matrix', 'chi-delayed', 'beta'}
|
||||
The type of multi-group cross section object to return
|
||||
|
||||
Returns
|
||||
|
|
@ -975,12 +975,24 @@ class Library(object):
|
|||
nuclide=[nuclide],
|
||||
subdomain=subdomain)
|
||||
|
||||
if 'prompt-nu-fission matrix' in self.mgxs_types:
|
||||
mymgxs = self.get_mgxs(domain, 'prompt-nu-fission matrix')
|
||||
xsdata.set_prompt_nu_fission_mgxs(mymgxs, xs_type=xs_type,
|
||||
nuclide=[nuclide],
|
||||
subdomain=subdomain)
|
||||
|
||||
if 'delayed-nu-fission' in self.mgxs_types:
|
||||
mymgxs = self.get_mgxs(domain, 'delayed-nu-fission')
|
||||
xsdata.set_delayed_nu_fission_mgxs(mymgxs, xs_type=xs_type,
|
||||
nuclide=[nuclide],
|
||||
subdomain=subdomain)
|
||||
|
||||
if 'delayed-nu-fission matrix' in self.mgxs_types:
|
||||
mymgxs = self.get_mgxs(domain, 'delayed-nu-fission matrix')
|
||||
xsdata.set_delayed_nu_fission_mgxs(mymgxs, xs_type=xs_type,
|
||||
nuclide=[nuclide],
|
||||
subdomain=subdomain)
|
||||
|
||||
if 'beta' in self.mgxs_types:
|
||||
mymgxs = self.get_mgxs(domain, 'nu-fission')
|
||||
xsdata.set_beta_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide],
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ import openmc.checkvalue as cv
|
|||
MDGXS_TYPES = ['delayed-nu-fission',
|
||||
'chi-delayed',
|
||||
'beta',
|
||||
'decay-rate']
|
||||
'decay-rate',
|
||||
'delayed-nu-fission matrix']
|
||||
|
||||
# Maximum number of delayed groups, from src/constants.F90
|
||||
MAX_DELAYED_GROUPS = 8
|
||||
|
|
@ -211,7 +212,7 @@ class MDGXS(MGXS):
|
|||
|
||||
Parameters
|
||||
----------
|
||||
mdgxs_type : {'delayed-nu-fission', 'chi-delayed', 'beta', 'decay-rate'}
|
||||
mdgxs_type : {'delayed-nu-fission', 'chi-delayed', 'beta', 'decay-rate', 'delayed-nu-fission matrix'}
|
||||
The type of multi-delayed-group cross section object to return
|
||||
domain : openmc.Material or openmc.Cell or openmc.Universe or
|
||||
openmc.Mesh
|
||||
|
|
@ -249,6 +250,9 @@ class MDGXS(MGXS):
|
|||
mdgxs = Beta(domain, domain_type, energy_groups, delayed_groups)
|
||||
elif mdgxs_type == 'decay-rate':
|
||||
mdgxs = DecayRate(domain, domain_type, energy_groups, delayed_groups)
|
||||
elif mdgxs_type == 'delayed-nu-fission matrix':
|
||||
mdgxs = DelayedNuFissionMatrixXS(domain, domain_type, energy_groups,
|
||||
delayed_groups)
|
||||
|
||||
mdgxs.by_nuclide = by_nuclide
|
||||
mdgxs.name = name
|
||||
|
|
@ -1733,3 +1737,609 @@ class DecayRate(MDGXS):
|
|||
super(DecayRate, self)._compute_xs()
|
||||
|
||||
return self._xs_tally
|
||||
|
||||
|
||||
@add_metaclass(ABCMeta)
|
||||
class MatrixMDGXS(MDGXS):
|
||||
"""An abstract multi-delayed-group cross section for some energy group and
|
||||
delayed group structure within some spatial domain. This class is
|
||||
specifically intended for cross sections which depend on both the incoming
|
||||
and outgoing energy groups and are therefore represented by matrices.
|
||||
An example of this is the delayed-nu-fission matrix.
|
||||
|
||||
This class can be used for both OpenMC input generation and tally data
|
||||
post-processing to compute spatially-homogenized and energy-integrated
|
||||
multi-group and multi-delayed-group cross sections for downstream neutronics
|
||||
calculations.
|
||||
|
||||
NOTE: Users should instantiate the subclasses of this abstract class.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh
|
||||
The domain for spatial homogenization
|
||||
domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'}
|
||||
The domain type for spatial homogenization
|
||||
energy_groups : openmc.mgxs.EnergyGroups
|
||||
The energy group structure for energy condensation
|
||||
by_nuclide : bool
|
||||
If true, computes cross sections for each nuclide in domain
|
||||
name : str, optional
|
||||
Name of the multi-group cross section. Used as a label to identify
|
||||
tallies in OpenMC 'tallies.xml' file.
|
||||
delayed_groups : list of int
|
||||
Delayed groups to filter out the xs
|
||||
|
||||
Attributes
|
||||
----------
|
||||
name : str, optional
|
||||
Name of the multi-group cross section
|
||||
rxn_type : str
|
||||
Reaction type (e.g., 'total', 'nu-fission', etc.)
|
||||
by_nuclide : bool
|
||||
If true, computes cross sections for each nuclide in domain
|
||||
domain : Material or Cell or Universe or Mesh
|
||||
Domain for spatial homogenization
|
||||
domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'}
|
||||
Domain type for spatial homogenization
|
||||
energy_groups : openmc.mgxs.EnergyGroups
|
||||
Energy group structure for energy condensation
|
||||
delayed_groups : list of int
|
||||
Delayed groups to filter out the xs
|
||||
tally_trigger : openmc.Trigger
|
||||
An (optional) tally precision trigger given to each tally used to
|
||||
compute the cross section
|
||||
scores : list of str
|
||||
The scores in each tally used to compute the multi-group cross section
|
||||
filters : list of openmc.Filter
|
||||
The filters in each tally used to compute the multi-group cross section
|
||||
tally_keys : list of str
|
||||
The keys into the tallies dictionary for each tally used to compute
|
||||
the multi-group cross section
|
||||
estimator : {'tracklength', 'collision', 'analog'}
|
||||
The tally estimator used to compute the multi-group cross section
|
||||
tallies : collections.OrderedDict
|
||||
OpenMC tallies needed to compute the multi-group cross section
|
||||
rxn_rate_tally : openmc.Tally
|
||||
Derived tally for the reaction rate tally used in the numerator to
|
||||
compute the multi-group cross section. This attribute is None
|
||||
unless the multi-group cross section has been computed.
|
||||
xs_tally : openmc.Tally
|
||||
Derived tally for the multi-group cross section. This attribute
|
||||
is None unless the multi-group cross section has been computed.
|
||||
num_subdomains : int
|
||||
The number of subdomains is unity for 'material', 'cell' and 'universe'
|
||||
domain types. This is equal to the number of cell instances
|
||||
for 'distribcell' domain types (it is equal to unity prior to loading
|
||||
tally data from a statepoint file) and the number of mesh cells for
|
||||
'mesh' domain types.
|
||||
num_nuclides : int
|
||||
The number of nuclides for which the multi-group cross section is
|
||||
being tracked. This is unity if the by_nuclide attribute is False.
|
||||
nuclides : Iterable of str or 'sum'
|
||||
The optional user-specified nuclides for which to compute cross
|
||||
sections (e.g., 'U238', 'O16'). If by_nuclide is True but nuclides
|
||||
are not specified by the user, all nuclides in the spatial domain
|
||||
are included. This attribute is 'sum' if by_nuclide is false.
|
||||
sparse : bool
|
||||
Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format
|
||||
for compressed data storage
|
||||
loaded_sp : bool
|
||||
Whether or not a statepoint file has been loaded with tally data
|
||||
derived : bool
|
||||
Whether or not the MGXS is merged from one or more other MGXS
|
||||
hdf5_key : str
|
||||
The key used to index multi-group cross sections in an HDF5 data store
|
||||
|
||||
"""
|
||||
|
||||
@property
|
||||
def filters(self):
|
||||
# Create the non-domain specific Filters for the Tallies
|
||||
group_edges = self.energy_groups.group_edges
|
||||
energy = openmc.EnergyFilter(group_edges)
|
||||
energyout = openmc.EnergyoutFilter(group_edges)
|
||||
|
||||
if self.delayed_groups is not None:
|
||||
delayed = openmc.DelayedGroupFilter(self.delayed_groups)
|
||||
return [[energy], [delayed, energy, energyout]]
|
||||
else:
|
||||
return [[energy], [energy, energyout]]
|
||||
|
||||
def get_xs(self, in_groups='all', out_groups='all',
|
||||
subdomains='all', nuclides='all',
|
||||
xs_type='macro', order_groups='increasing',
|
||||
row_column='inout', value='mean', delayed_groups='all',
|
||||
squeeze=True, **kwargs):
|
||||
"""Returns an array of multi-group cross sections.
|
||||
|
||||
This method constructs a 4D NumPy array for the requested
|
||||
multi-group cross section data for one or more subdomains
|
||||
(1st dimension), delayed groups (2nd dimension), energy groups in
|
||||
(3rd dimension), energy groups out (4th dimension), and nuclides
|
||||
(5th dimension).
|
||||
|
||||
Parameters
|
||||
----------
|
||||
in_groups : Iterable of Integral or 'all'
|
||||
Incoming energy groups of interest. Defaults to 'all'.
|
||||
out_groups : Iterable of Integral or 'all'
|
||||
Outgoing energy groups of interest. Defaults to 'all'.
|
||||
subdomains : Iterable of Integral or 'all'
|
||||
Subdomain IDs of interest. Defaults to 'all'.
|
||||
nuclides : Iterable of str or 'all' or 'sum'
|
||||
A list of nuclide name strings (e.g., ['U235', 'U238']). The
|
||||
special string 'all' will return the cross sections for all
|
||||
nuclides in the spatial domain. The special string 'sum' will
|
||||
return the cross section summed over all nuclides. Defaults to
|
||||
'all'.
|
||||
xs_type: {'macro', 'micro'}
|
||||
Return the macro or micro cross section in units of cm^-1 or barns.
|
||||
Defaults to 'macro'.
|
||||
order_groups: {'increasing', 'decreasing'}
|
||||
Return the cross section indexed according to increasing or
|
||||
decreasing energy groups (decreasing or increasing energies).
|
||||
Defaults to 'increasing'.
|
||||
row_column: {'inout', 'outin'}
|
||||
Return the cross section indexed first by incoming group and
|
||||
second by outgoing group ('inout'), or vice versa ('outin').
|
||||
Defaults to 'inout'.
|
||||
value : {'mean', 'std_dev', 'rel_err'}
|
||||
A string for the type of value to return. Defaults to 'mean'.
|
||||
delayed_groups : list of int or 'all'
|
||||
Delayed groups of interest. Defaults to 'all'.
|
||||
squeeze : bool
|
||||
A boolean representing whether to eliminate the extra dimensions
|
||||
of the multi-dimensional array to be returned. Defaults to True.
|
||||
|
||||
Returns
|
||||
-------
|
||||
numpy.ndarray
|
||||
A NumPy array of the multi-group cross section indexed in the order
|
||||
each group and subdomain is listed in the parameters.
|
||||
|
||||
Raises
|
||||
------
|
||||
ValueError
|
||||
When this method is called before the multi-group cross section is
|
||||
computed from tally data.
|
||||
|
||||
"""
|
||||
|
||||
cv.check_value('value', value, ['mean', 'std_dev', 'rel_err'])
|
||||
cv.check_value('xs_type', xs_type, ['macro', 'micro'])
|
||||
|
||||
# FIXME: Unable to get microscopic xs for mesh domain because the mesh
|
||||
# cells do not know the nuclide densities in each mesh cell.
|
||||
if self.domain_type == 'mesh' and xs_type == 'micro':
|
||||
msg = 'Unable to get micro xs for mesh domain since the mesh ' \
|
||||
'cells do not know the nuclide densities in each mesh cell.'
|
||||
raise ValueError(msg)
|
||||
|
||||
filters = []
|
||||
filter_bins = []
|
||||
|
||||
# Construct a collection of the domain filter bins
|
||||
if not isinstance(subdomains, string_types):
|
||||
cv.check_iterable_type('subdomains', subdomains, Integral,
|
||||
max_depth=3)
|
||||
for subdomain in subdomains:
|
||||
filters.append(_DOMAIN_TO_FILTER[self.domain_type])
|
||||
filter_bins.append((subdomain,))
|
||||
|
||||
# Construct list of energy group bounds tuples for all requested groups
|
||||
if not isinstance(in_groups, string_types):
|
||||
cv.check_iterable_type('groups', in_groups, Integral)
|
||||
for group in in_groups:
|
||||
filters.append(openmc.EnergyFilter)
|
||||
filter_bins.append((
|
||||
self.energy_groups.get_group_bounds(group),))
|
||||
|
||||
# Construct list of energy group bounds tuples for all requested groups
|
||||
if not isinstance(out_groups, string_types):
|
||||
cv.check_iterable_type('groups', out_groups, Integral)
|
||||
for group in out_groups:
|
||||
filters.append(openmc.EnergyoutFilter)
|
||||
filter_bins.append((
|
||||
self.energy_groups.get_group_bounds(group),))
|
||||
|
||||
# Construct list of delayed group tuples for all requested groups
|
||||
if not isinstance(delayed_groups, string_types):
|
||||
cv.check_type('delayed groups', delayed_groups, list, int)
|
||||
for delayed_group in delayed_groups:
|
||||
filters.append(openmc.DelayedGroupFilter)
|
||||
filter_bins.append((delayed_group,))
|
||||
|
||||
# Construct a collection of the nuclides to retrieve from the xs tally
|
||||
if self.by_nuclide:
|
||||
if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']:
|
||||
query_nuclides = self.get_nuclides()
|
||||
else:
|
||||
query_nuclides = nuclides
|
||||
else:
|
||||
query_nuclides = ['total']
|
||||
|
||||
# Use tally summation if user requested the sum for all nuclides
|
||||
if nuclides == 'sum' or nuclides == ['sum']:
|
||||
xs_tally = self.xs_tally.summation(nuclides=query_nuclides)
|
||||
xs = xs_tally.get_values(filters=filters, filter_bins=filter_bins,
|
||||
value=value)
|
||||
else:
|
||||
xs = self.xs_tally.get_values(filters=filters,
|
||||
filter_bins=filter_bins,
|
||||
nuclides=query_nuclides, value=value)
|
||||
|
||||
# Divide by atom number densities for microscopic cross sections
|
||||
if xs_type == 'micro':
|
||||
if self.by_nuclide:
|
||||
densities = self.get_nuclide_densities(nuclides)
|
||||
else:
|
||||
densities = self.get_nuclide_densities('sum')
|
||||
if value == 'mean' or value == 'std_dev':
|
||||
xs /= densities[np.newaxis, :, np.newaxis]
|
||||
|
||||
# Eliminate the trivial score dimension
|
||||
xs = np.squeeze(xs, axis=len(xs.shape) - 1)
|
||||
xs = np.nan_to_num(xs)
|
||||
|
||||
if in_groups == 'all':
|
||||
num_in_groups = self.num_groups
|
||||
else:
|
||||
num_in_groups = len(in_groups)
|
||||
|
||||
if out_groups == 'all':
|
||||
num_out_groups = self.num_groups
|
||||
else:
|
||||
num_out_groups = len(out_groups)
|
||||
|
||||
if delayed_groups == 'all':
|
||||
num_delayed_groups = self.num_delayed_groups
|
||||
else:
|
||||
num_delayed_groups = len(delayed_groups)
|
||||
|
||||
# Reshape tally data array with separate axes for domain and energy
|
||||
num_subdomains = int(xs.shape[0] / (num_in_groups * num_out_groups *
|
||||
num_delayed_groups))
|
||||
new_shape = (num_subdomains, num_delayed_groups, num_in_groups,
|
||||
num_out_groups)
|
||||
new_shape += xs.shape[1:]
|
||||
xs = np.reshape(xs, new_shape)
|
||||
|
||||
# Transpose the matrix if requested by user
|
||||
if row_column == 'outin':
|
||||
xs = np.swapaxes(xs, 2, 3)
|
||||
|
||||
# Reverse data if user requested increasing energy groups since
|
||||
# tally data is stored in order of increasing energies
|
||||
if order_groups == 'increasing':
|
||||
xs = xs[:, :, ::-1, ::-1, :]
|
||||
|
||||
if squeeze:
|
||||
xs = np.squeeze(xs)
|
||||
xs = np.atleast_2d(xs)
|
||||
|
||||
return xs
|
||||
|
||||
def get_slice(self, nuclides=[], in_groups=[], out_groups=[],
|
||||
delayed_groups=[]):
|
||||
"""Build a sliced MatrixMDGXS object for the specified nuclides and
|
||||
energy groups.
|
||||
|
||||
This method constructs a new MdGXS to encapsulate a subset of the data
|
||||
represented by this MdGXS. The subset of data to include in the tally
|
||||
slice is determined by the nuclides, energy groups, and delayed groups
|
||||
specified in the input parameters.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
nuclides : list of str
|
||||
A list of nuclide name strings
|
||||
(e.g., ['U235', 'U238']; default is [])
|
||||
in_groups : list of int
|
||||
A list of incoming energy group indices starting at 1 for the high
|
||||
energies (e.g., [1, 2, 3]; default is [])
|
||||
out_groups : list of int
|
||||
A list of outgoing energy group indices starting at 1 for the high
|
||||
energies (e.g., [1, 2, 3]; default is [])
|
||||
delayed_groups : list of int
|
||||
A list of delayed group indices
|
||||
(e.g., [1, 2, 3]; default is [])
|
||||
|
||||
Returns
|
||||
-------
|
||||
openmc.mgxs.MatrixMDGXS
|
||||
A new MatrixMDGXS object which encapsulates the subset of data
|
||||
requested for the nuclide(s) and/or energy group(s) requested in
|
||||
the parameters.
|
||||
|
||||
"""
|
||||
|
||||
# Call super class method and null out derived tallies
|
||||
slice_xs = super(MatrixMDGXS, self).get_slice(nuclides, in_groups,
|
||||
delayed_groups)
|
||||
slice_xs._rxn_rate_tally = None
|
||||
slice_xs._xs_tally = None
|
||||
|
||||
# Slice outgoing energy groups if needed
|
||||
if len(out_groups) != 0:
|
||||
filter_bins = []
|
||||
for group in out_groups:
|
||||
group_bounds = self.energy_groups.get_group_bounds(group)
|
||||
filter_bins.append(group_bounds)
|
||||
filter_bins = [tuple(filter_bins)]
|
||||
|
||||
# Slice each of the tallies across energyout groups
|
||||
for tally_type, tally in slice_xs.tallies.items():
|
||||
if tally.contains_filter(openmc.EnergyoutFilter):
|
||||
tally_slice = tally.get_slice(
|
||||
filters=[openmc.EnergyoutFilter],
|
||||
filter_bins=filter_bins)
|
||||
slice_xs.tallies[tally_type] = tally_slice
|
||||
|
||||
slice_xs.sparse = self.sparse
|
||||
return slice_xs
|
||||
|
||||
def print_xs(self, subdomains='all', nuclides='all', xs_type='macro'):
|
||||
"""Prints a string representation for the multi-group cross section.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
subdomains : Iterable of Integral or 'all'
|
||||
The subdomain IDs of the cross sections to include in the report.
|
||||
Defaults to 'all'.
|
||||
nuclides : Iterable of str or 'all' or 'sum'
|
||||
The nuclides of the cross-sections to include in the report. This
|
||||
may be a list of nuclide name strings (e.g., ['U235', 'U238']).
|
||||
The special string 'all' will report the cross sections for all
|
||||
nuclides in the spatial domain. The special string 'sum' will
|
||||
report the cross sections summed over all nuclides. Defaults to
|
||||
'all'.
|
||||
xs_type: {'macro', 'micro'}
|
||||
Return the macro or micro cross section in units of cm^-1 or barns.
|
||||
Defaults to 'macro'.
|
||||
|
||||
"""
|
||||
|
||||
# Construct a collection of the subdomains to report
|
||||
if not isinstance(subdomains, string_types):
|
||||
cv.check_iterable_type('subdomains', subdomains, Integral)
|
||||
elif self.domain_type == 'distribcell':
|
||||
subdomains = np.arange(self.num_subdomains, dtype=np.int)
|
||||
elif self.domain_type == 'mesh':
|
||||
xyz = [range(1, x+1) for x in self.domain.dimension]
|
||||
subdomains = list(itertools.product(*xyz))
|
||||
else:
|
||||
subdomains = [self.domain.id]
|
||||
|
||||
# Construct a collection of the nuclides to report
|
||||
if self.by_nuclide:
|
||||
if nuclides == 'all':
|
||||
nuclides = self.get_nuclides()
|
||||
if nuclides == 'sum':
|
||||
nuclides = ['sum']
|
||||
else:
|
||||
cv.check_iterable_type('nuclides', nuclides, string_types)
|
||||
else:
|
||||
nuclides = ['sum']
|
||||
|
||||
cv.check_value('xs_type', xs_type, ['macro', 'micro'])
|
||||
|
||||
# Build header for string with type and domain info
|
||||
string = 'Multi-Delayed-Group XS\n'
|
||||
string += '{0: <16}=\t{1}\n'.format('\tReaction Type', self.rxn_type)
|
||||
string += '{0: <16}=\t{1}\n'.format('\tDomain Type', self.domain_type)
|
||||
string += '{0: <16}=\t{1}\n'.format('\tDomain ID', self.domain.id)
|
||||
|
||||
# Generate the header for an individual XS
|
||||
xs_header = '\tCross Sections [{0}]:'.format(self.get_units(xs_type))
|
||||
|
||||
# If cross section data has not been computed, only print string header
|
||||
if self.tallies is None:
|
||||
print(string)
|
||||
return
|
||||
|
||||
string += '{0: <16}\n'.format('\tEnergy Groups:')
|
||||
template = '{0: <12}Group {1} [{2: <10} - {3: <10}MeV]\n'
|
||||
|
||||
# Loop over energy groups ranges
|
||||
for group in range(1, self.num_groups + 1):
|
||||
bounds = self.energy_groups.get_group_bounds(group)
|
||||
string += template.format('', group, bounds[0], bounds[1])
|
||||
|
||||
# Loop over all subdomains
|
||||
for subdomain in subdomains:
|
||||
|
||||
if self.domain_type == 'distribcell':
|
||||
string += '{: <16}=\t{}\n'.format('\tSubdomain', subdomain)
|
||||
|
||||
# Loop over all Nuclides
|
||||
for nuclide in nuclides:
|
||||
|
||||
# Build header for nuclide type
|
||||
if xs_type != 'sum':
|
||||
string += '{: <16}=\t{}\n'.format('\tNuclide', nuclide)
|
||||
|
||||
# Build header for cross section type
|
||||
string += '{: <16}\n'.format(xs_header)
|
||||
|
||||
if self.delayed_groups is not None:
|
||||
|
||||
for delayed_group in self.delayed_groups:
|
||||
|
||||
template = '{0: <12}Delayed Group {1}:\t'
|
||||
string += template.format('', delayed_group)
|
||||
string += '\n'
|
||||
|
||||
template = '{0: <12}Group {1} -> Group {2}:\t\t'
|
||||
|
||||
# Loop over incoming/outgoing energy groups ranges
|
||||
for in_group in range(1, self.num_groups + 1):
|
||||
for out_group in range(1, self.num_groups + 1):
|
||||
string += template.format('', in_group, out_group)
|
||||
average = self.get_xs([in_group], [out_group],
|
||||
[subdomain], [nuclide],
|
||||
xs_type=xs_type,
|
||||
value='mean',
|
||||
delayed_groups=[delayed_group])
|
||||
rel_err = self.get_xs([in_group], [out_group],
|
||||
[subdomain], [nuclide],
|
||||
xs_type=xs_type,
|
||||
value='rel_err',
|
||||
delayed_groups=[delayed_group])
|
||||
average = average.flatten()[0]
|
||||
rel_err = rel_err.flatten()[0] * 100.
|
||||
string += '{:.2e} +/- {:.2e}%'.format(average,
|
||||
rel_err)
|
||||
string += '\n'
|
||||
string += '\n'
|
||||
string += '\n'
|
||||
else:
|
||||
|
||||
template = '{0: <12}Group {1} -> Group {2}:\t\t'
|
||||
|
||||
# Loop over incoming/outgoing energy groups ranges
|
||||
for in_group in range(1, self.num_groups + 1):
|
||||
for out_group in range(1, self.num_groups + 1):
|
||||
string += template.format('', in_group, out_group)
|
||||
average = self.get_xs([in_group], [out_group],
|
||||
[subdomain], [nuclide],
|
||||
xs_type=xs_type, value='mean')
|
||||
rel_err = self.get_xs([in_group], [out_group],
|
||||
[subdomain], [nuclide],
|
||||
xs_type=xs_type, value='rel_err')
|
||||
average = average.flatten()[0]
|
||||
rel_err = rel_err.flatten()[0] * 100.
|
||||
string += '{:.2e} +/- {:.2e}%'.format(average,
|
||||
rel_err)
|
||||
string += '\n'
|
||||
string += '\n'
|
||||
string += '\n'
|
||||
string += '\n'
|
||||
|
||||
print(string)
|
||||
|
||||
|
||||
class DelayedNuFissionMatrixXS(MatrixMDGXS):
|
||||
r"""A fission delayed neutron production matrix multi-group cross section.
|
||||
|
||||
This class can be used for both OpenMC input generation and tally data
|
||||
post-processing to compute spatially-homogenized and energy-integrated
|
||||
multi-group fission neutron production cross sections for multi-group
|
||||
neutronics calculations. At a minimum, one needs to set the
|
||||
:attr:`DelayedNuFissionMatrixXS.energy_groups` and
|
||||
:attr:`DelayedNuFissionMatrixXS.domain` properties. Tallies for the flux and
|
||||
appropriate reaction rates over the specified domain are generated
|
||||
automatically via the :attr:`DelayedNuFissionMatrixXS.tallies` property,
|
||||
which can then be appended to a :class:`openmc.Tallies` instance.
|
||||
|
||||
For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the
|
||||
necessary data to compute multi-group cross sections from a
|
||||
:class:`openmc.StatePoint` instance. The derived multi-group cross section
|
||||
can then be obtained from the :attr:`DelayedNuFissionMatrixXS.xs_tally`
|
||||
property.
|
||||
|
||||
For a spatial domain :math:`V`, energy group :math:`[E_g,E_{g-1}]`, and
|
||||
delayed group :math:`d`, the fission delayed neutron production cross
|
||||
section is calculated as:
|
||||
|
||||
.. math::
|
||||
|
||||
\langle \nu\sigma_{f,g'\rightarrow g} \phi \rangle &= \int_{r \in V} dr
|
||||
\int_{4\pi} d\Omega' \int_{E_{g'}}^{E_{g'-1}} dE' \int_{E_g}^{E_{g-1}} dE
|
||||
\; \chi(E) \nu\sigma_f^d (r, E') \psi(r, E', \Omega')\\
|
||||
\langle \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega
|
||||
\int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega) \\
|
||||
\nu\sigma_{f,g'\rightarrow g} &= \frac{\langle \nu\sigma_{f,g'\rightarrow
|
||||
g}^d \phi \rangle}{\langle \phi \rangle}
|
||||
|
||||
|
||||
Parameters
|
||||
----------
|
||||
domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh
|
||||
The domain for spatial homogenization
|
||||
domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'}
|
||||
The domain type for spatial homogenization
|
||||
groups : openmc.mgxs.EnergyGroups
|
||||
The energy group structure for energy condensation
|
||||
by_nuclide : bool
|
||||
If true, computes cross sections for each nuclide in domain
|
||||
name : str, optional
|
||||
Name of the multi-group cross section. Used as a label to identify
|
||||
tallies in OpenMC 'tallies.xml' file.
|
||||
delayed_groups : list of int
|
||||
Delayed groups to filter out the xs
|
||||
|
||||
Attributes
|
||||
----------
|
||||
name : str, optional
|
||||
Name of the multi-group cross section
|
||||
rxn_type : str
|
||||
Reaction type (e.g., 'total', 'nu-fission', etc.)
|
||||
by_nuclide : bool
|
||||
If true, computes cross sections for each nuclide in domain
|
||||
domain : Material or Cell or Universe or Mesh
|
||||
Domain for spatial homogenization
|
||||
domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'}
|
||||
Domain type for spatial homogenization
|
||||
energy_groups : openmc.mgxs.EnergyGroups
|
||||
Energy group structure for energy condensation
|
||||
delayed_groups : list of int
|
||||
Delayed groups to filter out the xs
|
||||
tally_trigger : openmc.Trigger
|
||||
An (optional) tally precision trigger given to each tally used to
|
||||
compute the cross section
|
||||
scores : list of str
|
||||
The scores in each tally used to compute the multi-group cross section
|
||||
filters : list of openmc.Filter
|
||||
The filters in each tally used to compute the multi-group cross section
|
||||
tally_keys : list of str
|
||||
The keys into the tallies dictionary for each tally used to compute
|
||||
the multi-group cross section
|
||||
estimator : {'tracklength', 'analog'}
|
||||
The tally estimator used to compute the multi-group cross section
|
||||
tallies : collections.OrderedDict
|
||||
OpenMC tallies needed to compute the multi-group cross section. The keys
|
||||
are strings listed in the :attr:`DelayedNuFissionXS.tally_keys` property
|
||||
and values are instances of :class:`openmc.Tally`.
|
||||
rxn_rate_tally : openmc.Tally
|
||||
Derived tally for the reaction rate tally used in the numerator to
|
||||
compute the multi-group cross section. This attribute is None
|
||||
unless the multi-group cross section has been computed.
|
||||
xs_tally : openmc.Tally
|
||||
Derived tally for the multi-group cross section. This attribute
|
||||
is None unless the multi-group cross section has been computed.
|
||||
num_subdomains : int
|
||||
The number of subdomains is unity for 'material', 'cell' and 'universe'
|
||||
domain types. When the This is equal to the number of cell instances
|
||||
for 'distribcell' domain types (it is equal to unity prior to loading
|
||||
tally data from a statepoint file).
|
||||
num_nuclides : int
|
||||
The number of nuclides for which the multi-group cross section is
|
||||
being tracked. This is unity if the by_nuclide attribute is False.
|
||||
nuclides : Iterable of str or 'sum'
|
||||
The optional user-specified nuclides for which to compute cross
|
||||
sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides
|
||||
are not specified by the user, all nuclides in the spatial domain
|
||||
are included. This attribute is 'sum' if by_nuclide is false.
|
||||
sparse : bool
|
||||
Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format
|
||||
for compressed data storage
|
||||
loaded_sp : bool
|
||||
Whether or not a statepoint file has been loaded with tally data
|
||||
derived : bool
|
||||
Whether or not the MGXS is merged from one or more other MGXS
|
||||
hdf5_key : str
|
||||
The key used to index multi-group cross sections in an HDF5 data store
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, domain=None, domain_type=None, energy_groups=None,
|
||||
delayed_groups=None, by_nuclide=False, name=''):
|
||||
super(DelayedNuFissionMatrixXS, self).__init__(domain, domain_type,
|
||||
energy_groups,
|
||||
delayed_groups,
|
||||
by_nuclide, name)
|
||||
self._rxn_type = 'delayed-nu-fission'
|
||||
self._hdf5_key = 'delayed-nu-fission matrix'
|
||||
self._estimator = 'analog'
|
||||
self._valid_estimators = ['analog']
|
||||
|
|
|
|||
|
|
@ -36,7 +36,8 @@ MGXS_TYPES = ['total',
|
|||
'chi',
|
||||
'chi-prompt',
|
||||
'inverse-velocity',
|
||||
'prompt-nu-fission']
|
||||
'prompt-nu-fission',
|
||||
'prompt-nu-fission matrix']
|
||||
|
||||
# Supported domain types
|
||||
DOMAIN_TYPES = ['cell',
|
||||
|
|
@ -448,7 +449,7 @@ class MGXS(object):
|
|||
|
||||
Parameters
|
||||
----------
|
||||
mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'multiplicity matrix', 'nu-fission matrix', 'chi', 'chi-prompt', 'inverse-velocity', 'prompt-nu-fission'}
|
||||
mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'multiplicity matrix', 'nu-fission matrix', 'chi', 'chi-prompt', 'inverse-velocity', 'prompt-nu-fission', 'prompt-nu-fission matrix'}
|
||||
The type of multi-group cross section object to return
|
||||
domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh
|
||||
The domain for spatial homogenization
|
||||
|
|
@ -509,6 +510,8 @@ class MGXS(object):
|
|||
mgxs = InverseVelocity(domain, domain_type, energy_groups)
|
||||
elif mgxs_type == 'prompt-nu-fission':
|
||||
mgxs = PromptNuFissionXS(domain, domain_type, energy_groups)
|
||||
elif mgxs_type == 'prompt-nu-fission matrix':
|
||||
mgxs = PromptNuFissionMatrixXS(domain, domain_type, energy_groups)
|
||||
|
||||
mgxs.by_nuclide = by_nuclide
|
||||
mgxs.name = name
|
||||
|
|
@ -1752,7 +1755,7 @@ class MatrixMGXS(MGXS):
|
|||
|
||||
Returns
|
||||
-------
|
||||
ndarray
|
||||
numpy.ndarray
|
||||
A NumPy array of the multi-group cross section indexed in the order
|
||||
each group and subdomain is listed in the parameters.
|
||||
|
||||
|
|
@ -3587,7 +3590,7 @@ class ScatterMatrixXS(MatrixMGXS):
|
|||
|
||||
Returns
|
||||
-------
|
||||
ndarray
|
||||
numpy.ndarray
|
||||
A NumPy array of the multi-group cross section indexed in the order
|
||||
each group and subdomain is listed in the parameters.
|
||||
|
||||
|
|
@ -5132,3 +5135,120 @@ class PromptNuFissionXS(MGXS):
|
|||
super(PromptNuFissionXS, self).__init__(domain, domain_type, groups,
|
||||
by_nuclide, name)
|
||||
self._rxn_type = 'prompt-nu-fission'
|
||||
|
||||
|
||||
class PromptNuFissionMatrixXS(MatrixMGXS):
|
||||
r"""A prompt fission neutron production matrix multi-group cross section.
|
||||
|
||||
This class can be used for both OpenMC input generation and tally data
|
||||
post-processing to compute spatially-homogenized and energy-integrated
|
||||
multi-group cross sections for multi-group neutronics calculations. At a
|
||||
minimum, one needs to set the :attr:`PromptNuFissionMatrixXS.energy_groups`
|
||||
and :attr:`PromptNuFissionMatrixXS.domain` properties. Tallies for the flux
|
||||
and appropriate reaction rates over the specified domain are generated
|
||||
automatically via the :attr:`PromptNuFissionMatrixXS.tallies` property,
|
||||
which can then be appended to a :class:`openmc.Tallies` instance.
|
||||
|
||||
For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the
|
||||
necessary data to compute multi-group cross sections from a
|
||||
:class:`openmc.StatePoint` instance. The derived multi-group cross section
|
||||
can then be obtained from the :attr:`PromptNuFissionMatrixXS.xs_tally`
|
||||
property.
|
||||
|
||||
For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the
|
||||
fission spectrum is calculated as:
|
||||
|
||||
.. math::
|
||||
|
||||
\langle \nu\sigma_{f,g'\rightarrow g} \phi \rangle &= \int_{r \in V} dr
|
||||
\int_{4\pi} d\Omega' \int_{E_{g'}}^{E_{g'-1}} dE' \int_{E_g}^{E_{g-1}} dE
|
||||
\; \chi(E) \nu\sigma_f^p (r, E') \psi(r, E', \Omega')\\
|
||||
\langle \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega
|
||||
\int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega) \\
|
||||
\nu\sigma_{f,g'\rightarrow g} &= \frac{\langle \nu\sigma_{f,g'\rightarrow
|
||||
g}^p \phi \rangle}{\langle \phi \rangle}
|
||||
|
||||
Parameters
|
||||
----------
|
||||
domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh
|
||||
The domain for spatial homogenization
|
||||
domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'}
|
||||
The domain type for spatial homogenization
|
||||
groups : openmc.mgxs.EnergyGroups
|
||||
The energy group structure for energy condensation
|
||||
by_nuclide : bool
|
||||
If true, computes cross sections for each nuclide in domain
|
||||
name : str, optional
|
||||
Name of the multi-group cross section. Used as a label to identify
|
||||
tallies in OpenMC 'tallies.xml' file.
|
||||
|
||||
Attributes
|
||||
----------
|
||||
name : str, optional
|
||||
Name of the multi-group cross section
|
||||
rxn_type : str
|
||||
Reaction type (e.g., 'total', 'nu-fission', etc.)
|
||||
by_nuclide : bool
|
||||
If true, computes cross sections for each nuclide in domain
|
||||
domain : Material or Cell or Universe or Mesh
|
||||
Domain for spatial homogenization
|
||||
domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'}
|
||||
Domain type for spatial homogenization
|
||||
energy_groups : openmc.mgxs.EnergyGroups
|
||||
Energy group structure for energy condensation
|
||||
tally_trigger : openmc.Trigger
|
||||
An (optional) tally precision trigger given to each tally used to
|
||||
compute the cross section
|
||||
scores : list of str
|
||||
The scores in each tally used to compute the multi-group cross section
|
||||
filters : list of openmc.Filter
|
||||
The filters in each tally used to compute the multi-group cross section
|
||||
tally_keys : list of str
|
||||
The keys into the tallies dictionary for each tally used to compute
|
||||
the multi-group cross section
|
||||
estimator : {'tracklength', 'collision', 'analog'}
|
||||
The tally estimator used to compute the multi-group cross section
|
||||
tallies : collections.OrderedDict
|
||||
OpenMC tallies needed to compute the multi-group cross section. The keys
|
||||
are strings listed in the :attr:`PromptNuFissionXS.tally_keys` property
|
||||
and values are instances of :class:`openmc.Tally`.
|
||||
rxn_rate_tally : openmc.Tally
|
||||
Derived tally for the reaction rate tally used in the numerator to
|
||||
compute the multi-group cross section. This attribute is None
|
||||
unless the multi-group cross section has been computed.
|
||||
xs_tally : openmc.Tally
|
||||
Derived tally for the multi-group cross section. This attribute
|
||||
is None unless the multi-group cross section has been computed.
|
||||
num_subdomains : int
|
||||
The number of subdomains is unity for 'material', 'cell' and 'universe'
|
||||
domain types. This is equal to the number of cell instances
|
||||
for 'distribcell' domain types (it is equal to unity prior to loading
|
||||
tally data from a statepoint file).
|
||||
num_nuclides : int
|
||||
The number of nuclides for which the multi-group cross section is
|
||||
being tracked. This is unity if the by_nuclide attribute is False.
|
||||
nuclides : Iterable of str or 'sum'
|
||||
The optional user-specified nuclides for which to compute cross
|
||||
sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides
|
||||
are not specified by the user, all nuclides in the spatial domain
|
||||
are included. This attribute is 'sum' if by_nuclide is false.
|
||||
sparse : bool
|
||||
Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format
|
||||
for compressed data storage
|
||||
loaded_sp : bool
|
||||
Whether or not a statepoint file has been loaded with tally data
|
||||
derived : bool
|
||||
Whether or not the MGXS is merged from one or more other MGXS
|
||||
hdf5_key : str
|
||||
The key used to index multi-group cross sections in an HDF5 data store
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, domain=None, domain_type=None,
|
||||
groups=None, by_nuclide=False, name=''):
|
||||
super(PromptNuFissionMatrixXS, self).__init__(domain, domain_type,
|
||||
groups, by_nuclide, name)
|
||||
self._rxn_type = 'prompt-nu-fission'
|
||||
self._hdf5_key = 'prompt-nu-fission matrix'
|
||||
self._estimator = 'analog'
|
||||
self._valid_estimators = ['analog']
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ from openmc.checkvalue import check_type, check_value, check_greater_than, \
|
|||
_REPRESENTATIONS = ['isotropic', 'angle']
|
||||
_SCATTER_TYPES = ['tabular', 'legendre', 'histogram']
|
||||
_XS_SHAPES = ["[Order][G][G']", "[G]", "[G']", "[G][G']", "[DG]", "[G][DG]",
|
||||
"[G'][DG]"]
|
||||
"[G'][DG]", "[G][G'][DG]"]
|
||||
|
||||
|
||||
class XSdata(object):
|
||||
|
|
@ -137,11 +137,11 @@ class XSdata(object):
|
|||
[Order][G][G']: scatter_matrix
|
||||
|
||||
[G]: total, absorption, fission, kappa_fission, nu_fission,
|
||||
prompt_nu_fission, inverse_velocity
|
||||
prompt_nu_fission, delayed_nu_fission, inverse_velocity
|
||||
|
||||
[G']: chi, chi_prompt, chi_delayed
|
||||
|
||||
[G][G']: multiplicity_matrix, nu_fission
|
||||
[G][G']: multiplicity_matrix, nu_fission, prompt_nu_fission
|
||||
|
||||
[DG]: beta, decay_rate
|
||||
|
||||
|
|
@ -149,6 +149,8 @@ class XSdata(object):
|
|||
|
||||
[G'][DG]: chi_delayed
|
||||
|
||||
[G][G'][DG]: delayed_nu_fission
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, name, energy_groups, temperatures=[294.],
|
||||
|
|
@ -298,6 +300,10 @@ class XSdata(object):
|
|||
self.num_delayed_groups)
|
||||
self._xs_shapes["[G'][DG]"] = (self.energy_groups.num_groups,
|
||||
self.num_delayed_groups)
|
||||
self._xs_shapes["[G][G'][DG]"] = (self.energy_groups.num_groups,
|
||||
self.energy_groups.num_groups,
|
||||
self.num_delayed_groups)
|
||||
|
||||
self._xs_shapes["[Order][G][G']"] \
|
||||
= (self.num_orders, self.energy_groups.num_groups,
|
||||
self.energy_groups.num_groups)
|
||||
|
|
@ -816,7 +822,7 @@ class XSdata(object):
|
|||
"""
|
||||
|
||||
# Get the accepted shapes for this xs
|
||||
shapes = [self.xs_shapes["[G]"]]
|
||||
shapes = [self.xs_shapes["[G]"], self.xs_shapes["[G][G']"]]
|
||||
|
||||
# Convert to a numpy array so we can easily get the shape for checking
|
||||
prompt_nu_fission = np.asarray(prompt_nu_fission)
|
||||
|
|
@ -850,7 +856,7 @@ class XSdata(object):
|
|||
"""
|
||||
|
||||
# Get the accepted shapes for this xs
|
||||
shapes = [self.xs_shapes["[G][DG]"]]
|
||||
shapes = [self.xs_shapes["[G][DG]"], self.xs_shapes["[G][G'][DG]"]]
|
||||
|
||||
# Convert to a numpy array so we can easily get the shape for checking
|
||||
delayed_nu_fission = np.asarray(delayed_nu_fission)
|
||||
|
|
@ -1086,12 +1092,15 @@ class XSdata(object):
|
|||
def set_prompt_nu_fission_mgxs(self, prompt_nu_fission, temperature=294.,
|
||||
nuclide='total', xs_type='macro',
|
||||
subdomain=None):
|
||||
"""This method allows for an openmc.mgxs.PromptNuFissionXS to be used to
|
||||
set the prompt-nu-fission cross section for this XSdata object.
|
||||
"""Sets the prompt-nu-fission cross section.
|
||||
|
||||
This method allows for an openmc.mgxs.PromptNuFissionXS or
|
||||
openmc.mgxs.PromptNuFissionMatrixXS to be used to set the
|
||||
prompt-nu-fission cross section for this XSdata object.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
prompt_nu_fission: openmc.mgxs.PromptNuFissionXS
|
||||
prompt_nu_fission: openmc.mgxs.PromptNuFissionXS or openmc.mgxs.PromptNuFissionMatrixXS
|
||||
MGXS Object containing the prompt-nu-fission cross section
|
||||
for the domain of interest.
|
||||
temperature : float
|
||||
|
|
@ -1115,7 +1124,8 @@ class XSdata(object):
|
|||
"""
|
||||
|
||||
check_type('prompt_nu_fission', prompt_nu_fission,
|
||||
(openmc.mgxs.PromptNuFissionXS,))
|
||||
(openmc.mgxs.PromptNuFissionXS,
|
||||
openmc.mgxs.PromptNuFissionMatrixXS))
|
||||
check_value('energy_groups', prompt_nu_fission.energy_groups,
|
||||
[self.energy_groups])
|
||||
check_value('domain_type', prompt_nu_fission.domain_type,
|
||||
|
|
@ -1139,12 +1149,13 @@ class XSdata(object):
|
|||
def set_delayed_nu_fission_mgxs(self, delayed_nu_fission, temperature=294.,
|
||||
nuclide='total', xs_type='macro',
|
||||
subdomain=None):
|
||||
"""This method allows for an openmc.mgxs.DelayedNuFissionXS to be used
|
||||
to set the delayed-nu-fission cross section for this XSdata object.
|
||||
"""This method allows for an openmc.mgxs.DelayedNuFissionXS or
|
||||
openmc.mgxs.DelayedNuFissionMatrixXS to be used to set the
|
||||
delayed-nu-fission cross section for this XSdata object.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
delayed_nu_fission: openmc.mgxs.DelayedNuFissionXS
|
||||
delayed_nu_fission: openmc.mgxs.DelayedNuFissionXS or openmc.mgxs.DelayedNuFissionMatrixXS
|
||||
MGXS Object containing the delayed-nu-fission cross section
|
||||
for the domain of interest.
|
||||
temperature : float
|
||||
|
|
@ -1168,7 +1179,8 @@ class XSdata(object):
|
|||
"""
|
||||
|
||||
check_type('delayed_nu_fission', delayed_nu_fission,
|
||||
(openmc.mgxs.DelayedNuFissionXS,))
|
||||
(openmc.mgxs.DelayedNuFissionXS,
|
||||
openmc.mgxs.DelayedNuFissionMatrixXS))
|
||||
check_value('energy_groups', delayed_nu_fission.energy_groups,
|
||||
[self.energy_groups])
|
||||
check_value('num_delayed_groups', delayed_nu_fission.num_delayed_groups,
|
||||
|
|
|
|||
|
|
@ -434,7 +434,7 @@ module mgxs_header
|
|||
integer :: ndims
|
||||
integer(HSIZE_T) :: dims(2)
|
||||
real(8), allocatable :: temp_arr(:), temp_2d(:, :)
|
||||
real(8), allocatable :: temp_beta(:, :)
|
||||
real(8), allocatable :: temp_beta(:, :), temp_3d(:, :, :)
|
||||
real(8) :: dmu, mu, norm, chi_sum
|
||||
integer :: order, order_dim, gin, gout, l, imu, length
|
||||
type(VectorInt) :: temps_to_read
|
||||
|
|
@ -767,9 +767,57 @@ module mgxs_header
|
|||
! If prompt-nu-fission present, set prompt-nu-fission
|
||||
if (object_exists(xsdata_grp, "prompt-nu-fission")) then
|
||||
|
||||
! Set prompt-nu-fission
|
||||
call read_dataset(xs % prompt_nu_fission, xsdata_grp, &
|
||||
"prompt-nu-fission")
|
||||
! Get the dimensions of the prompt-nu-fission dataset
|
||||
xsdata = open_dataset(xsdata_grp, "prompt-nu-fission")
|
||||
call get_ndims(xsdata, ndims)
|
||||
|
||||
! If prompt-nu-fission is a vector
|
||||
if (ndims == 1) then
|
||||
|
||||
! Set prompt_nu_fission
|
||||
call read_dataset(xs % prompt_nu_fission, xsdata_grp, &
|
||||
"prompt-nu-fission")
|
||||
|
||||
! If prompt-nu-fission is a matrix, set prompt_nu_fission and
|
||||
! chi_prompt.
|
||||
else if (ndims == 2) then
|
||||
|
||||
! chi_prompt is embedded in prompt_nu_fission -> extract
|
||||
! chi_prompt
|
||||
allocate(temp_arr(energy_groups * energy_groups))
|
||||
call read_dataset(temp_arr, xsdata_grp, "prompt-nu-fission")
|
||||
allocate(temp_2d(energy_groups, energy_groups))
|
||||
temp_2d = reshape(temp_arr, (/energy_groups, energy_groups/))
|
||||
|
||||
! Deallocate temporary 1D array for prompt_nu_fission matrix
|
||||
deallocate(temp_arr)
|
||||
|
||||
! Set the vector prompt-nu-fission from the matrix
|
||||
! prompt-nu-fission
|
||||
do gin = 1, energy_groups
|
||||
xs % prompt_nu_fission(gin) = sum(temp_2d(:, gin))
|
||||
end do
|
||||
|
||||
! Now pull out information needed for chi
|
||||
xs % chi_prompt(:, :) = temp_2d
|
||||
|
||||
! Deallocate temporary 2D array for nu_fission matrix
|
||||
deallocate(temp_2d)
|
||||
|
||||
! Normalize chi so its CDF goes to 1
|
||||
do gin = 1, energy_groups
|
||||
chi_sum = sum(xs % chi_prompt(:, gin))
|
||||
if (chi_sum == ZERO) then
|
||||
call fatal_error("Encountered chi prompt for a group &
|
||||
&that sums to zero")
|
||||
else
|
||||
xs % chi_prompt(:, gin) = xs % chi_prompt(:, gin) / chi_sum
|
||||
end if
|
||||
end do
|
||||
else
|
||||
call fatal_error("prompt-nu-fission must be provided as a 1D &
|
||||
&or 2D array")
|
||||
end if
|
||||
end if
|
||||
|
||||
! If delayed-nu-fission provided, set delayed-nu-fission. If
|
||||
|
|
@ -848,9 +896,52 @@ module mgxs_header
|
|||
! Deallocate temporary array for delayed-nu-fission matrix
|
||||
deallocate(temp_arr)
|
||||
|
||||
! If delayed nu-fission is a 3D matrix, set delayed_nu_fission
|
||||
! and chi_delayed.
|
||||
else if (ndims == 3) then
|
||||
|
||||
! chi_delayed is embedded in delayed_nu_fission -> extract
|
||||
! chi_delayed
|
||||
allocate(temp_arr(delayed_groups * energy_groups * &
|
||||
energy_groups))
|
||||
call read_dataset(temp_arr, xsdata_grp, "delayed-nu-fission")
|
||||
allocate(temp_3d(delayed_groups, energy_groups, energy_groups))
|
||||
temp_3d = reshape(temp_arr, (/delayed_groups, energy_groups, &
|
||||
energy_groups/))
|
||||
|
||||
! Deallocate temporary 1D array for delayed_nu_fission matrix
|
||||
deallocate(temp_arr)
|
||||
|
||||
! Set the 2D delayed-nu-fission matrix and 3D chi_dealyed matrix
|
||||
! from the 3D delayed-nu-fission matrix
|
||||
do dg = 1, delayed_groups
|
||||
do gin = 1, energy_groups
|
||||
xs % delayed_nu_fission(dg, gin) = sum(temp_3d(dg, :, gin))
|
||||
do gout = 1, energy_groups
|
||||
xs % chi_delayed(dg, gout, gin) = temp_3d(dg, gout, gin)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
! Normalize chi_delayed so its CDF goes to 1
|
||||
do dg = 1, delayed_groups
|
||||
do gin = 1, energy_groups
|
||||
chi_sum = sum(xs % chi_delayed(dg, :, gin))
|
||||
if (chi_sum == ZERO) then
|
||||
call fatal_error("Encountered chi delayed for a group &
|
||||
&that sums to zero")
|
||||
else
|
||||
xs % chi_delayed(dg, :, gin) = &
|
||||
xs % chi_delayed(dg, :, gin) / chi_sum
|
||||
end if
|
||||
end do
|
||||
end do
|
||||
|
||||
! Deallocate temporary 3D matrix for delayed_nu_fission
|
||||
deallocate(temp_3d)
|
||||
else
|
||||
call fatal_error("delayed-nu-fission must be provided as a &
|
||||
&1D or 2D array")
|
||||
&1D, 2D, or 3D array")
|
||||
end if
|
||||
end if
|
||||
|
||||
|
|
@ -1119,7 +1210,8 @@ module mgxs_header
|
|||
integer(HSIZE_T) :: dims(4)
|
||||
integer, allocatable :: int_arr(:)
|
||||
real(8), allocatable :: temp_1d(:), temp_3d(:, :, :)
|
||||
real(8), allocatable :: temp_4d(:, :, :, :), temp_beta(:, :, :, :)
|
||||
real(8), allocatable :: temp_4d(:, :, :, :), temp_5d(:, :, :, :, :)
|
||||
real(8), allocatable :: temp_beta(:, :, :, :)
|
||||
real(8) :: dmu, mu, norm, chi_sum
|
||||
integer :: order, order_dim, gin, gout, l, imu, dg
|
||||
type(VectorInt) :: temps_to_read
|
||||
|
|
@ -1540,16 +1632,70 @@ module mgxs_header
|
|||
! If prompt-nu-fission present, set prompt-nu-fission
|
||||
if (object_exists(xsdata_grp, "prompt-nu-fission")) then
|
||||
|
||||
! Allocate temporary array for prompt-nu-fission
|
||||
allocate(temp_1d(energy_groups * this % n_azi * this % n_pol))
|
||||
! Get the dimensions of the prompt-nu-fission dataset
|
||||
xsdata = open_dataset(xsdata_grp, "prompt-nu-fission")
|
||||
call get_ndims(xsdata, ndims)
|
||||
|
||||
! Read prompt-nu-fission
|
||||
call read_dataset(temp_1d, xsdata_grp, "prompt-nu-fission")
|
||||
xs % prompt_nu_fission = reshape(temp_1d, (/energy_groups, &
|
||||
this % n_azi, this % n_pol/))
|
||||
! If prompt-nu-fission is a vector for each azi and pol
|
||||
if (ndims == 3) then
|
||||
|
||||
! Deallocate temporary array for prompt-nu-fission
|
||||
deallocate(temp_1d)
|
||||
! Set prompt_nu_fission
|
||||
call read_dataset(xs % prompt_nu_fission, xsdata_grp, &
|
||||
"prompt-nu-fission")
|
||||
|
||||
! If prompt-nu-fission is a matrix for each azi and pol,
|
||||
! set prompt_nu_fission and chi_prompt.
|
||||
else if (ndims == 4) then
|
||||
|
||||
! chi_prompt is embedded in prompt_nu_fission -> extract
|
||||
! chi_prompt
|
||||
allocate(temp_1d(energy_groups * energy_groups &
|
||||
* this % n_azi * this % n_pol))
|
||||
allocate(temp_4d(energy_groups, energy_groups, this % n_azi, &
|
||||
this % n_pol))
|
||||
call read_dataset(temp_1d, xsdata_grp, "prompt-nu-fission")
|
||||
temp_4d = reshape(temp_1d, (/energy_groups, energy_groups, &
|
||||
this % n_azi, this % n_pol/))
|
||||
|
||||
! Deallocate temporary 1D array for prompt_nu_fission matrix
|
||||
deallocate(temp_1d)
|
||||
|
||||
! Set the vector prompt-nu-fission from the matrix
|
||||
! prompt-nu-fission
|
||||
do ipol = 1, this % n_pol
|
||||
do iazi = 1, this % n_azi
|
||||
do gin = 1, energy_groups
|
||||
xs % prompt_nu_fission(gin, iazi, ipol) = &
|
||||
sum(temp_4d(:, gin, iazi, ipol))
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
! Now pull out information needed for chi
|
||||
xs % chi_prompt(:, :, :, :) = temp_4d
|
||||
|
||||
! Deallocate temporary 4D array for nu_fission matrix
|
||||
deallocate(temp_4d)
|
||||
|
||||
! Normalize chi so its CDF goes to 1
|
||||
do ipol = 1, this % n_pol
|
||||
do iazi = 1, this % n_azi
|
||||
do gin = 1, energy_groups
|
||||
chi_sum = sum(xs % chi_prompt(:, gin, iazi, ipol))
|
||||
if (chi_sum == ZERO) then
|
||||
call fatal_error("Encountered chi prompt for a group &
|
||||
&that sums to zero")
|
||||
else
|
||||
xs % chi_prompt(:, gin, iazi, ipol) = &
|
||||
xs % chi_prompt(:, gin, iazi, ipol) / chi_sum
|
||||
end if
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
else
|
||||
call fatal_error("prompt-nu-fission must be provided as a 3D &
|
||||
&or 4D array")
|
||||
end if
|
||||
end if
|
||||
|
||||
! If delayed-nu-fission provided, set delayed-nu-fission. If
|
||||
|
|
@ -1639,9 +1785,64 @@ module mgxs_header
|
|||
! Deallocate temporary array for delayed-nu-fission matrix
|
||||
deallocate(temp_1d)
|
||||
|
||||
! If delayed nu-fission is a 5D matrix, set delayed_nu_fission
|
||||
! and chi_delayed.
|
||||
else if (ndims == 5) then
|
||||
|
||||
! chi_delayed is embedded in delayed_nu_fission -> extract
|
||||
! chi_delayed
|
||||
allocate(temp_1d(delayed_groups * energy_groups * &
|
||||
energy_groups * this % n_azi * this % n_pol))
|
||||
allocate(temp_5d(delayed_groups, energy_groups, energy_groups, &
|
||||
this % n_azi, this % n_pol))
|
||||
call read_dataset(temp_1d, xsdata_grp, "delayed-nu-fission")
|
||||
temp_5d = reshape(temp_1d, (/delayed_groups, energy_groups, &
|
||||
energy_groups, this % n_azi, this % n_pol/))
|
||||
|
||||
! Deallocate temporary 1D array for delayed_nu_fission matrix
|
||||
deallocate(temp_1d)
|
||||
|
||||
! Set the 4D delayed-nu-fission matrix and 5D chi_delayed matrix
|
||||
! from the 5D delayed-nu-fission matrix
|
||||
do ipol = 1, this % n_pol
|
||||
do iazi = 1, this % n_azi
|
||||
do dg = 1, delayed_groups
|
||||
do gin = 1, energy_groups
|
||||
xs % delayed_nu_fission(dg, gin, iazi, ipol) = &
|
||||
sum(temp_5d(dg, :, gin, iazi, ipol))
|
||||
do gout = 1, energy_groups
|
||||
xs % chi_delayed(dg, gout, gin, iazi, ipol) = &
|
||||
temp_5d(dg, gout, gin, iazi, ipol)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
! Normalize chi_delayed so its CDF goes to 1
|
||||
do ipol = 1, this % n_pol
|
||||
do iazi = 1, this % n_azi
|
||||
do dg = 1, delayed_groups
|
||||
do gin = 1, energy_groups
|
||||
chi_sum = sum(xs % chi_delayed(dg, :, gin, iazi, ipol))
|
||||
if (chi_sum == ZERO) then
|
||||
call fatal_error("Encountered chi delayed for a group&
|
||||
& that sums to zero")
|
||||
else
|
||||
xs % chi_delayed(dg, :, gin, iazi, ipol) = &
|
||||
xs % chi_delayed(dg, :, gin, iazi, ipol) / &
|
||||
chi_sum
|
||||
end if
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
! Deallocate temporary 5D matrix for delayed_nu_fission
|
||||
deallocate(temp_5d)
|
||||
else
|
||||
call fatal_error("delayed-nu-fission must be provided as a &
|
||||
&1D or 2D array")
|
||||
&3D, 4D, or 5D array")
|
||||
end if
|
||||
end if
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
e86f24e20f37096c7898f459fc5bf336f3e0670fb30f321443f2bb3a01a154ef3d234bb48d4cee8e0d3730fd182b6a2051ec1b4c09d771420886a56ba928fdd9
|
||||
4291b40470e7d59383c9e51c4178ca923b698cb1aaea16c1982fe3789ca980df10a65b84fb5021dacd4d290ebc232c2579f99b6c990fb6b8f28f67eef2aabcb2
|
||||
|
|
@ -40,6 +40,8 @@
|
|||
0 10000 1 total 4.996730e-07 3.650635e-08
|
||||
material group in nuclide mean std. dev.
|
||||
0 10000 1 total 0.090004 0.006367
|
||||
material group in group out nuclide mean std. dev.
|
||||
0 10000 1 1 total 0.084542 0.005716
|
||||
material delayedgroup group in nuclide mean std. dev.
|
||||
0 10000 1 1 total 0.000021 0.000001
|
||||
1 10000 2 1 total 0.000110 0.000008
|
||||
|
|
@ -68,6 +70,13 @@
|
|||
3 10000 4 1 total 0.302780 0.109110
|
||||
4 10000 5 1 total 0.000000 0.000000
|
||||
5 10000 6 1 total 0.000000 0.000000
|
||||
material delayedgroup group in group out nuclide mean std. dev.
|
||||
0 10000 1 1 1 total 0.000000 0.000000
|
||||
1 10000 2 1 1 total 0.000384 0.000236
|
||||
2 10000 3 1 1 total 0.000179 0.000180
|
||||
3 10000 4 1 1 total 0.000730 0.000188
|
||||
4 10000 5 1 1 total 0.000000 0.000000
|
||||
5 10000 6 1 1 total 0.000000 0.000000
|
||||
material group in nuclide mean std. dev.
|
||||
0 10001 1 total 0.311594 0.013793
|
||||
material group in nuclide mean std. dev.
|
||||
|
|
@ -110,6 +119,8 @@
|
|||
0 10001 1 total 5.454760e-07 4.949800e-08
|
||||
material group in nuclide mean std. dev.
|
||||
0 10001 1 total 0.0 0.0
|
||||
material group in group out nuclide mean std. dev.
|
||||
0 10001 1 1 total 0.0 0.0
|
||||
material delayedgroup group in nuclide mean std. dev.
|
||||
0 10001 1 1 total 0.0 0.0
|
||||
1 10001 2 1 total 0.0 0.0
|
||||
|
|
@ -138,6 +149,13 @@
|
|||
3 10001 4 1 total 0.0 0.0
|
||||
4 10001 5 1 total 0.0 0.0
|
||||
5 10001 6 1 total 0.0 0.0
|
||||
material delayedgroup group in group out nuclide mean std. dev.
|
||||
0 10001 1 1 1 total 0.0 0.0
|
||||
1 10001 2 1 1 total 0.0 0.0
|
||||
2 10001 3 1 1 total 0.0 0.0
|
||||
3 10001 4 1 1 total 0.0 0.0
|
||||
4 10001 5 1 1 total 0.0 0.0
|
||||
5 10001 6 1 1 total 0.0 0.0
|
||||
material group in nuclide mean std. dev.
|
||||
0 10002 1 total 0.904999 0.043964
|
||||
material group in nuclide mean std. dev.
|
||||
|
|
@ -180,6 +198,8 @@
|
|||
0 10002 1 total 5.773006e-07 5.322132e-08
|
||||
material group in nuclide mean std. dev.
|
||||
0 10002 1 total 0.0 0.0
|
||||
material group in group out nuclide mean std. dev.
|
||||
0 10002 1 1 total 0.0 0.0
|
||||
material delayedgroup group in nuclide mean std. dev.
|
||||
0 10002 1 1 total 0.0 0.0
|
||||
1 10002 2 1 total 0.0 0.0
|
||||
|
|
@ -208,3 +228,10 @@
|
|||
3 10002 4 1 total 0.0 0.0
|
||||
4 10002 5 1 total 0.0 0.0
|
||||
5 10002 6 1 total 0.0 0.0
|
||||
material delayedgroup group in group out nuclide mean std. dev.
|
||||
0 10002 1 1 1 total 0.0 0.0
|
||||
1 10002 2 1 1 total 0.0 0.0
|
||||
2 10002 3 1 1 total 0.0 0.0
|
||||
3 10002 4 1 1 total 0.0 0.0
|
||||
4 10002 5 1 1 total 0.0 0.0
|
||||
5 10002 6 1 1 total 0.0 0.0
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
67ee414eed54f596464831e734ac365e43b88bf03297e2b08adfb97510e1d8e631ff45061d5b99aa0ad85ec08d5b51e341866e60f35cdbfae078030bcde6c794
|
||||
df187239f7481867cc09138709da90bc28eeb647b4bcbb08b894e7fdf6ff45510341b77e34754c2358f0e0665f8e552bb1eafed8c42cd2c50595b60366320ce4
|
||||
|
|
@ -40,6 +40,8 @@
|
|||
0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 5.139437e-07 2.133314e-08
|
||||
avg(distribcell) group in nuclide mean std. dev.
|
||||
0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.091725 0.003604
|
||||
avg(distribcell) group in group out nuclide mean std. dev.
|
||||
0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.093985 0.005872
|
||||
avg(distribcell) delayedgroup group in nuclide mean std. dev.
|
||||
0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.000021 8.253907e-07
|
||||
1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 2 1 total 0.000112 4.284000e-06
|
||||
|
|
@ -68,3 +70,10 @@
|
|||
3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4 1 total 0.000000 0.000000
|
||||
4 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 5 1 total 0.000000 0.000000
|
||||
5 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 6 1 total 2.853000 4.034751
|
||||
avg(distribcell) delayedgroup group in group out nuclide mean std. dev.
|
||||
0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 1 total 0.000000 0.000000
|
||||
1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 2 1 1 total 0.000175 0.000175
|
||||
2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 3 1 1 total 0.000178 0.000178
|
||||
3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4 1 1 total 0.000000 0.000000
|
||||
4 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 5 1 1 total 0.000000 0.000000
|
||||
5 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 6 1 1 total 0.000178 0.000178
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
e86f24e20f37096c7898f459fc5bf336f3e0670fb30f321443f2bb3a01a154ef3d234bb48d4cee8e0d3730fd182b6a2051ec1b4c09d771420886a56ba928fdd9
|
||||
4291b40470e7d59383c9e51c4178ca923b698cb1aaea16c1982fe3789ca980df10a65b84fb5021dacd4d290ebc232c2579f99b6c990fb6b8f28f67eef2aabcb2
|
||||
|
|
@ -72,6 +72,11 @@ domain=10000 type=inverse-velocity
|
|||
domain=10000 type=prompt-nu-fission
|
||||
[1.92392215e-02 4.66719027e-01]
|
||||
[1.30950595e-03 4.14108704e-02]
|
||||
domain=10000 type=prompt-nu-fission matrix
|
||||
[[2.01424282e-02 0.00000000e+00]
|
||||
[4.45819177e-01 0.00000000e+00]]
|
||||
[[3.14909168e-03 0.00000000e+00]
|
||||
[2.86750787e-02 0.00000000e+00]]
|
||||
domain=10000 type=delayed-nu-fission
|
||||
[[2.29808234e-05 1.06974158e-04]
|
||||
[1.43606337e-04 5.52167907e-04]
|
||||
|
|
@ -124,6 +129,41 @@ domain=10000 type=decay-rate
|
|||
[0.00000000e+00 1.09109511e-01]
|
||||
[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
domain=10000 type=delayed-nu-fission matrix
|
||||
[[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[2.53814542e-03 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[1.18579166e-03 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[8.59787018e-04 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]]
|
||||
[[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[1.56094584e-03 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[1.18610401e-03 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[2.22194634e-04 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]]
|
||||
domain=10001 type=total
|
||||
[3.13737671e-01 3.00821402e-01]
|
||||
[1.55819024e-02 2.80524484e-02]
|
||||
|
|
@ -198,6 +238,11 @@ domain=10001 type=inverse-velocity
|
|||
domain=10001 type=prompt-nu-fission
|
||||
[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]
|
||||
domain=10001 type=prompt-nu-fission matrix
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
domain=10001 type=delayed-nu-fission
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]
|
||||
|
|
@ -250,6 +295,41 @@ domain=10001 type=decay-rate
|
|||
[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
domain=10001 type=delayed-nu-fission matrix
|
||||
[[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]]
|
||||
[[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]]
|
||||
domain=10002 type=total
|
||||
[6.64572261e-01 2.05238401e+00]
|
||||
[3.12147519e-02 2.24342907e-01]
|
||||
|
|
@ -324,6 +404,11 @@ domain=10002 type=inverse-velocity
|
|||
domain=10002 type=prompt-nu-fission
|
||||
[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]
|
||||
domain=10002 type=prompt-nu-fission matrix
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
domain=10002 type=delayed-nu-fission
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]
|
||||
|
|
@ -376,3 +461,38 @@ domain=10002 type=decay-rate
|
|||
[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
domain=10002 type=delayed-nu-fission matrix
|
||||
[[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]]
|
||||
[[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]
|
||||
|
||||
[[0.00000000e+00 0.00000000e+00]
|
||||
[0.00000000e+00 0.00000000e+00]]]
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
a0d62fc011ae33756cd87202432f5c49f847793a40ec50efc6e4366755a70196f9ae970b24244766c011e2991961ea92317b53f6839b89363262b4e67ed4b289
|
||||
03d894a7995ac40f7971b17349b460f4b563cb1c94abaa7e7241e6f7edad7f0cb80d3f80829db14ea6b7d70d18197cb15e308047cd10f699d834178eeb6396be
|
||||
|
|
@ -130,6 +130,12 @@
|
|||
1 1 2 1 1 total 0.020397 0.008086
|
||||
2 2 1 1 1 total 0.025824 0.003192
|
||||
3 2 2 1 1 total 0.020865 0.004879
|
||||
mesh 1 group in group out nuclide mean std. dev.
|
||||
x y z
|
||||
0 1 1 1 1 1 total 0.020874 0.002977
|
||||
1 1 2 1 1 1 total 0.017348 0.008786
|
||||
2 2 1 1 1 1 total 0.020409 0.003354
|
||||
3 2 2 1 1 1 total 0.011105 0.003806
|
||||
mesh 1 delayedgroup group in nuclide mean std. dev.
|
||||
x y z
|
||||
0 1 1 1 1 1 total 0.000005 1.004627e-06
|
||||
|
|
@ -234,3 +240,29 @@
|
|||
21 2 2 1 4 1 total 0.00000 0.00000
|
||||
22 2 2 1 5 1 total 0.00000 0.00000
|
||||
23 2 2 1 6 1 total 0.00000 0.00000
|
||||
mesh 1 delayedgroup group in group out nuclide mean std. dev.
|
||||
x y z
|
||||
0 1 1 1 1 1 1 total 0.000000 0.000000
|
||||
1 1 1 1 2 1 1 total 0.000000 0.000000
|
||||
2 1 1 1 3 1 1 total 0.000000 0.000000
|
||||
3 1 1 1 4 1 1 total 0.000000 0.000000
|
||||
4 1 1 1 5 1 1 total 0.000185 0.000186
|
||||
5 1 1 1 6 1 1 total 0.000000 0.000000
|
||||
6 1 2 1 1 1 1 total 0.000000 0.000000
|
||||
7 1 2 1 2 1 1 total 0.000000 0.000000
|
||||
8 1 2 1 3 1 1 total 0.000000 0.000000
|
||||
9 1 2 1 4 1 1 total 0.000000 0.000000
|
||||
10 1 2 1 5 1 1 total 0.000000 0.000000
|
||||
11 1 2 1 6 1 1 total 0.000000 0.000000
|
||||
12 2 1 1 1 1 1 total 0.000000 0.000000
|
||||
13 2 1 1 2 1 1 total 0.000000 0.000000
|
||||
14 2 1 1 3 1 1 total 0.000000 0.000000
|
||||
15 2 1 1 4 1 1 total 0.000000 0.000000
|
||||
16 2 1 1 5 1 1 total 0.000000 0.000000
|
||||
17 2 1 1 6 1 1 total 0.000000 0.000000
|
||||
18 2 2 1 1 1 1 total 0.000000 0.000000
|
||||
19 2 2 1 2 1 1 total 0.000000 0.000000
|
||||
20 2 2 1 3 1 1 total 0.000000 0.000000
|
||||
21 2 2 1 4 1 1 total 0.000000 0.000000
|
||||
22 2 2 1 5 1 1 total 0.000000 0.000000
|
||||
23 2 2 1 6 1 1 total 0.000000 0.000000
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
e86f24e20f37096c7898f459fc5bf336f3e0670fb30f321443f2bb3a01a154ef3d234bb48d4cee8e0d3730fd182b6a2051ec1b4c09d771420886a56ba928fdd9
|
||||
4291b40470e7d59383c9e51c4178ca923b698cb1aaea16c1982fe3789ca980df10a65b84fb5021dacd4d290ebc232c2579f99b6c990fb6b8f28f67eef2aabcb2
|
||||
|
|
@ -84,6 +84,11 @@
|
|||
material group in nuclide mean std. dev.
|
||||
1 10000 1 total 0.019239 0.001310
|
||||
0 10000 2 total 0.466719 0.041411
|
||||
material group in group out nuclide mean std. dev.
|
||||
3 10000 1 1 total 0.020142 0.003149
|
||||
2 10000 1 2 total 0.000000 0.000000
|
||||
1 10000 2 1 total 0.445819 0.028675
|
||||
0 10000 2 2 total 0.000000 0.000000
|
||||
material delayedgroup group in nuclide mean std. dev.
|
||||
1 10000 1 1 total 0.000023 0.000002
|
||||
3 10000 2 1 total 0.000144 0.000011
|
||||
|
|
@ -136,6 +141,31 @@
|
|||
6 10000 4 2 total 0.302780 0.109110
|
||||
8 10000 5 2 total 0.000000 0.000000
|
||||
10 10000 6 2 total 0.000000 0.000000
|
||||
material delayedgroup group in group out nuclide mean std. dev.
|
||||
3 10000 1 1 1 total 0.000000 0.000000
|
||||
7 10000 2 1 1 total 0.000000 0.000000
|
||||
11 10000 3 1 1 total 0.000000 0.000000
|
||||
15 10000 4 1 1 total 0.000000 0.000000
|
||||
19 10000 5 1 1 total 0.000000 0.000000
|
||||
23 10000 6 1 1 total 0.000000 0.000000
|
||||
2 10000 1 1 2 total 0.000000 0.000000
|
||||
6 10000 2 1 2 total 0.000000 0.000000
|
||||
10 10000 3 1 2 total 0.000000 0.000000
|
||||
14 10000 4 1 2 total 0.000000 0.000000
|
||||
18 10000 5 1 2 total 0.000000 0.000000
|
||||
22 10000 6 1 2 total 0.000000 0.000000
|
||||
1 10000 1 2 1 total 0.000000 0.000000
|
||||
5 10000 2 2 1 total 0.002538 0.001561
|
||||
9 10000 3 2 1 total 0.001186 0.001186
|
||||
13 10000 4 2 1 total 0.000860 0.000222
|
||||
17 10000 5 2 1 total 0.000000 0.000000
|
||||
21 10000 6 2 1 total 0.000000 0.000000
|
||||
0 10000 1 2 2 total 0.000000 0.000000
|
||||
4 10000 2 2 2 total 0.000000 0.000000
|
||||
8 10000 3 2 2 total 0.000000 0.000000
|
||||
12 10000 4 2 2 total 0.000000 0.000000
|
||||
16 10000 5 2 2 total 0.000000 0.000000
|
||||
20 10000 6 2 2 total 0.000000 0.000000
|
||||
material group in nuclide mean std. dev.
|
||||
1 10001 1 total 0.313738 0.015582
|
||||
0 10001 2 total 0.300821 0.028052
|
||||
|
|
@ -222,6 +252,11 @@
|
|||
material group in nuclide mean std. dev.
|
||||
1 10001 1 total 0.0 0.0
|
||||
0 10001 2 total 0.0 0.0
|
||||
material group in group out nuclide mean std. dev.
|
||||
3 10001 1 1 total 0.0 0.0
|
||||
2 10001 1 2 total 0.0 0.0
|
||||
1 10001 2 1 total 0.0 0.0
|
||||
0 10001 2 2 total 0.0 0.0
|
||||
material delayedgroup group in nuclide mean std. dev.
|
||||
1 10001 1 1 total 0.0 0.0
|
||||
3 10001 2 1 total 0.0 0.0
|
||||
|
|
@ -274,6 +309,31 @@
|
|||
6 10001 4 2 total 0.0 0.0
|
||||
8 10001 5 2 total 0.0 0.0
|
||||
10 10001 6 2 total 0.0 0.0
|
||||
material delayedgroup group in group out nuclide mean std. dev.
|
||||
3 10001 1 1 1 total 0.0 0.0
|
||||
7 10001 2 1 1 total 0.0 0.0
|
||||
11 10001 3 1 1 total 0.0 0.0
|
||||
15 10001 4 1 1 total 0.0 0.0
|
||||
19 10001 5 1 1 total 0.0 0.0
|
||||
23 10001 6 1 1 total 0.0 0.0
|
||||
2 10001 1 1 2 total 0.0 0.0
|
||||
6 10001 2 1 2 total 0.0 0.0
|
||||
10 10001 3 1 2 total 0.0 0.0
|
||||
14 10001 4 1 2 total 0.0 0.0
|
||||
18 10001 5 1 2 total 0.0 0.0
|
||||
22 10001 6 1 2 total 0.0 0.0
|
||||
1 10001 1 2 1 total 0.0 0.0
|
||||
5 10001 2 2 1 total 0.0 0.0
|
||||
9 10001 3 2 1 total 0.0 0.0
|
||||
13 10001 4 2 1 total 0.0 0.0
|
||||
17 10001 5 2 1 total 0.0 0.0
|
||||
21 10001 6 2 1 total 0.0 0.0
|
||||
0 10001 1 2 2 total 0.0 0.0
|
||||
4 10001 2 2 2 total 0.0 0.0
|
||||
8 10001 3 2 2 total 0.0 0.0
|
||||
12 10001 4 2 2 total 0.0 0.0
|
||||
16 10001 5 2 2 total 0.0 0.0
|
||||
20 10001 6 2 2 total 0.0 0.0
|
||||
material group in nuclide mean std. dev.
|
||||
1 10002 1 total 0.664572 0.031215
|
||||
0 10002 2 total 2.052384 0.224343
|
||||
|
|
@ -360,6 +420,11 @@
|
|||
material group in nuclide mean std. dev.
|
||||
1 10002 1 total 0.0 0.0
|
||||
0 10002 2 total 0.0 0.0
|
||||
material group in group out nuclide mean std. dev.
|
||||
3 10002 1 1 total 0.0 0.0
|
||||
2 10002 1 2 total 0.0 0.0
|
||||
1 10002 2 1 total 0.0 0.0
|
||||
0 10002 2 2 total 0.0 0.0
|
||||
material delayedgroup group in nuclide mean std. dev.
|
||||
1 10002 1 1 total 0.0 0.0
|
||||
3 10002 2 1 total 0.0 0.0
|
||||
|
|
@ -412,3 +477,28 @@
|
|||
6 10002 4 2 total 0.0 0.0
|
||||
8 10002 5 2 total 0.0 0.0
|
||||
10 10002 6 2 total 0.0 0.0
|
||||
material delayedgroup group in group out nuclide mean std. dev.
|
||||
3 10002 1 1 1 total 0.0 0.0
|
||||
7 10002 2 1 1 total 0.0 0.0
|
||||
11 10002 3 1 1 total 0.0 0.0
|
||||
15 10002 4 1 1 total 0.0 0.0
|
||||
19 10002 5 1 1 total 0.0 0.0
|
||||
23 10002 6 1 1 total 0.0 0.0
|
||||
2 10002 1 1 2 total 0.0 0.0
|
||||
6 10002 2 1 2 total 0.0 0.0
|
||||
10 10002 3 1 2 total 0.0 0.0
|
||||
14 10002 4 1 2 total 0.0 0.0
|
||||
18 10002 5 1 2 total 0.0 0.0
|
||||
22 10002 6 1 2 total 0.0 0.0
|
||||
1 10002 1 2 1 total 0.0 0.0
|
||||
5 10002 2 2 1 total 0.0 0.0
|
||||
9 10002 3 2 1 total 0.0 0.0
|
||||
13 10002 4 2 1 total 0.0 0.0
|
||||
17 10002 5 2 1 total 0.0 0.0
|
||||
21 10002 6 2 1 total 0.0 0.0
|
||||
0 10002 1 2 2 total 0.0 0.0
|
||||
4 10002 2 2 2 total 0.0 0.0
|
||||
8 10002 3 2 2 total 0.0 0.0
|
||||
12 10002 4 2 2 total 0.0 0.0
|
||||
16 10002 5 2 2 total 0.0 0.0
|
||||
20 10002 6 2 2 total 0.0 0.0
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
1e8d0f408ba9d47fc9278e750dbf68d3104d248f7783ca1185c8b7666c9ee2ba3ec6fcf4a49bb614956bb8eb3a57dc1c104725b4160171dfbe6dc972a268df56
|
||||
eed0190893105747f0146472dfea86ca58b9fc2e8d039961d9fef8f235f79da32215f9b59b840419e6b69c5a04544b4659f2634b63e3a76b6b0f8c75d05e416c
|
||||
|
|
@ -1 +1 @@
|
|||
ce682f577fd65dd9b6e5da58763cf2ae4cf8e5041b38b5d1ed64d3ba7a3a4df7338aadfa8830a0764fc9ffb737f05fc989a494158c714047186dd18605a7d2b8
|
||||
8bc6694ee99cc05ec59143dac065f3f51026713044c48a36ac486f46014289c1f18d4d8e14ef0bb468050aea0bac5628425fd76154a01c7438c7d85139aa2f06
|
||||
Loading…
Add table
Add a link
Reference in a new issue