Merge branch 'develop' into complex-cells

Conflicts:
	openmc/opencg_compatible.py
	openmc/surface.py
This commit is contained in:
Paul Romano 2015-10-04 10:22:48 +07:00
commit 3ca7279bd8
24 changed files with 785 additions and 710 deletions

View file

@ -142,7 +142,7 @@ than unity. By ensuring that the expected number of fission sites in each mesh
cell is constant, the collision density across all cells, and hence the variance
of tallies, is more uniform than it would be otherwise.
.. _Shannon entropy: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-06-3737_entropy.pdf
.. _Shannon entropy: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-06-3737.pdf
.. [Lieberoth] J. Lieberoth, "A Monte Carlo Technique to Solve the Static
Eigenvalue Problem of the Boltzmann Transport Equation," *Nukleonik*, **11**,

View file

@ -132,9 +132,12 @@ class Material(object):
@name.setter
def name(self, name):
check_type('name for Material ID="{0}"'.format(self._id),
name, basestring)
self._name = name
if name is not None:
check_type('name for Material ID="{0}"'.format(self._id),
name, basestring)
self._name = name
else:
self._name = None
def set_density(self, units, density=NO_DENSITY):
"""Set the density of the material

View file

@ -148,8 +148,12 @@ class Mesh(object):
@name.setter
def name(self, name):
check_type('name for mesh ID="{0}"'.format(self._id), name, basestring)
self._name = name
if name is not None:
check_type('name for mesh ID="{0}"'.format(self._id),
name, basestring)
self._name = name
else:
self._name = None
@type.setter
def type(self, meshtype):

View file

@ -85,14 +85,14 @@ def get_opencg_material(openmc_material):
raise ValueError(msg)
global OPENCG_MATERIALS
material_id = openmc_material._id
material_id = openmc_material.id
# If this Material was already created, use it
if material_id in OPENCG_MATERIALS:
return OPENCG_MATERIALS[material_id]
# Create an OpenCG Material to represent this OpenMC Material
name = openmc_material._name
name = openmc_material.name
opencg_material = opencg.Material(material_id=material_id, name=name)
# Add the OpenMC Material to the global collection of all OpenMC Materials
@ -125,14 +125,14 @@ def get_openmc_material(opencg_material):
raise ValueError(msg)
global OPENMC_MATERIALS
material_id = opencg_material._id
material_id = opencg_material.id
# If this Material was already created, use it
if material_id in OPENMC_MATERIALS:
return OPENMC_MATERIALS[material_id]
# Create an OpenMC Material to represent this OpenCG Material
name = opencg_material._name
name = opencg_material.name
openmc_material = openmc.Material(material_id=material_id, name=name)
# Add the OpenMC Material to the global collection of all OpenMC Materials
@ -170,8 +170,8 @@ def is_opencg_surface_compatible(opencg_surface):
'since "{0}" is not a Surface'.format(opencg_surface)
raise ValueError(msg)
if opencg_surface._type in ['x-squareprism',
'y-squareprism', 'z-squareprism']:
if opencg_surface.type in ['x-squareprism',
'y-squareprism', 'z-squareprism']:
return False
else:
return True
@ -198,59 +198,59 @@ def get_opencg_surface(openmc_surface):
raise ValueError(msg)
global OPENCG_SURFACES
surface_id = openmc_surface._id
surface_id = openmc_surface.id
# If this Material was already created, use it
if surface_id in OPENCG_SURFACES:
return OPENCG_SURFACES[surface_id]
# Create an OpenCG Surface to represent this OpenMC Surface
name = openmc_surface._name
name = openmc_surface.name
# Correct for OpenMC's syntax for Surfaces dividing Cells
boundary = openmc_surface._boundary_type
boundary = openmc_surface.boundary_type
if boundary == 'transmission':
boundary = 'interface'
opencg_surface = None
if openmc_surface._type == 'plane':
A = openmc_surface._coeffs['A']
B = openmc_surface._coeffs['B']
C = openmc_surface._coeffs['C']
D = openmc_surface._coeffs['D']
if openmc_surface.type == 'plane':
A = openmc_surface.a
B = openmc_surface.b
C = openmc_surface.c
D = openmc_surface.d
opencg_surface = opencg.Plane(surface_id, name, boundary, A, B, C, D)
elif openmc_surface._type == 'x-plane':
x0 = openmc_surface._coeffs['x0']
elif openmc_surface.type == 'x-plane':
x0 = openmc_surface.x0
opencg_surface = opencg.XPlane(surface_id, name, boundary, x0)
elif openmc_surface._type == 'y-plane':
y0 = openmc_surface._coeffs['y0']
elif openmc_surface.type == 'y-plane':
y0 = openmc_surface.y0
opencg_surface = opencg.YPlane(surface_id, name, boundary, y0)
elif openmc_surface._type == 'z-plane':
z0 = openmc_surface._coeffs['z0']
elif openmc_surface.type == 'z-plane':
z0 = openmc_surface.z0
opencg_surface = opencg.ZPlane(surface_id, name, boundary, z0)
elif openmc_surface._type == 'x-cylinder':
y0 = openmc_surface._coeffs['y0']
z0 = openmc_surface._coeffs['z0']
R = openmc_surface._coeffs['R']
elif openmc_surface.type == 'x-cylinder':
y0 = openmc_surface.y0
z0 = openmc_surface.z0
R = openmc_surface.r
opencg_surface = opencg.XCylinder(surface_id, name,
boundary, y0, z0, R)
elif openmc_surface._type == 'y-cylinder':
x0 = openmc_surface._coeffs['x0']
z0 = openmc_surface._coeffs['z0']
R = openmc_surface._coeffs['R']
elif openmc_surface.type == 'y-cylinder':
x0 = openmc_surface.x0
z0 = openmc_surface.z0
R = openmc_surface.r
opencg_surface = opencg.YCylinder(surface_id, name,
boundary, x0, z0, R)
elif openmc_surface._type == 'z-cylinder':
x0 = openmc_surface._coeffs['x0']
y0 = openmc_surface._coeffs['y0']
R = openmc_surface._coeffs['R']
elif openmc_surface.type == 'z-cylinder':
x0 = openmc_surface.x0
y0 = openmc_surface.y0
R = openmc_surface.r
opencg_surface = opencg.ZCylinder(surface_id, name,
boundary, x0, y0, R)
@ -284,61 +284,61 @@ def get_openmc_surface(opencg_surface):
raise ValueError(msg)
global openmc_surface
surface_id = opencg_surface._id
surface_id = opencg_surface.id
# If this Surface was already created, use it
if surface_id in OPENMC_SURFACES:
return OPENMC_SURFACES[surface_id]
# Create an OpenMC Surface to represent this OpenCG Surface
name = opencg_surface._name
name = opencg_surface.name
# Correct for OpenMC's syntax for Surfaces dividing Cells
boundary = opencg_surface._boundary_type
boundary = opencg_surface.boundary_type
if boundary == 'interface':
boundary = 'transmission'
if opencg_surface._type == 'plane':
A = opencg_surface._coeffs['A']
B = opencg_surface._coeffs['B']
C = opencg_surface._coeffs['C']
D = opencg_surface._coeffs['D']
if opencg_surface.type == 'plane':
A = opencg_surface.a
B = opencg_surface.b
C = opencg_surface.c
D = opencg_surface.d
openmc_surface = openmc.Plane(surface_id, boundary, A, B, C, D, name)
elif opencg_surface._type == 'x-plane':
x0 = opencg_surface._coeffs['x0']
elif opencg_surface.type == 'x-plane':
x0 = opencg_surface.x0
openmc_surface = openmc.XPlane(surface_id, boundary, x0, name)
elif opencg_surface._type == 'y-plane':
y0 = opencg_surface._coeffs['y0']
elif opencg_surface.type == 'y-plane':
y0 = opencg_surface.y0
openmc_surface = openmc.YPlane(surface_id, boundary, y0, name)
elif opencg_surface._type == 'z-plane':
z0 = opencg_surface._coeffs['z0']
elif opencg_surface.type == 'z-plane':
z0 = opencg_surface.z0
openmc_surface = openmc.ZPlane(surface_id, boundary, z0, name)
elif opencg_surface._type == 'x-cylinder':
y0 = opencg_surface._coeffs['y0']
z0 = opencg_surface._coeffs['z0']
R = opencg_surface._coeffs['R']
elif opencg_surface.type == 'x-cylinder':
y0 = opencg_surface.y0
z0 = opencg_surface.z0
R = opencg_surface.r
openmc_surface = openmc.XCylinder(surface_id, boundary, y0, z0, R, name)
elif opencg_surface._type == 'y-cylinder':
x0 = opencg_surface._coeffs['x0']
z0 = opencg_surface._coeffs['z0']
R = opencg_surface._coeffs['R']
elif opencg_surface.type == 'y-cylinder':
x0 = opencg_surface.x0
z0 = opencg_surface.z0
R = opencg_surface.r
openmc_surface = openmc.YCylinder(surface_id, boundary, x0, z0, R, name)
elif opencg_surface._type == 'z-cylinder':
x0 = opencg_surface._coeffs['x0']
y0 = opencg_surface._coeffs['y0']
R = opencg_surface._coeffs['R']
elif opencg_surface.type == 'z-cylinder':
x0 = opencg_surface.x0
y0 = opencg_surface.y0
R = opencg_surface.r
openmc_surface = openmc.ZCylinder(surface_id, boundary, x0, y0, R, name)
else:
msg = 'Unable to create an OpenMC Surface from an OpenCG ' \
'Surface of type "{0}" since it is not a compatible ' \
'Surface type in OpenMC'.format(opencg_surface._type)
'Surface type in OpenMC'.format(opencg_surface.type)
raise ValueError(msg)
# Add the OpenMC Surface to the global collection of all OpenMC Surfaces
@ -375,20 +375,20 @@ def get_compatible_opencg_surfaces(opencg_surface):
raise ValueError(msg)
global OPENMC_SURFACES
surface_id = opencg_surface._id
surface_id = opencg_surface.id
# If this Surface was already created, use it
if surface_id in OPENMC_SURFACES:
return OPENMC_SURFACES[surface_id]
# Create an OpenMC Surface to represent this OpenCG Surface
name = opencg_surface._name
boundary = opencg_surface._boundary_type
name = opencg_surface.name
boundary = opencg_surface.boundary_type
if opencg_surface._type == 'x-squareprism':
y0 = opencg_surface._coeffs['y0']
z0 = opencg_surface._coeffs['z0']
R = opencg_surface._coeffs['R']
if opencg_surface.type == 'x-squareprism':
y0 = opencg_surface.y0
z0 = opencg_surface.z0
R = opencg_surface.r
# Create a list of the four planes we need
left = opencg.YPlane(name=name, boundary=boundary, y0=y0-R)
@ -397,10 +397,10 @@ def get_compatible_opencg_surfaces(opencg_surface):
top = opencg.ZPlane(name=name, boundary=boundary, z0=z0+R)
surfaces = [left, right, bottom, top]
elif opencg_surface._type == 'y-squareprism':
x0 = opencg_surface._coeffs['x0']
z0 = opencg_surface._coeffs['z0']
R = opencg_surface._coeffs['R']
elif opencg_surface.type == 'y-squareprism':
x0 = opencg_surface.x0
z0 = opencg_surface.z0
R = opencg_surface.r
# Create a list of the four planes we need
left = opencg.XPlane(name=name, boundary=boundary, x0=x0-R)
@ -409,10 +409,10 @@ def get_compatible_opencg_surfaces(opencg_surface):
top = opencg.ZPlane(name=name, boundary=boundary, z0=z0+R)
surfaces = [left, right, bottom, top]
elif opencg_surface._type == 'z-squareprism':
x0 = opencg_surface._coeffs['x0']
y0 = opencg_surface._coeffs['y0']
R = opencg_surface._coeffs['R']
elif opencg_surface.type == 'z-squareprism':
x0 = opencg_surface.x0['x0']
y0 = opencg_surface.y0['y0']
R = opencg_surface.r['R']
# Create a list of the four planes we need
left = opencg.XPlane(name=name, boundary=boundary, x0=x0-R)
@ -424,7 +424,7 @@ def get_compatible_opencg_surfaces(opencg_surface):
else:
msg = 'Unable to create a compatible OpenMC Surface an OpenCG ' \
'Surface of type "{0}" since it already a compatible ' \
'Surface type in OpenMC'.format(opencg_surface._type)
'Surface type in OpenMC'.format(opencg_surface.type)
raise ValueError(msg)
# Add the OpenMC Surface(s) to the global collection of all OpenMC Surfaces
@ -457,30 +457,30 @@ def get_opencg_cell(openmc_cell):
raise ValueError(msg)
global OPENCG_CELLS
cell_id = openmc_cell._id
cell_id = openmc_cell.id
# If this Cell was already created, use it
if cell_id in OPENCG_CELLS:
return OPENCG_CELLS[cell_id]
# Create an OpenCG Cell to represent this OpenMC Cell
name = openmc_cell._name
name = openmc_cell.name
opencg_cell = opencg.Cell(cell_id, name)
fill = openmc_cell._fill
fill = openmc_cell.fill
if (openmc_cell._type == 'normal'):
opencg_cell.setFill(get_opencg_material(fill))
elif (openmc_cell._type == 'fill'):
opencg_cell.setFill(get_opencg_universe(fill))
if (openmc_cell.fill_type == 'material'):
opencg_cell.fill = get_opencg_material(fill)
elif (openmc_cell.fill_type == 'universe'):
opencg_cell.fill = get_opencg_universe(fill)
else:
opencg_cell.setFill(get_opencg_lattice(fill))
opencg_cell.fill = get_opencg_lattice(fill)
if openmc_cell._rotation is not None:
opencg_cell.setRotation(openmc_cell._rotation)
if openmc_cell.rotation is not None:
opencg_cell.rotation = openmc_cell.rotation
if openmc_cell._translation is not None:
opencg_cell.setTranslation(openmc_cell._translation)
if openmc_cell.translation is not None:
opencg_cell.translation = openmc_cell.translation
# Add surfaces to OpenCG cell from OpenMC cell region. Right now this only
# works if the region is a single half-space or an intersection of
@ -489,7 +489,7 @@ def get_opencg_cell(openmc_cell):
if isinstance(region, Halfspace):
surface = region.surface
halfspace = -1 if region.side == '-' else 1
opencg_cell.addSurface(get_opencg_surface(surface), halfspace)
opencg_cell.add_surface(get_opencg_surface(surface), halfspace)
elif isinstance(region, Intersection):
for node in region.nodes:
if not isinstance(node, Halfspace):
@ -497,7 +497,7 @@ def get_opencg_cell(openmc_cell):
"in OpenCG.")
surface = node.surface
halfspace = -1 if node.side == '-' else 1
opencg_cell.addSurface(get_opencg_surface(surface), halfspace)
opencg_cell.add_surface(get_opencg_surface(surface), halfspace)
else:
raise NotImplementedError("Complex cells not yet supported in OpenCG.")
@ -550,8 +550,8 @@ def get_compatible_opencg_cells(opencg_cell, opencg_surface, halfspace):
compatible_cells = []
# SquarePrism Surfaces
if opencg_surface._type in ['x-squareprism', 'y-squareprism',
'z-squareprism']:
if opencg_surface.type in ['x-squareprism', 'y-squareprism',
'z-squareprism']:
# Get the compatible Surfaces (XPlanes and YPlanes)
compatible_surfaces = get_compatible_opencg_surfaces(opencg_surface)
@ -560,10 +560,10 @@ def get_compatible_opencg_cells(opencg_cell, opencg_surface, halfspace):
# If Cell is inside SquarePrism, add "inside" of Surface halfspaces
if halfspace == -1:
opencg_cell.addSurface(compatible_surfaces[0], +1)
opencg_cell.addSurface(compatible_surfaces[1], -1)
opencg_cell.addSurface(compatible_surfaces[2], +1)
opencg_cell.addSurface(compatible_surfaces[3], -1)
opencg_cell.add_surface(compatible_surfaces[0], +1)
opencg_cell.add_surface(compatible_surfaces[1], -1)
opencg_cell.add_surface(compatible_surfaces[2], +1)
opencg_cell.add_surface(compatible_surfaces[3], -1)
compatible_cells.append(opencg_cell)
# If Cell is outside SquarePrism, add "outside" of Surface halfspaces
@ -645,12 +645,12 @@ def make_opencg_cells_compatible(opencg_universe):
raise ValueError(msg)
# Check all OpenCG Cells in this Universe for compatibility with OpenMC
opencg_cells = opencg_universe._cells
opencg_cells = opencg_universe.cells
for cell_id, opencg_cell in opencg_cells.items():
# Check each of the OpenCG Surfaces for OpenMC compatibility
surfaces = opencg_cell._surfaces
surfaces = opencg_cell.surfaces
for surface_id in surfaces:
surface = surfaces[surface_id][0]
@ -673,7 +673,7 @@ def make_opencg_cells_compatible(opencg_universe):
opencg_universe.removeCell(opencg_cell)
# Add the compatible OpenCG Cells to the Universe
opencg_universe.addCells(cells)
opencg_universe.add_cells(cells)
# Make recursive call to look at the updated state of the
# OpenCG Universe and return
@ -704,34 +704,34 @@ def get_openmc_cell(opencg_cell):
raise ValueError(msg)
global OPENMC_CELLS
cell_id = opencg_cell._id
cell_id = opencg_cell.id
# If this Cell was already created, use it
if cell_id in OPENMC_CELLS:
return OPENMC_CELLS[cell_id]
# Create an OpenCG Cell to represent this OpenMC Cell
name = opencg_cell._name
name = opencg_cell.name
openmc_cell = openmc.Cell(cell_id, name)
fill = opencg_cell._fill
fill = opencg_cell.fill
if (opencg_cell._type == 'universe'):
if (opencg_cell.type == 'universe'):
openmc_cell.fill = get_openmc_universe(fill)
elif (opencg_cell._type == 'lattice'):
elif (opencg_cell.type == 'lattice'):
openmc_cell.fill = get_openmc_lattice(fill)
else:
openmc_cell.fill = get_openmc_material(fill)
if opencg_cell._rotation:
rotation = np.asarray(opencg_cell._rotation, dtype=np.int)
if opencg_cell.rotation:
rotation = np.asarray(opencg_cell.rotation, dtype=np.int)
openmc_cell.rotation = rotation
if opencg_cell._translation:
translation = np.asarray(opencg_cell._translation, dtype=np.float64)
openmc_cell.setTranslation(translation)
if opencg_cell.translation:
translation = np.asarray(opencg_cell.translation, dtype=np.float64)
openmc_cell.translation = translation
surfaces = opencg_cell._surfaces
surfaces = opencg_cell.surfaces
for surface_id in surfaces:
surface = surfaces[surface_id][0]
@ -768,22 +768,22 @@ def get_opencg_universe(openmc_universe):
raise ValueError(msg)
global OPENCG_UNIVERSES
universe_id = openmc_universe._id
universe_id = openmc_universe.id
# If this Universe was already created, use it
if universe_id in OPENCG_UNIVERSES:
return OPENCG_UNIVERSES[universe_id]
# Create an OpenCG Universe to represent this OpenMC Universe
name = openmc_universe._name
name = openmc_universe.name
opencg_universe = opencg.Universe(universe_id, name)
# Convert all OpenMC Cells in this Universe to OpenCG Cells
openmc_cells = openmc_universe._cells
openmc_cells = openmc_universe.cells
for cell_id, openmc_cell in openmc_cells.items():
opencg_cell = get_opencg_cell(openmc_cell)
opencg_universe.addCell(opencg_cell)
opencg_universe.add_cell(opencg_cell)
# Add the OpenMC Universe to the global collection of all OpenMC Universes
OPENMC_UNIVERSES[universe_id] = openmc_universe
@ -815,7 +815,7 @@ def get_openmc_universe(opencg_universe):
raise ValueError(msg)
global OPENMC_UNIVERSES
universe_id = opencg_universe._id
universe_id = opencg_universe.id
# If this Universe was already created, use it
if universe_id in OPENMC_UNIVERSES:
@ -825,11 +825,11 @@ def get_openmc_universe(opencg_universe):
make_opencg_cells_compatible(opencg_universe)
# Create an OpenMC Universe to represent this OpenCSg Universe
name = opencg_universe._name
name = opencg_universe.name
openmc_universe = openmc.Universe(universe_id, name)
# Convert all OpenCG Cells in this Universe to OpenMC Cells
opencg_cells = opencg_universe._cells
opencg_cells = opencg_universe.cells
for cell_id, opencg_cell in opencg_cells.items():
openmc_cell = get_openmc_cell(opencg_cell)
@ -865,7 +865,7 @@ def get_opencg_lattice(openmc_lattice):
raise ValueError(msg)
global OPENCG_LATTICES
lattice_id = openmc_lattice._id
lattice_id = openmc_lattice.id
# If this Lattice was already created, use it
if lattice_id in OPENCG_LATTICES:
@ -902,18 +902,18 @@ def get_opencg_lattice(openmc_lattice):
for z in range(dimension[2]):
for y in range(dimension[1]):
for x in range(dimension[0]):
universe_id = universes[x][dimension[1]-y-1][z]._id
universe_id = universes[x][dimension[1]-y-1][z].id
universe_array[z][y][x] = unique_universes[universe_id]
opencg_lattice = opencg.Lattice(lattice_id, name)
opencg_lattice.setDimension(dimension)
opencg_lattice.setWidth(pitch)
opencg_lattice.setUniverses(universe_array)
opencg_lattice.dimension = dimension
opencg_lattice.width = pitch
opencg_lattice.universes = universe_array
offset = np.array(lower_left, dtype=np.float64) - \
((np.array(pitch, dtype=np.float64) *
np.array(dimension, dtype=np.float64))) / -2.0
opencg_lattice.setOffset(offset)
opencg_lattice.offset = offset
# Add the OpenMC Lattice to the global collection of all OpenMC Lattices
OPENMC_LATTICES[lattice_id] = openmc_lattice
@ -945,23 +945,23 @@ def get_openmc_lattice(opencg_lattice):
raise ValueError(msg)
global OPENMC_LATTICES
lattice_id = opencg_lattice._id
lattice_id = opencg_lattice.id
# If this Lattice was already created, use it
if lattice_id in OPENMC_LATTICES:
return OPENMC_LATTICES[lattice_id]
dimension = opencg_lattice._dimension
width = opencg_lattice._width
offset = opencg_lattice._offset
universes = opencg_lattice._universes
dimension = opencg_lattice.dimension
width = opencg_lattice.width
offset = opencg_lattice.offset
universes = opencg_lattice.universes
# Initialize an empty array for the OpenMC nested Universes in this Lattice
universe_array = np.ndarray(tuple(np.array(dimension)),
dtype=openmc.Universe)
# Create OpenMC Universes for each unique nested Universe in this Lattice
unique_universes = opencg_lattice.getUniqueUniverses()
unique_universes = opencg_lattice.get_unique_universes()
for universe_id, universe in unique_universes.items():
unique_universes[universe_id] = get_openmc_universe(universe)
@ -970,7 +970,7 @@ def get_openmc_lattice(opencg_lattice):
for z in range(dimension[2]):
for y in range(dimension[1]):
for x in range(dimension[0]):
universe_id = universes[z][y][x]._id
universe_id = universes[z][y][x].id
universe_array[x][y][z] = unique_universes[universe_id]
# Reverse y-dimension in array to match ordering in OpenCG
@ -1025,12 +1025,12 @@ def get_opencg_geometry(openmc_geometry):
OPENMC_LATTICES.clear()
OPENCG_LATTICES.clear()
openmc_root_universe = openmc_geometry._root_universe
openmc_root_universe = openmc_geometry.root_universe
opencg_root_universe = get_opencg_universe(openmc_root_universe)
opencg_geometry = opencg.Geometry()
opencg_geometry.setRootUniverse(opencg_root_universe)
opencg_geometry.initializeCellOffsets()
opencg_geometry.root_universe = opencg_root_universe
opencg_geometry.initialize_cell_offsets()
return opencg_geometry
@ -1057,11 +1057,11 @@ def get_openmc_geometry(opencg_geometry):
# Deep copy the goemetry since it may be modified to make all Surfaces
# compatible with OpenMC's specifications
opencg_geometry.assignAutoIds()
opencg_geometry.assign_auto_ids()
opencg_geometry = copy.deepcopy(opencg_geometry)
# Update Cell bounding boxes in Geometry
opencg_geometry.updateBoundingBoxes()
opencg_geometry.update_bounding_boxes()
# Clear dictionaries and auto-generated ID
OPENMC_SURFACES.clear()
@ -1074,14 +1074,14 @@ def get_openmc_geometry(opencg_geometry):
OPENCG_LATTICES.clear()
# Make the entire geometry "compatible" before assigning auto IDs
universes = opencg_geometry.getAllUniverses()
universes = opencg_geometry.get_all_universes()
for universe_id, universe in universes.items():
if not isinstance(universe, opencg.Lattice):
make_opencg_cells_compatible(universe)
opencg_geometry.assignAutoIds()
opencg_geometry.assign_auto_ids()
opencg_root_universe = opencg_geometry._root_universe
opencg_root_universe = opencg_geometry.root_universe
openmc_root_universe = get_openmc_universe(opencg_root_universe)
openmc_geometry = openmc.Geometry()

View file

@ -73,6 +73,9 @@ class Summary(object):
nuc_densities = self._f['materials'][key]['nuclide_densities'][...]
nuclides = self._f['materials'][key]['nuclides'].value
# Create the Material
material = openmc.Material(material_id=material_id, name=name)
# Read the names of the S(a,b) tables for this Material and add them
if 'sab_names' in self._f['materials'][key]:
sab_tables = self._f['materials'][key]['sab_names'].value
@ -80,10 +83,8 @@ class Summary(object):
name, xs = sab_table.decode().split('.')
material.add_s_alpha_beta(name, xs)
# Create the Material
material = openmc.Material(material_id=material_id, name=name)
# Set the Material's density to g/cm3 - this is what is used in OpenMC
# Set the Material's density to g/cm3 - this is what is used in
# OpenMC
material.set_density(density=density, units='g/cm3')
# Add all nuclides to the Material

View file

@ -108,8 +108,11 @@ class Surface(object):
@name.setter
def name(self, name):
check_type('surface name', name, basestring)
self._name = name
if name is not None:
check_type('surface name', name, basestring)
self._name = name
else:
self._name = None
@boundary_type.setter
def boundary_type(self, boundary_type):
@ -279,7 +282,7 @@ class XPlane(Plane):
@property
def x0(self):
return self._coeffs['x0']
return self.coeffs['x0']
@x0.setter
def x0(self, x0):

View file

@ -373,8 +373,11 @@ class Tally(object):
@name.setter
def name(self, name):
check_type('tally name', name, basestring)
self._name = name
if name is not None:
check_type('tally name', name, basestring)
self._name = name
else:
self._name = None
def add_filter(self, filter):
"""Add a filter to the tally

View file

@ -86,8 +86,15 @@ class Cell(object):
return self._fill
@property
def type(self):
return self._fill
def fill_type(self):
if isinstance(self.fill, openmc.Material):
return 'material'
elif isinstance(self.fill, openmc.Universe):
return 'universe'
elif isinstance(self.fill, openmc.Lattice):
return 'lattice'
else:
return None
@property
def region(self):
@ -118,8 +125,11 @@ class Cell(object):
@name.setter
def name(self, name):
cv.check_type('cell name', name, basestring)
self._name = name
if name is not None:
cv.check_type('cell name', name, basestring)
self._name = name
else:
self._name = None
@fill.setter
def fill(self, fill):
@ -437,8 +447,11 @@ class Universe(object):
@name.setter
def name(self, name):
cv.check_type('universe name', name, basestring)
self._name = name
if name is not None:
cv.check_type('universe name', name, basestring)
self._name = name
else:
self._name = None
def add_cell(self, cell):
"""Add a cell to the universe.
@ -676,8 +689,11 @@ class Lattice(object):
@name.setter
def name(self, name):
cv.check_type('lattice name', name, basestring)
self._name = name
if name is not None:
cv.check_type('lattice name', name, basestring)
self._name = name
else:
self._name = None
@outer.setter
def outer(self, outer):

View file

@ -1,8 +1,8 @@
module ace_header
use constants, only: MAX_FILE_LEN, ZERO
use endf_header, only: Tab1
use list_header, only: ListInt
use constants, only: MAX_FILE_LEN, ZERO
use endf_header, only: Tab1
use list_header, only: ListInt
implicit none

View file

@ -33,6 +33,7 @@ contains
integer :: i_nuclide ! index into nuclides array
integer :: i_sab ! index into sab_tables array
integer :: j ! index in mat % i_sab_nuclides
integer :: u ! index into logarithmic mapping array
real(8) :: atom_density ! atom density of a nuclide
logical :: check_sab ! should we check for S(a,b) table?
type(Material), pointer :: mat ! current material
@ -50,9 +51,13 @@ contains
mat => materials(p % material)
! Find energy index on global or material unionized grid
if (grid_method == GRID_MAT_UNION) &
call find_energy_index(p % E, p % material)
! Find energy index on energy grid
u = 0
if (grid_method == GRID_MAT_UNION) then
call find_energy_index(p % E, p % material)
else if (grid_method == GRID_LOGARITHM) then
u = int(log(p % E/1.0e-11_8)/log_spacing)
end if
! Determine if this material has S(a,b) tables
check_sab = (mat % n_sab > 0)
@ -94,9 +99,9 @@ contains
! Calculate microscopic cross section for this nuclide
if (p % E /= micro_xs(i_nuclide) % last_E) then
call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i)
call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, u)
else if (i_sab /= micro_xs(i_nuclide) % last_index_sab) then
call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i)
call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, u)
end if
! ========================================================================
@ -137,16 +142,16 @@ contains
! given index in the nuclides array at the energy of the given particle
!===============================================================================
subroutine calculate_nuclide_xs(i_nuclide, i_sab, E, i_mat, i_nuc_mat)
subroutine calculate_nuclide_xs(i_nuclide, i_sab, E, i_mat, i_nuc_mat, u)
integer, intent(in) :: i_nuclide ! index into nuclides array
integer, intent(in) :: i_sab ! index into sab_tables array
integer, intent(in) :: i_mat ! index into materials array
integer, intent(in) :: i_nuc_mat ! index into nuclides array for a material
integer, intent(in) :: u ! index into logarithmic mapping array
integer :: i_grid ! index on nuclide energy grid
integer :: i_low ! lower logarithmic mapping index
integer :: i_high ! upper logarithmic mapping index
integer :: u ! index into logarithmic mapping array
real(8), intent(in) :: E ! energy
real(8) :: f ! interp factor on nuclide energy grid
type(Nuclide), pointer :: nuc
@ -173,7 +178,6 @@ contains
else
! Determine bounding indices based on which equal log-spaced interval
! the energy is in
u = int(log(E/1.0e-11_8)/log_spacing)
i_low = nuc % grid_index(u)
i_high = nuc % grid_index(u + 1) + 1

View file

@ -28,7 +28,6 @@ contains
integer :: L
integer :: R
integer :: n_iteration
real(8) :: testval
L = 1
R = n
@ -39,22 +38,11 @@ contains
n_iteration = 0
do while (R - L > 1)
! Check boundaries
if (val > array(L) .and. val < array(L+1)) then
array_index = L
return
elseif (val > array(R-1) .and. val < array(R)) then
array_index = R - 1
return
end if
! Find values at midpoint
array_index = L + (R - L)/2
testval = array(array_index)
if (val >= testval) then
if (val >= array(array_index)) then
L = array_index
elseif (val < testval) then
else
R = array_index
end if
@ -80,7 +68,6 @@ contains
integer :: L
integer :: R
integer :: n_iteration
real(8) :: testval
L = 1
R = n
@ -91,22 +78,11 @@ contains
n_iteration = 0
do while (R - L > 1)
! Check boundaries
if (val > array(L) .and. val < array(L+1)) then
array_index = L
return
elseif (val > array(R-1) .and. val < array(R)) then
array_index = R - 1
return
end if
! Find values at midpoint
array_index = L + (R - L)/2
testval = array(array_index)
if (val >= testval) then
if (val >= array(array_index)) then
L = array_index
elseif (val < testval) then
else
R = array_index
end if
@ -132,7 +108,6 @@ contains
integer :: L
integer :: R
integer :: n_iteration
real(8) :: testval
L = 1
R = n
@ -143,22 +118,11 @@ contains
n_iteration = 0
do while (R - L > 1)
! Check boundaries
if (val > array(L) .and. val < array(L+1)) then
array_index = L
return
elseif (val > array(R-1) .and. val < array(R)) then
array_index = R - 1
return
end if
! Find values at midpoint
array_index = L + (R - L)/2
testval = array(array_index)
if (val >= testval) then
if (val >= array(array_index)) then
L = array_index
elseif (val < testval) then
else
R = array_index
end if

View file

@ -170,10 +170,34 @@ contains
! Only analog estimators are available.
! Skip any event where the particle didn't scatter
if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP
! For scattering production, we need to use the post-collision
! weight as the estimate for the number of neutrons exiting a
! reaction with neutrons in the exit channel
score = p % wgt
! For scattering production, we need to use the pre-collision
! weight times the multiplicity as the estimate for the number of
! neutrons exiting a reaction with neutrons in the exit channel
if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. &
(p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then
! Don't waste time on very common reactions we know have multiplicities
! of one.
score = p % last_wgt
else
do m = 1, nuclides(p % event_nuclide) % n_reaction
! Check if this is the desired MT
if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then
! Found the reaction, set our pointer and move on with life
rxn => nuclides(p % event_nuclide) % reactions(m)
exit
end if
end do
! Get multiplicity and apply to score
if (rxn % multiplicity_with_E) then
! Then the multiplicity was already incorporated in to p % wgt
! per the scattering routine,
score = p % wgt
else
! Grab the multiplicity from the rxn
score = p % last_wgt * rxn % multiplicity
end if
end if
case (SCORE_NU_SCATTER_PN)
@ -183,10 +207,34 @@ contains
i = i + t % moment_order(i)
cycle SCORE_LOOP
end if
! For scattering production, we need to use the post-collision
! weight as the estimate for the number of neutrons exiting a
! reaction with neutrons in the exit channel
score = p % wgt
! For scattering production, we need to use the pre-collision
! weight times the multiplicity as the estimate for the number of
! neutrons exiting a reaction with neutrons in the exit channel
if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. &
(p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then
! Don't waste time on very common reactions we know have multiplicities
! of one.
score = p % last_wgt
else
do m = 1, nuclides(p % event_nuclide) % n_reaction
! Check if this is the desired MT
if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then
! Found the reaction, set our pointer and move on with life
rxn => nuclides(p % event_nuclide) % reactions(m)
exit
end if
end do
! Get multiplicity and apply to score
if (rxn % multiplicity_with_E) then
! Then the multiplicity was already incorporated in to p % wgt
! per the scattering routine,
score = p % wgt
else
! Grab the multiplicity from the rxn
score = p % last_wgt * rxn % multiplicity
end if
end if
case (SCORE_NU_SCATTER_YN)
@ -196,10 +244,34 @@ contains
i = i + (t % moment_order(i) + 1)**2 - 1
cycle SCORE_LOOP
end if
! For scattering production, we need to use the post-collision
! weight as the estimate for the number of neutrons exiting a
! reaction with neutrons in the exit channel
score = p % wgt
! For scattering production, we need to use the pre-collision
! weight times the multiplicity as the estimate for the number of
! neutrons exiting a reaction with neutrons in the exit channel
if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. &
(p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then
! Don't waste time on very common reactions we know have multiplicities
! of one.
score = p % last_wgt
else
do m = 1, nuclides(p % event_nuclide) % n_reaction
! Check if this is the desired MT
if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then
! Found the reaction, set our pointer and move on with life
rxn => nuclides(p % event_nuclide) % reactions(m)
exit
end if
end do
! Get multiplicity and apply to score
if (rxn % multiplicity_with_E) then
! Then the multiplicity was already incorporated in to p % wgt
! per the scattering routine,
score = p % wgt
else
! Grab the multiplicity from the rxn
score = p % last_wgt * rxn % multiplicity
end if
end if
case (SCORE_TRANSPORT)

View file

@ -126,7 +126,12 @@ class Test(object):
# Check for MPI
if self.mpi:
self.fc = os.path.join(MPI_DIR, 'bin', 'mpifort')
if os.path.exists(os.path.join(MPI_DIR, 'bin', 'mpifort')):
self.fc = os.path.join(MPI_DIR, 'bin', 'mpifort')
elif os.path.exists(os.path.join(MPI_DIR, 'bin', 'mpif90')):
self.fc = os.path.join(MPI_DIR, 'bin', 'mpif90')
else:
raise RuntimeError('Cannot find an MPI Fortran compiler')
else:
self.fc = FC

View file

@ -1,128 +1,128 @@
k-combined:
1.172666E+00 8.502438E-03
1.168349E+00 1.145333E-02
tally 1:
1.170812E+01
1.376785E+01
2.179886E+01
4.765478E+01
2.945614E+01
8.709999E+01
3.527293E+01
1.245879E+02
3.829349E+01
1.470691E+02
3.709040E+01
1.379455E+02
3.380335E+01
1.145311E+02
2.801351E+01
7.871047E+01
2.029625E+01
4.131602E+01
1.084302E+01
1.180329E+01
1.167844E+01
1.366808E+01
2.141846E+01
4.598143E+01
2.928738E+01
8.615095E+01
3.513015E+01
1.241914E+02
3.715164E+01
1.384553E+02
3.639309E+01
1.327919E+02
3.370872E+01
1.138391E+02
2.875251E+01
8.292323E+01
2.117740E+01
4.512961E+01
1.130554E+01
1.289872E+01
tally 2:
2.270565E+01
2.599927E+01
1.590852E+01
1.276260E+01
2.252857E+00
2.614120E-01
4.313167E+01
9.326539E+01
3.044479E+01
4.648169E+01
4.023051E+00
8.172006E-01
5.859113E+01
1.725665E+02
4.171599E+01
8.755981E+01
5.512216E+00
1.531207E+00
6.892516E+01
2.383198E+02
4.904413E+01
1.207096E+02
6.542718E+00
2.155749E+00
7.421495E+01
2.764539E+02
5.288881E+01
1.405388E+02
6.811354E+00
2.358827E+00
7.278191E+01
2.661597E+02
5.169924E+01
1.343999E+02
6.516967E+00
2.148745E+00
6.655238E+01
2.222812E+02
4.729758E+01
1.123214E+02
6.102046E+00
1.890147E+00
5.708495E+01
1.636585E+02
4.068603E+01
8.317681E+01
5.394757E+00
1.465413E+00
4.136562E+01
8.598520E+01
2.958591E+01
4.402226E+01
3.765802E+00
7.200302E-01
2.275517E+01
2.614738E+01
1.589295E+01
1.276624E+01
2.232715E+00
2.558645E-01
2.339531E+01
2.755922E+01
1.646762E+01
1.365289E+01
2.146174E+00
2.369613E-01
4.309769E+01
9.312913E+01
3.054873E+01
4.681242E+01
4.076365E+00
8.462370E-01
5.840647E+01
1.715260E+02
4.161366E+01
8.713062E+01
5.382541E+00
1.473814E+00
6.927641E+01
2.411359E+02
4.943841E+01
1.228850E+02
6.282202E+00
1.990021E+00
7.308593E+01
2.678848E+02
5.202069E+01
1.357621E+02
6.826145E+00
2.353974E+00
7.117026E+01
2.543546E+02
5.068896E+01
1.290261E+02
6.342979E+00
2.033850E+00
6.615720E+01
2.193712E+02
4.725156E+01
1.119514E+02
6.024815E+00
1.833752E+00
5.738164E+01
1.651944E+02
4.081217E+01
8.360122E+01
5.326191E+00
1.435896E+00
4.208669E+01
8.911740E+01
2.994944E+01
4.517409E+01
3.905846E+00
7.855247E-01
2.273578E+01
2.615080E+01
1.603853E+01
1.303560E+01
2.160924E+00
2.473278E-01
tally 3:
1.529144E+01
1.179942E+01
1.023883E+00
5.386625E-02
2.936854E+01
4.326483E+01
1.881629E+00
1.788063E-01
4.015056E+01
8.114284E+01
2.594958E+00
3.407980E-01
4.720593E+01
1.118311E+02
3.161769E+00
5.053887E-01
5.095790E+01
1.304930E+02
3.308202E+00
5.528151E-01
4.979520E+01
1.246892E+02
3.163884E+00
5.062497E-01
4.554330E+01
1.041770E+02
3.019145E+00
4.618487E-01
3.921119E+01
7.727273E+01
2.472070E+00
3.099171E-01
2.843166E+01
4.067093E+01
1.823607E+00
1.688171E-01
1.530477E+01
1.184246E+01
1.047996E+00
5.549017E-02
1.584939E+01
1.265206E+01
1.096930E+00
6.173135E-02
2.940258E+01
4.337818E+01
1.932931E+00
1.884749E-01
4.008186E+01
8.086427E+01
2.512704E+00
3.189987E-01
4.759648E+01
1.139252E+02
3.041630E+00
4.683237E-01
5.006181E+01
1.257467E+02
3.137042E+00
4.981005E-01
4.883211E+01
1.197646E+02
3.130686E+00
4.987337E-01
4.550029E+01
1.038199E+02
2.853740E+00
4.127265E-01
3.937822E+01
7.785807E+01
2.488983E+00
3.156421E-01
2.884912E+01
4.192640E+01
1.855316E+00
1.745109E-01
1.543635E+01
1.208459E+01
1.025635E+00
5.351565E-02
tally 4:
0.000000E+00
0.000000E+00
@ -160,8 +160,8 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
3.111592E+00
4.883699E-01
3.119914E+00
4.908283E-01
0.000000E+00
0.000000E+00
0.000000E+00
@ -208,10 +208,10 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
5.536088E+00
1.540676E+00
2.727975E+00
3.757452E-01
5.567786E+00
1.556825E+00
2.766088E+00
3.864023E-01
0.000000E+00
0.000000E+00
0.000000E+00
@ -256,10 +256,10 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
7.518115E+00
2.840502E+00
5.271874E+00
1.398895E+00
7.491891E+00
2.819491E+00
5.235154E+00
1.377898E+00
0.000000E+00
0.000000E+00
0.000000E+00
@ -304,10 +304,10 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
8.764240E+00
3.855378E+00
7.176540E+00
2.591613E+00
8.810357E+00
3.898704E+00
7.233068E+00
2.630659E+00
0.000000E+00
0.000000E+00
0.000000E+00
@ -352,10 +352,10 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
9.381092E+00
4.414024E+00
8.597689E+00
3.710217E+00
9.374583E+00
4.414420E+00
8.565683E+00
3.687428E+00
0.000000E+00
0.000000E+00
0.000000E+00
@ -400,10 +400,10 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
9.158655E+00
4.215178E+00
9.188880E+00
4.244766E+00
9.001252E+00
4.073267E+00
8.974821E+00
4.050120E+00
0.000000E+00
0.000000E+00
0.000000E+00
@ -448,10 +448,10 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
8.362511E+00
3.509173E+00
9.159213E+00
4.209143E+00
8.236452E+00
3.401934E+00
9.042286E+00
4.102906E+00
0.000000E+00
0.000000E+00
0.000000E+00
@ -496,10 +496,10 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
7.029505E+00
2.479106E+00
8.613258E+00
3.719199E+00
7.028546E+00
2.482380E+00
8.577643E+00
3.691947E+00
0.000000E+00
0.000000E+00
0.000000E+00
@ -544,10 +544,10 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
5.119892E+00
1.320586E+00
7.401001E+00
2.749355E+00
5.159585E+00
1.342512E+00
7.389236E+00
2.745028E+00
0.000000E+00
0.000000E+00
0.000000E+00
@ -592,10 +592,10 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
2.765680E+00
3.903229E-01
5.461998E+00
1.501206E+00
2.762685E+00
3.914181E-01
5.471849E+00
1.509910E+00
0.000000E+00
0.000000E+00
0.000000E+00
@ -642,8 +642,8 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
3.044921E+00
4.656739E-01
3.038522E+00
4.643520E-01
0.000000E+00
0.000000E+00
0.000000E+00
@ -662,114 +662,114 @@ k cmfd
0.000000E+00
0.000000E+00
0.000000E+00
1.177990E+00
1.160010E+00
1.155990E+00
1.160167E+00
1.162166E+00
1.161566E+00
1.164454E+00
1.166269E+00
1.168529E+00
1.168622E+00
1.170296E+00
1.168644E+00
1.172975E+00
1.176543E+00
1.173389E+00
1.178422E+00
1.180802E+00
1.162698E+00
1.162794E+00
1.159752E+00
1.152596E+00
1.151652E+00
1.148131E+00
1.151875E+00
1.151434E+00
1.158833E+00
1.160751E+00
1.155305E+00
1.155356E+00
1.158866E+00
1.161574E+00
1.154691E+00
cmfd entropy
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
3.214145E+00
3.225292E+00
3.229509E+00
3.228530E+00
3.224203E+00
3.225547E+00
3.224720E+00
3.224546E+00
3.224527E+00
3.223579E+00
3.224380E+00
3.223483E+00
3.222819E+00
3.223067E+00
3.224007E+00
3.220616E+00
3.214195E+00
3.225164E+00
3.227316E+00
3.225663E+00
3.226390E+00
3.225832E+00
3.226707E+00
3.227866E+00
3.229948E+00
3.229269E+00
3.230044E+00
3.231568E+00
3.234694E+00
3.234771E+00
3.234915E+00
3.235876E+00
cmfd balance
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
4.801684E-03
2.802571E-03
1.828029E-03
2.220542E-03
1.709900E-03
2.008246E-03
2.578373E-03
2.000076E-03
1.645365E-03
1.462882E-03
1.208273E-03
1.146126E-03
1.214196E-03
1.082376E-03
8.967163E-04
1.154433E-03
4.742525E-03
2.646417E-03
1.981783E-03
1.856593E-03
1.797685E-03
2.122587E-03
1.200823E-03
2.177249E-03
1.442840E-03
1.477754E-03
1.236325E-03
1.048988E-03
8.395164E-04
7.380254E-04
7.742837E-04
8.235911E-04
cmfd dominance ratio
0.000E+00
0.000E+00
0.000E+00
0.000E+00
5.472E-01
5.521E-01
5.445E-01
5.527E-01
5.467E-01
5.518E-01
5.535E-01
5.500E-01
5.481E-01
5.478E-01
5.467E-01
5.465E-01
5.493E-01
5.488E-01
5.078E-01
5.474E-01
5.475E-01
5.473E-01
5.469E-01
5.461E-01
5.455E-01
5.454E-01
5.459E-01
5.460E-01
5.432E-01
5.491E-01
5.503E-01
5.529E-01
5.531E-01
5.534E-01
5.552E-01
cmfd openmc source comparison
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
9.186654E-03
6.033650E-03
3.920380E-03
4.218939E-03
4.591972E-03
4.042772E-03
4.100500E-03
3.664495E-03
3.266803E-03
3.164213E-03
3.310474E-03
3.165822E-03
3.849586E-03
2.718170E-03
2.431480E-03
3.322902E-03
9.168094E-03
5.978693E-03
4.369223E-03
4.546309E-03
4.222522E-03
4.221686E-03
4.604208E-03
3.950286E-03
2.939283E-03
3.667020E-03
2.592899E-03
2.272158E-03
1.229170E-03
1.114150E-03
1.060490E-03
1.714222E-03
cmfd source
4.296288E-02
7.964357E-02
1.107722E-01
1.359821E-01
1.425321E-01
1.356719E-01
1.285829E-01
1.040603E-01
7.630230E-02
4.348975E-02
4.724285E-02
8.305825E-02
1.081058E-01
1.314542E-01
1.357299E-01
1.359417E-01
1.240918E-01
1.087580E-01
8.111239E-02
4.450518E-02

View file

@ -83,44 +83,44 @@ tally 2:
2.336090E+00
2.851840E-01
tally 3:
1.523800E+01
1.170551E+01
1.524100E+01
1.171023E+01
1.071050E+00
5.839198E-02
2.862100E+01
4.111143E+01
2.862800E+01
4.113148E+01
1.892774E+00
1.812712E-01
3.804200E+01
7.314552E+01
3.804600E+01
7.316097E+01
2.423654E+00
2.968521E-01
4.433500E+01
9.878201E+01
4.434600E+01
9.882906E+01
2.823929E+00
4.033633E-01
4.954300E+01
1.229796E+02
4.955300E+01
1.230293E+02
3.226029E+00
5.265680E-01
4.999000E+01
1.256279E+02
4.999400E+01
1.256474E+02
3.232464E+00
5.286388E-01
4.723500E+01
1.120638E+02
4.724300E+01
1.121029E+02
3.015553E+00
4.606928E-01
4.050800E+01
8.237529E+01
4.051300E+01
8.239672E+01
2.592073E+00
3.412174E-01
2.911800E+01
4.263022E+01
2.912700E+01
4.265700E+01
1.875109E+00
1.785438E-01
1.592800E+01
1.279461E+01
1.593500E+01
1.280638E+01
1.038638E+00
5.538157E-02
tally 4:
@ -662,114 +662,114 @@ k cmfd
0.000000E+00
0.000000E+00
0.000000E+00
1.177990E+00
1.160491E+00
1.145875E+00
1.148719E+00
1.140676E+00
1.141509E+00
1.143597E+00
1.141954E+00
1.150311E+00
1.155088E+00
1.155464E+00
1.152786E+00
1.156950E+00
1.159040E+00
1.160571E+00
1.161251E+00
1.180802E+00
1.163440E+00
1.148572E+00
1.151423E+00
1.143374E+00
1.144091E+00
1.146212E+00
1.144900E+00
1.153511E+00
1.158766E+00
1.159179E+00
1.156627E+00
1.160647E+00
1.162860E+00
1.164312E+00
1.164928E+00
cmfd entropy
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
3.214145E+00
3.222082E+00
3.225870E+00
3.230292E+00
3.228784E+00
3.228863E+00
3.228331E+00
3.230222E+00
3.231212E+00
3.230979E+00
3.229831E+00
3.229258E+00
3.228559E+00
3.227915E+00
3.227427E+00
3.229561E+00
3.214195E+00
3.222259E+00
3.225989E+00
3.230436E+00
3.228875E+00
3.229003E+00
3.228502E+00
3.230397E+00
3.231417E+00
3.231192E+00
3.229995E+00
3.229396E+00
3.228730E+00
3.228091E+00
3.227600E+00
3.229723E+00
cmfd balance
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
4.801684E-03
3.228380E-03
2.568997E-03
2.195796E-03
2.248884E-03
3.405416E-03
2.332198E-03
2.576061E-03
2.326651E-03
2.324425E-03
2.205364E-03
2.112702E-03
1.864656E-03
1.804877E-03
1.557106E-03
1.312058E-03
4.742525E-03
3.110598E-03
2.490108E-03
2.114137E-03
2.190200E-03
3.281877E-03
2.219193E-03
2.458372E-03
2.200863E-03
2.181858E-03
2.064212E-03
1.961178E-03
1.713250E-03
1.665361E-03
1.436016E-03
1.193462E-03
cmfd dominance ratio
0.000E+00
0.000E+00
0.000E+00
0.000E+00
5.472E-01
5.510E-01
5.519E-01
5.535E-01
5.535E-01
5.467E-01
5.505E-01
5.488E-01
5.505E-01
5.510E-01
5.513E-01
5.510E-01
5.514E-01
5.531E-01
5.529E-01
5.501E-01
5.484E-01
5.500E-01
5.506E-01
5.508E-01
5.487E-01
5.489E-01
5.481E-01
5.499E-01
5.504E-01
5.500E-01
5.480E-01
5.482E-01
5.475E-01
5.493E-01
cmfd openmc source comparison
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
9.186654E-03
5.964812E-03
4.465905E-03
4.119425E-03
4.973577E-03
4.092492E-03
4.063342E-03
2.804589E-03
3.632667E-03
5.005042E-03
3.428575E-03
3.007070E-03
3.091465E-03
3.030625E-03
2.751739E-03
1.762364E-03
9.168094E-03
5.976241E-03
4.426550E-03
4.107499E-03
4.957716E-03
4.026213E-03
3.986000E-03
2.702714E-03
3.619345E-03
4.909616E-03
3.355042E-03
2.945724E-03
3.010811E-03
2.965662E-03
2.673073E-03
1.669634E-03
cmfd source
4.538792E-02
8.103354E-02
1.045198E-01
1.221411E-01
1.398214E-01
1.401011E-01
1.305055E-01
1.120110E-01
8.032924E-02
4.414939E-02
4.539734E-02
8.104913E-02
1.045143E-01
1.221516E-01
1.398002E-01
1.400323E-01
1.304628E-01
1.120006E-01
8.038230E-02
4.420934E-02

View file

@ -7,16 +7,8 @@ tally 1:
3.427342E+01
8.628000E+00
2.481430E+01
8.628000E+00
2.481430E+01
5.102293E-01
8.710841E-02
8.628000E+00
2.481430E+01
9.329009E-01
2.902534E-01
5.102293E-01
8.710841E-02
8.632000E+00
2.483728E+01
5.102293E-01
8.710841E-02
8.628000E+00
@ -25,6 +17,14 @@ tally 1:
2.902534E-01
5.102293E-01
8.710841E-02
5.087118E-01
8.657086E-02
8.632000E+00
2.483728E+01
9.328366E-01
2.902108E-01
5.087118E-01
8.657086E-02
9.212024E+00
2.829472E+01
8.628000E+00
@ -89,23 +89,23 @@ tally 1:
1.459209E-04
4.629047E-02
7.823267E-04
8.628000E+00
2.481430E+01
-4.712248E-02
1.140942E-03
-6.431930E-02
4.290580E-03
-9.251642E-02
8.134201E-03
1.020119E-04
1.154184E-04
-2.994164E-02
3.079076E-04
2.128844E-02
2.046549E-04
1.637972E-02
1.459209E-04
4.629047E-02
7.823267E-04
8.632000E+00
2.483728E+01
-4.651997E-02
1.133839E-03
-6.416955E-02
4.279418E-03
-9.280565E-02
8.095106E-03
-2.078094E-04
1.151292E-04
-3.005568E-02
3.104764E-04
2.199519E-02
2.179172E-04
1.660645E-02
1.451345E-04
4.607553E-02
7.673412E-04
1.014000E+01
3.427342E+01

View file

@ -1,11 +1,11 @@
k-combined:
1.005983E+00 2.248579E-02
9.870214E-01 2.095925E-02
tally 1:
0.000000E+00
0.000000E+00
1.169000E+01
2.915330E+01
3.200000E+00
2.342600E+00
4.064000E+01
3.595168E+02
3.353000E+01
1.133379E+02
8.150000E+00
6.793700E+00
1.098500E+02
1.221333E+03

View file

@ -3,7 +3,7 @@
<eigenvalue>
<batches>10</batches>
<inactive>5</inactive>
<inactive>0</inactive>
<particles>100</particles>
</eigenvalue>

View file

@ -1,33 +1,33 @@
k-combined:
1.005983E+00 2.248579E-02
9.870214E-01 2.095925E-02
tally 1:
1.169000E+01
2.915330E+01
1.247253E+00
3.767436E-01
5.330812E-01
1.385083E-01
2.987823E-01
5.699361E-02
2.645512E-01
2.905381E-02
3.200000E+00
2.342600E+00
3.809941E-01
2.965326E-02
4.319242E-01
3.738822E-02
9.261909E-02
6.711328E-03
-6.052442E-02
7.087230E-03
4.064000E+01
3.595168E+02
2.096700E+01
9.516606E+01
7.560566E+00
1.248694E+01
2.093348E-01
4.278510E-02
-1.449929E+00
4.356371E-01
3.353000E+01
1.133379E+02
3.491100E+00
1.265776E+00
1.948509E+00
4.761101E-01
9.177045E-01
1.251750E-01
5.654249E-01
5.567043E-02
8.150000E+00
6.793700E+00
1.223263E+00
1.678053E-01
7.833173E-01
8.407682E-02
1.350170E-01
7.393546E-03
2.164837E-01
1.367122E-02
1.098500E+02
1.221333E+03
5.598624E+01
3.183267E+02
2.048716E+01
4.301097E+01
1.399456E+00
4.458904E-01
-2.183180E+00
6.628474E-01

View file

@ -3,7 +3,7 @@
<eigenvalue>
<batches>10</batches>
<inactive>5</inactive>
<inactive>0</inactive>
<particles>100</particles>
</eigenvalue>

View file

@ -1,24 +1,24 @@
k-combined:
1.005983E+00 2.248579E-02
9.870214E-01 2.095925E-02
tally 1:
1.169000E+01
2.915330E+01
1.247253E+00
3.767436E-01
5.330812E-01
1.385083E-01
2.987823E-01
5.699361E-02
2.645512E-01
2.905381E-02
3.353000E+01
1.133379E+02
3.491100E+00
1.265776E+00
1.948509E+00
4.761101E-01
9.177045E-01
1.251750E-01
5.654249E-01
5.567043E-02
tally 2:
1.169000E+01
2.915330E+01
1.247253E+00
3.767436E-01
5.330812E-01
1.385083E-01
2.987823E-01
5.699361E-02
2.645512E-01
2.905381E-02
3.353000E+01
1.133379E+02
3.491100E+00
1.265776E+00
1.948509E+00
4.761101E-01
9.177045E-01
1.251750E-01
5.654249E-01
5.567043E-02

View file

@ -3,7 +3,7 @@
<eigenvalue>
<batches>10</batches>
<inactive>5</inactive>
<inactive>0</inactive>
<particles>100</particles>
</eigenvalue>

View file

@ -1,38 +1,38 @@
k-combined:
1.005983E+00 2.248579E-02
9.870214E-01 2.095925E-02
tally 1:
1.169000E+01
2.915330E+01
3.353000E+01
1.133379E+02
tally 2:
1.169000E+01
2.915330E+01
-2.198379E-01
2.828670E-02
-1.317276E-01
9.568596E-03
8.309792E-02
1.155410E-02
-2.288506E-02
3.710542E-03
-2.720674E-02
1.789163E-03
-1.323964E-02
1.819112E-04
8.941597E-02
4.265616E-03
1.516805E-01
1.332526E-02
-1.832782E-02
6.611171E-03
1.311371E-02
2.840648E-03
3.728365E-02
2.866806E-03
-5.100587E-02
2.957146E-03
3.388028E-02
2.481570E-03
-7.766921E-02
3.129377E-03
1.666131E-02
3.828290E-03
3.353000E+01
1.133379E+02
4.293226E-01
6.259462E-02
-2.011041E-02
5.388144E-02
3.900136E-01
5.873137E-02
6.150213E-02
9.043796E-03
5.518583E-02
1.739087E-02
-2.047987E-01
1.993679E-02
6.710345E-02
1.652573E-02
-3.619254E-02
1.598186E-02
3.551558E-02
9.077346E-03
1.044669E-01
2.082961E-03
-3.782063E-02
1.681459E-02
1.752386E-01
1.411429E-02
-3.289649E-02
9.534958E-03
5.252770E-02
7.518445E-03
2.688056E-02
3.397824E-03

View file

@ -3,7 +3,7 @@
<eigenvalue>
<batches>10</batches>
<inactive>5</inactive>
<inactive>0</inactive>
<particles>100</particles>
</eigenvalue>