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()