Added features to make_beavrs. Updated builder. Added fission energies file.
This commit is contained in:
parent
68fb1c9e1f
commit
24e63b7f13
3 changed files with 143 additions and 53 deletions
|
|
@ -73,11 +73,11 @@ class BEAVRS(object):
|
|||
|
||||
# These were not chosen with any application in mind: tailor them to your needs!
|
||||
self.depletion_nuclides = [
|
||||
'Ag107', 'Ag109', 'Ag111', 'Am241', 'Am243', 'As75',
|
||||
'Ac225', 'Ag107', 'Ag109', 'Ag111', 'Am241', 'Am243', 'As75',
|
||||
'Au197', 'Ba134', 'Ba135', 'Ba136', 'Ba137', 'Ba138',
|
||||
'Ba140', 'Br79', 'Br81', 'Cd108', 'Cd110', 'Cd111',
|
||||
'Ba140', 'Bk245', 'Bk246', 'Br79', 'Br81', 'Cd108', 'Cd110', 'Cd111',
|
||||
'Cd112', 'Cd113', 'Cd114', 'Cd116', 'Ce140',
|
||||
'Ce141', 'Ce142', 'Ce143', 'Ce144', 'Cm244', 'Co59',
|
||||
'Ce141', 'Ce142', 'Ce143', 'Ce144', 'Cf246', 'Cm240', 'Cm244', 'Co59',
|
||||
'Cs133', 'Cs134', 'Cs135', 'Cs136', 'Cs137', 'Dy160',
|
||||
'Dy161', 'Dy162', 'Dy163', 'Dy164', 'Er166', 'Er167',
|
||||
'Eu151', 'Eu152', 'Eu153', 'Eu154', 'Eu155', 'Eu156',
|
||||
|
|
@ -88,8 +88,8 @@ class BEAVRS(object):
|
|||
'Kr86', 'La139', 'La140', 'Lu175', 'Lu176', 'Mo100',
|
||||
'Mo94', 'Mo95', 'Mo96', 'Mo97', 'Mo98', 'Mo99',
|
||||
'Nb93', 'Nb94', 'Nb95', 'Nd142', 'Nd143', 'Nd144',
|
||||
'Nd145', 'Nd146', 'Nd147', 'Nd148', 'Nd150', 'Np237',
|
||||
'Pa233', 'Pd104', 'Pd105', 'Pd106', 'Pd107', 'Pd108',
|
||||
'Nd145', 'Nd146', 'Nd147', 'Nd148', 'Nd150', 'Np234', 'Np237',
|
||||
'Pa230', 'Pa231', 'Pa232', 'Pa233', 'Pb208', 'Pd104', 'Pd105', 'Pd106', 'Pd107', 'Pd108',
|
||||
'Pd110', 'Pm147', 'Pm148', 'Pm149', 'Pm151', 'Pr141',
|
||||
'Pr142', 'Pr143', 'Pu238', 'Pu239', 'Pu240', 'Pu241',
|
||||
'Pu242', 'Rb85', 'Rb86', 'Rb87', 'Re185', 'Re187',
|
||||
|
|
@ -102,7 +102,7 @@ class BEAVRS(object):
|
|||
'Sn124', 'Sn125', 'Sn126', 'Sr86', 'Sr87', 'Sr88',
|
||||
'Sr89', 'Sr90', 'Ta181', 'Tb159', 'Tb160', 'Tc99',
|
||||
'Te122', 'Te123', 'Te124', 'Te125', 'Te126',
|
||||
'Te128', 'Te130', 'Te132', 'Th232', 'U233', 'W182',
|
||||
'Te128', 'Te130', 'Te132', 'Th232', 'U231', 'U232', 'U233', 'W182',
|
||||
'W183', 'W184', 'W186', 'Xe128', 'Xe129', 'Xe130', 'Xe131',
|
||||
'Xe132', 'Xe133', 'Xe134', 'Xe135', 'Xe136', 'Y89',
|
||||
'Y90', 'Y91', 'Zr90', 'Zr91', 'Zr92', 'Zr93', 'Zr94',
|
||||
|
|
@ -156,6 +156,9 @@ class BEAVRS(object):
|
|||
output = {'tallies': self.settings_output_tallies,
|
||||
'summary': self.settings_summary}
|
||||
settings_file.output = output
|
||||
settings_file.keff_trigger = {'type': 'std_dev',
|
||||
'threshold': 6e-4}
|
||||
# settings_file.create_delayed_neutrons = True
|
||||
settings_file.confidence_intervals = self.settings_confidence
|
||||
settings_file.seed = np.random.randint(1e14, dtype=np.uint64)
|
||||
return settings_file
|
||||
|
|
@ -276,7 +279,7 @@ class BEAVRS(object):
|
|||
|
||||
# Distribute fuel materials
|
||||
for enr in self.pincells.enrichments:
|
||||
self.openmc_mats['Fuel %s' % enr].set_as_distrib_comp()
|
||||
self.mats['Fuel %s' % enr].set_as_distrib_comp()
|
||||
|
||||
# TODO: distribute other regions as necessary (bpra pins, rcca pins, etc)
|
||||
|
||||
|
|
@ -302,6 +305,7 @@ class BEAVRS(object):
|
|||
for enr in self.pincells.enrichments[:3]:
|
||||
fuel_pin = self.pincells.u_fuel_active_pin[enr]
|
||||
name = "Fuel rod active region - {0} enr radial 0: Fuel {0}".format(enr)
|
||||
# cells.append(fuel_pin.cells)
|
||||
cells.append(fuel_pin.get_cell_by_name(name))
|
||||
universes.append(fuel_pin)
|
||||
return zip(cells, universes)
|
||||
|
|
@ -353,5 +357,5 @@ class BEAVRS(object):
|
|||
for name,mat in self.mats.items():
|
||||
if not name in ['Fuel 1.6%', 'Fuel 2.4%', 'Fuel 3.1%', 'Fuel 3.2%', 'Fuel 3.4%']: continue
|
||||
for nuc in self.depletion_nuclides:
|
||||
if not nuc._name in mat._nuclides:
|
||||
if not nuc.name in mat._nuclides:
|
||||
mat.add_nuclide(nuc, 1e-14)
|
||||
|
|
|
|||
80
BEAVRS/beavrs/serpent_fissq.json
Normal file
80
BEAVRS/beavrs/serpent_fissq.json
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
{
|
||||
"Ac225": 183891658.531768,
|
||||
"Ac226": 183632605.3770991,
|
||||
"Ac227": 183458264.80025893,
|
||||
"Th227": 190640950.14927194,
|
||||
"Th228": 189488754.50737157,
|
||||
"Th229": 192235847.44789958,
|
||||
"Th230": 188666101.25156796,
|
||||
"Th231": 186918512.14598972,
|
||||
"Th232": 197108389.42449385,
|
||||
"Th233": 185840570.73897627,
|
||||
"Th234": 186385345.82281572,
|
||||
"Pa229": 194955644.11334947,
|
||||
"Pa230": 194744699.33621296,
|
||||
"Pa231": 194099942.4938497,
|
||||
"Pa232": 193654730.8348164,
|
||||
"Pa233": 194162901.71835947,
|
||||
"U230": 198841127.68309468,
|
||||
"U231": 197643438.24939737,
|
||||
"U232": 193044277.35730234,
|
||||
"U233": 199796183.56054175,
|
||||
"U234": 200632850.9958874,
|
||||
"U235": 202270000.0,
|
||||
"U236": 203404311.87546986,
|
||||
"U237": 196429642.96756968,
|
||||
"U238": 206851381.70909396,
|
||||
"U239": 196182721.4907133,
|
||||
"U240": 207137940.30569986,
|
||||
"U241": 198266755.4887299,
|
||||
"Np234": 200175925.99275926,
|
||||
"Np235": 199435370.72904894,
|
||||
"Np236": 198952718.20228392,
|
||||
"Np237": 205370480.34853214,
|
||||
"Np238": 208699370.90691367,
|
||||
"Np239": 198519429.0542043,
|
||||
"Pu236": 208679081.72160652,
|
||||
"Pu237": 210593272.23024797,
|
||||
"Pu238": 209540012.5125772,
|
||||
"Pu239": 208018532.78140113,
|
||||
"Pu240": 208612566.66049656,
|
||||
"Pu241": 211237715.32232296,
|
||||
"Pu242": 212072186.50565082,
|
||||
"Pu243": 207499380.63776916,
|
||||
"Pu244": 208427244.82356748,
|
||||
"Pu246": 208860847.72193536,
|
||||
"Am240": 215272544.02927735,
|
||||
"Am241": 211216798.63643932,
|
||||
"Am242": 215146730.16368726,
|
||||
"Am242_m1": 215145370.5791048,
|
||||
"Am243": 212952778.98135212,
|
||||
"Am244": 213894761.9301219,
|
||||
"Am244_m1": 213894761.9301219,
|
||||
"Cm240": 219583368.40646642,
|
||||
"Cm241": 219075406.6897822,
|
||||
"Cm242": 212786491.32857716,
|
||||
"Cm243": 213375296.0362017,
|
||||
"Cm244": 217926766.88448203,
|
||||
"Cm245": 214624022.18345505,
|
||||
"Cm246": 220179493.9541502,
|
||||
"Cm247": 218956599.9139631,
|
||||
"Cm248": 221723145.3723629,
|
||||
"Cm249": 218622037.52325428,
|
||||
"Cm250": 219425761.1783332,
|
||||
"Bk245": 225023484.65451327,
|
||||
"Bk246": 224446497.874413,
|
||||
"Bk247": 224883761.19281054,
|
||||
"Bk248": 224456537.88363716,
|
||||
"Bk249": 224740691.06136644,
|
||||
"Bk250": 225432928.78068554,
|
||||
"Cf246": 229074942.12674516,
|
||||
"Cf248": 229015120.40511796,
|
||||
"Cf249": 221434495.10716867,
|
||||
"Cf250": 229685291.02082983,
|
||||
"Cf251": 223166396.6983342,
|
||||
"Cf252": 230239896.94703457,
|
||||
"Cf253": 231148831.53210822,
|
||||
"Cf254": 230600814.3619568,
|
||||
"Es254": 232527659.46555784,
|
||||
"Fm255": 238051756.2074275
|
||||
}
|
||||
|
|
@ -1,12 +1,29 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import json, openmc, os, sys
|
||||
import numpy as np
|
||||
import openmc.deplete
|
||||
from beavrs.builder import BEAVRS
|
||||
from optparse import OptionParser
|
||||
import argparse, json, openmc, os, shutil, sys
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
parser = argparse.ArgumentParser(description="Program to make BEAVRS reactor and run" \
|
||||
" simulations with resulting geometry")
|
||||
parser.add_argument('-d', '--2d', action='store_true', dest='is_2d',
|
||||
default=False, help='Create 2D BEAVRS input files, 3D by default')
|
||||
parser.add_argument('-s', '--symmetric', action='store_true', dest='is_symmetric',
|
||||
default=False, help='Create octant-symmetric input files, not symmetric by default')
|
||||
parser.add_argument('-e', '--deplete', action='store_true', dest='run_deplete', default=False,
|
||||
help='Run the depletion code for this setup')
|
||||
parser.add_argument('-i', '--insert', action='store', type=int, dest='rod_loc', default=200,
|
||||
help='Set where the control rods should be. Acceptable values are 15-573')
|
||||
parser.add_argument('-o', '--optimal', action='store_true', default=False,
|
||||
help='Find the best combination of particles, inactive and active batches to run')
|
||||
parser.add_argument('-r', '--run', action='store_true', default=False,
|
||||
help='Run the model once after building it')
|
||||
parser.add_argument('--shutdown', action='store_true', default=False,
|
||||
help='Set reactor to be in shutdown, all control rods fully inserted.')
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
os.mkdir(os.path.dirname(os.path.realpath(__file__)) + '/build')
|
||||
except OSError: pass
|
||||
|
|
@ -30,34 +47,19 @@ def no_overwrite(filename):
|
|||
print(f"Backed up file {filename} to {new_filepath}")
|
||||
os.replace(filename, new_filepath)
|
||||
|
||||
usage = """usage: %prog [options]"""
|
||||
p = OptionParser(usage=usage)
|
||||
p.add_option('-d', '--2d', action='store_true', dest='is_2d',
|
||||
default=False, help='Create 2D BEAVRS input files,' \
|
||||
+ ' 3D by default')
|
||||
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')
|
||||
p.add_option('-i', '--insert', action='store', type='int', dest='S', default=200,
|
||||
help='Set where the control rods should be. Acceptable values are 15-574')
|
||||
p.add_option('-o', '--optimal', action='store_true', default=False,
|
||||
help='Find the best combination of particles, inactive and active batches to run')
|
||||
p.add_option('-r', '--run', action='store_true', default=False,
|
||||
help='Run the model once after building it')
|
||||
(options, args) = p.parse_args()
|
||||
def run_loop(val):
|
||||
b.set_S(val)
|
||||
return b.export_model()
|
||||
|
||||
if not len(args) == 0:
|
||||
p.print_help()
|
||||
|
||||
b = BEAVRS(25, 0, is_symmetric=options.is_symmetric, is_2d=options.is_2d)
|
||||
# b.export_xml()
|
||||
if args.shutdown:
|
||||
b = BEAVRS(573, 228, is_symmetric=args.is_symmetric, is_2d=args.is_2d)
|
||||
else:
|
||||
b = BEAVRS(args.rod_loc, 0, is_symmetric=args.is_symmetric, is_2d=args.is_2d)
|
||||
|
||||
# openmc.calculate_volumes()
|
||||
# openmc.plot_geometry()
|
||||
|
||||
if options.optimal:
|
||||
if args.optimal:
|
||||
|
||||
particles = [5000, 10000, 20000, 50000, 100000]
|
||||
inactive = [10, 20, 50, 100, 150]
|
||||
|
|
@ -77,10 +79,15 @@ if options.optimal:
|
|||
# Depletion Settings
|
||||
###############################################################################
|
||||
|
||||
elif options.run_deplete:
|
||||
elif args.run_deplete:
|
||||
b.set_params(batches=350,inactive=50,particles=20000)
|
||||
b.set_full_depletion_mats()
|
||||
# b.set_fuel_otf_files()
|
||||
# b.set_distributed_materials()
|
||||
# b.set_fuel_distrib_tallies()
|
||||
# b.set_fuel_depletion_tallies()
|
||||
|
||||
# Get fission Q values from JSON file generated by get_fission_qvals.py
|
||||
## Get fission Q values from JSON file generated by get_fission_qvals.py
|
||||
with open('../beavrs/serpent_fissq.json', 'r') as f:
|
||||
serpent_fission_q = json.load(f)
|
||||
|
||||
|
|
@ -96,29 +103,29 @@ elif options.run_deplete:
|
|||
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]"""
|
||||
|
||||
## cumulative steps in days
|
||||
time_steps_cum = np.array([3/24, 6/24, 9/24, 12/24, 15/24, 18/24, 21/24, 1, 10, 30, 60, 90, 365, 548])
|
||||
# time_steps_cum = np.array([3/24, 6/24, 9/24, 12/24, 15/24, 18/24, 21/24, 1, 10, 30, 60, 90, 365, 548])
|
||||
# i = 298 300 300 300 300 300 300 300 300 300 300 300 300 300
|
||||
time_steps_cum = np.array([12/24, 24/24, 36/24, 48/24, 60/24, 72/24, 84/24, 4, 10, 30, 60, 90, 365, 548])
|
||||
time_steps = np.diff(time_steps_cum, prepend=0.0)
|
||||
|
||||
|
||||
## Power in Watts
|
||||
full_power = 3411e6
|
||||
powers = [full_power if x > 1 else full_power*x for x in time_steps_cum]
|
||||
|
||||
time_step = 10
|
||||
power = int(3.411e9)
|
||||
powers = [full_power if x > 4 else full_power*x/4 for x in time_steps_cum]
|
||||
|
||||
## setting the transport operator
|
||||
model = b.export_model()
|
||||
openmc.plot_geometry()
|
||||
operator = openmc.deplete.CoupledOperator(model, chain_file,
|
||||
#diff_burnable_mats=False, normalization_mode='fission-q',
|
||||
fission_q=serpent_fission_q,
|
||||
fission_yield_mode="average")
|
||||
fission_q=serpent_fission_q, fission_yield_mode="average")
|
||||
|
||||
## depleting using a first-order predictor algorithm
|
||||
integrator = openmc.deplete.PredictorIntegrator(operator, [time_step], [power], timestep_units='d')
|
||||
## Working algorithms: CELI, CECM, SILEQI
|
||||
integrator = openmc.deplete.SILEQIIntegrator(operator, time_steps, powers, timestep_units='d')
|
||||
integrator.integrate()
|
||||
|
||||
openmc.deplete.Results('depletion_results.h5').export_to_materials(len(time_steps))
|
||||
model.materials = openmc.deplete.Results('depletion_results.h5').export_to_materials(1)
|
||||
model.export_to_xml()
|
||||
|
||||
"""
|
||||
print(time_steps)
|
||||
|
|
@ -155,19 +162,18 @@ elif options.run_deplete:
|
|||
model.materials = results.export_to_materials(len(time_steps))
|
||||
"""
|
||||
|
||||
elif options.run:
|
||||
elif args.run:
|
||||
b.set_params(batches=350,inactive=50,particles=20000)
|
||||
# b.set_S(20)
|
||||
|
||||
"""rod_loc, guess_list, result = openmc.search_for_keff(run_loop, initial_guess=10, target=1.0,
|
||||
tol=6e-4, print_iterations=True)"""
|
||||
|
||||
|
||||
"""openmc.search_for_keff(b.set_S,initial_guess=15,target=1.0,bracket=[15,574],tol=6e-4,
|
||||
bracketed_method='ridder',print_iterations=True,model_args={'particles': 20000,
|
||||
'inactive': 50,'batches': 350})"""
|
||||
|
||||
b.export_xml(as_model=True)
|
||||
b.export_xml()
|
||||
openmc.run()
|
||||
|
||||
else:
|
||||
b.set_params(batches=350,inactive=50,particles=20000)
|
||||
b.export_xml()
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue