From 10e03771693c4a519b80a7f8bbdf7edb17f855ea Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Mon, 1 Jul 2019 19:49:30 -0600 Subject: [PATCH 01/12] Adding the ability to loop over and adjust the assembly or core details. --- fridge/Assembly/Assembly.py | 6 ++++++ fridge/Assembly/FuelAssembly.py | 4 ++++ fridge/Assembly/SmearAssembly.py | 4 ++++ fridge/driver/fridge_driver.py | 4 ++-- fridge/driver/global_variables.py | 12 +++++++++++- fridge/driver/reactorMaker.py | 4 ++++ 6 files changed, 31 insertions(+), 3 deletions(-) diff --git a/fridge/Assembly/Assembly.py b/fridge/Assembly/Assembly.py index 78a9701..858acf7 100644 --- a/fridge/Assembly/Assembly.py +++ b/fridge/Assembly/Assembly.py @@ -67,6 +67,12 @@ def update_global_identifiers(self, universe_test): if universe_test: self.universe += 1 + def update_perturbations(self): + """Update the variables for any perturbations in the input file""" + for a, perts in self.globalVars.assembly_perturbations.items(): + if a == self.assembly_file_name: + for k, v in perts.items(): + self.__setattr__(k, v) def read_assembly_type(assembly_file_name): """Reads in the assembly type to determine what type of assembly to build and return it.""" diff --git a/fridge/Assembly/FuelAssembly.py b/fridge/Assembly/FuelAssembly.py index 81f0021..9eebd7d 100644 --- a/fridge/Assembly/FuelAssembly.py +++ b/fridge/Assembly/FuelAssembly.py @@ -82,6 +82,10 @@ def get_fuel_assembly_data(self): self.read_plenum_region_data(self.inputs) self.read_reflector_region_data(self.inputs) + # Update for perturbations + if bool(self.globalVars.assembly_perturbations): + self.update_perturbations() + def build_fuel_assembly(self): """Create the cell, surface, and material cards for the fuel assembly.""" self.fuel_height_with_bond = self.fuelHeight + self.bondAboveFuel diff --git a/fridge/Assembly/SmearAssembly.py b/fridge/Assembly/SmearAssembly.py index d3c4c90..ab459af 100644 --- a/fridge/Assembly/SmearAssembly.py +++ b/fridge/Assembly/SmearAssembly.py @@ -41,6 +41,10 @@ def get_smear_assembly_data(self): self.smearMaterial = self.inputs['Smear Materials'] self.smearRegionHeight = self.inputs['Smear Height'] + # Update for perturbations + if bool(self.globalVars.assembly_perturbations): + self.update_perturbations() + def build_smear_assembly(self): """Build the cell, surface, and material cards for the smear assembly.""" self.assemblyUniverse = self.universe diff --git a/fridge/driver/fridge_driver.py b/fridge/driver/fridge_driver.py index f23d2a5..b1b7c08 100644 --- a/fridge/driver/fridge_driver.py +++ b/fridge/driver/fridge_driver.py @@ -11,10 +11,10 @@ # TODO utilize an avogadro's number from somewhere -def main(file_name): +def main(file_name, **kwargs): print('Welcome to FRIDGe, the Fast Reactor Input Deck Generator!') global_vars = gb.GlobalVariables() - global_vars.read_input_file(file_name) + global_vars.read_input_file(file_name, kwargs) print(global_vars.input_type) if global_vars.input_type == 'Single': print('Creating assembly: {}... Please Wait'.format(global_vars.file_name)) diff --git a/fridge/driver/global_variables.py b/fridge/driver/global_variables.py index 3304bb6..5f9581c 100644 --- a/fridge/driver/global_variables.py +++ b/fridge/driver/global_variables.py @@ -27,10 +27,11 @@ def __init__(self): self.number_particles_generation = 0 self.kopts = False self.ksens = False + self.assembly_perturbations = {} self.output_name = '' self.input_type = '' - def read_input_file(self, assembly_name): + def read_input_file(self, assembly_name, kwargs): """Reads the yaml file for a FRIDGE input file and assigns any variables found.""" self.assembly_file_name = assembly_name @@ -69,6 +70,12 @@ def read_input_file(self, assembly_name): if 'ksens' in inputs else False self.void_per = float(inputs["Void Percent"]) \ if "Void Percent" in inputs else 1.0 + self.assembly_perturbations = inputs["Assembly Perturbations"] \ + if "Assembly Perturbations" in inputs else {} + + # Update for perturbations + for k, v in kwargs.items(): + self.__setattr__(k, v) # Set the XC set depending on the temperature if self.temperature == 600: @@ -93,6 +100,9 @@ def read_input_file(self, assembly_name): elif self.xc_library == 'JEFF3.1': self.xc_set = '.39c' + + + def update_numbering(self): self.universe += 20 self.cellNumber += 20 diff --git a/fridge/driver/reactorMaker.py b/fridge/driver/reactorMaker.py index 4584eb0..75ad165 100644 --- a/fridge/driver/reactorMaker.py +++ b/fridge/driver/reactorMaker.py @@ -38,5 +38,9 @@ def core_maker(global_vars): print('Building reactor core and coolant.') core.build_core(global_vars) print('Creating MCNP input file.') + for a, perts in global_vars.assembly_perturbations.items(): + print('Perturbations For Assembly {}'.format(a)) + for k, v in perts.items(): + print(' {}: {}'.format(k, v)) k_card = mcnpCF.make_mcnp_problem(global_vars, core=core) mcnpCF.mcnp_input_deck_maker_core(core, k_card, global_vars) From 62c9c69f5ee0e60273f604b6a63f1d6e70ee7382 Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Sat, 13 Jul 2019 18:35:32 -0600 Subject: [PATCH 02/12] Added a few scripts to create a database and read MCNP outputfile --- fridge/database.py | 21 ++++++ fridge/mcnp_output_scraper.py | 123 ++++++++++++++++++++++++++++++++++ fridge/wrapper.py | 23 +++++++ 3 files changed, 167 insertions(+) create mode 100644 fridge/database.py create mode 100644 fridge/mcnp_output_scraper.py create mode 100644 fridge/wrapper.py diff --git a/fridge/database.py b/fridge/database.py new file mode 100644 index 0000000..e7546d3 --- /dev/null +++ b/fridge/database.py @@ -0,0 +1,21 @@ +import h5py +import os +import glob +import numpy +import fridge.mcnp_output_scraper as scraper + + +def create_hdf5_database(database_name, dir=os.getcwd()): + f = h5py.File(database_name + '.h5', 'w') + for root, dirs, files in os.walk(dir): + print(root) + for file in files: + if '.out' in file: + try: + scraper.translate_output(root, f, file) + except ValueError: + print("Entry for {} already entered, skipping {} from directory {}.".format(file, file, root)) + for k in f.keys(): + print(k) + +create_hdf5_database('test_db', dir=r'C:\Users\ryanstwrt\Documents\OSU\Sodium_Fast_Reactor\PHYSOR2020\Results_Raw') \ No newline at end of file diff --git a/fridge/mcnp_output_scraper.py b/fridge/mcnp_output_scraper.py new file mode 100644 index 0000000..5ba443b --- /dev/null +++ b/fridge/mcnp_output_scraper.py @@ -0,0 +1,123 @@ +import re +import h5py +import numpy as np + + +def translate_output(directory, hdf_file, reactor_file): + # Parse output Name + file_name = reactor_file + reactor_type = reactor_file[:-4] + + #Check to see if this is base model, or perturbed model + if reactor_type[-4:] == '600K': + try: + hdf_file[reactor_type[:-5]].create_group(reactor_type) + except KeyError: + hdf_file.create_group(reactor_type[-5:]) + hdf_file[reactor_type[:-5]].create_group(reactor_type) + elif reactor_type[-4:] in ['void', 'Void']: + try: + hdf_file[reactor_type[:-5]].create_group(reactor_type) + except KeyError: + hdf_file.create_group(reactor_type[-5:]) + hdf_file[reactor_type[:-5]].create_group(reactor_type) + else: + try: + hdf_file[reactor_type].create_group(reactor_type) + except KeyError: + hdf_file.create_group(reactor_type) + hdf_file[reactor_type].create_group(reactor_type) + + try: + base_reactor = hdf_file[reactor_type] + except KeyError: + base_reactor = hdf_file[reactor_type[:-5]] + + reactor = base_reactor[reactor_type] + name_list = file_name.split('_') + name_list.pop(0) + name_list[-1] = name_list[-1].split('.')[0] + + condition = '900K' + enrichment = '15Pu12U10Zr' + + for parameter in name_list: + if parameter[0] == 'F': + fuel_smear = float(parameter[2:]) + elif parameter[0] == 'H': + fuel_height = float(parameter[1:]) + elif 'U' in parameter: + enrichment = parameter + else: + condition = parameter + + init_attr = {'smear': fuel_smear, 'height': fuel_height, 'enrichment': np.string_(enrichment), 'condition': np.string_(condition)} + + for k, v in init_attr.items(): + reactor.attrs.create(k, v) + + reactor.attrs['condition'] = condition + attributes = {} + # Read the file and extract the information + file_path = directory +'\\' + file_name + + with open(file_path, 'rt') as file: + for line in file: + #add keff and uncertainty + if line[0:16] == ' | the final est': + val = re.findall(r'\d.\d\d\d\d\d', line) + attributes['keff'] = float(val[0]) + attributes['keff_unc'] = float(val[1]) + #add thermal, epithermal, and fast fractions + elif line[0:22] == ' | (<0.625 ev)': + val = re.findall(r'[\s\d]\d.\d\d', line) + attributes['thermal_fraction'] = float(val[0]) + attributes['epithermal_fraction'] = float(val[1]) + attributes['fast_fraction'] = float(val[2]) + #add average number of neutrons gen per fission + elif line[0:21] == ' | the average number': + val = re.findall(r'\d.\d\d\d', line) + attributes['nu-bar'] = float(val[0]) + # add escape, capture, and fission fractions + elif line[0:20] == ' fraction': + val = re.findall(r'\d.\d\d\d\d\dE-\d\d', line) + attributes['escape_fraction'] = float(val[0]) + attributes['capture_fraction'] = float(val[1]) + attributes['fission_fraction'] = float(val[2]) + #add generation time and uncertainty + elif line[0:20] == ' gen. time': + # Excessively large generation times will be in micro-seconds not nano-seconds + # Grab nano-second values + try: + val = re.findall(r'[\s\d]\d\d.\d\d\d\d\d', line) + attributes['gen_time'] = float(val[0]) + val = re.findall(r'[\s\d]\d.\d\d\d\d\d', line) + attributes['gen_time_unc'] = float(val[0]) + # Grab mico-second values and convert to nano-seconds + except IndexError: + val = re.findall(r'[\s\d]\d.\d\d\d\d\d', line) + attributes['gen_time'] = float(val[0])*1000 + val = re.findall(r'[\s\d]\d.\d\d\d\d\d', line) + attributes['gen_time_unc'] = float(val[0])*1000 + #add rossi-alpha and uncertainty + elif line[0:20] == ' rossi-alpha': + # Excessively large alpha-rossi values will be in micro-seconds not nano-seconds + # Grab nano-second values + if line[-8:-1] == '(/usec)': + val = re.findall(r'[-\s]\d.\d\d\d\d\dE-\d\d', line) + attributes['rossi_alpha'] = float(val[0])*1000 + attributes['rossi_alpha_unc'] = float(val[1])*1000 + else: + val = re.findall(r'[-\s]\d.\d\d\d\d\dE-\d\d', line) + attributes['rossi_alpha'] = float(val[0]) + attributes['rossi_alpha_unc'] = float(val[1]) + + #add beta-eff and uncertainty + elif line[0:20] == ' beta-eff': + val = re.findall(r'\d.\d\d\d\d\d', line) + attributes['beta'] = float(val[0]) + attributes['beta_unc'] = float(val[1]) + for k, v in attributes.items(): + reactor.attrs.create(k, v) + +#translate_output('FC_FS76_H65.out', 'blank') \ No newline at end of file diff --git a/fridge/wrapper.py b/fridge/wrapper.py new file mode 100644 index 0000000..83ea8bb --- /dev/null +++ b/fridge/wrapper.py @@ -0,0 +1,23 @@ +import fridge.driver.fridge_driver as fd +core_list = ['FullCore_FS65_H50', 'FullCore_FS65_H55', 'FullCore_FS65_H60', 'FullCore_FS65_H65', 'FullCore_FS65_H70', + 'FullCore_FS65_H75', 'FullCore_FS65_H80', ] + +for core in core_list: + print('Core:' + core) + core_type = core[9:] + assem = 'A271_' + core_type + fuel = '11Pu9U10Zr' + file = 'FC_' + core_type + '_' + fuel + fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, output_name=file) + file='FC_' + core_type + '_' + fuel + '_600K' + fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, temperature=600, output_name=file) + file='FC_' + core_type + '_' + fuel + '_Void' + fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, void_per=0.001, output_name=file) + fuel = '13Pu10U10Zr' + print('Core: ' + core + ' ' + fuel) + file = 'FC_' + core_type + '_' + fuel + fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, output_name=file) + file='FC_' + core_type + '_' + fuel + '_600K' + fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, temperature=600, output_name=file) + file='FC_' + core_type + '_' + fuel + '_Void' + fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, void_per=0.001, output_name=file) From 56ee068016162257e2c010e9adbaa704bfac1264 Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Sat, 13 Jul 2019 18:48:55 -0600 Subject: [PATCH 03/12] updated scripts --- fridge/database.py | 1 - fridge/mcnp_output_scraper.py | 40 ++++++++++++++++------------------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/fridge/database.py b/fridge/database.py index e7546d3..7b234d7 100644 --- a/fridge/database.py +++ b/fridge/database.py @@ -8,7 +8,6 @@ def create_hdf5_database(database_name, dir=os.getcwd()): f = h5py.File(database_name + '.h5', 'w') for root, dirs, files in os.walk(dir): - print(root) for file in files: if '.out' in file: try: diff --git a/fridge/mcnp_output_scraper.py b/fridge/mcnp_output_scraper.py index 5ba443b..0f688d4 100644 --- a/fridge/mcnp_output_scraper.py +++ b/fridge/mcnp_output_scraper.py @@ -8,31 +8,16 @@ def translate_output(directory, hdf_file, reactor_file): file_name = reactor_file reactor_type = reactor_file[:-4] - #Check to see if this is base model, or perturbed model + # Check to see if this is base model, or perturbed model + # This will also create the HDF group for the base model if reactor_type[-4:] == '600K': - try: - hdf_file[reactor_type[:-5]].create_group(reactor_type) - except KeyError: - hdf_file.create_group(reactor_type[-5:]) - hdf_file[reactor_type[:-5]].create_group(reactor_type) + base_reactor = create_hdf_group(hdf_file, reactor_type, reactor_type[:-5]) elif reactor_type[-4:] in ['void', 'Void']: - try: - hdf_file[reactor_type[:-5]].create_group(reactor_type) - except KeyError: - hdf_file.create_group(reactor_type[-5:]) - hdf_file[reactor_type[:-5]].create_group(reactor_type) + base_reactor = create_hdf_group(hdf_file, reactor_type, reactor_type[:-5]) else: - try: - hdf_file[reactor_type].create_group(reactor_type) - except KeyError: - hdf_file.create_group(reactor_type) - hdf_file[reactor_type].create_group(reactor_type) - - try: - base_reactor = hdf_file[reactor_type] - except KeyError: - base_reactor = hdf_file[reactor_type[:-5]] + base_reactor = create_hdf_group(hdf_file, reactor_type, reactor_type) + #Prep the output file name for parsing and assigning reactor = base_reactor[reactor_type] name_list = file_name.split('_') name_list.pop(0) @@ -42,12 +27,16 @@ def translate_output(directory, hdf_file, reactor_file): enrichment = '15Pu12U10Zr' for parameter in name_list: + # Find the fuel smear designated FSxx if parameter[0] == 'F': fuel_smear = float(parameter[2:]) + # Find the fuel height designate Hxx elif parameter[0] == 'H': fuel_height = float(parameter[1:]) + # Find the enrichment types designated xxUxxPu or xxPuxxU elif 'U' in parameter: enrichment = parameter + # Find the condition of the reactor either 600K or void else: condition = parameter @@ -111,7 +100,6 @@ def translate_output(directory, hdf_file, reactor_file): val = re.findall(r'[-\s]\d.\d\d\d\d\dE-\d\d', line) attributes['rossi_alpha'] = float(val[0]) attributes['rossi_alpha_unc'] = float(val[1]) - #add beta-eff and uncertainty elif line[0:20] == ' beta-eff': val = re.findall(r'\d.\d\d\d\d\d', line) @@ -120,4 +108,12 @@ def translate_output(directory, hdf_file, reactor_file): for k, v in attributes.items(): reactor.attrs.create(k, v) +def create_hdf_group(hdf_file, specific, general): + try: + hdf_file[general].create_group(specific) + except KeyError: + hdf_file.create_group(general) + hdf_file[general].create_group(specific) + return hdf_file[general] + #translate_output('FC_FS76_H65.out', 'blank') \ No newline at end of file From 6a631ffaaec7d7a69690736b598ea2e2091f5d93 Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Sat, 3 Aug 2019 06:27:35 -0600 Subject: [PATCH 04/12] Updated parameter passing functionality for perturbations. --- fridge/database.py | 30 +++++++++++++++++ fridge/driver/fridge_driver.py | 2 +- fridge/driver/global_variables.py | 14 ++++---- fridge/mcnp_output_scraper.py | 52 +++++++++++++----------------- fridge/test_suite/assembly_test.py | 1 - 5 files changed, 59 insertions(+), 40 deletions(-) diff --git a/fridge/database.py b/fridge/database.py index 7b234d7..76647c3 100644 --- a/fridge/database.py +++ b/fridge/database.py @@ -7,6 +7,7 @@ def create_hdf5_database(database_name, dir=os.getcwd()): f = h5py.File(database_name + '.h5', 'w') + # create the initial database with raw values for root, dirs, files in os.walk(dir): for file in files: if '.out' in file: @@ -14,7 +15,36 @@ def create_hdf5_database(database_name, dir=os.getcwd()): scraper.translate_output(root, f, file) except ValueError: print("Entry for {} already entered, skipping {} from directory {}.".format(file, file, root)) + + #set the attributes for the reactor type + for k in f.keys(): + reactor = f[k] + for k1 in reactor.keys(): + raw_reactor = reactor[k1] + condition = raw_reactor.attrs['condition'] + if condition == b'900K': + for attr, val in raw_reactor.attrs.items(): + reactor.attrs.create(attr, val) + elif condition == b'600K': + doppler_keff = raw_reactor.attrs['keff'][0] + doppler_keff_unc = raw_reactor.attrs['keff'][1] + doppler_temp = raw_reactor.attrs['temperature'] + else: + void_keff = raw_reactor.attrs['keff'][0] + void_keff_unc = raw_reactor.attrs['keff'][1] + + reactor_keff = reactor.attrs['keff'][0] + temp_dif = doppler_temp - reactor.attrs['temperature'] + reactor.attrs['doppler_coeff'] = (doppler_keff - reactor_keff) / (reactor_keff * doppler_keff * temp_dif) * pow(10, 5) + reactor.attrs['void_coeff'] = (void_keff - reactor_keff) / (reactor_keff * void_keff * 99.9) * pow(10, 5) + + for k in f.keys(): + reactor = f[k] + print() print(k) + for k1,v1 in reactor.attrs.items(): + print(k1,v1) + create_hdf5_database('test_db', dir=r'C:\Users\ryanstwrt\Documents\OSU\Sodium_Fast_Reactor\PHYSOR2020\Results_Raw') \ No newline at end of file diff --git a/fridge/driver/fridge_driver.py b/fridge/driver/fridge_driver.py index b1b7c08..019c886 100644 --- a/fridge/driver/fridge_driver.py +++ b/fridge/driver/fridge_driver.py @@ -14,7 +14,7 @@ def main(file_name, **kwargs): print('Welcome to FRIDGe, the Fast Reactor Input Deck Generator!') global_vars = gb.GlobalVariables() - global_vars.read_input_file(file_name, kwargs) + global_vars.read_input_file(file_name, **kwargs) print(global_vars.input_type) if global_vars.input_type == 'Single': print('Creating assembly: {}... Please Wait'.format(global_vars.file_name)) diff --git a/fridge/driver/global_variables.py b/fridge/driver/global_variables.py index 5f9581c..c284e6e 100644 --- a/fridge/driver/global_variables.py +++ b/fridge/driver/global_variables.py @@ -31,14 +31,15 @@ def __init__(self): self.output_name = '' self.input_type = '' - def read_input_file(self, assembly_name, kwargs): + def read_input_file(self, assembly_name, **perturbations): """Reads the yaml file for a FRIDGE input file and assigns any variables found.""" self.assembly_file_name = assembly_name - cur_dir = os.path.dirname(__file__) input_dir = os.path.join(cur_dir, "../fridge_input_file") - assembly_file = glob.glob(os.path.join(input_dir, self.assembly_file_name + '.yaml')) - + assembly_path = os.path.join(input_dir, self.assembly_file_name + '.yaml') + assembly_file = glob.glob(assembly_path) + print(assembly_name, assembly_file) + print(assembly_path) with open(assembly_file[0], "r") as file: inputs = yaml.safe_load(file) @@ -74,7 +75,7 @@ def read_input_file(self, assembly_name, kwargs): if "Assembly Perturbations" in inputs else {} # Update for perturbations - for k, v in kwargs.items(): + for k, v in perturbations.items(): self.__setattr__(k, v) # Set the XC set depending on the temperature @@ -100,9 +101,6 @@ def read_input_file(self, assembly_name, kwargs): elif self.xc_library == 'JEFF3.1': self.xc_set = '.39c' - - - def update_numbering(self): self.universe += 20 self.cellNumber += 20 diff --git a/fridge/mcnp_output_scraper.py b/fridge/mcnp_output_scraper.py index 0f688d4..0ac26e5 100644 --- a/fridge/mcnp_output_scraper.py +++ b/fridge/mcnp_output_scraper.py @@ -7,7 +7,6 @@ def translate_output(directory, hdf_file, reactor_file): # Parse output Name file_name = reactor_file reactor_type = reactor_file[:-4] - # Check to see if this is base model, or perturbed model # This will also create the HDF group for the base model if reactor_type[-4:] == '600K': @@ -25,6 +24,7 @@ def translate_output(directory, hdf_file, reactor_file): condition = '900K' enrichment = '15Pu12U10Zr' + temperature = 900 for parameter in name_list: # Find the fuel smear designated FSxx @@ -39,13 +39,16 @@ def translate_output(directory, hdf_file, reactor_file): # Find the condition of the reactor either 600K or void else: condition = parameter + if 'K' in condition: + temperature = float(condition[:-1]) + - init_attr = {'smear': fuel_smear, 'height': fuel_height, 'enrichment': np.string_(enrichment), 'condition': np.string_(condition)} + init_attr = {'smear': fuel_smear, 'height': fuel_height, 'enrichment': np.string_(enrichment), + 'condition': np.string_(condition), 'temperature': temperature} for k, v in init_attr.items(): reactor.attrs.create(k, v) - reactor.attrs['condition'] = condition attributes = {} # Read the file and extract the information file_path = directory +'\\' + file_name @@ -55,8 +58,7 @@ def translate_output(directory, hdf_file, reactor_file): #add keff and uncertainty if line[0:16] == ' | the final est': val = re.findall(r'\d.\d\d\d\d\d', line) - attributes['keff'] = float(val[0]) - attributes['keff_unc'] = float(val[1]) + attributes['keff'] = [float(val[0]), float(val[1])] #add thermal, epithermal, and fast fractions elif line[0:22] == ' | (<0.625 ev)': val = re.findall(r'[\s\d]\d.\d\d', line) @@ -69,42 +71,32 @@ def translate_output(directory, hdf_file, reactor_file): attributes['nu-bar'] = float(val[0]) # add escape, capture, and fission fractions elif line[0:20] == ' fraction': - val = re.findall(r'\d.\d\d\d\d\dE-\d\d', line) - attributes['escape_fraction'] = float(val[0]) - attributes['capture_fraction'] = float(val[1]) - attributes['fission_fraction'] = float(val[2]) + val = line.split(' ') + attributes['escape_fraction'] = float(val[4]) + attributes['capture_fraction'] = float(val[5]) + attributes['fission_fraction'] = float(val[6]) #add generation time and uncertainty elif line[0:20] == ' gen. time': # Excessively large generation times will be in micro-seconds not nano-seconds # Grab nano-second values - try: - val = re.findall(r'[\s\d]\d\d.\d\d\d\d\d', line) - attributes['gen_time'] = float(val[0]) - val = re.findall(r'[\s\d]\d.\d\d\d\d\d', line) - attributes['gen_time_unc'] = float(val[0]) - # Grab mico-second values and convert to nano-seconds - except IndexError: - val = re.findall(r'[\s\d]\d.\d\d\d\d\d', line) - attributes['gen_time'] = float(val[0])*1000 - val = re.findall(r'[\s\d]\d.\d\d\d\d\d', line) - attributes['gen_time_unc'] = float(val[0])*1000 + val = line.split(' ') + if 'usec' in val[-1]: + attributes['gen_time'] = [float(val[-4])*1000, float(val[-2])*1000] + else: + attributes['gen_time'] = [float(val[-4]), float(val[-2])] #add rossi-alpha and uncertainty elif line[0:20] == ' rossi-alpha': # Excessively large alpha-rossi values will be in micro-seconds not nano-seconds # Grab nano-second values - if line[-8:-1] == '(/usec)': - val = re.findall(r'[-\s]\d.\d\d\d\d\dE-\d\d', line) - attributes['rossi_alpha'] = float(val[0])*1000 - attributes['rossi_alpha_unc'] = float(val[1])*1000 + val = line.split(' ') + if 'usec' in val[-1]: + attributes['gen_time'] = [float(val[-3])/1000, float(val[-2])/1000] else: - val = re.findall(r'[-\s]\d.\d\d\d\d\dE-\d\d', line) - attributes['rossi_alpha'] = float(val[0]) - attributes['rossi_alpha_unc'] = float(val[1]) + attributes['gen_time'] = [float(val[-3]), float(val[-2])] #add beta-eff and uncertainty elif line[0:20] == ' beta-eff': - val = re.findall(r'\d.\d\d\d\d\d', line) - attributes['beta'] = float(val[0]) - attributes['beta_unc'] = float(val[1]) + val = line.split(' ') + attributes['beta'] = [float(val[-2]), float(val[-1])] for k, v in attributes.items(): reactor.attrs.create(k, v) diff --git a/fridge/test_suite/assembly_test.py b/fridge/test_suite/assembly_test.py index d073638..e19d054 100644 --- a/fridge/test_suite/assembly_test.py +++ b/fridge/test_suite/assembly_test.py @@ -8,7 +8,6 @@ global_vars.read_input_file('A271_Assembly_Test') assembly_info = [global_vars.file_name, '01A01', global_vars, None] - def test_assembly(): """Check the base assembly init""" baseAssembly = Assembly.Assembly(assembly_info) From d2b2acaaabea8716097aba271669045decc448fe Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Sat, 3 Aug 2019 09:06:31 -0600 Subject: [PATCH 05/12] Added ability to create a material with atom densities. --- fridge/Material/Material.py | 30 +++++++++++++++---- fridge/data/materials/FFTF_B4C.yaml | 6 ++++ fridge/data/materials/FFTF_IF.yaml | 10 +++++++ fridge/data/materials/FFTF_IP.yaml | 9 ++++++ fridge/data/materials/FFTF_Inconel600.yaml | 7 +++++ fridge/data/materials/FFTF_LiquidNa.yaml | 7 +++++ .../materials/FFTF_LowerAxialShieldMat.yaml | 7 +++++ fridge/data/materials/FFTF_OF.yaml | 15 ++++++++++ fridge/data/materials/FFTF_PlenumMat.yaml | 7 +++++ fridge/data/materials/FFTF_ReflectorMat7.yaml | 7 +++++ fridge/data/materials/FFTF_SS316.yaml | 7 +++++ fridge/test_suite/material_test.py | 23 ++++++++++++++ 12 files changed, 129 insertions(+), 6 deletions(-) create mode 100644 fridge/data/materials/FFTF_B4C.yaml create mode 100644 fridge/data/materials/FFTF_IF.yaml create mode 100644 fridge/data/materials/FFTF_IP.yaml create mode 100644 fridge/data/materials/FFTF_Inconel600.yaml create mode 100644 fridge/data/materials/FFTF_LiquidNa.yaml create mode 100644 fridge/data/materials/FFTF_LowerAxialShieldMat.yaml create mode 100644 fridge/data/materials/FFTF_OF.yaml create mode 100644 fridge/data/materials/FFTF_PlenumMat.yaml create mode 100644 fridge/data/materials/FFTF_ReflectorMat7.yaml create mode 100644 fridge/data/materials/FFTF_SS316.yaml diff --git a/fridge/Material/Material.py b/fridge/Material/Material.py index dc33d1d..11b3264 100644 --- a/fridge/Material/Material.py +++ b/fridge/Material/Material.py @@ -30,6 +30,7 @@ def __init__(self): self.enrichmentZaids = [] self.enrichmentIsotopes = [] self.enrichmentVector = [] + self.isotopicAtomPercents = [] def set_material(self, material): self.name = material @@ -49,6 +50,7 @@ def read_material_data(self, material): self.enrichmentZaids = inputs['Elemental Adjustment ZAIDs'] if 'Elemental Adjustment ZAIDs' in inputs else [] self.enrichmentIsotopes = inputs['Isotopic Adjustment ZAIDs'] if 'Isotopic Adjustment ZAIDs' in inputs else [] self.enrichmentVector = inputs['Isotopic Weight Percents'] if 'Isotopic Weight Percents' in inputs else [] + self.isotopicAtomPercents = inputs['Isotopic Atom Percents'] if 'Isotopic Atom Percents' in inputs else [] self.density = inputs['Density'] self.linearCoeffExpansion = inputs['Linear Coefficient of Expansion'] @@ -61,9 +63,14 @@ def create_material_data(self): self.enrichmentDict[zaid] = enriched_isotope_dict for num, element in enumerate(self.elements): self.elementDict[self.zaids[num]] = Element.Element(element) - self.set_elemental_enrichment() - self.set_weight_percent() - self.atomDensity, self.atomPercent = set_atom_percent(self.weightPercent, self.density, + + if self.isotopicAtomPercents: + self.atomDensity = self.density + self.set_atom_fractions() + else: + self.set_elemental_enrichment() + self.set_weight_percent() + self.atomDensity, self.atomPercent = set_atom_percent(self.weightPercent, self.density, self.elementDict) def set_elemental_enrichment(self): @@ -88,8 +95,19 @@ def set_weight_percent(self, void_percent=1.0): def set_void(self, void_percent): """Adjust the atom density/atom percent of a material to account for voiding.""" self.set_weight_percent(void_percent) - self.atomDensity, self.atomPercent = set_atom_percent(self.weightPercent, self.density, - self.elementDict) + self.atomDensity, self.atomPercent = set_atom_percent(self.weightPercent, self.density, self.elementDict) + + def set_atom_fractions(self, void_percent=1.0): + """Calculates the weight percent of a material.""" + for zaidNum, zaid in enumerate(self.zaids): + for isotope, isotopeFraction in self.elementDict[zaid].atomPercentDict.items(): + if zaid in self.isotopicAtomPercents: + self.atomPercent[isotope] = self.elementDict[zaid].weightPercentDict[isotope] * \ + self.isotopicAtomPercents[zaid] * void_percent + elif isotope in self.isotopicAtomPercents: + self.atomPercent[isotope] = self.isotopicAtomPercents[isotope] * void_percent + print(sum(self.atomPercent.values()), self.density) + assert np.allclose(sum(self.atomPercent.values()), self.density, 3) def set_atom_percent(weight_percents, density, element_dict): @@ -102,7 +120,7 @@ def set_atom_percent(weight_percents, density, element_dict): current_element = int(element[:1] + '000') else: current_element = int(element[:2] + '000') - atom_densities[zaid] = weight*density * AVOGADROS_NUMBER / element_dict[current_element].molecularMassDict[zaid] + atom_densities[zaid] = weight*density*AVOGADROS_NUMBER / element_dict[current_element].molecularMassDict[zaid] atom_density = sum(atom_densities.values()) for zaid, atomicDensity in atom_densities.items(): diff --git a/fridge/data/materials/FFTF_B4C.yaml b/fridge/data/materials/FFTF_B4C.yaml new file mode 100644 index 0000000..0b5950f --- /dev/null +++ b/fridge/data/materials/FFTF_B4C.yaml @@ -0,0 +1,6 @@ +Name: FFTF Stainless Steel 316 +Elements: [B, C] +Elemental ZAIDs: [5000, 6000] +IsIsotopic Atom Percents: {5010: 2.0297E-2, 5011: 8.1700E-2, 6000: 2.3699E-2} +Density: 1.2570E-1 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/data/materials/FFTF_IF.yaml b/fridge/data/materials/FFTF_IF.yaml new file mode 100644 index 0000000..6d748f9 --- /dev/null +++ b/fridge/data/materials/FFTF_IF.yaml @@ -0,0 +1,10 @@ +Name: FFTF Inner Fuel +Elements: ['U', 'Np', 'Pu', 'Am', 'O'] +Elemental ZAIDs: [92000, 93000, 94000, 95000, 8000] +Isotopic Atom Percents: {92234: 9.9319E-7, 92235: 1.1417E-4, 92238: 1.5764E-2, + 93237: 1.6063E-5, + 94238: 3.1181E-6, 94239: 5.1998E-3, 94240: 7.0298E-4, 94241: 6.9284E-5, 94242: 1.2825E-5, + 95241: 1.1744E-5, + 8016: 4.2690E-2} +Density: 6.4584E-2 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/data/materials/FFTF_IP.yaml b/fridge/data/materials/FFTF_IP.yaml new file mode 100644 index 0000000..33663d9 --- /dev/null +++ b/fridge/data/materials/FFTF_IP.yaml @@ -0,0 +1,9 @@ +Name: FFTF_IP +Elements: ['U', 'O'] +Elemental ZAIDs: [92000, 8000] +Isotopic ZAIDs: [[92234, 92235, 92236, 92238], + [8016, 8017, 8018]] +Isotopic Atom Percents: [[1.2746E-6, 1.6686E-4, 0.0, 2.3007E-2], + [4.6351E-2]] +Density: 6.9526E-2 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/data/materials/FFTF_Inconel600.yaml b/fridge/data/materials/FFTF_Inconel600.yaml new file mode 100644 index 0000000..d3dd407 --- /dev/null +++ b/fridge/data/materials/FFTF_Inconel600.yaml @@ -0,0 +1,7 @@ +Name: FFTF Inconel 600 +Elements: [C, Si, S, Cr, Mn, Fe, Co, Ni, Cu] +Elemental ZAIDs: [6000, 14000, 16000, 24000, 25000, 26000, 27000, 28000, 29000] +Isotopic ZAIDs: [[6000], [14000], [16000], [24000], [25000], [26000], [27000], [28000], [29000]] +Isotopic Weight Percents: [[2.0908E-3], [4.4707E-4], [1.1747E-5], [1.4972E-2], [1.5998E-3], [7.1948E-3], [8.5222E-5], [6.3016E-2], [1.9759E-4]] +Density: 8.9615E-2 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/data/materials/FFTF_LiquidNa.yaml b/fridge/data/materials/FFTF_LiquidNa.yaml new file mode 100644 index 0000000..21b5cd2 --- /dev/null +++ b/fridge/data/materials/FFTF_LiquidNa.yaml @@ -0,0 +1,7 @@ +Name: FFTF Liquid Sodium +Elements: [Na] +Elemental ZAIDs: [11000] +Isotopic ZAIDs: [11000]] +Isotopic Weight Percents: [[2.3620E-2]] +Density: 3.3620E-2 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/data/materials/FFTF_LowerAxialShieldMat.yaml b/fridge/data/materials/FFTF_LowerAxialShieldMat.yaml new file mode 100644 index 0000000..7aa2138 --- /dev/null +++ b/fridge/data/materials/FFTF_LowerAxialShieldMat.yaml @@ -0,0 +1,7 @@ +Name: FFTF Stainless Steel 316 +Elements: [B, C, N, Na, Al, Si, P, S, V, Cr, Mn, Fe, Co, Ni, Cu, As, Nb, Mo, Ta] +Elemental ZAIDs: [5000, 6000, 7000, 11000, 13000, 14000, 15000, 16000, 23000, 24000, 25000, 26000, 27000, 28000, 29000, 33000, 41000, 42000, 73000] +Isotopic ZAIDs: [[5010, 5011], [6000], [7000], [11000], [13000], [14000], [15000], [16000], [23000], [24000], [25000], [26000], [27000], [28000], [29000], [33000], [41000], [42000], [73000]] +Isotopic Weight Percents: [[3.2491E-7, 1.3078E-6], [1.4696E-4], [1.2602E-5], [6.1160E-3], [3.2710E-5], [4.7136E-4], [1.11398E-5], [5.55048E-6], [6.9300E-5], [1.1882E-2], [1.1245E-3], [4.0495E-2], [1.4976E-5], [8.1199E-3], [2.7777E-5], [7.0679E-6], [9.4995E-6], [9.1991E-4], [9.7549E-7]] +Density: 6.9469E-2 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/data/materials/FFTF_OF.yaml b/fridge/data/materials/FFTF_OF.yaml new file mode 100644 index 0000000..2a2c8a4 --- /dev/null +++ b/fridge/data/materials/FFTF_OF.yaml @@ -0,0 +1,15 @@ +Name: FFTF_OF +Elements: ['U', 'Np', 'Pu', 'Am', 'O'] +Elemental ZAIDs: [92000, 93000, 94000, 95000, 8000] +Isotopic ZAIDs: [[92234, 92235, 92236, 92238], + [93273], + [94238, 94239, 94240, 94241, 94242], + [95241], + [8016, 8017, 8018]] +Isotopic Atom Percents: [[1.0327E-6, 1.2127E-4, 0.0, 1.6744E-2], + [1.3313E-5], + [2.6497E-6, 4.2072E-3, 5.6618E-4, 5.7297E-5, 9.2450E-6], + [1.4025E-5], + [4.3372E-2]] +Density: 6.5108E-2 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/data/materials/FFTF_PlenumMat.yaml b/fridge/data/materials/FFTF_PlenumMat.yaml new file mode 100644 index 0000000..bb83b33 --- /dev/null +++ b/fridge/data/materials/FFTF_PlenumMat.yaml @@ -0,0 +1,7 @@ +Name: FFTF Plenum Material +Elements: [B, C, N, Na, Al, Si, P, S, V, Cr, Mn, Fe, Co, Ni, Cu, As, Nb, Mo, Ta] +Elemental ZAIDs: [5000, 6000, 7000, 11000, 13000, 14000, 15000, 16000, 23000, 24000, 25000, 26000, 27000, 28000, 29000, 33000, 41000, 42000, 73000] +Isotopic ZAIDs: [[5010, 5011], [6000], [7000], [11000], [13000], [14000], [15000], [16000], [23000], [24000], [25000], [26000], [27000], [28000], [29000], [33000], [41000], [42000], [73000]] +Isotopic Weight Percents: [[1.2816E-7, 5.1585E-7], [5.7968E-5], [4.9707E-6], [9.6390E-3], [1.2902E-5], [1.8592E-4], [4.4957E-6], [2.1713E-6], [2.7335E-5], [4.6866E-3], [4.4356E-4], [1.5973E-2], [5.9070E-6], [3.2028E-3], [1.0956E-5], [2.7879E-6], [3.7470E-6], [3.6285E-4], [3.8477E-7]] +Density: 3.4628E-2 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/data/materials/FFTF_ReflectorMat7.yaml b/fridge/data/materials/FFTF_ReflectorMat7.yaml new file mode 100644 index 0000000..4717f2a --- /dev/null +++ b/fridge/data/materials/FFTF_ReflectorMat7.yaml @@ -0,0 +1,7 @@ +Name: FFTF Reflector Block Region +Elements: [B, C, N, Na, Al, Si, P, S, V, Cr, Mn, Fe, Co, Ni, Cu, As, Nb, Mo, Ta] +Elemental ZAIDs: [5000, 6000, 7000, 11000, 13000, 14000, 15000, 16000, 23000, 24000, 25000, 26000, 27000, 28000, 29000, 33000, 41000, 42000, 73000] +Isotopic ZAIDs: [[5010, 5011], [6000], [7000], [11000], [13000], [14000], [15000], [16000], [23000], [24000], [25000], [26000], [27000], [28000], [29000], [33000], [41000], [42000], [73000]] +Isotopic Weight Percents: [[9.6514E-8, 3.8848E-7], [1.3432E-3], [3.7434E-6], [3.4400E-3], [9.7165E-6], [4.1789E-4], [3.3856E-6], [8.9367E-6], [2.0586E-5], [1.2835E-2], [1.3248E-3], [1.6501E-2], [5.7417E-5], [4.1579E-2], [1.3106E-6], [2.0995E-6], [2.8218E-6], [2.7326E-4], [2.8977E-7]] +Density: 7.7958E-2 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/data/materials/FFTF_SS316.yaml b/fridge/data/materials/FFTF_SS316.yaml new file mode 100644 index 0000000..e4ddcab --- /dev/null +++ b/fridge/data/materials/FFTF_SS316.yaml @@ -0,0 +1,7 @@ +Name: FFTF Stainless Steel 316 +Elements: [B, C, N, Al, Si, P, S, V, Cr, Mn, Fe, Co, Ni, Cu, As, Nb, Mo, Ta] +Elemental ZAIDs: [5000, 6000, 7000, 13000, 14000, 15000, 16000, 23000, 24000, 25000, 26000, 27000, 28000, 29000, 33000, 41000, 42000, 73000] +Isotopic ZAIDs: [[5010, 5011], [6000], [7000], [13000], [14000], [15000], [16000], [23000], [24000], [25000], [26000], [27000], [28000], [29000], [33000], [41000], [42000], [73000]] +Isotopic Weight Percents: [[4.3730E-7, 1.7602E-6], [1.9780E-4], [1.6961E-5], [4.4025E-5], [6.3442E-4], [1.5340E-5], [7.4091E-6], [9.3272E-5], [1.5992E-2], [1.5135E-3], [5.4503E-2], [2.0156E-5], [1.0929E-2], [3.7386E-5], [9.5128E-6], [1.2786E-5], [1.2381E-3], [1.3129E-6]] +Density: 8.5268E-2 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/test_suite/material_test.py b/fridge/test_suite/material_test.py index 6977608..1188db3 100644 --- a/fridge/test_suite/material_test.py +++ b/fridge/test_suite/material_test.py @@ -224,6 +224,29 @@ def test_material_SS316(): assert np.allclose(m.atomPercent[k], v, 5) +def test_material_FFTF_IF(): + """ + Test material is the inner fuel from the FFTF Benchmark in the + International Handbook of Evaluated Reactor Experiments. + """ + m = materialReader.Material() + m.set_material('FFTF_IF') + assert m.name == 'FFTF Inner Fuel' + assert m.elements == ['U', 'Np', 'Pu', 'Am', 'O'] + assert m.zaids == [92000, 93000, 94000, 95000, 8000] + assert m.enrichmentZaids == [] + assert m.enrichmentIsotopes == [] + assert m.enrichmentVector == [] + assert m.density == 6.4584E-2 + assert np.allclose(m.atomDensity, 6.4584E-2, 5) + atomPercentKnown = {92234: 9.9319E-7, 92235: 1.1417E-4, 92238: 1.5764E-2, + 93237: 1.6063E-5, + 94238: 3.1181E-6, 94239: 5.1198E-3, 94240: 7.0298E-4, 94241: 6.9284E-5, 94242: 1.2825E-5, + 95241: 1.1744E-5, + 8016: 4.2690E-2} + for k, v in atomPercentKnown.items(): + assert np.allclose(m.atomPercent[k], v, 5) + def test_material_BadWtPer(): m = materialReader.Material() m.set_material('BadMaterial') From 5e53d93f91f6bdb5c55de312fbf1972674407f4e Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Sat, 3 Aug 2019 09:25:57 -0600 Subject: [PATCH 06/12] Updated testing for new atom density materials. --- fridge/Material/Material.py | 1 - fridge/data/materials/SS316_AtomDensity.yaml | 7 ++++ fridge/test_suite/material_test.py | 36 ++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 fridge/data/materials/SS316_AtomDensity.yaml diff --git a/fridge/Material/Material.py b/fridge/Material/Material.py index 11b3264..fe5dee1 100644 --- a/fridge/Material/Material.py +++ b/fridge/Material/Material.py @@ -106,7 +106,6 @@ def set_atom_fractions(self, void_percent=1.0): self.isotopicAtomPercents[zaid] * void_percent elif isotope in self.isotopicAtomPercents: self.atomPercent[isotope] = self.isotopicAtomPercents[isotope] * void_percent - print(sum(self.atomPercent.values()), self.density) assert np.allclose(sum(self.atomPercent.values()), self.density, 3) diff --git a/fridge/data/materials/SS316_AtomDensity.yaml b/fridge/data/materials/SS316_AtomDensity.yaml new file mode 100644 index 0000000..146058c --- /dev/null +++ b/fridge/data/materials/SS316_AtomDensity.yaml @@ -0,0 +1,7 @@ +Name: Stainless Steel 316 +Elements: [C, Si, P, S, Cr, Mn, Fe, Ni, Mo] +Elemental ZAIDs: [6000, 14000, 15000, 16000, 24000, 25000, 26000, 28000, 42000] +Isotopic Atom Percents: {6000: 0.000164, 14000: 0.000870, 15000: 0.000036, 16000: 0.000023, 24000: 0.015751, + 25000: 0.000889, 26000: 0.057714, 28000: 0.009850, 42000: 0.001255} +Density: 0.086553 +Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/test_suite/material_test.py b/fridge/test_suite/material_test.py index 1188db3..e124c69 100644 --- a/fridge/test_suite/material_test.py +++ b/fridge/test_suite/material_test.py @@ -224,6 +224,36 @@ def test_material_SS316(): assert np.allclose(m.atomPercent[k], v, 5) +def test_material_SS316_AtomPercent(): + """ + Test material is from the Compendium of Material Composition Data for Radiation Transport Modeling: Revision 1. + """ + m = materialReader.Material() + m.set_material('SS316_AtomDensity') + assert m.name == 'Stainless Steel 316' + assert m.elements == ['C', 'Si', 'P', 'S', 'Cr', 'Mn', 'Fe', 'Ni', 'Mo'] + assert m.zaids == [6000, 14000, 15000, 16000, 24000, 25000, 26000, 28000, 42000] + assert m.isotopicAtomPercents == {6000: 0.000164, 14000: 0.000870, 15000: 0.000036, 16000: 0.000023, + 24000: 0.015751, 25000: 0.000889, 26000: 0.057714, 28000: 0.009850, + 42000: 0.001255} + assert m.enrichmentZaids == [] + assert m.enrichmentIsotopes == [] + assert m.enrichmentVector == [] + assert m.density == 8.6553e-2 + assert np.allclose(m.atomDensity, 8.6553e-2, 5) + atomPercentKnown = {6000: 1.900e-3, + 14028: 9.231e-3, 14029: 4.857e-4, 14030: 3.316e-4, + 15031: 4.133e-4, + 16032: 2.466e-4, 16033: 2.008e-6, 16034: 1.172e-5, 16036: 2.921e-8, + 24050: 7.596e-3, 24052: 1.523e-1, 24053: 1.760e-2, 24054: 4.465e-3, + 25055: 1.027e-2, + 26054: 3.765e-2, 26056: 6.128e-1, 26057: 1.441e-2, 26058: 1.951e-3, + 28058: 7.647e-2, 28060: 3.047e-2, 28061: 1.347e-3, 28062: 4.365e-3, 28064: 1.147e-3, + 42092: 2.018e-3, 42094: 1.298e-3, 42095: 2.272e-3, 42096: 2.416e-3, 42097: 1.406e-3, + 42098: 3.609e-3, 42100: 1.483e-3} + for k, v in atomPercentKnown.items(): + assert np.allclose(m.atomPercent[k], v, 5) + def test_material_FFTF_IF(): """ Test material is the inner fuel from the FFTF Benchmark in the @@ -234,6 +264,11 @@ def test_material_FFTF_IF(): assert m.name == 'FFTF Inner Fuel' assert m.elements == ['U', 'Np', 'Pu', 'Am', 'O'] assert m.zaids == [92000, 93000, 94000, 95000, 8000] + assert m.isotopicAtomPercents == {92234: 9.9319E-7, 92235: 1.1417E-4, 92238: 1.5764E-2, + 93237: 1.6063E-5, + 94238: 3.1181E-6, 94239: 5.1998E-3, 94240: 7.0298E-4, 94241: 6.9284E-5, 94242: 1.2825E-5, + 95241: 1.1744E-5, + 8016: 4.2690E-2} assert m.enrichmentZaids == [] assert m.enrichmentIsotopes == [] assert m.enrichmentVector == [] @@ -247,6 +282,7 @@ def test_material_FFTF_IF(): for k, v in atomPercentKnown.items(): assert np.allclose(m.atomPercent[k], v, 5) + def test_material_BadWtPer(): m = materialReader.Material() m.set_material('BadMaterial') From bdda6fe9dd24be4027b591fb26fd0a27ab57ecaa Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Sun, 4 Aug 2019 15:14:32 -0600 Subject: [PATCH 07/12] Updated testing for new atom density materials. Added Co and Cu elements. --- fridge/Material/Material.py | 5 ++-- fridge/data/CotN/Co.yaml | 7 ++++++ fridge/data/CotN/Cu.yaml | 7 ++++++ fridge/data/materials/FFTF_Inconel600.yaml | 4 ++-- fridge/test_suite/material_test.py | 28 ++++++++++++++++++++++ 5 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 fridge/data/CotN/Co.yaml create mode 100644 fridge/data/CotN/Cu.yaml diff --git a/fridge/Material/Material.py b/fridge/Material/Material.py index fe5dee1..1a3801e 100644 --- a/fridge/Material/Material.py +++ b/fridge/Material/Material.py @@ -98,11 +98,12 @@ def set_void(self, void_percent): self.atomDensity, self.atomPercent = set_atom_percent(self.weightPercent, self.density, self.elementDict) def set_atom_fractions(self, void_percent=1.0): - """Calculates the weight percent of a material.""" + """Calculates the atom density of a material given a material with atom densities defined.""" for zaidNum, zaid in enumerate(self.zaids): for isotope, isotopeFraction in self.elementDict[zaid].atomPercentDict.items(): if zaid in self.isotopicAtomPercents: - self.atomPercent[isotope] = self.elementDict[zaid].weightPercentDict[isotope] * \ + print(self.elementDict[zaid].weightPercentDict[isotope]) + self.atomPercent[isotope] = self.elementDict[zaid].atomPercentDict[isotope] * \ self.isotopicAtomPercents[zaid] * void_percent elif isotope in self.isotopicAtomPercents: self.atomPercent[isotope] = self.isotopicAtomPercents[isotope] * void_percent diff --git a/fridge/data/CotN/Co.yaml b/fridge/data/CotN/Co.yaml new file mode 100644 index 0000000..a58389f --- /dev/null +++ b/fridge/data/CotN/Co.yaml @@ -0,0 +1,7 @@ +Name: Cobolt +Elemental ZAIDs: 27000 +Isotopic ZAID: [27059] +Abundance: [1.0] +Mass: [58.933193] +Density: 8.86 +Linear Coefficient of Expansion: 0.0 diff --git a/fridge/data/CotN/Cu.yaml b/fridge/data/CotN/Cu.yaml new file mode 100644 index 0000000..d44c150 --- /dev/null +++ b/fridge/data/CotN/Cu.yaml @@ -0,0 +1,7 @@ +Name: Copper +Elemental ZAIDs: 29000 +Isotopic ZAID: [29063, 29065] +Abundance: [0.6915,0.3085 ] +Mass: [62.929597, 64.927789] +Density: 8.96 +Linear Coefficient of Expansion: 0.0 diff --git a/fridge/data/materials/FFTF_Inconel600.yaml b/fridge/data/materials/FFTF_Inconel600.yaml index d3dd407..790a9df 100644 --- a/fridge/data/materials/FFTF_Inconel600.yaml +++ b/fridge/data/materials/FFTF_Inconel600.yaml @@ -1,7 +1,7 @@ Name: FFTF Inconel 600 Elements: [C, Si, S, Cr, Mn, Fe, Co, Ni, Cu] Elemental ZAIDs: [6000, 14000, 16000, 24000, 25000, 26000, 27000, 28000, 29000] -Isotopic ZAIDs: [[6000], [14000], [16000], [24000], [25000], [26000], [27000], [28000], [29000]] -Isotopic Weight Percents: [[2.0908E-3], [4.4707E-4], [1.1747E-5], [1.4972E-2], [1.5998E-3], [7.1948E-3], [8.5222E-5], [6.3016E-2], [1.9759E-4]] +Isotopic Atom Percents: {6000: 2.0908E-3, 14000: 4.4707E-4, 16000: 1.1747E-5, 24000: 1.4972E-2, 25000: 1.5998E-3, + 26000: 7.1948E-3, 27000: 8.5222E-5, 28000: 6.3016E-2, 29000: 1.9759E-4} Density: 8.9615E-2 Linear Coefficient of Expansion: 0.0 \ No newline at end of file diff --git a/fridge/test_suite/material_test.py b/fridge/test_suite/material_test.py index e124c69..ce8ed96 100644 --- a/fridge/test_suite/material_test.py +++ b/fridge/test_suite/material_test.py @@ -282,6 +282,34 @@ def test_material_FFTF_IF(): for k, v in atomPercentKnown.items(): assert np.allclose(m.atomPercent[k], v, 5) +def test_material_FFTF_Inconel600(): + """ + Test material is the inner fuel from the FFTF Benchmark in the + International Handbook of Evaluated Reactor Experiments. + """ + m = materialReader.Material() + m.set_material('FFTF_Inconel600') + assert m.name == 'FFTF Inconel 600' + assert m.elements == ['C', 'Si', 'S', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu'] + assert m.zaids == [6000, 14000, 16000, 24000, 25000, 26000, 27000, 28000, 29000] + assert m.isotopicAtomPercents == {6000: 2.0908E-3, 14000: 4.4707E-4, 16000: 1.1747E-5, 24000: 1.4972E-2, 25000: 1.5998E-3, + 26000: 7.1948E-3, 27000: 8.5222E-5, 28000: 6.3016E-2, 29000: 1.9759E-4} + assert m.enrichmentZaids == [] + assert m.enrichmentIsotopes == [] + assert m.enrichmentVector == [] + assert m.density == 8.9615E-2 + assert np.allclose(m.atomDensity, 6.4584E-2, 5) + atomPercentKnown = {6000: 2.0908E-3, + 14028: 4.1230E-4, 14029: 2.0945E-5, 14030: 1.3823E-5, + 16032: 1.1158E-5, 16033: 8.8810E-8, 16034: 4.9925E-7, 16036: 1.1747E-9, + 24050: 6.5053E-4, 24052: 1.2545E-2, 24053: 1.4225E-3, 24054: 3.5409E-4, + 25055: 1.5998E-3, + 26054: 4.2054E-4, 26056: 6.6015E-3, 26057: 1.5246E-4, 26058: 2.0289E-5, + 27059: 8.5222E-5, + 28058: 4.2899E-2, 28060: 1.65246E-2, 28061: 7.1838E-4, 28062: 2.2906E-3, 28064: 5.8290E-4, + 29063: 1.3663E-4, 29065: 6.0957E-5} + for k, v in atomPercentKnown.items(): + assert np.allclose(m.atomPercent[k], v) def test_material_BadWtPer(): m = materialReader.Material() From 2948a19123a9aaa1aed32a090ffebbf4372fc288 Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Mon, 5 Aug 2019 18:40:47 -0600 Subject: [PATCH 08/12] Minor Update to database.py and material_test.py. --- fridge/database.py | 7 ++++--- fridge/test_suite/material_test.py | 22 +++++++++++----------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/fridge/database.py b/fridge/database.py index 76647c3..39e5620 100644 --- a/fridge/database.py +++ b/fridge/database.py @@ -43,8 +43,9 @@ def create_hdf5_database(database_name, dir=os.getcwd()): reactor = f[k] print() print(k) - for k1,v1 in reactor.attrs.items(): - print(k1,v1) + for k1, v1 in reactor.attrs.items(): + print(k1, v1) -create_hdf5_database('test_db', dir=r'C:\Users\ryanstwrt\Documents\OSU\Sodium_Fast_Reactor\PHYSOR2020\Results_Raw') \ No newline at end of file +create_hdf5_database('height_smear_db', + dir=r'C:\Users\ryanstwrt\Documents\OSU\Sodium_Fast_Reactor\PHYSOR2020\height_smear_results') \ No newline at end of file diff --git a/fridge/test_suite/material_test.py b/fridge/test_suite/material_test.py index ce8ed96..81c8e03 100644 --- a/fridge/test_suite/material_test.py +++ b/fridge/test_suite/material_test.py @@ -265,20 +265,20 @@ def test_material_FFTF_IF(): assert m.elements == ['U', 'Np', 'Pu', 'Am', 'O'] assert m.zaids == [92000, 93000, 94000, 95000, 8000] assert m.isotopicAtomPercents == {92234: 9.9319E-7, 92235: 1.1417E-4, 92238: 1.5764E-2, - 93237: 1.6063E-5, - 94238: 3.1181E-6, 94239: 5.1998E-3, 94240: 7.0298E-4, 94241: 6.9284E-5, 94242: 1.2825E-5, - 95241: 1.1744E-5, - 8016: 4.2690E-2} + 93237: 1.6063E-5, + 94238: 3.1181E-6, 94239: 5.1998E-3, 94240: 7.0298E-4, 94241: 6.9284E-5, 94242: 1.2825E-5, + 95241: 1.1744E-5, + 8016: 4.2690E-2} assert m.enrichmentZaids == [] assert m.enrichmentIsotopes == [] assert m.enrichmentVector == [] assert m.density == 6.4584E-2 assert np.allclose(m.atomDensity, 6.4584E-2, 5) atomPercentKnown = {92234: 9.9319E-7, 92235: 1.1417E-4, 92238: 1.5764E-2, - 93237: 1.6063E-5, - 94238: 3.1181E-6, 94239: 5.1198E-3, 94240: 7.0298E-4, 94241: 6.9284E-5, 94242: 1.2825E-5, - 95241: 1.1744E-5, - 8016: 4.2690E-2} + 93237: 1.6063E-5, + 94238: 3.1181E-6, 94239: 5.1198E-3, 94240: 7.0298E-4, 94241: 6.9284E-5, 94242: 1.2825E-5, + 95241: 1.1744E-5, + 8016: 4.2690E-2} for k, v in atomPercentKnown.items(): assert np.allclose(m.atomPercent[k], v, 5) @@ -292,8 +292,9 @@ def test_material_FFTF_Inconel600(): assert m.name == 'FFTF Inconel 600' assert m.elements == ['C', 'Si', 'S', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu'] assert m.zaids == [6000, 14000, 16000, 24000, 25000, 26000, 27000, 28000, 29000] - assert m.isotopicAtomPercents == {6000: 2.0908E-3, 14000: 4.4707E-4, 16000: 1.1747E-5, 24000: 1.4972E-2, 25000: 1.5998E-3, - 26000: 7.1948E-3, 27000: 8.5222E-5, 28000: 6.3016E-2, 29000: 1.9759E-4} + assert m.isotopicAtomPercents == {6000: 2.0908E-3, 14000: 4.4707E-4, 16000: 1.1747E-5, 24000: 1.4972E-2, + 25000: 1.5998E-3, 26000: 7.1948E-3, 27000: 8.5222E-5, 28000: 6.3016E-2, + 29000: 1.9759E-4} assert m.enrichmentZaids == [] assert m.enrichmentIsotopes == [] assert m.enrichmentVector == [] @@ -316,7 +317,6 @@ def test_material_BadWtPer(): m.set_material('BadMaterial') assert m.weightPercent != 1.0 - def test_material_NoMaterial(): m = materialReader.Material() try: From ac7be12bbf6529338433d126af16d1d06656f816 Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Tue, 1 Oct 2019 06:29:51 -0600 Subject: [PATCH 09/12] Additional functionality with a wrapper and database creator. --- fridge/database.py | 51 ----------------- fridge/sfr_db.h5 | Bin 0 -> 952184 bytes fridge/utilities/database.py | 52 ++++++++++++++++++ fridge/{ => utilities}/mcnp_output_scraper.py | 31 ++++++----- fridge/utilities/wrapper.py | 23 ++++++++ fridge/wrapper.py | 23 -------- 6 files changed, 93 insertions(+), 87 deletions(-) delete mode 100644 fridge/database.py create mode 100644 fridge/sfr_db.h5 create mode 100644 fridge/utilities/database.py rename fridge/{ => utilities}/mcnp_output_scraper.py (83%) create mode 100644 fridge/utilities/wrapper.py delete mode 100644 fridge/wrapper.py diff --git a/fridge/database.py b/fridge/database.py deleted file mode 100644 index 39e5620..0000000 --- a/fridge/database.py +++ /dev/null @@ -1,51 +0,0 @@ -import h5py -import os -import glob -import numpy -import fridge.mcnp_output_scraper as scraper - - -def create_hdf5_database(database_name, dir=os.getcwd()): - f = h5py.File(database_name + '.h5', 'w') - # create the initial database with raw values - for root, dirs, files in os.walk(dir): - for file in files: - if '.out' in file: - try: - scraper.translate_output(root, f, file) - except ValueError: - print("Entry for {} already entered, skipping {} from directory {}.".format(file, file, root)) - - #set the attributes for the reactor type - for k in f.keys(): - reactor = f[k] - for k1 in reactor.keys(): - raw_reactor = reactor[k1] - condition = raw_reactor.attrs['condition'] - if condition == b'900K': - for attr, val in raw_reactor.attrs.items(): - reactor.attrs.create(attr, val) - elif condition == b'600K': - doppler_keff = raw_reactor.attrs['keff'][0] - doppler_keff_unc = raw_reactor.attrs['keff'][1] - doppler_temp = raw_reactor.attrs['temperature'] - else: - void_keff = raw_reactor.attrs['keff'][0] - void_keff_unc = raw_reactor.attrs['keff'][1] - - reactor_keff = reactor.attrs['keff'][0] - temp_dif = doppler_temp - reactor.attrs['temperature'] - reactor.attrs['doppler_coeff'] = (doppler_keff - reactor_keff) / (reactor_keff * doppler_keff * temp_dif) * pow(10, 5) - reactor.attrs['void_coeff'] = (void_keff - reactor_keff) / (reactor_keff * void_keff * 99.9) * pow(10, 5) - - - for k in f.keys(): - reactor = f[k] - print() - print(k) - for k1, v1 in reactor.attrs.items(): - print(k1, v1) - - -create_hdf5_database('height_smear_db', - dir=r'C:\Users\ryanstwrt\Documents\OSU\Sodium_Fast_Reactor\PHYSOR2020\height_smear_results') \ No newline at end of file diff --git a/fridge/sfr_db.h5 b/fridge/sfr_db.h5 new file mode 100644 index 0000000000000000000000000000000000000000..40a2167c7e32aed273174d673b2df53b957f5f27 GIT binary patch literal 952184 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 z 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

