Dear experts, I want to calculate depletion in the candu reactor example below, but when I compared the K_eff result values with serpent, I saw that there were differences.While Serpent K_eff results are around 1, Openmc shows lower values starting from 0.7.How can I solve this problem?
from math import pi, sin, cos
import numpy as np
import openmc
import json
import numpy as np
from pathlib import Path
import openmc.deplete
# Outer radius of fuel and clad
r_fuel = 0.6122
r_clad = 0.6540
fuel = openmc.Material(name='fuel')
fuel.add_element('U', 1.0)
fuel.add_element('O', 2.0)
fuel.set_density('g/cm3', 10.0)
fuel.volume = 37 * pi * r_fuel**2
clad = openmc.Material(name='zircaloy')
clad.add_element('Zr', 1.0)
clad.set_density('g/cm3', 6.0)
heavy_water = openmc.Material(name='heavy water')
heavy_water.add_nuclide('H2', 2.0)
heavy_water.add_nuclide('O16', 1.0)
heavy_water.add_s_alpha_beta('c_D_in_D2O')
heavy_water.set_density('g/cm3', 1.1)
# Pressure tube and calendria radii
pressure_tube_ir = 5.16890
pressure_tube_or = 5.60320
calendria_ir = 6.44780
calendria_or = 6.58750
# Radius to center of each ring of fuel pins
ring_radii = np.array([0.0, 1.4885, 2.8755, 4.3305])
# These are the surfaces that will divide each of the rings
radial_surf = [openmc.ZCylinder(R=r) for r in
(ring_radii[:-1] + ring_radii[1:])/2]
water_cells = []
for i in range(ring_radii.size):
# Create annular region
if i == 0:
water_region = -radial_surf[i]
elif i == ring_radii.size - 1:
water_region = +radial_surf[i-1]
else:
water_region = +radial_surf[i-1] & -radial_surf[i]
water_cells.append(openmc.Cell(fill=heavy_water, region=water_region))
bundle_universe = openmc.Universe(cells=water_cells)
surf_fuel = openmc.ZCylinder(R=r_fuel)
fuel_cell = openmc.Cell(fill=fuel, region=-surf_fuel)
clad_cell = openmc.Cell(fill=clad, region=+surf_fuel)
pin_universe = openmc.Universe(cells=(fuel_cell, clad_cell))
num_pins = [1, 6, 12, 18]
angles = [0, 0, 15, 0]
for i, (r, n, a) in enumerate(zip(ring_radii, num_pins, angles)):
for j in range(n):
# Determine location of center of pin
theta = (a + j/n*360.) * pi/180.
x = r*cos(theta)
y = r*sin(theta)
pin_boundary = openmc.ZCylinder(x0=x, y0=y, R=r_clad)
water_cells[i].region &= +pin_boundary
# Create each fuel pin -- note that we explicitly assign an ID so
# that we can identify the pin later when looking at tallies
pin = openmc.Cell(fill=pin_universe, region=-pin_boundary)
pin.translation = (x, y, 0)
pin.id = (i + 1)*100 + j
bundle_universe.add_cell(pin)
pt_inner = openmc.ZCylinder(R=pressure_tube_ir)
pt_outer = openmc.ZCylinder(R=pressure_tube_or)
calendria_inner = openmc.ZCylinder(R=calendria_ir)
calendria_outer = openmc.ZCylinder(R=calendria_or, boundary_type='vacuum')
bundle = openmc.Cell(fill=bundle_universe, region=-pt_inner)
pressure_tube = openmc.Cell(fill=clad, region=+pt_inner & -pt_outer)
v1 = openmc.Cell(region=+pt_outer & -calendria_inner)
calendria = openmc.Cell(fill=clad, region=+calendria_inner & -calendria_outer)
root_universe = openmc.Universe(cells=[bundle, pressure_tube, v1, calendria])
geometry = openmc.Geometry(root_universe)
geometry.export_to_xml()
materials = openmc.Materials([fuel, clad, heavy_water])
materials.export_to_xml()
################################################################################
# SIMULATION SETTINGS
settings = openmc.Settings()
settings.particles = 4_000_000
settings.inactive = 20
settings.batches = 220
settings.statepoint = {'batches': []}
settings.output = {'tallies': False}
settings.export_to_xml()
################################################################################
# create a Model object
model = openmc.Model(geometry=geometry, materials=materials, settings=settings)
# DEPLETION
cumulative_days = np.linspace(0.0, 360.0, 19)
timesteps = np.diff(cumulative_days)
power = 63143. # 271 * Average linear power from ANL-AFCI-02, Table II.1-3
data_path = Path('/home/user1/openmc/examples/depletion-comparison/data/depletion')
file_path = data_path / 'serpent_fissq.json'
with file_path.open() as fh:
serpent_q = json.load(fh)
# Create depletion operator
chain_file = data_path / 'chain_simple.xml'
op = openmc.deplete.CoupledOperator(model, chain_file,
fission_q=serpent_q,
fission_yield_mode="average"
)
# Execute depletion using integrator
integrator = openmc.deplete.PredictorIntegrator(
op, timesteps, power, timestep_units='d')
integrator.integrate()