Fukushima Candu Reactor compared k_eff values with Serpent

  • Thread starter Thread starter emilmammadzada
  • Start date Start date
AI Thread Summary
The user is experiencing a discrepancy in k_eff values between Serpent and OpenMC simulations for a CANDU reactor, with Serpent reporting approximately 0.9 and OpenMC showing 0.42. The discussion focuses on identifying potential errors in the input files and settings used for the OpenMC simulation. Key aspects include material definitions, densities, and geometric configurations, which may contribute to the differing results. The user is seeking guidance on troubleshooting these discrepancies to achieve consistent k_eff values across both simulation tools. Addressing these issues is crucial for accurate reactor modeling and analysis.
emilmammadzada
Messages
129
Reaction score
19
TL;DR Summary
Candu Reactor compared k_eff values with Serpent
Dear experts, I am trying to set the Serpent input file for the candu reactor in Openmc accordingly. But in the output section, Serpent k_eff values are around 0.9, while Openmc shows 0.42. How can I solve this problem or what are the errors in the files I added below that cause this difference?
[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
# Fuel and clad
temperature_fuel = 960 #Fuel at 960 K with a density of 10.52 g/cc
temperature_structure = 345.15 #Moderator at 345.15 K with a density of 1.086 g/cc
r_fuel = 0.6122
r_clad = 0.6540
pressure_tube_ir = 5.16890
pressure_tube_or = 5.60320
calendria_ir = 6.44780
calendria_or = 6.58750
# Fuel
fuel = openmc.Material(name='fuel', temperature=temperature_fuel)
fuel.add_nuclide('U235', 6.27118E-1 , 'wo')
fuel.add_nuclide('U238', 8.75256E+1 , 'wo')
fuel.add_nuclide('O16', 1.18473E+1 , 'wo')
fuel.volume = 37*pi*r_fuel**2
fuel.set_density('g/cm3', 10.4375010)
# Coolant Water
heavy_water_coolant = openmc.Material(name='heavy water coolant')
heavy_water_coolant.add_nuclide('H2', 1.99768E-1 , 'wo' )
heavy_water_coolant.add_nuclide('O16', 7.99449E-1 , 'wo' )
heavy_water_coolant.add_nuclide('H1', 7.83774E-4 , 'wo' )
heavy_water_coolant.set_density('g/cm3', 0.812120)
# Calandria tube
clad_calandria = openmc.Material(name='Calandria')
clad_calandria.add_nuclide('Mn55', 1.60000E-1 , 'wo' )
clad_calandria.add_element('Ni', 6.00000E-2 , 'wo' )
clad_calandria.add_element('Cr', 1.10000E-1 , 'wo' )
clad_calandria.add_element('Zr', 9.97100E+1 , 'wo' )
clad_calandria.add_nuclide('B10', 5.7409e-05 , 'wo' )
clad_calandria.add_nuclide('B11', 2.5259E-04 , 'wo' )
clad_calandria.set_density('g/cm3', 6.44)
# Clad
clad = openmc.Material(name='Clad')
clad.add_nuclide('Mn55', 1.60000E-1 , 'wo' )
clad.add_element('Ni', 6.00000E-2 , 'wo' )
clad.add_element('Cr', 1.10000E-1 , 'wo' )
clad.add_element('Zr', 9.97100E+1 , 'wo' )
clad.add_nuclide('B10', 5.7409e-05 , 'wo' )
clad.add_nuclide('B11', 2.5259E-04 , 'wo' )
clad.set_density('g/cm3', 6.44)
# Moder
heavy_water = openmc.Material(name='heavy water')
heavy_water.add_nuclide('H2', 2.01016E-1, 'wo' )
heavy_water.add_nuclide('O16', 7.98895E-1, 'wo' )
heavy_water.add_nuclide('H1', 8.96000E-5, 'wo' )
heavy_water.set_density('g/cm3', 1.082885 )
heavy_water.add_s_alpha_beta('c_D_in_D2O')
# Pressure Tube
tube = openmc.Material(name='PressTube')
tube.add_element('Zr', 9.75000E+1 , 'wo' )
tube.add_nuclide('B10', 3.8889E-05 , 'wo' )
tube.add_nuclide('B11', 1.7111E-04 , 'wo' )
tube.set_density('g/cm3', 6.57)
mats = openmc.Materials([fuel, heavy_water_coolant, clad_calandria, clad, heavy_water, tube ])
mats.export_to_xml()

# 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
elif i == ring_radii.size - 1:
water_region = +radial_surf[i-1]
else:
water_region = +radial_surf[i-1] & -radial_surf

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)
surf_clad = openmc.ZCylinder(R=r_clad)

fuel_cell = openmc.Cell(fill=fuel, region=-surf_fuel)
clad_cell = openmc.Cell(fill=clad, region=+surf_fuel & -surf_clad)
cool_cell = openmc.Cell(fill=heavy_water_coolant, region=+surf_clad & -surf_clad)

pin_universe = openmc.Universe(cells=(fuel_cell, clad_cell, cool_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.region &= +pin_boundary


# 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='reflective')

bundle = openmc.Cell(fill=bundle_universe, region=-pt_inner)
pressure_tube = openmc.Cell(fill=tube, region=+pt_inner & -pt_outer)
v1 = openmc.Cell(region=+pt_outer & -calendria_inner)
calendria = openmc.Cell(fill=clad_calandria, region=+calendria_inner & -calendria_outer)

root_universe = openmc.Universe(cells=[bundle, pressure_tube, v1, calendria])

geom = openmc.Geometry(root_universe)
geom.export_to_xml()
settings = openmc.Settings()
settings = openmc.Settings()
settings.particles = 500
settings.batches = 50
settings.inactive = 5
settings.source = openmc.Source(space=openmc.stats.Point())
settings.temperature = {
'default': temperature_structure,
'method': 'interpolation',
}
settings.export_to_xml()
openmc.run()]
 
Hello, I'm currently trying to compare theoretical results with an MCNP simulation. I'm using two discrete sets of data, intensity (probability) and linear attenuation coefficient, both functions of energy, to produce an attenuated energy spectrum after x-rays have passed through a thin layer of lead. I've been running through the calculations and I'm getting a higher average attenuated energy (~74 keV) than initial average energy (~33 keV). My guess is I'm doing something wrong somewhere...
Back
Top