Hello Community,
I am currently simulating a reactor operating at a known power of 367MW. I am interested in normalizing the tallies for fission and absorption rates that I’m obtaining from the simulation. I have referred to the User’s Guide, specifically Section 8.3 - Normalisation of Tallies, but found it to be less helpful than I hoped.
In Serpent, an environment I am familiar with, the process is relatively straightforward. I input the power using the ‘set power’ function, and it calculates the necessary values, including a volume calculation.
I would greatly appreciate guidance on how to normalize my OpenMC tally values to the operating power and how to integrate this into my existing code. Below is a snippet of my code, illustrating the settings set-up and running the simulation.
Any help or insights you can provide will be highly valuable. Thank you in advance.
Best regards,
Jimmy
import os
import numpy as np
from math import pi, sin, cos
import matplotlib.pyplot as plt
import openmc
# Materials definitions
...
##############################################################################################################
##############################################################################################################
##############################################################################################################
# Geometry Definitions
...
############################################################################################################
############################################################################################################
############################################################################################################
# OpenMC simulation parameters
print(openmc.config)
print(openmc.__version__)
# source = openmc.IndependentSource()
# source.space = openmc.stats.Point(xyz=(0.0, 0.0, RH_coreBottomBoundary/2))
settings = openmc.Settings()
settings.run_mode = 'eigenvalue'
source = openmc.IndependentSource()
source.space = openmc.stats.Box([-RH_pressureVesselRadius, -RH_pressureVesselRadius, RH_pressureVesselBottomBoundary],[RH_pressureVesselRadius, RH_pressureVesselRadius, 0.0], only_fissionable=True)
settings.source = source
settings.particles = 50
settings.generations_per_batch = 20
settings.batches = 40
settings.inactive = 20
settings.export_to_xml('./xmlFiles/')
tallies = openmc.Tallies()
FE_fuelThermalTallyi = []
FE_fuelFastTallyi = []
for i in range(0, 60):
FE_fuelThermalTallyi.append(openmc.Tally(tally_id=(2*i)+1))
FE_fuelThermalTallyi[i].filters = [openmc.EnergyFilter([0,0.625]), openmc.UniverseFilter(301+i)]
FE_fuelThermalTallyi[i].scores = ['absorption', 'fission']
tallies.append(FE_fuelThermalTallyi[i])
FE_fuelFastTallyi.append(openmc.Tally(tally_id=(2*i)+2))
FE_fuelFastTallyi[i].filters = [openmc.EnergyFilter([0.625,19.6403e6]), openmc.UniverseFilter(301+i)]
FE_fuelFastTallyi[i].scores = ['absorption', 'fission']
tallies.append(FE_fuelFastTallyi[i])
tallies.export_to_xml('./xmlFiles/')
openmc.run(path_input='./xmlFiles/')
with openmc.StatePoint('statepoint.{}.h5'.format(settings.batches)) as sp:
keff = sp.keff
k_generation = sp.k_generation
with open('./txtFiles/keff{}.txt'.format(int(CD_drumAngularPos)), 'w') as f:
f.write("{}\n".format(keff))
with open('./txtFiles/k_generation{}.txt'.format(int(CD_drumAngularPos)), 'w') as f:
for value in k_generation:
f.write("{}\n".format(value))```