Added fuel depletion capabilities to BEAVRS

This commit is contained in:
Adam Parler 2023-10-26 00:53:57 -07:00
parent 133bd9acc9
commit 4d4a8058b9
3 changed files with 53 additions and 8 deletions

View file

@ -61,6 +61,7 @@ class BEAVRS(object):
self.dd_mesh_lower_left = None
self.dd_mesh_upper_right = None
self.dd_nodemap = None
self.settings_volumes = None
self.dd_truncate = False
self.dd_interactions = False
@ -112,20 +113,30 @@ class BEAVRS(object):
def write_openmc_geometry(self):
self.openmc_geometry.export_to_xml()
@property
def materials(self):
return openmc.Materials(self.mats.values())
def write_openmc_materials(self):
materials_file = openmc.Materials(self.mats.values())
materials_file.export_to_xml()
self.materials.export_to_xml()
@property
def plots(self):
plots = Plots(self.mats)
plot_file = openmc.Plots(plots.plots)
return plot_file
def write_openmc_plots(self):
self.plots = Plots(self.mats)
plot_file = openmc.Plots(self.plots.plots)
plot_file.export_to_xml()
self.plots.export_to_xml()
def write_openmc_settings(self):
@property
def settings(self):
settings_file = openmc.Settings()
settings_file.batches = self.settings_batches
settings_file.inactive = self.settings_inactive
settings_file.particles = self.settings_particles
if self.settings_volumes:
settings_file.volume_calculations = self.settings_volumes
if self.dd_mesh_dimension:
settings_file.dd_mesh_dimension = self.dd_mesh_dimension
settings_file.dd_mesh_lower_left = self.dd_mesh_lower_left
@ -139,7 +150,10 @@ class BEAVRS(object):
output = {'tallies': self.settings_output_tallies,
'summary': self.settings_summary}
settings_file.output = output
settings_file.export_to_xml()
return settings_file
def write_openmc_settings(self):
self.settings.export_to_xml()
def write_openmc_tallies(self):
if len(self.tallies) == 0: return
@ -150,6 +164,9 @@ class BEAVRS(object):
tallies_file.append(tally)
tallies_file.export_to_xml()
def set_volumes(self, samples=100000):
self.settings_volumes = openmc.VolumeCalculation(domains=[self.main_universe], samples=samples, lower_left=(-170, -170, 0), upper_right=(170, 170, 420))
def set_params(self, particles=None, batches=None, inactive=None):
if particles: self.settings_particles = particles
if batches: self.settings_batches = batches

View file

@ -145,6 +145,7 @@ def openmc_materials(ppm):
mat_name = 'Fuel {0:1.1f}%'.format(name)
mats[mat_name] = openmc.Material(name=mat_name)
mats[mat_name].temperature = 300
mats[mat_name].volume = (np.pi*c.pelletOR**2)*(c.fuel_ActiveFuel_top-c.fuel_ActiveFuel_bot)
mats[mat_name].set_density('g/cc', den)
mats[mat_name].add_element('O', a_O, 'ao')
mats[mat_name].add_element('U', a_U, 'ao', enrichment=enr*100)

View file

@ -1,6 +1,7 @@
#!/usr/bin/env python
import os
import openmc, os
import openmc.deplete
from beavrs.builder import BEAVRS
from optparse import OptionParser
@ -17,14 +18,40 @@ p.add_option('-d', '--2d', action='store_true', dest='is_2d',
p.add_option('-s', '--symmetric', action='store_true', dest='is_symmetric',
default=False, help='Create octant-symmetric input files,' \
+ ' not symmetric by default')
p.add_option('-e', '--deplete', action='store_true', dest='run_deplete', default=False,
help='Run the depletion code for this setup')
(options, args) = p.parse_args()
if not len(args) == 0:
p.print_help()
chain_path = "/opt/xdata/endfb-vii.1-hdf5/chain_endfb71_pwr.xml"
b = BEAVRS(is_symmetric=options.is_symmetric, is_2d=options.is_2d)
b.write_openmc_geometry()
b.write_openmc_materials()
b.write_openmc_plots()
b.write_openmc_settings()
# openmc.calculate_volumes()
###############################################################################
# Depletion settings
###############################################################################
if options.run_deplete:
model = openmc.model.Model(geometry=b.openmc_geometry, materials=b.materials, settings=b.settings, tallies=b.tallies, plots=plots)
## setting the transport operator
operator = openmc.deplete.CoupledOperator(model,chain_path,diff_burnable_mats=False,normalization_mode='fission-q',fission_q={"U235": 202.27e6})
## setting the system linear power [W]
power = [45.50,91.01,136.51,182.02,227.52,273.03,324.45,324.45,273.03,273.03,227.52,182.02,136.51,91.01,45.50]
time_steps = [8640.00,8640.00,8640.00,8640.00,8640.00,8640.00,4268160.00,45792000.00,1728000.00,46915200.00,8640.00,8640.00,8640.00,8640.00,8640.00]
print(time_steps)
## depleting usin a first-order predictor algorithm
integrator = openmc.deplete.PredictorIntegrator(operator, time_steps, power, timestep_units = 's')
integrator.integrate()