Inconsistent Flux Results in Multi-group Mode

When using multi-group mode in OpenMC, where I provided a set of cross sections and obtained flux distribution results. However, I encountered an unexpected inconsistency in the flux results when using two different enrichment levels of fuel.

When simulating with a single fuel enrichment, the flux distribution appeared reasonable. However, when I simulated with two different enrichments, the flux results did not exhibit the expected variation between the two fuel types. This discrepancy is contrary to both fine modeling expectations and deterministic results.

Could anyone provide insights or suggestions on what might be causing this issue?

Thanks very much!


Here are my codes

import numpy as np
import openmc
%matplotlib inline
from IPython.display import Image
import numpy as np
import matplotlib.pyplot as plt
import openmc

Create a 2-group structure with arbitrary boundaries (the specific boundaries are unimportant)

groups = openmc.mgxs.EnergyGroups([1e-5, 1e6, 20.0e6])

#lowEnrichmentAssembly_xsdata
lowEnrichmentAssembly_xsdata = openmc.XSdata(‘lowEnrichmentAssembly’, groups)
lowEnrichmentAssembly_xsdata.order = 0
lowEnrichmentAssembly_xsdata.set_total([0.170114542, 0.377481276], temperature=294.)
lowEnrichmentAssembly_xsdata.set_absorption([0.007605099,0.007113863], temperature=294.)
lowEnrichmentAssembly_xsdata.set_fission([0.006416398, 0.002631272], temperature=294.)
lowEnrichmentAssembly_xsdata.set_nu_fission([0.016645917, 0.007355224], temperature=294.)
lowEnrichmentAssembly_xsdata.set_chi([0.6981436,0.3018564], temperature=294.)
scatter_matrix1 =
[[[0.117544123, 0.0451495759],
[0.0, 0.370351157]]]
scatter_matrix1 = np.array(scatter_matrix1)
scatter_matrix1 = np.rollaxis(scatter_matrix1, 0, 3)
lowEnrichmentAssembly_xsdata.set_scatter_matrix(scatter_matrix1, temperature=294.)

#up_xsdata
upAssembly_xsdata = openmc.XSdata(‘upAssembly’, groups)
upAssembly_xsdata.order = 0
upAssembly_xsdata.set_total([0.170259603, 0.370522199], temperature=294.)
upAssembly_xsdata.set_absorption([0.008095127, 0.007957804], temperature=294.)
upAssembly_xsdata.set_fission([0.006900317, 0.003546659], temperature=294.)
upAssembly_xsdata.set_nu_fission([0.019165554, 0.008389694], temperature=294.)
upAssembly_xsdata.set_chi([0.6990006,0.3009994], temperature=294.)
scatter_matrix3 =
[[[0.117426756,0.0449167458],
[0.0, 0.363264991]]]
scatter_matrix3 = np.array(scatter_matrix3)
scatter_matrix3 = np.rollaxis(scatter_matrix3, 0, 3)
upAssembly_xsdata.set_scatter_matrix(scatter_matrix3, temperature=294.)

#down_xsdata
downAssembly_xsdata = openmc.XSdata(‘downAssembly’, groups)
downAssembly_xsdata.order = 0
downAssembly_xsdata.set_total([0.170259603, 0.370522199], temperature=294.)
downAssembly_xsdata.set_absorption([0.008095127, 0.007957804], temperature=294.)
downAssembly_xsdata.set_fission([0.006900317, 0.003546659], temperature=294.)
downAssembly_xsdata.set_nu_fission([0.019165554, 0.008389694], temperature=294.)
downAssembly_xsdata.set_chi([0.6990006,0.3009994], temperature=294.)
scatter_matrix4 =
[[[0.117426756,0.0449167458],
[0.0, 0.363264991]]]
scatter_matrix4 = np.array(scatter_matrix4)
scatter_matrix4 = np.rollaxis(scatter_matrix4, 0, 3)
downAssembly_xsdata.set_scatter_matrix(scatter_matrix4, temperature=294.)

#upAxialReflector_xsdata
upAxialReflectorAssembly_xsdata = openmc.XSdata(‘upAxialReflectorAssembly’, groups)
upAxialReflectorAssembly_xsdata.order = 0
upAxialReflectorAssembly_xsdata.set_total([0.174079875, 0.424901412], temperature=294.)
upAxialReflectorAssembly_xsdata.set_absorption([0.000711852, 0.001298070], temperature=294.)
upAxialReflectorAssembly_xsdata.set_fission([0.0, 0.0], temperature=294.)
upAxialReflectorAssembly_xsdata.set_nu_fission([0.0, 0.0], temperature=294.)
upAxialReflectorAssembly_xsdata.set_chi([0.0,0.0], temperature=294.)
scatter_matrix6 =
[[[0.140148556, 0.0331868293],
[0.0, 0.423591766]]]
scatter_matrix6 = np.array(scatter_matrix6)
scatter_matrix6 = np.rollaxis(scatter_matrix6, 0, 3)
upAxialReflectorAssembly_xsdata.set_scatter_matrix(scatter_matrix6, temperature=294.)

#downAxialReflector_xsdata
downAxialReflectorAssembly_xsdata = openmc.XSdata(‘downAxialReflectorAssembly’, groups)
downAxialReflectorAssembly_xsdata.order = 0
downAxialReflectorAssembly_xsdata.set_total([0.174079875, 0.424901412], temperature=294.)
downAxialReflectorAssembly_xsdata.set_absorption([0.000711852, 0.001298070], temperature=294.)
downAxialReflectorAssembly_xsdata.set_fission([0.0, 0.0], temperature=294.)
downAxialReflectorAssembly_xsdata.set_nu_fission([0.0, 0.0], temperature=294.)
downAxialReflectorAssembly_xsdata.set_chi([0.0,0.0], temperature=294.)
scatter_matrix7 =
[[[0.140148556, 0.0331868293],
[0.0, 0.423591766]]]
scatter_matrix7 = np.array(scatter_matrix7)
scatter_matrix7 = np.rollaxis(scatter_matrix7, 0, 3)
downAxialReflectorAssembly_xsdata.set_scatter_matrix(scatter_matrix7, temperature=294.)

mg_cross_sections_file = openmc.MGXSLibrary(groups)
mg_cross_sections_file.add_xsdata(lowEnrichmentAssembly_xsdata)
mg_cross_sections_file.add_xsdata(upAssembly_xsdata)
mg_cross_sections_file.add_xsdata(downAssembly_xsdata)
mg_cross_sections_file.add_xsdata(upAxialReflectorAssembly_xsdata)
mg_cross_sections_file.add_xsdata(downAxialReflectorAssembly_xsdata)
mg_cross_sections_file.export_to_hdf5(‘mgxs.h5’)

lowEnrichmentAssembly1 = openmc.Material()
lowEnrichmentAssembly1.add_macroscopic(‘lowEnrichmentAssembly’)

upAssembly1 = openmc.Material()
upAssembly1.add_macroscopic(‘upAssembly’)

downAssembly1 = openmc.Material()
downAssembly1.add_macroscopic(‘downAssembly’)

upAxialReflectorAssembly1 = openmc.Material()
upAxialReflectorAssembly1.add_macroscopic(‘upAxialReflectorAssembly’)

downAxialReflectorAssembly1 = openmc.Material()
downAxialReflectorAssembly1.add_macroscopic(‘downAxialReflectorAssembly’)

materials_file = openmc.Materials([downAxialReflectorAssembly1,upAxialReflectorAssembly1,downAssembly1,upAssembly1,lowEnrichmentAssembly1])
mg_cross_sections_file.export_to_hdf5(‘mgxs.h5’)
materials_file.export_to_xml()

#geometry

top1 = openmc.ZPlane(z0=+52.5)
top2 = openmc.ZPlane(z0=+52.5+25)
top3 = openmc.ZPlane(z0=+52.5+25+20, boundary_type=‘vacuum’)
bottom1 = openmc.ZPlane(z0=-52.5)
bottom2 = openmc.ZPlane(z0=-52.5-25)
bottom3 = openmc.ZPlane(z0=-52.5-25-20, boundary_type=‘vacuum’)

assembly = openmc.model.hexagonal_prism(edge_length=17.15/1.732, orientation=‘x’, boundary_type=‘reflective’)

lowEnrichmentAssembly_cell = openmc.Cell()
lowEnrichmentAssembly_cell.region = assembly & -top1 & +bottom1
lowEnrichmentAssembly_cell.fill = lowEnrichmentAssembly1

upAssembly_cell = openmc.Cell()
upAssembly_cell.region = assembly & -top2 & +top1
upAssembly_cell.fill = upAssembly1

downAssembly_cell = openmc.Cell()
downAssembly_cell.region = assembly & -bottom1 & +bottom2
downAssembly_cell.fill = downAssembly1

upAxialReflectorAssembly_cell = openmc.Cell()
upAxialReflectorAssembly_cell.region = assembly & -top3 & +top2
upAxialReflectorAssembly_cell.fill = upAxialReflectorAssembly1

downAxialReflectorAssembly_cell = openmc.Cell()
downAxialReflectorAssembly_cell.region = assembly & -bottom2 & +bottom3
downAxialReflectorAssembly_cell.fill = downAxialReflectorAssembly1

u_root = openmc.Universe()
u_root.add_cells([lowEnrichmentAssembly_cell,downAxialReflectorAssembly_cell ,upAxialReflectorAssembly_cell,downAssembly_cell,upAssembly_cell])
geom=openmc.Geometry(u_root)
geom.export_to_xml()

Instantiate an empty Tallies object

tallies = openmc.Tallies()

Create mesh which will be used for tally

mesh = openmc.RegularMesh()
mesh.dimension = [1, 1, 196]
mesh.lower_left = [-17.15/1.732, -17.15/2,-97.5]
mesh.upper_right = [17.15/1.732, 17.15/2,97.5]

Create mesh filter for tally

mesh_filter = openmc.MeshFilter(mesh)
tally = openmc.Tally(name=‘flux’)
tally.filters = [mesh_filter]
tally.scores = [‘flux’]
tallies.append(tally)
tallies.export_to_xml()

settings = openmc.Settings()
settings.batches = 300
settings.inactive = 10
settings.particles = 10000
settings.energy_mode = ‘multi-group’
settings.export_to_xml()

openmc.run()