Candu Reactor compared k_eff values with Serpent

  • Context: Fukushima 
  • Thread starter Thread starter emilmammadzada
  • Start date Start date
Click For Summary
SUMMARY

The forum discussion centers on discrepancies in k_eff values between Serpent and OpenMC simulations for a CANDU reactor model. Users reported that Serpent produced k_eff values around 0.9, while OpenMC yielded a significantly lower value of 0.42. The discussion highlights potential issues in the input files and material definitions, particularly focusing on the configuration of materials such as fuel, coolant, and structural components. Participants emphasized the importance of accurate material densities and geometrical configurations to achieve consistent results across both simulation tools.

PREREQUISITES
  • Understanding of OpenMC simulation framework
  • Familiarity with Serpent Monte Carlo code
  • Knowledge of CANDU reactor design and operation
  • Experience with material properties and neutron transport theory
NEXT STEPS
  • Investigate OpenMC material definitions and their impact on k_eff calculations
  • Learn about Serpent input file configurations for CANDU reactors
  • Explore methods for validating simulation results between different codes
  • Study the effects of temperature and density variations on neutron behavior in reactor simulations
USEFUL FOR

Reactor physicists, nuclear engineers, and simulation analysts working with neutron transport codes, particularly those involved in modeling CANDU reactors and comparing results from different simulation platforms.

emilmammadzada
Messages
133
Reaction score
19
TL;DR
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()]
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
3K
Replies
1
Views
686