w~ 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 literal 0 HcmV?d00001 diff --git a/fridge/utilities/database.py b/fridge/utilities/database.py new file mode 100644 index 0000000..c67202f --- /dev/null +++ b/fridge/utilities/database.py @@ -0,0 +1,52 @@ +import h5py +import os +import fridge.utilities.mcnp_output_scraper as scraper + + +def create_hdf5_database(database_name, dir=os.getcwd()): + dt = h5py.string_dtype(encoding='utf-8') + f = h5py.File(database_name + '.h5', 'w') + # create the initial database with raw values + for root, dirs, files in os.walk(dir): + for file in files: + if '.out' in file: + try: + scraper.translate_output(root, f, file) + except ValueError: + print("Entry for {} already entered, skipping {} from directory {}.".format(file, file, root)) + + #set the attributes for the reactor type + for k in f.keys(): + print("New Reactor:" + k) + reactor = f[k] + for k1 in reactor.keys(): + raw_reactor = reactor[k1] + condition = raw_reactor['condition'] + if condition[0] == '900K': + for k, v in raw_reactor.items(): + if v[:].dtype == 'object': + ds = reactor.create_dataset(k, (len(v),), dtype=dt) + else: + ds = reactor.create_dataset(k, (len(v),)) + for l in range(len(v)): + ds[l] = v[l] + elif condition[0] == '600K': + doppler_keff = raw_reactor['keff'][0] + doppler_keff_unc = raw_reactor['keff'][1] + doppler_temp = raw_reactor['temperature'] + else: + void_keff = raw_reactor['keff'][0] + void_keff_unc = raw_reactor['keff'][1] + + reactor_keff = reactor['keff'][0] + temp_dif = doppler_temp - reactor['temperature'][0] + reactor['doppler_coeff'] = (doppler_keff - reactor_keff) / (reactor_keff * doppler_keff * temp_dif) * pow(10, 5) + print('Doppler: {} Regular: {}'.format(doppler_keff, reactor_keff)) + print('Temp: {} Coeff: {}'.format(temp_dif, reactor['doppler_coeff'][0])) + print() + ds = reactor.create_dataset('void_coeff', (1,)) + ds[0] = (void_keff - reactor_keff) / (reactor_keff * void_keff * 99.9) * pow(10, 5) + + +create_hdf5_database('sfr_db_test', + dir=r'C:\Users\ryanstwrt\Documents\OSU\Sodium_Fast_Reactor\PHYSOR2020\Results_Raw') \ No newline at end of file diff --git a/fridge/mcnp_output_scraper.py b/fridge/utilities/mcnp_output_scraper.py similarity index 83% rename from fridge/mcnp_output_scraper.py rename to fridge/utilities/mcnp_output_scraper.py index 0ac26e5..4b2ceaa 100644 --- a/fridge/mcnp_output_scraper.py +++ b/fridge/utilities/mcnp_output_scraper.py @@ -4,6 +4,7 @@ def translate_output(directory, hdf_file, reactor_file): + dt = h5py.string_dtype(encoding='utf-8') # Parse output Name file_name = reactor_file reactor_type = reactor_file[:-4] @@ -42,12 +43,15 @@ def translate_output(directory, hdf_file, reactor_file): if 'K' in condition: temperature = float(condition[:-1]) - init_attr = {'smear': fuel_smear, 'height': fuel_height, 'enrichment': np.string_(enrichment), 'condition': np.string_(condition), 'temperature': temperature} for k, v in init_attr.items(): - reactor.attrs.create(k, v) + if type(v) == np.bytes_: + ds = reactor.create_dataset(k, (1,), dtype=dt) + else: + ds = reactor.create_dataset(k, (1,)) + ds[0] = v attributes = {} # Read the file and extract the information @@ -62,19 +66,19 @@ def translate_output(directory, hdf_file, reactor_file): #add thermal, epithermal, and fast fractions elif line[0:22] == ' | (<0.625 ev)': val = re.findall(r'[\s\d]\d.\d\d', line) - attributes['thermal_fraction'] = float(val[0]) - attributes['epithermal_fraction'] = float(val[1]) - attributes['fast_fraction'] = float(val[2]) + attributes['thermal_fraction'] = [float(val[0])] + attributes['epithermal_fraction'] = [float(val[1])] + attributes['fast_fraction'] = [float(val[2])] #add average number of neutrons gen per fission elif line[0:21] == ' | the average number': val = re.findall(r'\d.\d\d\d', line) - attributes['nu-bar'] = float(val[0]) + attributes['nu-bar'] = [float(val[0])] # add escape, capture, and fission fractions elif line[0:20] == ' fraction': val = line.split(' ') - attributes['escape_fraction'] = float(val[4]) - attributes['capture_fraction'] = float(val[5]) - attributes['fission_fraction'] = float(val[6]) + attributes['escape_fraction'] = [float(val[4])] + attributes['capture_fraction'] = [float(val[5])] + attributes['fission_fraction'] = [float(val[6])] #add generation time and uncertainty elif line[0:20] == ' gen. time': # Excessively large generation times will be in micro-seconds not nano-seconds @@ -97,8 +101,11 @@ def translate_output(directory, hdf_file, reactor_file): elif line[0:20] == ' beta-eff': val = line.split(' ') attributes['beta'] = [float(val[-2]), float(val[-1])] + for k, v in attributes.items(): - reactor.attrs.create(k, v) + ds = reactor.create_dataset(k, (len(v),)) + for l in range(len(v)): + ds[l] = v[l] def create_hdf_group(hdf_file, specific, general): try: @@ -106,6 +113,4 @@ def create_hdf_group(hdf_file, specific, general): except KeyError: hdf_file.create_group(general) hdf_file[general].create_group(specific) - return hdf_file[general] - -#translate_output('FC_FS76_H65.out', 'blank') \ No newline at end of file + return hdf_file[general] \ No newline at end of file diff --git a/fridge/utilities/wrapper.py b/fridge/utilities/wrapper.py new file mode 100644 index 0000000..2dee6df --- /dev/null +++ b/fridge/utilities/wrapper.py @@ -0,0 +1,23 @@ +import fridge.driver.fridge_driver as fd + + +def create_core(core_list, assem_perts={}): + """Wrapper around FRIDGe to create multiple cores concurrently""" + + for core in core_list: + print('Core: ' + core) + core_type = core[9:17] + + file = 'FC_' + core_type + '_' + fuel + fd.main(core, assembly_perturbations=assem_perts, output_name=file) + file='FC_' + core_type + '_' + fuel + '_600K' +# fd.main(core, assembly_perturbations=assem_perts, temperature=600, output_name=file) + file='FC_' + core_type + '_' + fuel + '_Void' +# fd.main(core, assembly_perturbations=assem_perts, void_per=0.001, output_name=file) + + +cores = ['FullCore_FS70_H50_15Pu_12U']#, 'FullCore_FS70_H60_15Pu_12U', 'FullCore_FS70_H70_15Pu_12U', 'FullCore_FS70_H80_15Pu_12U'] +fuel = '7Pu20U10Zr' +assembly = 'A271_FS70_H50' +reflector = 'Reflector_H50' +create_core(cores, assem_perts={assembly: {'fuelMaterial': fuel}, reflector: {'smearRegionHeight': 200}}) diff --git a/fridge/wrapper.py b/fridge/wrapper.py deleted file mode 100644 index 83ea8bb..0000000 --- a/fridge/wrapper.py +++ /dev/null @@ -1,23 +0,0 @@ -import fridge.driver.fridge_driver as fd -core_list = ['FullCore_FS65_H50', 'FullCore_FS65_H55', 'FullCore_FS65_H60', 'FullCore_FS65_H65', 'FullCore_FS65_H70', - 'FullCore_FS65_H75', 'FullCore_FS65_H80', ] - -for core in core_list: - print('Core:' + core) - core_type = core[9:] - assem = 'A271_' + core_type - fuel = '11Pu9U10Zr' - file = 'FC_' + core_type + '_' + fuel - fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, output_name=file) - file='FC_' + core_type + '_' + fuel + '_600K' - fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, temperature=600, output_name=file) - file='FC_' + core_type + '_' + fuel + '_Void' - fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, void_per=0.001, output_name=file) - fuel = '13Pu10U10Zr' - print('Core: ' + core + ' ' + fuel) - file = 'FC_' + core_type + '_' + fuel - fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, output_name=file) - file='FC_' + core_type + '_' + fuel + '_600K' - fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, temperature=600, output_name=file) - file='FC_' + core_type + '_' + fuel + '_Void' - fd.main(core, assembly_perturbations={assem: {'fuelMaterial': fuel}}, void_per=0.001, output_name=file) From a42be9ba1e88cb58bc47a97843c4cf52d9cd130d Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Tue, 1 Oct 2019 18:38:16 -0600 Subject: [PATCH 10/12] Updated tests to include perturbations. --- .../mcnp_input_files/Prefab_Perturbed_Test.i | 1023 +++++++++++++++++ fridge/test_suite/assembly_test.py | 34 +- fridge/test_suite/core_test.py | 12 + fridge/test_suite/global_variables_test.py | 2 +- fridge/test_suite/reactorMaker_test.py | 23 +- fridge/utilities/database.py | 3 - 6 files changed, 1087 insertions(+), 10 deletions(-) create mode 100644 fridge/mcnp_input_files/Prefab_Perturbed_Test.i diff --git a/fridge/mcnp_input_files/Prefab_Perturbed_Test.i b/fridge/mcnp_input_files/Prefab_Perturbed_Test.i new file mode 100644 index 0000000..b8c1489 --- /dev/null +++ b/fridge/mcnp_input_files/Prefab_Perturbed_Test.i @@ -0,0 +1,1023 @@ +Input deck created by FRIDGe +c ********************************Full_Core_Test******************************* +c *********************Cell Cards for Smear Assembly: 01A01******************** +460 460 0.0602 -460 u=460 imp:n=1 $Assembly: Smear Region +461 461 2e-05 -461 u=460 imp:n=1 $Assembly: Lower Coolant +462 462 2e-05 -462 u=460 imp:n=1 $Assembly: Upper Coolant +463 0 -463 fill=460 imp:n=1 $Assembly +c *********************Cell Cards for Fuel Assembly: 02A01********************* +480 480 0.04574 -480 u=481 imp:n=1 $Pin: Fuel +481 481 0.02428 480 -481 u=481 imp:n=1 $Pin: Bond +482 482 0.08598 481 -482 u=481 imp:n=1 $Pin: Clad +483 483 0.007 482 u=481 imp:n=1 $Pin: Wirewrap + Coolant +484 484 2e-05 -483 u=482 imp:n=1 $Pin: Blank Pin Coolant +485 0 -484 lat=2 u=483 imp:n=1 + fill=-10:10 -10:10 0:0 + 482 482 482 482 482 482 482 482 482 482 + 482 482 482 482 482 482 482 482 482 482 + 482 482 482 482 482 482 482 482 482 482 + 482 481 481 481 481 481 481 481 481 481 + 481 482 482 482 482 482 482 482 482 482 + 482 481 481 481 481 481 481 481 481 481 + 481 481 482 482 482 482 482 482 482 482 + 482 481 481 481 481 481 481 481 481 481 + 481 481 481 482 482 482 482 482 482 482 + 482 481 481 481 481 481 481 481 481 481 + 481 481 481 481 482 482 482 482 482 482 + 482 481 481 481 481 481 481 481 481 481 + 481 481 481 481 481 482 482 482 482 482 + 482 481 481 481 481 481 481 481 481 481 + 481 481 481 481 481 481 482 482 482 482 + 482 481 481 481 481 481 481 481 481 481 + 481 481 481 481 481 481 481 482 482 482 + 482 481 481 481 481 481 481 481 481 481 + 481 481 481 481 481 481 481 481 482 482 + 482 481 481 481 481 481 481 481 481 481 + 481 481 481 481 481 481 481 481 481 482 + 482 481 481 481 481 481 481 481 481 481 + 481 481 481 481 481 481 481 481 481 481 + 482 482 481 481 481 481 481 481 481 481 + 481 481 481 481 481 481 481 481 481 481 + 482 482 482 481 481 481 481 481 481 481 + 481 481 481 481 481 481 481 481 481 481 + 482 482 482 482 481 481 481 481 481 481 + 481 481 481 481 481 481 481 481 481 481 + 482 482 482 482 482 481 481 481 481 481 + 481 481 481 481 481 481 481 481 481 481 + 482 482 482 482 482 482 481 481 481 481 + 481 481 481 481 481 481 481 481 481 481 + 482 482 482 482 482 482 482 481 481 481 + 481 481 481 481 481 481 481 481 481 481 + 482 482 482 482 482 482 482 482 481 481 + 481 481 481 481 481 481 481 481 481 481 + 482 482 482 482 482 482 482 482 482 481 + 481 481 481 481 481 481 481 481 481 481 + 482 482 482 482 482 482 482 482 482 482 + 481 481 481 481 481 481 481 481 481 481 + 482 482 482 482 482 482 482 482 482 482 + 482 482 482 482 482 482 482 482 482 482 + 482 482 482 482 482 482 482 482 482 482 + 482 +486 0 -486 u=480 fill=483 imp:n=1 $Assembly: Inner Portion of Assembly +487 487 0 -487 u=480 imp:n=1 $Assembly: Plenum +488 488 0.06879 -488 u=480 imp:n=1 $Assembly: Upper Reflector +489 489 0.06879 -489 u=480 imp:n=1 $Assembly: Lower Reflector +490 490 0.08598 486 489 488 487 -490 u=480 imp:n=1 $Assembly: Assembly Duct +491 491 2e-05 -491 u=480 imp:n=1 $Assembly: Lower Coolant +492 492 2e-05 -492 u=480 imp:n=1 $Assembly: Upper Coolant +493 0 -493 fill=480 imp:n=1 $Assembly +c *********************Cell Cards for Fuel Assembly: 02B01********************* +500 500 0.04574 -500 u=501 imp:n=1 $Pin: Fuel +501 501 0.02428 500 -501 u=501 imp:n=1 $Pin: Bond +502 502 0.08598 501 -502 u=501 imp:n=1 $Pin: Clad +503 503 0.007 502 u=501 imp:n=1 $Pin: Wirewrap + Coolant +504 504 2e-05 -503 u=502 imp:n=1 $Pin: Blank Pin Coolant +505 0 -504 lat=2 u=503 imp:n=1 + fill=-10:10 -10:10 0:0 + 502 502 502 502 502 502 502 502 502 502 + 502 502 502 502 502 502 502 502 502 502 + 502 502 502 502 502 502 502 502 502 502 + 502 501 501 501 501 501 501 501 501 501 + 501 502 502 502 502 502 502 502 502 502 + 502 501 501 501 501 501 501 501 501 501 + 501 501 502 502 502 502 502 502 502 502 + 502 501 501 501 501 501 501 501 501 501 + 501 501 501 502 502 502 502 502 502 502 + 502 501 501 501 501 501 501 501 501 501 + 501 501 501 501 502 502 502 502 502 502 + 502 501 501 501 501 501 501 501 501 501 + 501 501 501 501 501 502 502 502 502 502 + 502 501 501 501 501 501 501 501 501 501 + 501 501 501 501 501 501 502 502 502 502 + 502 501 501 501 501 501 501 501 501 501 + 501 501 501 501 501 501 501 502 502 502 + 502 501 501 501 501 501 501 501 501 501 + 501 501 501 501 501 501 501 501 502 502 + 502 501 501 501 501 501 501 501 501 501 + 501 501 501 501 501 501 501 501 501 502 + 502 501 501 501 501 501 501 501 501 501 + 501 501 501 501 501 501 501 501 501 501 + 502 502 501 501 501 501 501 501 501 501 + 501 501 501 501 501 501 501 501 501 501 + 502 502 502 501 501 501 501 501 501 501 + 501 501 501 501 501 501 501 501 501 501 + 502 502 502 502 501 501 501 501 501 501 + 501 501 501 501 501 501 501 501 501 501 + 502 502 502 502 502 501 501 501 501 501 + 501 501 501 501 501 501 501 501 501 501 + 502 502 502 502 502 502 501 501 501 501 + 501 501 501 501 501 501 501 501 501 501 + 502 502 502 502 502 502 502 501 501 501 + 501 501 501 501 501 501 501 501 501 501 + 502 502 502 502 502 502 502 502 501 501 + 501 501 501 501 501 501 501 501 501 501 + 502 502 502 502 502 502 502 502 502 501 + 501 501 501 501 501 501 501 501 501 501 + 502 502 502 502 502 502 502 502 502 502 + 501 501 501 501 501 501 501 501 501 501 + 502 502 502 502 502 502 502 502 502 502 + 502 502 502 502 502 502 502 502 502 502 + 502 502 502 502 502 502 502 502 502 502 + 502 +506 0 -506 u=500 fill=503 imp:n=1 $Assembly: Inner Portion of Assembly +507 507 0 -507 u=500 imp:n=1 $Assembly: Plenum +508 508 0.06879 -508 u=500 imp:n=1 $Assembly: Upper Reflector +509 509 0.06879 -509 u=500 imp:n=1 $Assembly: Lower Reflector +510 510 0.08598 506 509 508 507 -510 u=500 imp:n=1 $Assembly: Assembly Duct +511 511 2e-05 -511 u=500 imp:n=1 $Assembly: Lower Coolant +512 512 2e-05 -512 u=500 imp:n=1 $Assembly: Upper Coolant +513 0 -513 fill=500 imp:n=1 $Assembly +c *********************Cell Cards for Fuel Assembly: 02C01********************* +520 520 0.04574 -520 u=521 imp:n=1 $Pin: Fuel +521 521 0.02428 520 -521 u=521 imp:n=1 $Pin: Bond +522 522 0.08598 521 -522 u=521 imp:n=1 $Pin: Clad +523 523 0.007 522 u=521 imp:n=1 $Pin: Wirewrap + Coolant +524 524 2e-05 -523 u=522 imp:n=1 $Pin: Blank Pin Coolant +525 0 -524 lat=2 u=523 imp:n=1 + fill=-10:10 -10:10 0:0 + 522 522 522 522 522 522 522 522 522 522 + 522 522 522 522 522 522 522 522 522 522 + 522 522 522 522 522 522 522 522 522 522 + 522 521 521 521 521 521 521 521 521 521 + 521 522 522 522 522 522 522 522 522 522 + 522 521 521 521 521 521 521 521 521 521 + 521 521 522 522 522 522 522 522 522 522 + 522 521 521 521 521 521 521 521 521 521 + 521 521 521 522 522 522 522 522 522 522 + 522 521 521 521 521 521 521 521 521 521 + 521 521 521 521 522 522 522 522 522 522 + 522 521 521 521 521 521 521 521 521 521 + 521 521 521 521 521 522 522 522 522 522 + 522 521 521 521 521 521 521 521 521 521 + 521 521 521 521 521 521 522 522 522 522 + 522 521 521 521 521 521 521 521 521 521 + 521 521 521 521 521 521 521 522 522 522 + 522 521 521 521 521 521 521 521 521 521 + 521 521 521 521 521 521 521 521 522 522 + 522 521 521 521 521 521 521 521 521 521 + 521 521 521 521 521 521 521 521 521 522 + 522 521 521 521 521 521 521 521 521 521 + 521 521 521 521 521 521 521 521 521 521 + 522 522 521 521 521 521 521 521 521 521 + 521 521 521 521 521 521 521 521 521 521 + 522 522 522 521 521 521 521 521 521 521 + 521 521 521 521 521 521 521 521 521 521 + 522 522 522 522 521 521 521 521 521 521 + 521 521 521 521 521 521 521 521 521 521 + 522 522 522 522 522 521 521 521 521 521 + 521 521 521 521 521 521 521 521 521 521 + 522 522 522 522 522 522 521 521 521 521 + 521 521 521 521 521 521 521 521 521 521 + 522 522 522 522 522 522 522 521 521 521 + 521 521 521 521 521 521 521 521 521 521 + 522 522 522 522 522 522 522 522 521 521 + 521 521 521 521 521 521 521 521 521 521 + 522 522 522 522 522 522 522 522 522 521 + 521 521 521 521 521 521 521 521 521 521 + 522 522 522 522 522 522 522 522 522 522 + 521 521 521 521 521 521 521 521 521 521 + 522 522 522 522 522 522 522 522 522 522 + 522 522 522 522 522 522 522 522 522 522 + 522 522 522 522 522 522 522 522 522 522 + 522 +526 0 -526 u=520 fill=523 imp:n=1 $Assembly: Inner Portion of Assembly +527 527 0 -527 u=520 imp:n=1 $Assembly: Plenum +528 528 0.06879 -528 u=520 imp:n=1 $Assembly: Upper Reflector +529 529 0.06879 -529 u=520 imp:n=1 $Assembly: Lower Reflector +530 530 0.08598 526 529 528 527 -530 u=520 imp:n=1 $Assembly: Assembly Duct +531 531 2e-05 -531 u=520 imp:n=1 $Assembly: Lower Coolant +532 532 2e-05 -532 u=520 imp:n=1 $Assembly: Upper Coolant +533 0 -533 fill=520 imp:n=1 $Assembly +c *********************Cell Cards for Fuel Assembly: 02D01********************* +540 540 0.04574 -540 u=541 imp:n=1 $Pin: Fuel +541 541 0.02428 540 -541 u=541 imp:n=1 $Pin: Bond +542 542 0.08598 541 -542 u=541 imp:n=1 $Pin: Clad +543 543 0.007 542 u=541 imp:n=1 $Pin: Wirewrap + Coolant +544 544 2e-05 -543 u=542 imp:n=1 $Pin: Blank Pin Coolant +545 0 -544 lat=2 u=543 imp:n=1 + fill=-10:10 -10:10 0:0 + 542 542 542 542 542 542 542 542 542 542 + 542 542 542 542 542 542 542 542 542 542 + 542 542 542 542 542 542 542 542 542 542 + 542 541 541 541 541 541 541 541 541 541 + 541 542 542 542 542 542 542 542 542 542 + 542 541 541 541 541 541 541 541 541 541 + 541 541 542 542 542 542 542 542 542 542 + 542 541 541 541 541 541 541 541 541 541 + 541 541 541 542 542 542 542 542 542 542 + 542 541 541 541 541 541 541 541 541 541 + 541 541 541 541 542 542 542 542 542 542 + 542 541 541 541 541 541 541 541 541 541 + 541 541 541 541 541 542 542 542 542 542 + 542 541 541 541 541 541 541 541 541 541 + 541 541 541 541 541 541 542 542 542 542 + 542 541 541 541 541 541 541 541 541 541 + 541 541 541 541 541 541 541 542 542 542 + 542 541 541 541 541 541 541 541 541 541 + 541 541 541 541 541 541 541 541 542 542 + 542 541 541 541 541 541 541 541 541 541 + 541 541 541 541 541 541 541 541 541 542 + 542 541 541 541 541 541 541 541 541 541 + 541 541 541 541 541 541 541 541 541 541 + 542 542 541 541 541 541 541 541 541 541 + 541 541 541 541 541 541 541 541 541 541 + 542 542 542 541 541 541 541 541 541 541 + 541 541 541 541 541 541 541 541 541 541 + 542 542 542 542 541 541 541 541 541 541 + 541 541 541 541 541 541 541 541 541 541 + 542 542 542 542 542 541 541 541 541 541 + 541 541 541 541 541 541 541 541 541 541 + 542 542 542 542 542 542 541 541 541 541 + 541 541 541 541 541 541 541 541 541 541 + 542 542 542 542 542 542 542 541 541 541 + 541 541 541 541 541 541 541 541 541 541 + 542 542 542 542 542 542 542 542 541 541 + 541 541 541 541 541 541 541 541 541 541 + 542 542 542 542 542 542 542 542 542 541 + 541 541 541 541 541 541 541 541 541 541 + 542 542 542 542 542 542 542 542 542 542 + 541 541 541 541 541 541 541 541 541 541 + 542 542 542 542 542 542 542 542 542 542 + 542 542 542 542 542 542 542 542 542 542 + 542 542 542 542 542 542 542 542 542 542 + 542 +546 0 -546 u=540 fill=543 imp:n=1 $Assembly: Inner Portion of Assembly +547 547 0 -547 u=540 imp:n=1 $Assembly: Plenum +548 548 0.06879 -548 u=540 imp:n=1 $Assembly: Upper Reflector +549 549 0.06879 -549 u=540 imp:n=1 $Assembly: Lower Reflector +550 550 0.08598 546 549 548 547 -550 u=540 imp:n=1 $Assembly: Assembly Duct +551 551 2e-05 -551 u=540 imp:n=1 $Assembly: Lower Coolant +552 552 2e-05 -552 u=540 imp:n=1 $Assembly: Upper Coolant +553 0 -553 fill=540 imp:n=1 $Assembly +c *********************Cell Cards for Fuel Assembly: 02E01********************* +560 560 0.04574 -560 u=561 imp:n=1 $Pin: Fuel +561 561 0.02428 560 -561 u=561 imp:n=1 $Pin: Bond +562 562 0.08598 561 -562 u=561 imp:n=1 $Pin: Clad +563 563 0.007 562 u=561 imp:n=1 $Pin: Wirewrap + Coolant +564 564 2e-05 -563 u=562 imp:n=1 $Pin: Blank Pin Coolant +565 0 -564 lat=2 u=563 imp:n=1 + fill=-10:10 -10:10 0:0 + 562 562 562 562 562 562 562 562 562 562 + 562 562 562 562 562 562 562 562 562 562 + 562 562 562 562 562 562 562 562 562 562 + 562 561 561 561 561 561 561 561 561 561 + 561 562 562 562 562 562 562 562 562 562 + 562 561 561 561 561 561 561 561 561 561 + 561 561 562 562 562 562 562 562 562 562 + 562 561 561 561 561 561 561 561 561 561 + 561 561 561 562 562 562 562 562 562 562 + 562 561 561 561 561 561 561 561 561 561 + 561 561 561 561 562 562 562 562 562 562 + 562 561 561 561 561 561 561 561 561 561 + 561 561 561 561 561 562 562 562 562 562 + 562 561 561 561 561 561 561 561 561 561 + 561 561 561 561 561 561 562 562 562 562 + 562 561 561 561 561 561 561 561 561 561 + 561 561 561 561 561 561 561 562 562 562 + 562 561 561 561 561 561 561 561 561 561 + 561 561 561 561 561 561 561 561 562 562 + 562 561 561 561 561 561 561 561 561 561 + 561 561 561 561 561 561 561 561 561 562 + 562 561 561 561 561 561 561 561 561 561 + 561 561 561 561 561 561 561 561 561 561 + 562 562 561 561 561 561 561 561 561 561 + 561 561 561 561 561 561 561 561 561 561 + 562 562 562 561 561 561 561 561 561 561 + 561 561 561 561 561 561 561 561 561 561 + 562 562 562 562 561 561 561 561 561 561 + 561 561 561 561 561 561 561 561 561 561 + 562 562 562 562 562 561 561 561 561 561 + 561 561 561 561 561 561 561 561 561 561 + 562 562 562 562 562 562 561 561 561 561 + 561 561 561 561 561 561 561 561 561 561 + 562 562 562 562 562 562 562 561 561 561 + 561 561 561 561 561 561 561 561 561 561 + 562 562 562 562 562 562 562 562 561 561 + 561 561 561 561 561 561 561 561 561 561 + 562 562 562 562 562 562 562 562 562 561 + 561 561 561 561 561 561 561 561 561 561 + 562 562 562 562 562 562 562 562 562 562 + 561 561 561 561 561 561 561 561 561 561 + 562 562 562 562 562 562 562 562 562 562 + 562 562 562 562 562 562 562 562 562 562 + 562 562 562 562 562 562 562 562 562 562 + 562 +566 0 -566 u=560 fill=563 imp:n=1 $Assembly: Inner Portion of Assembly +567 567 0 -567 u=560 imp:n=1 $Assembly: Plenum +568 568 0.06879 -568 u=560 imp:n=1 $Assembly: Upper Reflector +569 569 0.06879 -569 u=560 imp:n=1 $Assembly: Lower Reflector +570 570 0.08598 566 569 568 567 -570 u=560 imp:n=1 $Assembly: Assembly Duct +571 571 2e-05 -571 u=560 imp:n=1 $Assembly: Lower Coolant +572 572 2e-05 -572 u=560 imp:n=1 $Assembly: Upper Coolant +573 0 -573 fill=560 imp:n=1 $Assembly +c *********************Cell Cards for Fuel Assembly: 02F01********************* +580 580 0.04574 -580 u=581 imp:n=1 $Pin: Fuel +581 581 0.02428 580 -581 u=581 imp:n=1 $Pin: Bond +582 582 0.08598 581 -582 u=581 imp:n=1 $Pin: Clad +583 583 0.007 582 u=581 imp:n=1 $Pin: Wirewrap + Coolant +584 584 2e-05 -583 u=582 imp:n=1 $Pin: Blank Pin Coolant +585 0 -584 lat=2 u=583 imp:n=1 + fill=-10:10 -10:10 0:0 + 582 582 582 582 582 582 582 582 582 582 + 582 582 582 582 582 582 582 582 582 582 + 582 582 582 582 582 582 582 582 582 582 + 582 581 581 581 581 581 581 581 581 581 + 581 582 582 582 582 582 582 582 582 582 + 582 581 581 581 581 581 581 581 581 581 + 581 581 582 582 582 582 582 582 582 582 + 582 581 581 581 581 581 581 581 581 581 + 581 581 581 582 582 582 582 582 582 582 + 582 581 581 581 581 581 581 581 581 581 + 581 581 581 581 582 582 582 582 582 582 + 582 581 581 581 581 581 581 581 581 581 + 581 581 581 581 581 582 582 582 582 582 + 582 581 581 581 581 581 581 581 581 581 + 581 581 581 581 581 581 582 582 582 582 + 582 581 581 581 581 581 581 581 581 581 + 581 581 581 581 581 581 581 582 582 582 + 582 581 581 581 581 581 581 581 581 581 + 581 581 581 581 581 581 581 581 582 582 + 582 581 581 581 581 581 581 581 581 581 + 581 581 581 581 581 581 581 581 581 582 + 582 581 581 581 581 581 581 581 581 581 + 581 581 581 581 581 581 581 581 581 581 + 582 582 581 581 581 581 581 581 581 581 + 581 581 581 581 581 581 581 581 581 581 + 582 582 582 581 581 581 581 581 581 581 + 581 581 581 581 581 581 581 581 581 581 + 582 582 582 582 581 581 581 581 581 581 + 581 581 581 581 581 581 581 581 581 581 + 582 582 582 582 582 581 581 581 581 581 + 581 581 581 581 581 581 581 581 581 581 + 582 582 582 582 582 582 581 581 581 581 + 581 581 581 581 581 581 581 581 581 581 + 582 582 582 582 582 582 582 581 581 581 + 581 581 581 581 581 581 581 581 581 581 + 582 582 582 582 582 582 582 582 581 581 + 581 581 581 581 581 581 581 581 581 581 + 582 582 582 582 582 582 582 582 582 581 + 581 581 581 581 581 581 581 581 581 581 + 582 582 582 582 582 582 582 582 582 582 + 581 581 581 581 581 581 581 581 581 581 + 582 582 582 582 582 582 582 582 582 582 + 582 582 582 582 582 582 582 582 582 582 + 582 582 582 582 582 582 582 582 582 582 + 582 +586 0 -586 u=580 fill=583 imp:n=1 $Assembly: Inner Portion of Assembly +587 587 0 -587 u=580 imp:n=1 $Assembly: Plenum +588 588 0.06879 -588 u=580 imp:n=1 $Assembly: Upper Reflector +589 589 0.06879 -589 u=580 imp:n=1 $Assembly: Lower Reflector +590 590 0.08598 586 589 588 587 -590 u=580 imp:n=1 $Assembly: Assembly Duct +591 591 2e-05 -591 u=580 imp:n=1 $Assembly: Lower Coolant +592 592 2e-05 -592 u=580 imp:n=1 $Assembly: Upper Coolant +593 0 -593 fill=580 imp:n=1 $Assembly +600 600 2e-05 463 493 513 533 553 + 573 593 -600 imp:n=1 $Coolant Surrounding Assemblies +620 620 0.08598 600 -620 imp:n=1 $Reactor Vessel +640 0 620 imp:n=0 $Everything Else + +c *******************Surface Cards for Smear Assembly: 01A01******************* +460 RHP 0.0 0.0 -60.0 0 0 240 0 5.80529 0 $Assembly: Smear Region +461 RHP 0.0 0.0 -100.1 0 0 40.1 0 5.80529 0 $Assembly: Lower Coolant +462 RHP 0.0 0.0 180.0 0 0 40.0 0 5.80529 0 $Assembly: Upper Coolant +463 RHP 0.0 0.0 -100.0 0 0 320.0 0 5.805 0 $Assembly: Full Assembly Surface +c ********************Surface Cards for Fuel Assembly: 02A01******************* +480 RCC -10.3923 6.0 0.0 0 0 60.0 0.19745 $Pin: Fuel +481 RCC -10.3923 6.0 0.0 0 0 60.6 0.228 $Pin: Bond - 1% higher than fuel +482 RCC -10.3923 6.0 0.0 0 0 60.6 0.265 $Pin: Clad - 1% higher than fuel +483 RHP -10.3923 6.0 0.0 0 0 60.6 0.66144 0 0 $Pin: Coolant - 1% higher than fuel +484 RHP -10.3923 6.0 0.0 0 0 60.6 0.33072 0 0 $Pin: Blank Pin - 1% higher than fuel +486 RHP -10.3923 6.0 0.0 0 0 60.6 0 5.55 0 $Assembly: Duct Inner Surface +487 RHP -10.3923 6.0 60.6 0 0 60.0 0 5.55 0 $Assembly: Plenum +488 RHP -10.3923 6.0 120.6 0 0 60.0 0 5.55 0 $Assembly: Upper Reflector +489 RHP -10.3923 6.0 -60.0 0 0 60.0 0 5.55 0 $Assembly: Lower Reflector +490 RHP -10.3923 6.0 -60.0 0 0 240.6 0 5.85029 0 $Assembly: Duct Outer Surface +491 RHP -10.3923 6.0 -99.8 0 0 39.8 0 5.85029 0 $Assembly: Lower Coolant +492 RHP -10.3923 6.0 180.6 0 0 39.7 0 5.85029 0 $Assembly: Upper Coolant +493 RHP -10.3923 6.0 -99.7 0 0 320.0 0 5.85 0 $Assembly: Full Assembly Surface +c ********************Surface Cards for Fuel Assembly: 02B01******************* +500 RCC 0.0 12.0 0.0 0 0 60.0 0.19745 $Pin: Fuel +501 RCC 0.0 12.0 0.0 0 0 60.6 0.228 $Pin: Bond - 1% higher than fuel +502 RCC 0.0 12.0 0.0 0 0 60.6 0.265 $Pin: Clad - 1% higher than fuel +503 RHP 0.0 12.0 0.0 0 0 60.6 0.66144 0 0 $Pin: Coolant - 1% higher than fuel +504 RHP 0.0 12.0 0.0 0 0 60.6 0.33072 0 0 $Pin: Blank Pin - 1% higher than fuel +506 RHP 0.0 12.0 0.0 0 0 60.6 0 5.55 0 $Assembly: Duct Inner Surface +507 RHP 0.0 12.0 60.6 0 0 60.0 0 5.55 0 $Assembly: Plenum +508 RHP 0.0 12.0 120.6 0 0 60.0 0 5.55 0 $Assembly: Upper Reflector +509 RHP 0.0 12.0 -60.0 0 0 60.0 0 5.55 0 $Assembly: Lower Reflector +510 RHP 0.0 12.0 -60.0 0 0 240.6 0 5.85029 0 $Assembly: Duct Outer Surface +511 RHP 0.0 12.0 -99.8 0 0 39.8 0 5.85029 0 $Assembly: Lower Coolant +512 RHP 0.0 12.0 180.6 0 0 39.7 0 5.85029 0 $Assembly: Upper Coolant +513 RHP 0.0 12.0 -99.7 0 0 320.0 0 5.85 0 $Assembly: Full Assembly Surface +c ********************Surface Cards for Fuel Assembly: 02C01******************* +520 RCC 10.3923 6.0 0.0 0 0 60.0 0.19745 $Pin: Fuel +521 RCC 10.3923 6.0 0.0 0 0 60.6 0.228 $Pin: Bond - 1% higher than fuel +522 RCC 10.3923 6.0 0.0 0 0 60.6 0.265 $Pin: Clad - 1% higher than fuel +523 RHP 10.3923 6.0 0.0 0 0 60.6 0.66144 0 0 $Pin: Coolant - 1% higher than fuel +524 RHP 10.3923 6.0 0.0 0 0 60.6 0.33072 0 0 $Pin: Blank Pin - 1% higher than fuel +526 RHP 10.3923 6.0 0.0 0 0 60.6 0 5.55 0 $Assembly: Duct Inner Surface +527 RHP 10.3923 6.0 60.6 0 0 60.0 0 5.55 0 $Assembly: Plenum +528 RHP 10.3923 6.0 120.6 0 0 60.0 0 5.55 0 $Assembly: Upper Reflector +529 RHP 10.3923 6.0 -60.0 0 0 60.0 0 5.55 0 $Assembly: Lower Reflector +530 RHP 10.3923 6.0 -60.0 0 0 240.6 0 5.85029 0 $Assembly: Duct Outer Surface +531 RHP 10.3923 6.0 -99.8 0 0 39.8 0 5.85029 0 $Assembly: Lower Coolant +532 RHP 10.3923 6.0 180.6 0 0 39.7 0 5.85029 0 $Assembly: Upper Coolant +533 RHP 10.3923 6.0 -99.7 0 0 320.0 0 5.85 0 $Assembly: Full Assembly Surface +c ********************Surface Cards for Fuel Assembly: 02D01******************* +540 RCC 10.3923 -6.0 0.0 0 0 60.0 0.19745 $Pin: Fuel +541 RCC 10.3923 -6.0 0.0 0 0 60.6 0.228 $Pin: Bond - 1% higher than fuel +542 RCC 10.3923 -6.0 0.0 0 0 60.6 0.265 $Pin: Clad - 1% higher than fuel +543 RHP 10.3923 -6.0 0.0 0 0 60.6 0.66144 0 0 $Pin: Coolant - 1% higher than fuel +544 RHP 10.3923 -6.0 0.0 0 0 60.6 0.33072 0 0 $Pin: Blank Pin - 1% higher than fuel +546 RHP 10.3923 -6.0 0.0 0 0 60.6 0 5.55 0 $Assembly: Duct Inner Surface +547 RHP 10.3923 -6.0 60.6 0 0 60.0 0 5.55 0 $Assembly: Plenum +548 RHP 10.3923 -6.0 120.6 0 0 60.0 0 5.55 0 $Assembly: Upper Reflector +549 RHP 10.3923 -6.0 -60.0 0 0 60.0 0 5.55 0 $Assembly: Lower Reflector +550 RHP 10.3923 -6.0 -60.0 0 0 240.6 0 5.85029 0 $Assembly: Duct Outer Surface +551 RHP 10.3923 -6.0 -99.8 0 0 39.8 0 5.85029 0 $Assembly: Lower Coolant +552 RHP 10.3923 -6.0 180.6 0 0 39.7 0 5.85029 0 $Assembly: Upper Coolant +553 RHP 10.3923 -6.0 -99.7 0 0 320.0 0 5.85 0 $Assembly: Full Assembly Surface +c ********************Surface Cards for Fuel Assembly: 02E01******************* +560 RCC -0.0 -12.0 0.0 0 0 60.0 0.19745 $Pin: Fuel +561 RCC -0.0 -12.0 0.0 0 0 60.6 0.228 $Pin: Bond - 1% higher than fuel +562 RCC -0.0 -12.0 0.0 0 0 60.6 0.265 $Pin: Clad - 1% higher than fuel +563 RHP -0.0 -12.0 0.0 0 0 60.6 0.66144 0 0 $Pin: Coolant - 1% higher than fuel +564 RHP -0.0 -12.0 0.0 0 0 60.6 0.33072 0 0 $Pin: Blank Pin - 1% higher than fuel +566 RHP -0.0 -12.0 0.0 0 0 60.6 0 5.55 0 $Assembly: Duct Inner Surface +567 RHP -0.0 -12.0 60.6 0 0 60.0 0 5.55 0 $Assembly: Plenum +568 RHP -0.0 -12.0 120.6 0 0 60.0 0 5.55 0 $Assembly: Upper Reflector +569 RHP -0.0 -12.0 -60.0 0 0 60.0 0 5.55 0 $Assembly: Lower Reflector +570 RHP -0.0 -12.0 -60.0 0 0 240.6 0 5.85029 0 $Assembly: Duct Outer Surface +571 RHP -0.0 -12.0 -99.8 0 0 39.8 0 5.85029 0 $Assembly: Lower Coolant +572 RHP -0.0 -12.0 180.6 0 0 39.7 0 5.85029 0 $Assembly: Upper Coolant +573 RHP -0.0 -12.0 -99.7 0 0 320.0 0 5.85 0 $Assembly: Full Assembly Surface +c ********************Surface Cards for Fuel Assembly: 02F01******************* +580 RCC -10.3923 -6.0 0.0 0 0 60.0 0.19745 $Pin: Fuel +581 RCC -10.3923 -6.0 0.0 0 0 60.6 0.228 $Pin: Bond - 1% higher than fuel +582 RCC -10.3923 -6.0 0.0 0 0 60.6 0.265 $Pin: Clad - 1% higher than fuel +583 RHP -10.3923 -6.0 0.0 0 0 60.6 0.66144 0 0 $Pin: Coolant - 1% higher than fuel +584 RHP -10.3923 -6.0 0.0 0 0 60.6 0.33072 0 0 $Pin: Blank Pin - 1% higher than fuel +586 RHP -10.3923 -6.0 0.0 0 0 60.6 0 5.55 0 $Assembly: Duct Inner Surface +587 RHP -10.3923 -6.0 60.6 0 0 60.0 0 5.55 0 $Assembly: Plenum +588 RHP -10.3923 -6.0 120.6 0 0 60.0 0 5.55 0 $Assembly: Upper Reflector +589 RHP -10.3923 -6.0 -60.0 0 0 60.0 0 5.55 0 $Assembly: Lower Reflector +590 RHP -10.3923 -6.0 -60.0 0 0 240.6 0 5.85029 0 $Assembly: Duct Outer Surface +591 RHP -10.3923 -6.0 -99.8 0 0 39.8 0 5.85029 0 $Assembly: Lower Coolant +592 RHP -10.3923 -6.0 180.6 0 0 39.7 0 5.85029 0 $Assembly: Upper Coolant +593 RHP -10.3923 -6.0 -99.7 0 0 320.0 0 5.85 0 $Assembly: Full Assembly Surface +600 RCC 0.0 0.0 -110.0 0 0 352.0 18.6 $Coolant Surrounding Assemblies +620 RCC 0.0 0.0 -120.0 0 0 372.0 28.6 $Vessel surrounding the core + +c **********************************Data Cards********************************* +c ******************************k-code Information***************************** +kcode 10000000000 1.0 300 2300 +ksrc -10.3923 6.0 30.0 + 0.0 12.0 30.0 + 10.3923 6.0 30.0 + 10.3923 -6.0 30.0 + -0.0 -12.0 30.0 + -10.3923 -6.0 30.0 +PRDMP 100 10 100 1 +kopts BLOCKSIZE=10 KINETICS=YES PRECURSOR=Yes +DBCN 68J 50000 +c *****************************Material Information**************************** +c Material: ['LiquidNa', 'HT9']; Density: 0.0602 atoms/bn*cm +m460 11023.34c 1.2102E-4 6000.34c 9.1821E-3 14028.34c 7.2426E-3 + 14029.34c 3.6793E-4 14030.34c 2.4283E-4 15031.34c 5.3408E-4 + 16032.34c 3.2672E-4 16033.34c 2.5797E-6 16034.34c 1.4618E-5 + 16036.34c 3.4396E-8 23050.34c 8.1184E-6 23051.34c 3.2392E-3 + 24050.34c 5.2990E-3 24052.34c 1.0219E-1 24053.34c 1.1587E-2 + 24054.34c 2.8843E-3 25055.34c 6.0222E-3 26054.34c 4.9028E-2 + 26056.34c 7.6963E-1 26057.34c 1.7774E-2 26058.34c 2.3654E-3 + 28058.34c 3.1979E-3 28060.34c 1.2318E-3 28061.34c 5.3551E-5 + 28062.34c 1.7075E-4 28064.34c 4.3451E-5 42092.34c 8.3494E-4 + 42094.34c 5.2579E-4 42095.34c 9.1022E-4 42096.34c 9.5791E-4 + 42097.34c 5.5165E-4 42098.34c 1.4015E-3 42100.34c 5.6429E-4 + 74180.34c 1.7996E-6 74182.34c 3.9742E-4 74183.34c 2.1461E-4 + 74184.34c 4.5951E-4 74186.34c 4.2636E-4 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m461 11023.34c 1.0000E+0 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m462 11023.34c 1.0000E+0 +c Material: Liquid Sodium; Density: 0.02428 atoms/bn*cm +m463 11023.34c 1.0000E+0 +c Material: 5Pu22U10Zr; Density: 0.04574 atoms/bn*cm +m480 92235.34c 1.9148E-1 92238.34c 5.4147E-1 94239.34c 4.0225E-2 + 94240.34c 2.5568E-3 40090.34c 1.1539E-1 40091.34c 2.5164E-2 + 40092.34c 3.8463E-2 40094.34c 3.8979E-2 40096.34c 6.2797E-3 +c Material: Liquid Sodium; Density: 0.02428 atoms/bn*cm +m481 11023.34c 1.0000E+0 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m482 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: ['HT9', 'LiquidNa']; Density: 0.007 atoms/bn*cm +m483 6000.34c 9.1539E-3 14028.34c 7.2204E-3 14029.34c 3.6680E-4 + 14030.34c 2.4208E-4 15031.34c 5.3244E-4 16032.34c 3.2572E-4 + 16033.34c 2.5718E-6 16034.34c 1.4573E-5 16036.34c 3.4290E-8 + 23050.34c 8.0935E-6 23051.34c 3.2293E-3 24050.34c 5.2828E-3 + 24052.34c 1.0187E-1 24053.34c 1.1552E-2 24054.34c 2.8754E-3 + 25055.34c 6.0038E-3 26054.34c 4.8877E-2 26056.34c 7.6727E-1 + 26057.34c 1.7720E-2 26058.34c 2.3582E-3 28058.34c 3.1881E-3 + 28060.34c 1.2280E-3 28061.34c 5.3386E-5 28062.34c 1.7023E-4 + 28064.34c 4.3318E-5 42092.34c 8.3238E-4 42094.34c 5.2418E-4 + 42095.34c 9.0743E-4 42096.34c 9.5497E-4 42097.34c 5.4995E-4 + 42098.34c 1.3972E-3 42100.34c 5.6256E-4 74180.34c 1.7941E-6 + 74182.34c 3.9620E-4 74183.34c 2.1395E-4 74184.34c 4.5810E-4 + 74186.34c 4.2506E-4 11023.34c 3.1862E-3 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m484 11023.34c 1.0000E+0 +c Material: ['Void']; Density: 0 atoms/bn*cm +m487 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m488 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m489 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m490 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m491 11023.34c 1.0000E+0 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m492 11023.34c 1.0000E+0 +c Material: 5Pu22U10Zr; Density: 0.04574 atoms/bn*cm +m500 92235.34c 1.9148E-1 92238.34c 5.4147E-1 94239.34c 4.0225E-2 + 94240.34c 2.5568E-3 40090.34c 1.1539E-1 40091.34c 2.5164E-2 + 40092.34c 3.8463E-2 40094.34c 3.8979E-2 40096.34c 6.2797E-3 +c Material: Liquid Sodium; Density: 0.02428 atoms/bn*cm +m501 11023.34c 1.0000E+0 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m502 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: ['HT9', 'LiquidNa']; Density: 0.007 atoms/bn*cm +m503 6000.34c 9.1539E-3 14028.34c 7.2204E-3 14029.34c 3.6680E-4 + 14030.34c 2.4208E-4 15031.34c 5.3244E-4 16032.34c 3.2572E-4 + 16033.34c 2.5718E-6 16034.34c 1.4573E-5 16036.34c 3.4290E-8 + 23050.34c 8.0935E-6 23051.34c 3.2293E-3 24050.34c 5.2828E-3 + 24052.34c 1.0187E-1 24053.34c 1.1552E-2 24054.34c 2.8754E-3 + 25055.34c 6.0038E-3 26054.34c 4.8877E-2 26056.34c 7.6727E-1 + 26057.34c 1.7720E-2 26058.34c 2.3582E-3 28058.34c 3.1881E-3 + 28060.34c 1.2280E-3 28061.34c 5.3386E-5 28062.34c 1.7023E-4 + 28064.34c 4.3318E-5 42092.34c 8.3238E-4 42094.34c 5.2418E-4 + 42095.34c 9.0743E-4 42096.34c 9.5497E-4 42097.34c 5.4995E-4 + 42098.34c 1.3972E-3 42100.34c 5.6256E-4 74180.34c 1.7941E-6 + 74182.34c 3.9620E-4 74183.34c 2.1395E-4 74184.34c 4.5810E-4 + 74186.34c 4.2506E-4 11023.34c 3.1862E-3 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m504 11023.34c 1.0000E+0 +c Material: ['Void']; Density: 0 atoms/bn*cm +m507 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m508 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m509 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m510 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m511 11023.34c 1.0000E+0 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m512 11023.34c 1.0000E+0 +c Material: 5Pu22U10Zr; Density: 0.04574 atoms/bn*cm +m520 92235.34c 1.9148E-1 92238.34c 5.4147E-1 94239.34c 4.0225E-2 + 94240.34c 2.5568E-3 40090.34c 1.1539E-1 40091.34c 2.5164E-2 + 40092.34c 3.8463E-2 40094.34c 3.8979E-2 40096.34c 6.2797E-3 +c Material: Liquid Sodium; Density: 0.02428 atoms/bn*cm +m521 11023.34c 1.0000E+0 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m522 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: ['HT9', 'LiquidNa']; Density: 0.007 atoms/bn*cm +m523 6000.34c 9.1539E-3 14028.34c 7.2204E-3 14029.34c 3.6680E-4 + 14030.34c 2.4208E-4 15031.34c 5.3244E-4 16032.34c 3.2572E-4 + 16033.34c 2.5718E-6 16034.34c 1.4573E-5 16036.34c 3.4290E-8 + 23050.34c 8.0935E-6 23051.34c 3.2293E-3 24050.34c 5.2828E-3 + 24052.34c 1.0187E-1 24053.34c 1.1552E-2 24054.34c 2.8754E-3 + 25055.34c 6.0038E-3 26054.34c 4.8877E-2 26056.34c 7.6727E-1 + 26057.34c 1.7720E-2 26058.34c 2.3582E-3 28058.34c 3.1881E-3 + 28060.34c 1.2280E-3 28061.34c 5.3386E-5 28062.34c 1.7023E-4 + 28064.34c 4.3318E-5 42092.34c 8.3238E-4 42094.34c 5.2418E-4 + 42095.34c 9.0743E-4 42096.34c 9.5497E-4 42097.34c 5.4995E-4 + 42098.34c 1.3972E-3 42100.34c 5.6256E-4 74180.34c 1.7941E-6 + 74182.34c 3.9620E-4 74183.34c 2.1395E-4 74184.34c 4.5810E-4 + 74186.34c 4.2506E-4 11023.34c 3.1862E-3 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m524 11023.34c 1.0000E+0 +c Material: ['Void']; Density: 0 atoms/bn*cm +m527 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m528 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m529 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m530 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m531 11023.34c 1.0000E+0 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m532 11023.34c 1.0000E+0 +c Material: 5Pu22U10Zr; Density: 0.04574 atoms/bn*cm +m540 92235.34c 1.9148E-1 92238.34c 5.4147E-1 94239.34c 4.0225E-2 + 94240.34c 2.5568E-3 40090.34c 1.1539E-1 40091.34c 2.5164E-2 + 40092.34c 3.8463E-2 40094.34c 3.8979E-2 40096.34c 6.2797E-3 +c Material: Liquid Sodium; Density: 0.02428 atoms/bn*cm +m541 11023.34c 1.0000E+0 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m542 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: ['HT9', 'LiquidNa']; Density: 0.007 atoms/bn*cm +m543 6000.34c 9.1539E-3 14028.34c 7.2204E-3 14029.34c 3.6680E-4 + 14030.34c 2.4208E-4 15031.34c 5.3244E-4 16032.34c 3.2572E-4 + 16033.34c 2.5718E-6 16034.34c 1.4573E-5 16036.34c 3.4290E-8 + 23050.34c 8.0935E-6 23051.34c 3.2293E-3 24050.34c 5.2828E-3 + 24052.34c 1.0187E-1 24053.34c 1.1552E-2 24054.34c 2.8754E-3 + 25055.34c 6.0038E-3 26054.34c 4.8877E-2 26056.34c 7.6727E-1 + 26057.34c 1.7720E-2 26058.34c 2.3582E-3 28058.34c 3.1881E-3 + 28060.34c 1.2280E-3 28061.34c 5.3386E-5 28062.34c 1.7023E-4 + 28064.34c 4.3318E-5 42092.34c 8.3238E-4 42094.34c 5.2418E-4 + 42095.34c 9.0743E-4 42096.34c 9.5497E-4 42097.34c 5.4995E-4 + 42098.34c 1.3972E-3 42100.34c 5.6256E-4 74180.34c 1.7941E-6 + 74182.34c 3.9620E-4 74183.34c 2.1395E-4 74184.34c 4.5810E-4 + 74186.34c 4.2506E-4 11023.34c 3.1862E-3 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m544 11023.34c 1.0000E+0 +c Material: ['Void']; Density: 0 atoms/bn*cm +m547 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m548 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m549 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m550 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m551 11023.34c 1.0000E+0 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m552 11023.34c 1.0000E+0 +c Material: 5Pu22U10Zr; Density: 0.04574 atoms/bn*cm +m560 92235.34c 1.9148E-1 92238.34c 5.4147E-1 94239.34c 4.0225E-2 + 94240.34c 2.5568E-3 40090.34c 1.1539E-1 40091.34c 2.5164E-2 + 40092.34c 3.8463E-2 40094.34c 3.8979E-2 40096.34c 6.2797E-3 +c Material: Liquid Sodium; Density: 0.02428 atoms/bn*cm +m561 11023.34c 1.0000E+0 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m562 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: ['HT9', 'LiquidNa']; Density: 0.007 atoms/bn*cm +m563 6000.34c 9.1539E-3 14028.34c 7.2204E-3 14029.34c 3.6680E-4 + 14030.34c 2.4208E-4 15031.34c 5.3244E-4 16032.34c 3.2572E-4 + 16033.34c 2.5718E-6 16034.34c 1.4573E-5 16036.34c 3.4290E-8 + 23050.34c 8.0935E-6 23051.34c 3.2293E-3 24050.34c 5.2828E-3 + 24052.34c 1.0187E-1 24053.34c 1.1552E-2 24054.34c 2.8754E-3 + 25055.34c 6.0038E-3 26054.34c 4.8877E-2 26056.34c 7.6727E-1 + 26057.34c 1.7720E-2 26058.34c 2.3582E-3 28058.34c 3.1881E-3 + 28060.34c 1.2280E-3 28061.34c 5.3386E-5 28062.34c 1.7023E-4 + 28064.34c 4.3318E-5 42092.34c 8.3238E-4 42094.34c 5.2418E-4 + 42095.34c 9.0743E-4 42096.34c 9.5497E-4 42097.34c 5.4995E-4 + 42098.34c 1.3972E-3 42100.34c 5.6256E-4 74180.34c 1.7941E-6 + 74182.34c 3.9620E-4 74183.34c 2.1395E-4 74184.34c 4.5810E-4 + 74186.34c 4.2506E-4 11023.34c 3.1862E-3 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m564 11023.34c 1.0000E+0 +c Material: ['Void']; Density: 0 atoms/bn*cm +m567 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m568 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m569 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m570 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m571 11023.34c 1.0000E+0 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m572 11023.34c 1.0000E+0 +c Material: 5Pu22U10Zr; Density: 0.04574 atoms/bn*cm +m580 92235.34c 1.9148E-1 92238.34c 5.4147E-1 94239.34c 4.0225E-2 + 94240.34c 2.5568E-3 40090.34c 1.1539E-1 40091.34c 2.5164E-2 + 40092.34c 3.8463E-2 40094.34c 3.8979E-2 40096.34c 6.2797E-3 +c Material: Liquid Sodium; Density: 0.02428 atoms/bn*cm +m581 11023.34c 1.0000E+0 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m582 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: ['HT9', 'LiquidNa']; Density: 0.007 atoms/bn*cm +m583 6000.34c 9.1539E-3 14028.34c 7.2204E-3 14029.34c 3.6680E-4 + 14030.34c 2.4208E-4 15031.34c 5.3244E-4 16032.34c 3.2572E-4 + 16033.34c 2.5718E-6 16034.34c 1.4573E-5 16036.34c 3.4290E-8 + 23050.34c 8.0935E-6 23051.34c 3.2293E-3 24050.34c 5.2828E-3 + 24052.34c 1.0187E-1 24053.34c 1.1552E-2 24054.34c 2.8754E-3 + 25055.34c 6.0038E-3 26054.34c 4.8877E-2 26056.34c 7.6727E-1 + 26057.34c 1.7720E-2 26058.34c 2.3582E-3 28058.34c 3.1881E-3 + 28060.34c 1.2280E-3 28061.34c 5.3386E-5 28062.34c 1.7023E-4 + 28064.34c 4.3318E-5 42092.34c 8.3238E-4 42094.34c 5.2418E-4 + 42095.34c 9.0743E-4 42096.34c 9.5497E-4 42097.34c 5.4995E-4 + 42098.34c 1.3972E-3 42100.34c 5.6256E-4 74180.34c 1.7941E-6 + 74182.34c 3.9620E-4 74183.34c 2.1395E-4 74184.34c 4.5810E-4 + 74186.34c 4.2506E-4 11023.34c 3.1862E-3 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m584 11023.34c 1.0000E+0 +c Material: ['Void']; Density: 0 atoms/bn*cm +m587 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m588 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: ['LiquidNa', 'HT9']; Density: 0.06879 atoms/bn*cm +m589 11023.34c 7.0598E-5 6000.34c 9.1825E-3 14028.34c 7.2430E-3 + 14029.34c 3.6795E-4 14030.34c 2.4284E-4 15031.34c 5.3411E-4 + 16032.34c 3.2674E-4 16033.34c 2.5798E-6 16034.34c 1.4619E-5 + 16036.34c 3.4397E-8 23050.34c 8.1188E-6 23051.34c 3.2394E-3 + 24050.34c 5.2993E-3 24052.34c 1.0219E-1 24053.34c 1.1588E-2 + 24054.34c 2.8844E-3 25055.34c 6.0225E-3 26054.34c 4.9030E-2 + 26056.34c 7.6967E-1 26057.34c 1.7775E-2 26058.34c 2.3655E-3 + 28058.34c 3.1980E-3 28060.34c 1.2319E-3 28061.34c 5.3553E-5 + 28062.34c 1.7076E-4 28064.34c 4.3453E-5 42092.34c 8.3498E-4 + 42094.34c 5.2581E-4 42095.34c 9.1026E-4 42096.34c 9.5796E-4 + 42097.34c 5.5167E-4 42098.34c 1.4016E-3 42100.34c 5.6432E-4 + 74180.34c 1.7997E-6 74182.34c 3.9744E-4 74183.34c 2.1462E-4 + 74184.34c 4.5953E-4 74186.34c 4.2639E-4 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m590 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m591 11023.34c 1.0000E+0 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m592 11023.34c 1.0000E+0 +c Material: Liquid Sodium; Density: 2e-05 atoms/bn*cm +m600 11023.34c 1.0000E+0 +c Material: HT9; Density: 0.08598 atoms/bn*cm +m620 6000.34c 9.1832E-3 14028.34c 7.2435E-3 14029.34c 3.6798E-4 + 14030.34c 2.4286E-4 15031.34c 5.3414E-4 16032.34c 3.2676E-4 + 16033.34c 2.5800E-6 16034.34c 1.4620E-5 16036.34c 3.4400E-8 + 23050.34c 8.1193E-6 23051.34c 3.2396E-3 24050.34c 5.2997E-3 + 24052.34c 1.0220E-1 24053.34c 1.1588E-2 24054.34c 2.8846E-3 + 25055.34c 6.0229E-3 26054.34c 4.9034E-2 26056.34c 7.6972E-1 + 26057.34c 1.7776E-2 26058.34c 2.3657E-3 28058.34c 3.1983E-3 + 28060.34c 1.2320E-3 28061.34c 5.3557E-5 28062.34c 1.7077E-4 + 28064.34c 4.3456E-5 42092.34c 8.3504E-4 42094.34c 5.2585E-4 + 42095.34c 9.1033E-4 42096.34c 9.5803E-4 42097.34c 5.5171E-4 + 42098.34c 1.4017E-3 42100.34c 5.6436E-4 74180.34c 1.7999E-6 + 74182.34c 3.9747E-4 74183.34c 2.1463E-4 74184.34c 4.5956E-4 + 74186.34c 4.2642E-4 \ No newline at end of file diff --git a/fridge/test_suite/assembly_test.py b/fridge/test_suite/assembly_test.py index e19d054..04376dc 100644 --- a/fridge/test_suite/assembly_test.py +++ b/fridge/test_suite/assembly_test.py @@ -8,6 +8,7 @@ global_vars.read_input_file('A271_Assembly_Test') assembly_info = [global_vars.file_name, '01A01', global_vars, None] + def test_assembly(): """Check the base assembly init""" baseAssembly = Assembly.Assembly(assembly_info) @@ -161,7 +162,6 @@ def test_fuel_assembly(): assert a.assemblyShell.surfaceCard == '113 RHP 0.0 0.0 -99.7 0 0 320.0 0 5.805 0 $Assembly: Full Assembly Surface' assert a.everythingElse.cellCard == '114 0 113 imp:n=0 $Everything Else' - global_vars = gb.GlobalVariables() global_vars.read_input_file('Smear_Assembly_Test') assembly_info2 = [global_vars.file_name, '01A01', global_vars, None] @@ -318,3 +318,35 @@ def test_shifted_fuel_assembly(): assert a.assemblyShell.cellCard == '113 0 -113 fill=100 imp:n=1 $Assembly' assert a.assemblyShell.surfaceCard == '113 RHP 0.0 0.0 -109.7 0 0 320.0 0 5.805 0 $Assembly: Full Assembly Surface' assert a.everythingElse.cellCard == '114 0 113 imp:n=0 $Everything Else' + + +global_vars = gb.GlobalVariables() +core = 'A271_Assembly_Test' +assem = 'A271_Test' +global_vars.read_input_file(core, assembly_perturbations={assem: {'fuelMaterial': 'U10Zr', 'fuelDiameter': 0.1, + 'cladMaterial': 'SS316'}}) +assembly_info4 = [global_vars.file_name, '01A01', global_vars, None] + + +def test_fueled_perturbation(): + a = FuelAssembly.FuelAssembly(assembly_info4) + assert a.fuelMaterial == 'U10Zr' + assert a.fuelDiameter == 0.1 + assert a.cladMaterial == 'SS316' + + +global_vars = gb.GlobalVariables() +core = 'Smear_Assembly_Test' +assem = 'Smear_Test' +global_vars.read_input_file(core, assembly_perturbations={assem: {'smearMaterial': {'LiquidPb': 1.0}, + 'zPosition': 50, + 'smearRegionHeight': 50}}) +assembly_info5 = [global_vars.file_name, '01A01', global_vars, None] + + +def test_smear_perturbation(): + a = SmearAssembly.SmearAssembly(assembly_info5) + assert a.smearMaterial == {'LiquidPb': 1.0} + assert a.zPosition == 50 + assert a.smearRegionHeight == 50 + assert a.smearRegion.cellCard == "100 100 0.03103 -100 u=100 imp:n=1 $Assembly: Smear Region" diff --git a/fridge/test_suite/core_test.py b/fridge/test_suite/core_test.py index 6450ad0..96877a8 100644 --- a/fridge/test_suite/core_test.py +++ b/fridge/test_suite/core_test.py @@ -36,3 +36,15 @@ def test_getCoreData(): assert core.name == 'Test_Core' assert core.vesselThickness == 10 assert core.vesselMaterialString == 'HT9' + + +global_vars = gb.GlobalVariables() +global_vars.read_input_file('Full_Core_Test', output_name='test', temperature=1200, void_per=0.001) + + +def test_perturbedCoreData(): + core = Core.Core() + core.read_core_data('Core_Test') + assert global_vars.output_name == 'test' + assert global_vars.temperature == 1200 + assert global_vars.void_per == 0.001 diff --git a/fridge/test_suite/global_variables_test.py b/fridge/test_suite/global_variables_test.py index e8eff85..269f264 100644 --- a/fridge/test_suite/global_variables_test.py +++ b/fridge/test_suite/global_variables_test.py @@ -52,4 +52,4 @@ def test_global_variables_read_assembly(): assert global_variables.kopts is True assert global_variables.ksens is True assert global_variables.output_name == 'Fuel_Assembly_Test' - assert global_variables.input_type == 'Single' \ No newline at end of file + assert global_variables.input_type == 'Single' diff --git a/fridge/test_suite/reactorMaker_test.py b/fridge/test_suite/reactorMaker_test.py index 608d5f9..28c6b43 100644 --- a/fridge/test_suite/reactorMaker_test.py +++ b/fridge/test_suite/reactorMaker_test.py @@ -7,12 +7,13 @@ global_vars = gb.GlobalVariables() cur_dir = os.path.dirname(__file__) mcnp_dir = os.path.join(cur_dir, '../mcnp_input_files/') +mcnp_test_dir = os.path.join(cur_dir, '../mcnp_input_files/') def test_singleAssembly_Fuel(): global_vars.read_input_file('A271_Assembly_Test') rM.single_assembly_maker(global_vars) - knownTestFile = glob.glob(os.path.join(mcnp_dir, 'Prefab_Fuel_Assembly_Test.i')) + knownTestFile = glob.glob(os.path.join(mcnp_test_dir, 'Prefab_Fuel_Assembly_Test.i')) testFile = glob.glob(os.path.join(mcnp_dir, 'Fuel_Assembly_Test.i')) assert filecmp.cmp(testFile[0], knownTestFile[0]) is True @@ -20,7 +21,7 @@ def test_singleAssembly_Fuel(): def test_singleAssembly_Smear(): global_vars.read_input_file('Smear_Assembly_Test') rM.single_assembly_maker(global_vars) - knownTestFile = glob.glob(os.path.join(mcnp_dir, 'Prefab_Smear_Assembly_Test.i')) + knownTestFile = glob.glob(os.path.join(mcnp_test_dir, 'Prefab_Smear_Assembly_Test.i')) testFile = glob.glob(os.path.join(mcnp_dir, 'Smear_Assembly_Test.i')) assert filecmp.cmp(testFile[0], knownTestFile[0]) is True @@ -28,7 +29,7 @@ def test_singleAssembly_Smear(): def test_fullCore(): global_vars.read_input_file('Full_Core_Test') rM.core_maker(global_vars) - knownTestFile = glob.glob(os.path.join(mcnp_dir, 'Prefab_Full_Core_Test.i')) + knownTestFile = glob.glob(os.path.join(mcnp_test_dir, 'Prefab_Full_Core_Test.i')) testFile = glob.glob(os.path.join(mcnp_dir, 'Full_Core_Test.i')) assert filecmp.cmp(testFile[0], knownTestFile[0]) is True @@ -36,6 +37,18 @@ def test_fullCore(): def test_fullCore_void(): global_vars.read_input_file('Full_Core_Void_Test') rM.core_maker(global_vars) - knownTestFile = glob.glob(os.path.join(mcnp_dir, 'Prefab_Full_Core_Void_Test.i')) + knownTestFile = glob.glob(os.path.join(mcnp_test_dir, 'Prefab_Full_Core_Void_Test.i')) testFile = glob.glob(os.path.join(mcnp_dir, 'Full_Core_Void_Test.i')) - assert filecmp.cmp(testFile[0], knownTestFile[0]) is True \ No newline at end of file + assert filecmp.cmp(testFile[0], knownTestFile[0]) is True + + +def test_perturbedCoreData(): + global_vars.read_input_file('Full_Core_Test', assembly_perturbations={'A271_Test2': + {'plenumMaterial': {'Void': 1.0}}}, + output_name='Perturbed_Test', + temperature=600, + void_per=0.001) + rM.core_maker(global_vars) + knownTestFile = glob.glob(os.path.join(mcnp_test_dir, 'Prefab_Perturbed_Test.i')) + testFile = glob.glob(os.path.join(mcnp_dir, 'Perturbed_Test.i')) + assert filecmp.cmp(testFile[0], knownTestFile[0]) is True diff --git a/fridge/utilities/database.py b/fridge/utilities/database.py index c67202f..9b19400 100644 --- a/fridge/utilities/database.py +++ b/fridge/utilities/database.py @@ -41,9 +41,6 @@ def create_hdf5_database(database_name, dir=os.getcwd()): reactor_keff = reactor['keff'][0] temp_dif = doppler_temp - reactor['temperature'][0] reactor['doppler_coeff'] = (doppler_keff - reactor_keff) / (reactor_keff * doppler_keff * temp_dif) * pow(10, 5) - print('Doppler: {} Regular: {}'.format(doppler_keff, reactor_keff)) - print('Temp: {} Coeff: {}'.format(temp_dif, reactor['doppler_coeff'][0])) - print() ds = reactor.create_dataset('void_coeff', (1,)) ds[0] = (void_keff - reactor_keff) / (reactor_keff * void_keff * 99.9) * pow(10, 5) From f65bb06cf2226dca746bd23b5a09d5244559bd87 Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Tue, 1 Oct 2019 18:39:01 -0600 Subject: [PATCH 11/12] Updated tests to include perturbations. --- .../{ => Test_Inputs}/Prefab_Fuel_Assembly_Test.i | 0 .../mcnp_input_files/{ => Test_Inputs}/Prefab_Full_Core_Test.i | 0 .../{ => Test_Inputs}/Prefab_Full_Core_Void_Test.i | 0 .../mcnp_input_files/{ => Test_Inputs}/Prefab_Perturbed_Test.i | 0 .../{ => Test_Inputs}/Prefab_Smear_Assembly_Test.i | 0 fridge/test_suite/reactorMaker_test.py | 2 +- 6 files changed, 1 insertion(+), 1 deletion(-) rename fridge/mcnp_input_files/{ => Test_Inputs}/Prefab_Fuel_Assembly_Test.i (100%) rename fridge/mcnp_input_files/{ => Test_Inputs}/Prefab_Full_Core_Test.i (100%) rename fridge/mcnp_input_files/{ => Test_Inputs}/Prefab_Full_Core_Void_Test.i (100%) rename fridge/mcnp_input_files/{ => Test_Inputs}/Prefab_Perturbed_Test.i (100%) rename fridge/mcnp_input_files/{ => Test_Inputs}/Prefab_Smear_Assembly_Test.i (100%) diff --git a/fridge/mcnp_input_files/Prefab_Fuel_Assembly_Test.i b/fridge/mcnp_input_files/Test_Inputs/Prefab_Fuel_Assembly_Test.i similarity index 100% rename from fridge/mcnp_input_files/Prefab_Fuel_Assembly_Test.i rename to fridge/mcnp_input_files/Test_Inputs/Prefab_Fuel_Assembly_Test.i diff --git a/fridge/mcnp_input_files/Prefab_Full_Core_Test.i b/fridge/mcnp_input_files/Test_Inputs/Prefab_Full_Core_Test.i similarity index 100% rename from fridge/mcnp_input_files/Prefab_Full_Core_Test.i rename to fridge/mcnp_input_files/Test_Inputs/Prefab_Full_Core_Test.i diff --git a/fridge/mcnp_input_files/Prefab_Full_Core_Void_Test.i b/fridge/mcnp_input_files/Test_Inputs/Prefab_Full_Core_Void_Test.i similarity index 100% rename from fridge/mcnp_input_files/Prefab_Full_Core_Void_Test.i rename to fridge/mcnp_input_files/Test_Inputs/Prefab_Full_Core_Void_Test.i diff --git a/fridge/mcnp_input_files/Prefab_Perturbed_Test.i b/fridge/mcnp_input_files/Test_Inputs/Prefab_Perturbed_Test.i similarity index 100% rename from fridge/mcnp_input_files/Prefab_Perturbed_Test.i rename to fridge/mcnp_input_files/Test_Inputs/Prefab_Perturbed_Test.i diff --git a/fridge/mcnp_input_files/Prefab_Smear_Assembly_Test.i b/fridge/mcnp_input_files/Test_Inputs/Prefab_Smear_Assembly_Test.i similarity index 100% rename from fridge/mcnp_input_files/Prefab_Smear_Assembly_Test.i rename to fridge/mcnp_input_files/Test_Inputs/Prefab_Smear_Assembly_Test.i diff --git a/fridge/test_suite/reactorMaker_test.py b/fridge/test_suite/reactorMaker_test.py index 28c6b43..7272d6a 100644 --- a/fridge/test_suite/reactorMaker_test.py +++ b/fridge/test_suite/reactorMaker_test.py @@ -6,7 +6,7 @@ global_vars = gb.GlobalVariables() cur_dir = os.path.dirname(__file__) -mcnp_dir = os.path.join(cur_dir, '../mcnp_input_files/') +mcnp_dir = os.path.join(cur_dir, '../mcnp_input_files/Test_Inputs') mcnp_test_dir = os.path.join(cur_dir, '../mcnp_input_files/') From e32e19c4f5e86b0eb73da8c7e4ab8074bf5e2cd0 Mon Sep 17 00:00:00 2001 From: ryanstwrt Date: Tue, 1 Oct 2019 18:43:30 -0600 Subject: [PATCH 12/12] Updated tests to include perturbations. --- fridge/test_suite/driver_test.py | 8 +++++--- fridge/test_suite/reactorMaker_test.py | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fridge/test_suite/driver_test.py b/fridge/test_suite/driver_test.py index f243d4b..cf909ed 100644 --- a/fridge/test_suite/driver_test.py +++ b/fridge/test_suite/driver_test.py @@ -5,12 +5,14 @@ cur_dir = os.path.dirname(__file__) mcnp_dir = os.path.join(cur_dir, '../mcnp_input_files/') +mcnp_test_dir = os.path.join(cur_dir, '../mcnp_input_files/Test_Inputs/') + def test_fridge_driver_singleAssembly(): """Test that the new files gets made to the right directory""" fd.main('A271_Assembly_Test') - knownTestFile = glob.glob(os.path.join(mcnp_dir, 'Prefab_Fuel_Assembly_Test.i')) + knownTestFile = glob.glob(os.path.join(mcnp_test_dir, 'Prefab_Fuel_Assembly_Test.i')) testFile = glob.glob(os.path.join(mcnp_dir, 'Fuel_Assembly_Test.i')) assert filecmp.cmp(testFile[0], knownTestFile[0]) is True @@ -18,6 +20,6 @@ def test_fridge_driver_singleAssembly(): def test_fridge_driver_core(): """Test that the new files gets made to the right directory""" fd.main('Full_Core_Test') - knownTestFile = glob.glob(os.path.join(mcnp_dir, 'Prefab_Full_Core_Test.i')) - testFile = glob.glob(os.path.join(mcnp_dir, 'Prefab_Full_Core_Test.i')) + knownTestFile = glob.glob(os.path.join(mcnp_test_dir, 'Prefab_Full_Core_Test.i')) + testFile = glob.glob(os.path.join(mcnp_dir, 'Full_Core_Test.i')) assert filecmp.cmp(testFile[0], knownTestFile[0]) is True \ No newline at end of file diff --git a/fridge/test_suite/reactorMaker_test.py b/fridge/test_suite/reactorMaker_test.py index 7272d6a..7f34341 100644 --- a/fridge/test_suite/reactorMaker_test.py +++ b/fridge/test_suite/reactorMaker_test.py @@ -6,8 +6,8 @@ global_vars = gb.GlobalVariables() cur_dir = os.path.dirname(__file__) -mcnp_dir = os.path.join(cur_dir, '../mcnp_input_files/Test_Inputs') -mcnp_test_dir = os.path.join(cur_dir, '../mcnp_input_files/') +mcnp_dir = os.path.join(cur_dir, '../mcnp_input_files/') +mcnp_test_dir = os.path.join(cur_dir, '../mcnp_input_files/Test_Inputs/') def test_singleAssembly_Fuel():