Candu Reactor compared k_eff values with Serpent

  • Fukushima
  • Thread starter emilmammadzada
  • Start date
  • #1
emilmammadzada
109
18
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()]
 

What is a CANDU reactor and how does it work?

The CANDU (CANada Deuterium Uranium) reactor is a type of nuclear reactor that uses heavy water (deuterium oxide, D2O) as a moderator and coolant, and natural uranium as fuel. The heavy water moderator slows down the neutrons produced by nuclear fission, allowing them to sustain a nuclear chain reaction with the natural uranium. CANDU reactors are known for their flexibility in fuel use and ability to refuel while operating.

What is Serpent and how is it used in nuclear engineering?

Serpent is a Monte Carlo simulation code primarily used for nuclear reactor physics calculations. It is designed to perform detailed neutron transport simulations, which are crucial for analyzing reactor behavior and safety. Serpent can calculate neutron behavior and interactions, and it is often used to assess the effectiveness and safety of reactor designs, including the calculation of the effective multiplication factor (k_eff).

What is k_eff and why is it important in nuclear reactors?

The effective multiplication factor, or k_eff, is a dimensionless ratio that indicates the neutron multiplication in a nuclear reactor. A k_eff value of 1 means the reactor is critical and the neutron population is stable; values greater than 1 indicate a supercritical state with increasing neutron population, and values less than 1 indicate a subcritical state with a decreasing neutron population. Maintaining k_eff close to 1 is crucial for steady and safe reactor operation.

How are CANDU reactor k_eff values calculated using Serpent?

In the context of CANDU reactors, Serpent is used to simulate the detailed neutron transport and interactions within the reactor core to calculate the k_eff value. This involves modeling the geometry of the reactor, the properties of the fuel, moderator, and other materials, and the operational conditions. Serpent uses stochastic methods to trace the paths of neutrons and their interactions, providing a statistically-estimated k_eff value that helps in evaluating reactor performance and safety.

What are the common challenges or discrepancies when comparing k_eff values from Serpent simulations with actual CANDU reactor data?

Comparing k_eff values from Serpent simulations with actual CANDU reactor data can present several challenges. Discrepancies may arise due to simplifications and assumptions in the model, such as geometry approximations, material property estimates, and boundary conditions. Additionally, the inherent randomness of Monte Carlo methods like those used in Serpent can lead to statistical uncertainties. Ensuring accurate input data, refining simulation parameters, and running sufficient iterations can help minimize these discrepancies and improve the reliability of simulation results.

Similar threads

Replies
0
Views
312
Back
Top