mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-29 06:35:48 -04:00
Merging with angles branch and renaming the MGXSLibrary.__getitem__ to get_by_name
This commit is contained in:
commit
2e0e37c305
8 changed files with 66 additions and 39 deletions
|
|
@ -1,3 +1,5 @@
|
|||
import numpy as np
|
||||
|
||||
import openmc
|
||||
import openmc.mgxs
|
||||
|
||||
|
|
@ -26,7 +28,7 @@ uo2_xsdata.set_total(
|
|||
0.5644058])
|
||||
uo2_xsdata.set_absorption([8.0248E-03, 3.7174E-03, 2.6769E-02, 9.6236E-02,
|
||||
3.0020E-02, 1.1126E-01, 2.8278E-01])
|
||||
uo2_xsdata.set_scatter_matrix(
|
||||
scatter_matrix = np.array(
|
||||
[[[0.1275370, 0.0423780, 0.0000094, 0.0000000, 0.0000000, 0.0000000, 0.0000000],
|
||||
[0.0000000, 0.3244560, 0.0016314, 0.0000000, 0.0000000, 0.0000000, 0.0000000],
|
||||
[0.0000000, 0.0000000, 0.4509400, 0.0026792, 0.0000000, 0.0000000, 0.0000000],
|
||||
|
|
@ -34,6 +36,8 @@ uo2_xsdata.set_scatter_matrix(
|
|||
[0.0000000, 0.0000000, 0.0000000, 0.0001253, 0.2714010, 0.0102550, 0.0000000],
|
||||
[0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0012968, 0.2658020, 0.0168090],
|
||||
[0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0085458, 0.2730800]]])
|
||||
scatter_matrix = np.rollaxis(scatter_matrix, 0, 3)
|
||||
uo2_xsdata.set_scatter_matrix(scatter_matrix)
|
||||
uo2_xsdata.set_fission([7.21206E-03, 8.19301E-04, 6.45320E-03,
|
||||
1.85648E-02, 1.78084E-02, 8.30348E-02,
|
||||
2.16004E-01])
|
||||
|
|
@ -50,7 +54,7 @@ h2o_xsdata.set_total([0.15920605, 0.412969593, 0.59030986, 0.58435,
|
|||
h2o_xsdata.set_absorption([6.0105E-04, 1.5793E-05, 3.3716E-04,
|
||||
1.9406E-03, 5.7416E-03, 1.5001E-02,
|
||||
3.7239E-02])
|
||||
h2o_xsdata.set_scatter_matrix(
|
||||
scatter_matrix = np.array(
|
||||
[[[0.0444777, 0.1134000, 0.0007235, 0.0000037, 0.0000001, 0.0000000, 0.0000000],
|
||||
[0.0000000, 0.2823340, 0.1299400, 0.0006234, 0.0000480, 0.0000074, 0.0000010],
|
||||
[0.0000000, 0.0000000, 0.3452560, 0.2245700, 0.0169990, 0.0026443, 0.0005034],
|
||||
|
|
@ -58,6 +62,8 @@ h2o_xsdata.set_scatter_matrix(
|
|||
[0.0000000, 0.0000000, 0.0000000, 0.0000714, 0.1391380, 0.5118200, 0.0612290],
|
||||
[0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0022157, 0.6999130, 0.5373200],
|
||||
[0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.1324400, 2.4807000]]])
|
||||
scatter_matrix = np.rollaxis(scatter_matrix, 0, 3)
|
||||
h2o_xsdata.set_scatter_matrix(scatter_matrix)
|
||||
|
||||
mg_cross_sections_file = openmc.MGXSLibrary(groups)
|
||||
mg_cross_sections_file.add_xsdatas([uo2_xsdata, h2o_xsdata])
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -100,10 +100,13 @@ class Filter(object):
|
|||
@classmethod
|
||||
def _recursive_subclasses(cls):
|
||||
"""Return all subclasses and their subclasses, etc."""
|
||||
subs = cls.__subclasses__()
|
||||
subsubs = [grand for s in subs for grand in s.__subclasses__()]
|
||||
subsubsubs = [grand for s in subsubs for grand in s.__subclasses__()]
|
||||
return subs + subsubs + subsubsubs
|
||||
all_subclasses = []
|
||||
|
||||
for subclass in cls.__subclasses__():
|
||||
all_subclasses.append(subclass)
|
||||
all_subclasses.extend(subclass._recursive_subclasses())
|
||||
|
||||
return all_subclasses
|
||||
|
||||
@classmethod
|
||||
def from_hdf5(cls, group, **kwargs):
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ class Library(object):
|
|||
The spatial domain(s) for which MGXS in the Library are computed
|
||||
correction : {'P0', None}
|
||||
Apply the P0 correction to scattering matrices if set to 'P0'
|
||||
scatter_format : {'legendre', or 'histogram'}
|
||||
scatter_format : {'legendre', 'histogram'}
|
||||
Representation of the angular scattering distribution (default is
|
||||
'legendre')
|
||||
legendre_order : int
|
||||
|
|
|
|||
|
|
@ -1532,9 +1532,19 @@ class MGXS(object):
|
|||
else:
|
||||
df = df.drop('score', axis=1)
|
||||
|
||||
# Determine if change-in-angle bins are included in the MGXS to
|
||||
# properly tile the group boundaries
|
||||
if 'mu low' in df:
|
||||
# Find the length of the mu filters indirectly from the number
|
||||
# of times the mu bins repeats.
|
||||
num_mu = int(df.shape[0] /
|
||||
df[df['mu low'] == df['mu low'][0]].shape[0])
|
||||
else:
|
||||
num_mu = 1
|
||||
|
||||
# Override energy groups bounds with indices
|
||||
all_groups = np.arange(self.num_groups, 0, -1, dtype=np.int)
|
||||
all_groups = np.repeat(all_groups, len(query_nuclides))
|
||||
all_groups = np.repeat(all_groups, len(query_nuclides) * num_mu)
|
||||
if 'energy low [eV]' in df and 'energyout low [eV]' in df:
|
||||
df.rename(columns={'energy low [eV]': 'group in'},
|
||||
inplace=True)
|
||||
|
|
@ -3795,10 +3805,8 @@ class ScatterMatrixXS(MatrixMGXS):
|
|||
# than 1, so try each axis in axes one at a time, catching the
|
||||
# ValueError as needed.
|
||||
for axis in axes:
|
||||
try:
|
||||
if xs.shape[axis] == 1:
|
||||
xs = np.squeeze(xs, axis=axis)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
return xs
|
||||
|
||||
|
|
@ -3878,9 +3886,12 @@ class ScatterMatrixXS(MatrixMGXS):
|
|||
df = df[df['moment'] == 'P{}'.format(moment)]
|
||||
|
||||
elif self.scatter_format == 'histogram':
|
||||
# Add a change-in-angle (mu) column to dataframe
|
||||
###TODO NOT SURE I NEED TO DO THIS
|
||||
pass
|
||||
# Replace the mu low and mu high columns with a single mu bin
|
||||
del df['mu high']
|
||||
df.rename(columns={'mu low': 'mu bins'}, inplace=True)
|
||||
bins = [i + 1 for i in range(self.histogram_bins)]
|
||||
bins = np.tile(bins, int(df.shape[0] / len(bins)))
|
||||
df['mu bins'] = bins
|
||||
|
||||
return df
|
||||
|
||||
|
|
|
|||
|
|
@ -1784,8 +1784,14 @@ class XSdata(object):
|
|||
np.sum(self._scatter_matrix[i][p, a, g_in, :, :],
|
||||
axis=1)
|
||||
nz = np.nonzero(matrix)
|
||||
g_out_bounds[p, a, g_in, 0] = nz[0][0]
|
||||
g_out_bounds[p, a, g_in, 1] = nz[0][-1]
|
||||
# It is possible that there only zeros in matrix
|
||||
# and therefore nz will be empty, in that case set
|
||||
# g_out_bounds to 0s
|
||||
if len(nz[0]) == 0:
|
||||
g_out_bounds[p, a, g_in, :] = 0
|
||||
else:
|
||||
g_out_bounds[p, a, g_in, 0] = nz[0][0]
|
||||
g_out_bounds[p, a, g_in, 1] = nz[0][-1]
|
||||
|
||||
# Now create the flattened scatter matrix array
|
||||
flat_scatt = []
|
||||
|
|
@ -2006,27 +2012,6 @@ class MGXSLibrary(object):
|
|||
self.num_delayed_groups = num_delayed_groups
|
||||
self._xsdatas = []
|
||||
|
||||
def __getitem__(self, name):
|
||||
"""Access the XSdata objects by name
|
||||
|
||||
Parameters
|
||||
----------
|
||||
name : str
|
||||
Name of openmc.XSdata object to obtain
|
||||
|
||||
Returns
|
||||
-------
|
||||
result : openmc.XSdata or None
|
||||
Provides the matching XSdata object or None, if not found
|
||||
|
||||
"""
|
||||
check_type("name", name, str)
|
||||
result = None
|
||||
for xsdata in self.xsdatas:
|
||||
if name == xsdata.name:
|
||||
result = xsdata
|
||||
return result
|
||||
|
||||
@property
|
||||
def energy_groups(self):
|
||||
return self._energy_groups
|
||||
|
|
@ -2110,6 +2095,27 @@ class MGXSLibrary(object):
|
|||
|
||||
self._xsdatas.remove(xsdata)
|
||||
|
||||
def get_by_name(self, name):
|
||||
"""Access the XSdata objects by name
|
||||
|
||||
Parameters
|
||||
----------
|
||||
name : str
|
||||
Name of openmc.XSdata object to obtain
|
||||
|
||||
Returns
|
||||
-------
|
||||
result : openmc.XSdata or None
|
||||
Provides the matching XSdata object or None, if not found
|
||||
|
||||
"""
|
||||
check_type("name", name, str)
|
||||
result = None
|
||||
for xsdata in self.xsdatas:
|
||||
if name == xsdata.name:
|
||||
result = xsdata
|
||||
return result
|
||||
|
||||
def export_to_hdf5(self, filename='mgxs.h5'):
|
||||
"""Create an hdf5 file that can be used for a simulation.
|
||||
|
||||
|
|
|
|||
|
|
@ -722,7 +722,7 @@ def _calculate_mgxs_nuc_macro(this, types, library, orders=None,
|
|||
if orders[i]:
|
||||
cv.check_greater_than("order value", orders[i], 0, equality=True)
|
||||
|
||||
xsdata = library[this.name]
|
||||
xsdata = library.get_by_name(this.name)
|
||||
|
||||
if xsdata is not None:
|
||||
# Obtain the nearest temperature
|
||||
|
|
|
|||
|
|
@ -3,13 +3,14 @@
|
|||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.pardir)
|
||||
import numpy as np
|
||||
|
||||
from testing_harness import PyAPITestHarness
|
||||
from openmc.filter import *
|
||||
from openmc import Mesh, Tally, Tallies
|
||||
from openmc.source import Source
|
||||
from openmc.stats import Box
|
||||
|
||||
|
||||
class TalliesTestHarness(PyAPITestHarness):
|
||||
def _build_inputs(self):
|
||||
# Build default materials/geometry
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue