I have a rather strange issue, which is that the tally for ‘heating-local’ using a mesh filter is giving either non-zero or identically zero results depending on nuclear data I use. When I use the nuclear data cross sections required for the python test suite, nndc_hdf5, I get the zero results. If however I use endfb71_hdf5 I get non-trivial results. Below is a short quick script that I find I can reproduce these effects. I’d really appreciate knowing if anyone else can reproduce this issue, and then what the reason is.
#!/usr/bin/env python3
import openmc
import os
import subprocess
import matplotlib.pyplot as plt
def createMaterials():
copper = openmc.Material(1, "copper")
copper.add_element('Cu', 1.0)
copper.set_density('g/cm3', 8.96)
copper.temperature = 300
air = openmc.Material(name='air')
air.set_density('g/cc', 0.001205)
air.add_element('N', 0.784431)
air.add_element('O', 0.210748)
air.add_element('Ar',0.0046)
mats = openmc.Materials([copper, air])
mats.export_to_xml()
print("Created materials.xml")
materialsDict={}
for mat in mats:
materialsDict[mat.name]=mat
print(mat)
return materialsDict
def createPlots( materials ):
copper = materials['copper']
air = materials['air']
p_xy = openmc.Plot()
p_xy.width = (25.0, 25.0)
p_xy.pixels = (400, 400)
p_xy.origin = (0.,0.,0.)
p_xy.color_by = 'material'
p_xy.colors = {copper: 'orange', air: 'blue'}
p_xy.basis = 'xy'
p_xz = openmc.Plot()
p_xz.width = (25.0, 25.0)
p_xz.pixels = (400, 400)
p_xz.origin = (0.,0.,0.)
p_xz.color_by = 'material'
p_xz.colors = {copper: 'orange', air: 'blue'}
p_xz.basis = 'xz'
p_yz = openmc.Plot()
p_yz.width = (25.0, 25.0)
p_yz.pixels = (400, 400)
p_yz.origin = (5.,0.,0.)
p_yz.color_by = 'material'
p_yz.colors = {copper: 'orange', air: 'blue'}
p_yz.basis = 'yz'
plots = openmc.Plots([p_xy,p_xz,p_yz])
plots.export_to_xml()
def createGeometry( materials):
len=20
left = openmc.XPlane(x0=-len/2, boundary_type='vacuum')
right = openmc.XPlane(x0=len/2, boundary_type='vacuum')
bottom = openmc.YPlane(y0=-len/2, boundary_type='vacuum')
top = openmc.YPlane(y0=len/2, boundary_type='vacuum')
back = openmc.ZPlane(z0=-len/2, boundary_type='vacuum')
front = openmc.ZPlane(z0=len/2, boundary_type='vacuum')
len=5
offset=5
left2 = openmc.XPlane(x0=-len/2+offset)
right2 = openmc.XPlane(x0=len/2+offset)
bottom2 = openmc.YPlane(y0=-len/2)
top2 = openmc.YPlane(y0=len/2)
back2 = openmc.ZPlane(z0=-len/2)
front2 = openmc.ZPlane(z0=len/2)
big_box = +left & -right & +bottom & -top & +back & -front
copper_region = +left2 & -right2 & +bottom2 & -top2 & +back2 & -front2
air_region = big_box | ~copper_region
copper = openmc.Cell(1, 'copper')
copper.fill = materials["copper"]
copper.region = copper_region
air = openmc.Cell(2, 'air')
air.fill = materials["air"]
air.region = air_region
root = openmc.Universe(cells=(copper,air))
geom = openmc.Geometry(root)
geom.export_to_xml()
print("Created geometry.xml")
def createSettings():
# Create neutron source
point = openmc.stats.Point((0, 0, 0))
src = openmc.Source(space=point)
src.particle='neutron'
# Create settings object
settings = openmc.Settings()
settings.source = src
settings.run_mode = 'fixed source'
settings.photon_transport = False
# Turn on dagmc
settings.batches = 10
settings.inactive = 2
settings.particles = 5000
settings.export_to_xml()
print("Created settings.xml")
def createTallies():
# Filters
# Create mesh filter for tally
mesh = openmc.RegularMesh()
mesh.dimension = [50, 50]
mesh.lower_left = [-10,-10]
mesh.upper_right = [10,10]
mesh_filter = openmc.MeshFilter(mesh)
# Create mesh tally to score flux and fission rate
tally = openmc.Tally()
tally.filters = [mesh_filter]
tally.scores = ['heating-local', 'flux']
tally.estimator = 'tracklength'
tallies = openmc.Tallies([tally])
tallies.export_to_xml()
print("Created tallies.xml")
def setupInput():
mats = createMaterials()
createGeometry(mats)
createPlots(mats)
createSettings()
createTallies()
setupInput()
#openmc.plot_geometry()
openmc.run()
with openmc.StatePoint("statepoint.10.h5") as sp:
tally = sp.tallies[1]
flux = tally.get_slice(scores=['flux'])
heating = tally.get_slice(scores=['heating-local'])
flux.mean.shape = (50, 50)
heating.mean.shape = (50, 50)
fig = plt.subplot(111)
fig.imshow(flux.mean)
plt.show()
fig2 = plt.subplot(111)
fig2.imshow(heating.mean)
plt.show()