From ff50c1f1d2135a386579d9c4f94db3ab6ae4878f Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sat, 16 Dec 2023 19:50:12 -0800 Subject: [PATCH] Added new stress test --- run_all.sh | 123 ++++++ setup.sh | 2 +- stress-test/benchmarking/benchmark.py | 205 +++++++++ stress-test/benchmarking/plot.py | 194 ++++++++ stress-test/benchmarking/report.py | 119 +++++ stress-test/benchmarking/results.py | 75 ++++ stress-test/benchmarking/uncertainties.csv | 487 +++++++++++++++++++++ 7 files changed, 1204 insertions(+), 1 deletion(-) create mode 100755 run_all.sh create mode 100644 stress-test/benchmarking/benchmark.py create mode 100644 stress-test/benchmarking/plot.py create mode 100644 stress-test/benchmarking/report.py create mode 100644 stress-test/benchmarking/results.py create mode 100644 stress-test/benchmarking/uncertainties.csv diff --git a/run_all.sh b/run_all.sh new file mode 100755 index 0000000..34e374b --- /dev/null +++ b/run_all.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +set -e + +find . -name testing.out -delete +find . -name build_testing.out -delete +find . -name tallies_testing.out -delete + +# conda activate openmc-env + +BACK_DIR=${PWD} + +OPENMC_BIN=${CONDA_PREFIX}/bin/openmc +PYTHON_BIN=${CONDA_PREFIX}/bin/python +OPENMC_CROSS_SECTIONS=/opt/xdata/endfb-vii.1-hdf5/cross_sections.xml +export OPENMC_CROSS_SECTIONS + +for dir in AP1000/*/ +do + cd "$dir" + ${PYTHON_BIN} *.py | tee testing.out + + cd ${BACK_DIR} +done + +for dir in ARC700/*/ +do + cd "$dir" + ${OPENMC_BIN} problem | tee testing.out + + cd ${BACK_DIR} +done + +cd BEAVRS +./make_beavrs.py --optimal +cd ${BACK_DIR} + +cd BWR +rm -f *.xml *.h5 +jupyter nbconvert --execute BWR.ipynb --inplace | tee testing.out +cd ${BACK_DIR} + +cd Depletion +rm -f *.h5 [d-z]*.xml tallies.out +jupyter nbconvert --execute depletion.ipynb --inplace | tee testing.out +cd ${BACK_DIR} + +cd examples/hexagon +jupyter nbconvert --execute hexagonal-lattice.ipynb --inplace | tee testing.out +cd ../post_process +jupyter nbconvert --execute post-processing.ipynb --inplace | tee testing.out +cd ${BACK_DIR} + +cd RBMK +jupyter nbconvert --execute RBMK.ipynb --inplace | tee testing.out +cd ${BACK_DIR} + +#python3 Rep_Na_3_55.py + +cd SFR +jupyter nbconvert --execute SFR.ipynb --inplace | tee testing.out +cd ${BACK_DIR} + +cd stress-test/benchmark-1 +${OPENMC_BIN} | tee testing.out +cd ../benchmark-2/case1_1 + +cd ../case1_1 +${OPENMC_BIN} | tee testing.out +cd ../case1_2 +${OPENMC_BIN} | tee testing.out +cd ../case1_3 +${OPENMC_BIN} | tee testing.out +cd ../case2_1 +${OPENMC_BIN} | tee testing.out +cd ../case2_2 +${OPENMC_BIN} | tee testing.out +cd ../case2_3 +${OPENMC_BIN} | tee testing.out + +cd ../../lattice-computations +jupyter nbconvert --execute BEAVRS.ipynb --inplace | tee testing.out + +cd ../mc-performance +${PYTHON_BIN} build.py | tee build_testing.out +${PYTHON_BIN} generate_tallies.py | tee tallies_testing.out +${OPENMC_BIN} + +#### TO DO: Add stress-test testing +cd ${BACK_DIR} + +cd TRIGA +jupyter nbconvert --execute TRIGA.ipynb --inplace | tee testing.out +cd ${BACK_DIR} + +cd VHTR +jupyter nbconvert --execute VHTR.ipynb --inplace | tee testing.out +cd ${BACK_DIR} + +cd VVER +jupyter nbconvert --execute VVER.ipynb --inplace | tee testing.out +cd ${BACK_DIR} + +for dir in VVER/*/ +do + cd "$dir" + ${OPENMC_BIN} problem | tee testing.out + + cd ${BACK_DIR} +done + +cd WBN1 +for file in *.ipynb +do + filename=$(basename -- "$file") + filename="${filename%.*}" + jupyter nbconvert --execute ${file} --inplace | tee ${filename}_testing.out +done +cd ${BACK_DIR} + + +printf "ALL TESTS COMPLETED SUCCESSFULLY!\n" + diff --git a/setup.sh b/setup.sh index 764e1a8..b4b2c4e 100644 --- a/setup.sh +++ b/setup.sh @@ -86,7 +86,7 @@ openmc -g -n 1000000 -s 32 -t -e problem # tar -xzvf hdf5-1.8.13.tar.gz # cd hdf5-1.8.13 # mkdir build && cd build -# ../configure --enable-shared \ +# CC=${MPI_ROOT}/bin/mpicc ../configure --enable-shared \ # --enable-parallel \ # --prefix=${HDF5_DIR} # ${MAKE} -j16 diff --git a/stress-test/benchmarking/benchmark.py b/stress-test/benchmarking/benchmark.py new file mode 100644 index 0000000..1d161c4 --- /dev/null +++ b/stress-test/benchmarking/benchmark.py @@ -0,0 +1,205 @@ +import argparse +import os +from pathlib import Path +import re +import shutil +import subprocess +import time + +import openmc + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('-l', '--benchmarks', type=Path, + default=Path('benchmarks/lists/pst-short'), + help='List of benchmarks to run.') + parser.add_argument('-c', '--code', choices=['openmc', 'mcnp'], + default='openmc', + help='Code used to run benchmarks.') + parser.add_argument('-x', '--cross-sections', type=str, + default=os.getenv('OPENMC_CROSS_SECTIONS'), + help='OpenMC cross sections XML file.') + parser.add_argument('-s', '--suffix', type=str, default='80c', + help='MCNP cross section suffix') + parser.add_argument('--suffix-thermal', type=str, default='20t', + help='MCNP thermal scattering suffix') + parser.add_argument('-p', '--particles', type=int, default=10000, + help='Number of source particles.') + parser.add_argument('-b', '--batches', type=int, default=150, + help='Number of batches.') + parser.add_argument('-i', '--inactive', type=int, default=50, + help='Number of inactive batches.') + parser.add_argument('-m', '--max-batches', type=int, default=10000, + help='Maximum number of batches.') + parser.add_argument('--threads', type=int, default=None, + help='Number of OpenMP threads') + parser.add_argument('-t', '--threshold', type=float, default=0.0001, + help='Value of the standard deviation trigger on eigenvalue.') + parser.add_argument('--mpi-args', default="", + help="MPI execute command and any additional MPI arguments") + args = parser.parse_args() + + # Create timestamp + timestamp = time.strftime("%Y-%m-%d-%H%M%S") + + # Check that executable exists + executable = 'mcnp6' if args.code == 'mcnp' else 'openmc' + if not shutil.which(executable, os.X_OK): + msg = f'Unable to locate executable {executable} in path.' + raise IOError(msg) + mpi_args = args.mpi_args.split() + + # Create directory and set filename for results + results_dir = Path('results') + results_dir.mkdir(exist_ok=True) + outfile = results_dir / f'{timestamp}.csv' + + # Get a copy of the benchmarks repository + if not Path('benchmarks').is_dir(): + repo = 'https://github.com/mit-crpg/benchmarks.git' + subprocess.run(['git', 'clone', repo], check=True) + + # Get the list of benchmarks to run + if not args.benchmarks.is_file(): + msg = f'Unable to locate benchmark list {args.benchmarks}.' + raise IOError(msg) + with open(args.benchmarks) as f: + benchmarks = [Path(line) for line in f.read().split()] + + # Set cross sections + if args.cross_sections is not None: + os.environ["OPENMC_CROSS_SECTIONS"] = args.cross_sections + + # Prepare and run benchmarks + for i, benchmark in enumerate(benchmarks): + print(f"{i + 1} {benchmark} ", end="", flush=True) + + path = 'benchmarks' / benchmark + + if args.code == 'openmc': + openmc.reset_auto_ids() + + # Remove old statepoint files + for f in path.glob('statepoint.*.h5'): + os.remove(f) + + # Modify settings + settings = openmc.Settings.from_xml(path / 'settings.xml') + settings.particles = args.particles + settings.inactive = args.inactive + settings.batches = args.batches + settings.keff_trigger = {'type': 'std_dev', + 'threshold': args.threshold} + settings.trigger_active = True + settings.trigger_max_batches = args.max_batches + settings.output = {'tallies': False} + settings.export_to_xml(path) + + # Re-generate materials if Python script is present + genmat_script = path / "generate_materials.py" + if genmat_script.is_file(): + subprocess.run(["python", "generate_materials.py"], cwd=path) + + # Run benchmark + arg_list = mpi_args + ['openmc'] + if args.threads is not None: + arg_list.extend(['-s', f'{args.threads}']) + proc = subprocess.run( + arg_list, + cwd=path, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + universal_newlines=True, + ) + + # Determine last statepoint + t_last = 0 + last_statepoint = None + for sp in path.glob('statepoint.*.h5'): + mtime = sp.stat().st_mtime + if mtime >= t_last: + t_last = mtime + last_statepoint = sp + + # Read k-effective mean and standard deviation from statepoint + if last_statepoint is not None: + with openmc.StatePoint(last_statepoint) as sp: + mean = sp.keff.nominal_value + stdev = sp.keff.std_dev + + else: + # Read input file + with open(path / 'input', 'r') as f: + lines = f.readlines() + + # Update criticality source card + line = f'kcode {args.particles} 1 {args.inactive} {args.batches}\n' + for i in range(len(lines)): + if lines[i].strip().startswith('kcode'): + lines[i] = line + break + + # Update cross section suffix + match = '(7[0-4]c)|(8[0-6]c)' + if not re.match(match, args.suffix): + msg = f'Unsupported cross section suffix {args.suffix}.' + raise ValueError(msg) + lines = [re.sub(match, args.suffix, x) for x in lines] + + # Update thermal cross section suffix + match = r'\.[1-9][0-9]t' + lines = [re.sub(match, f'.{args.suffix_thermal}', x) for x in lines] + + # Write new input file + with open(path / 'input', 'w') as f: + f.write(''.join(lines)) + + # Remove old MCNP output files + for f in ('outp', 'runtpe', 'srctp'): + try: + os.remove(path / f) + except OSError: + pass + + # Run benchmark and capture and print output + arg_list = mpi_args + [executable, 'inp=input'] + if args.threads is not None: + arg_list.extend(['tasks', f'{args.threads}']) + proc = subprocess.run( + arg_list, + cwd=path, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + universal_newlines=True + ) + + # Read k-effective mean and standard deviation from output + with open(path / 'outp', 'r') as f: + for line in f: + if line.strip().startswith('col/abs/trk len'): + words = line.split() + mean = float(words[2]) + stdev = float(words[3]) + break + else: + mean = stdev = "" + + # Write output to file + with open(path / f"output_{timestamp}", "w") as fh: + fh.write(proc.stdout) + + if proc.returncode != 0: + mean = stdev = "" + print() + else: + # Display k-effective + print(f"{mean:.5f} ± {stdev:.5f}" if mean else "") + + # Write results + words = str(benchmark).split('/') + name = words[1] + case = '/' + words[3] if len(words) > 3 else '' + line = f'{name}{case},{mean},{stdev}\n' + with open(outfile, 'a') as f: + f.write(line) diff --git a/stress-test/benchmarking/plot.py b/stress-test/benchmarking/plot.py new file mode 100644 index 0000000..2a10aa4 --- /dev/null +++ b/stress-test/benchmarking/plot.py @@ -0,0 +1,194 @@ +from argparse import ArgumentParser +from fnmatch import fnmatch +from math import sqrt +import os +from pathlib import Path + +import matplotlib.pyplot as plt +from matplotlib.patches import Polygon +import numpy as np + +from .results import get_result_dataframe, get_icsbep_dataframe, abbreviated_name + + +def plot(files, labels=None, plot_type='keff', match=None, show_mean=True, + show_shaded=True, show_uncertainties=True): + """For all benchmark cases, produce a plot comparing the k-effective mean + from the calculation to the experimental value along with uncertainties. + + Parameters + ---------- + files : iterable of str + Name of a results file produced by the benchmarking script. + labels: iterable of str + Labels for each dataset to use in legend + plot_type : {'keff', 'diff'} + Type of plot to produce. A 'keff' plot shows the ratio of the + calculation k-effective mean to the experimental value (C/E). A 'diff' + plot shows the difference between C/E values for different + calculations. Default is 'keff'. + match : str + Pattern to match benchmark names to + show_mean : bool + Whether to show bar/line indicating mean value + show_shaded : bool + Whether to show shaded region indicating uncertainty of mean + show_uncertainties : bool + Whether to show uncertainties for individual cases + + Returns + ------- + matplotlib.axes.Axes + A matplotlib.axes.Axes object + + """ + if labels is None: + labels = [Path(f).name for f in files] + + # Read data from spreadsheets + dataframes = {} + for csvfile, label in zip(files, labels): + dataframes[label] = get_result_dataframe(csvfile).dropna() + + # Get model keff and uncertainty from ICSBEP + icsbep = get_icsbep_dataframe() + + # Determine common benchmarks + base = labels[0] + index = dataframes[base].index + for df in dataframes.values(): + index = index.intersection(df.index) + + # Applying matching as needed + if match is not None: + cond = index.map(lambda x: fnmatch(x, match)) + index = index[cond] + + # Setup x values (integers) and corresponding tick labels + n = index.size + x = np.arange(1, n + 1) + xticklabels = index.map(abbreviated_name) + + fig, ax = plt.subplots(figsize=(17, 6)) + + if plot_type == 'diff': + # Check that two results files are specified + if len(files) < 2: + raise ValueError('Must provide two or more files to create a "diff" plot') + + kwargs = {'mec': 'black', 'mew': 0.15, 'fmt': 'o'} + + keff0 = dataframes[base]['keff'].loc[index] + stdev0 = 1.96*dataframes[base]['stdev'].loc[index] + for i, label in enumerate(labels[1:]): + df = dataframes[label] + keff_i = df['keff'].loc[index] + stdev_i = 1.96*df['stdev'].loc[index] + + diff = (keff_i - keff0) * 1e5 + err = np.sqrt(stdev_i**2 + stdev0**2) * 1e5 + kwargs['label'] = labels[i + 1] + ' - ' + labels[0] + if show_uncertainties: + ax.errorbar(x, diff, yerr=err, color=f'C{i}', **kwargs) + else: + ax.plot(x, diff, color=f'C{i}', **kwargs) + + # Plot mean difference + if show_mean: + mu = diff.mean() + if show_shaded: + sigma = diff.std() / sqrt(n) + verts = [(0, mu - sigma), (0, mu + sigma), (n+1, mu + sigma), (n+1, mu - sigma)] + poly = Polygon(verts, facecolor=f'C{i}', alpha=0.5) + ax.add_patch(poly) + else: + ax.plot([-1, n], [mu, mu], '-', color=f'C{i}', lw=1.5) + + # Define y-axis label + ylabel = r'$\Delta k_\mathrm{eff}$ [pcm]' + + else: + for i, (label, df) in enumerate(dataframes.items()): + # Calculate keff C/E and its standard deviation + coe = (df['keff'] / icsbep['keff']).loc[index] + stdev = 1.96 * df['stdev'].loc[index] + + # Plot keff C/E + kwargs = {'color': f'C{i}', 'mec': 'black', 'mew': 0.15, 'label': label} + if show_uncertainties: + ax.errorbar(x, coe, yerr=stdev, fmt='o', **kwargs) + else: + ax.plot(x, coe, 'o', **kwargs) + + # Plot mean C/E + if show_mean: + mu = coe.mean() + sigma = coe.std() / sqrt(n) + if show_shaded: + verts = [(0, mu - sigma), (0, mu + sigma), (n+1, mu + sigma), (n+1, mu - sigma)] + poly = Polygon(verts, facecolor=f'C{i}', alpha=0.5) + ax.add_patch(poly) + else: + ax.plot([-1, n], [mu, mu], '-', color=f'C{i}', lw=1.5) + + # Show shaded region of benchmark model uncertainties + unc = icsbep['stdev'].loc[index] + vert = np.block([[x, x[::-1]], [1 + unc, 1 - unc[::-1]]]).T + poly = Polygon(vert, facecolor='gray', edgecolor=None, alpha=0.2) + ax.add_patch(poly) + + # Define axes labels and title + ylabel = r'$k_\mathrm{eff}$ C/E' + + # Configure plot + ax.set_axisbelow(True) + ax.set_xlim((0, n+1)) + ax.set_xticks(x) + ax.set_xticklabels(xticklabels, rotation='vertical') + ax.tick_params(axis='x', which='major', labelsize=10) + ax.tick_params(axis='y', which='major', labelsize=14) + ax.set_xlabel('Benchmark case', fontsize=18) + ax.set_ylabel(ylabel, fontsize=18) + ax.grid(True, which='both', color='lightgray', ls='-', alpha=0.7) + ax.legend(numpoints=1) + return ax + + +def main(): + """Produce plot of benchmark results""" + parser = ArgumentParser() + parser.add_argument('files', nargs='+', help='Result CSV files') + parser.add_argument('--labels', help='Comma-separated list of dataset labels') + parser.add_argument('--plot-type', choices=['keff', 'diff'], default='keff') + parser.add_argument('--match', help='Pattern to match benchmark names to') + parser.add_argument('--show-mean', action='store_true', help='Show line/bar indicating mean') + parser.add_argument('--no-show-mean', dest='show_mean', action='store_false', + help='Do not show line/bar indicating mean') + parser.add_argument('--show-uncertainties', action='store_true', + help='Show uncertainty bars on individual cases') + parser.add_argument('--no-show-uncertainties', dest='show_uncertainties', action='store_false', + help='Do not show uncertainty bars on individual cases') + parser.add_argument('--show-shaded', action='store_true', + help='Show shaded region indicating uncertainty of mean C/E') + parser.add_argument('--no-show-shaded', dest='show_shaded', action='store_false', + help='Do not show shaded region indicating uncertainty of mean C/E') + parser.add_argument('-o', '--output', help='Filename to save to') + parser.set_defaults(show_uncertainties=True, show_shaded=True, show_mean=True) + args = parser.parse_args() + + if args.labels is not None: + args.labels = args.labels.split(',') + + ax = plot( + args.files, + labels=args.labels, + plot_type=args.plot_type, + match=args.match, + show_mean=args.show_mean, + show_shaded=args.show_shaded, + show_uncertainties=args.show_uncertainties, + ) + if args.output is not None: + plt.savefig(args.output, bbox_inches='tight', transparent=True) + else: + plt.show() diff --git a/stress-test/benchmarking/report.py b/stress-test/benchmarking/report.py new file mode 100644 index 0000000..73e6832 --- /dev/null +++ b/stress-test/benchmarking/report.py @@ -0,0 +1,119 @@ +from argparse import ArgumentParser +from fnmatch import fnmatch +from pathlib import Path + +from openmc import __version__ + +from .results import get_result_dataframe, get_icsbep_dataframe + +def write_document(result, output, match=None): + """Write LaTeX document section with preamble, run info, and table + entries for all benchmark data comparing the calculated and + experimental values along with uncertainties. + + Parameters + ---------- + result : str + Name of a result csv file produced by the benchmarking script. + output : str + Name of the file to be written, ideally a .tex file + match : str + Pattern to match benchmark names to + + """ + # Define document preamble + preamble = [ + r'\documentclass[12pt]{article}', + r'\usepackage[letterpaper, margin=1in]{geometry}', + r'\usepackage{dcolumn}', + r'\usepackage{tabularx}', + r'\usepackage{booktabs}', + r'\usepackage{longtable}', + r'\usepackage{fancyhdr}', + r'\usepackage{siunitx}', + r'\setlength\LTcapwidth{5.55in}', + r'\setlength\LTleft{0.5in}', + r'\setlength\LTright{0.5in}' + ] + + # Define document start and end snippets + doc_start = [r'\begin{document}', r'\part*{Benchmark Results}'] + doc_end = [r'\end{document}'] + + # Convert from list to string + result = result[0] + + label = Path(result).name + + # Read data from spreadsheet + dataframes = {} + dataframes[label] = get_result_dataframe(result).dropna() + + # Get model keff and uncertainty from ICSBEP + icsbep = get_icsbep_dataframe() + + # Determine ICSBEP case names + base = label + index = dataframes[base].index + + df = dataframes[label] + + # Applying matching as needed + if match is not None: + cond = index.map(lambda x: fnmatch(x, match)) + index = index[cond] + + # Custom Table Description and Caption + desc = (r'Table \ref{tab:1} uses (nuclear data info here) and openmc ' + f'version {__version__} to evaluate ICSBEP benchmarks.') + caption = r'\caption{\label{tab:1} Criticality (' + label + r') Benchmark Results}\\' + + # Define Table Entry + table = [ + desc, + r'\begin{longtable}{lcccc}', + caption, + r'\endfirsthead', + r'\midrule', + r'\multicolumn{5}{r}{Continued on Next Page}\\', + r'\midrule', + r'\endfoot', + r'\bottomrule', + r'\endlastfoot', + r'\toprule', + r'& Exp. $k_{\textrm{eff}}$&Exp. unc.& Calc. $k_{\textrm{eff}}$&Calc. unc.\\', + r'\midrule', + '% DATA', + r'\end{longtable}' + ] + + for case in index: + # Obtain and format calculated values + keff = '{:.6f}'.format(df['keff'].loc[case]) + keff = r'\num{' + keff + '}' + + stdev = '{:.6f}'.format(df['stdev'].loc[case]) + stdev = r'\num{' + stdev + '}' + + # Obtain and format experimental values + icsbep_keff = '{:.4f}'.format(icsbep['keff'].loc[case]) + icsbep_stdev = '{:.4f}'.format(icsbep['stdev'].loc[case]) + + # Insert data values into table as separate entries + table.insert(-1, rf'{case}&{icsbep_keff}&{icsbep_stdev}&{keff}&{stdev}\\') + + # Write all accumulated lines + with open(output, 'w') as tex: + tex.writelines('\n'.join(preamble + doc_start + table + doc_end)) + + +def main(): + """Produce LaTeX document with tabulated benchmark results""" + + parser = ArgumentParser() + parser.add_argument('result', nargs='+', help='Result CSV file') + parser.add_argument('--match', help='Pattern to match benchmark names to') + parser.add_argument('-o', '--output', default='report.tex', help='Filename to save to') + args = parser.parse_args() + + write_document(args.result, args.output, args.match) diff --git a/stress-test/benchmarking/results.py b/stress-test/benchmarking/results.py new file mode 100644 index 0000000..2012851 --- /dev/null +++ b/stress-test/benchmarking/results.py @@ -0,0 +1,75 @@ +import csv +from pathlib import Path + +import pandas as pd + + +def abbreviated_name(name): + """Return short name for ICSBEP benchmark cases + + Parameters + ---------- + name : str + ICSBEP benchmark name, e.g. "pu-met-fast-021/case-2" + + Returns + ------- + str + Abbreviated name, e.g. "pmf21-2" + + """ + model, *case = name.split('/') + volume, form, spectrum, number = model.split('-') + abbreviation = volume[0] + form[0] + spectrum[0] + if case: + casenum = case[0].replace('case', '') + else: + casenum = '' + return f'{abbreviation}{int(number)}{casenum}' + + +def get_result_dataframe(filename): + """Read the data from a file produced by the benchmarking script. + + Parameters + ---------- + filename : str + Name of a results file produced by the benchmarking script. + + Returns + ------- + pandas.DataFrame + Dataframe with 'keff' and 'stdev' columns. The benchmark name is used as + the index in the dataframe. + + """ + return pd.read_csv( + filename, + header=None, + names=['name', 'keff', 'stdev'], + usecols=[0, 1, 2], + index_col="name", + ) + + +def get_icsbep_dataframe(): + """Read the benchmark model k-effective means and uncertainties. + + Returns + ------- + pandas.DataFrame + Dataframe with 'keff' and 'stdev' columns. The benchmark name is used as + the index in the dataframe. + + """ + cwd = Path(__file__).parent + index = [] + keff = [] + stdev = [] + with open(cwd / 'uncertainties.csv', 'r') as csvfile: + reader = csv.reader(csvfile, skipinitialspace=True) + for benchmark, case, mean, uncertainty in reader: + index.append(f'{benchmark}/{case}' if case else benchmark) + keff.append(float(mean)) + stdev.append(float(uncertainty)) + return pd.DataFrame({'keff': keff, 'stdev': stdev}, index=index) diff --git a/stress-test/benchmarking/uncertainties.csv b/stress-test/benchmarking/uncertainties.csv new file mode 100644 index 0000000..162f373 --- /dev/null +++ b/stress-test/benchmarking/uncertainties.csv @@ -0,0 +1,487 @@ +heu-comp-inter-003, case-1, 1.0, 0.0057 +heu-comp-inter-003, case-2, 1.0, 0.0061 +heu-comp-inter-003, case-3, 1.0, 0.0056 +heu-comp-inter-003, case-4, 1.0, 0.0055 +heu-comp-inter-003, case-5, 1.0, 0.0047 +heu-comp-inter-003, case-6, 1.0, 0.0047 +heu-comp-inter-003, case-7, 1.0, 0.0050 +heu-met-fast-001, case-1, 1.0, 0.001 +heu-met-fast-001, case-2, 1.0, 0.001 +heu-met-fast-002, case-1, 1.0, 0.003 +heu-met-fast-002, case-2, 1.0, 0.003 +heu-met-fast-002, case-3, 1.0, 0.003 +heu-met-fast-002, case-4, 1.0, 0.003 +heu-met-fast-002, case-5, 1.0, 0.003 +heu-met-fast-002, case-6, 1.0, 0.003 +heu-met-fast-003, case-1, 1.0, 0.005 +heu-met-fast-003, case-2, 1.0, 0.005 +heu-met-fast-003, case-3, 1.0, 0.005 +heu-met-fast-003, case-4, 1.0, 0.003 +heu-met-fast-003, case-5, 1.0, 0.003 +heu-met-fast-003, case-6, 1.0, 0.003 +heu-met-fast-003, case-7, 1.0, 0.003 +heu-met-fast-003, case-8, 1.0, 0.005 +heu-met-fast-003, case-9, 1.0, 0.005 +heu-met-fast-003, case-10, 1.0, 0.005 +heu-met-fast-003, case-11, 1.0, 0.005 +heu-met-fast-003, case-12, 1.0, 0.003 +heu-met-fast-004, case-1, 1.0020, 0.0 +heu-met-fast-004, case-2, 0.9985, 0.0 +heu-met-fast-008, , 0.9989, 0.0016 +heu-met-fast-009, case-1, 0.9992, 0.0015 +heu-met-fast-009, case-2, 0.9992, 0.0015 +heu-met-fast-011, , 0.9989, 0.0015 +heu-met-fast-012, , 0.9992, 0.0018 +heu-met-fast-013, , 0.9990, 0.0015 +heu-met-fast-014, , 0.9989, 0.0017 +heu-met-fast-015, , 0.9996, 0.0017 +heu-met-fast-018, case-1, 1.0, 0.0014 +heu-met-fast-018, case-2, 1.0, 0.0014 +heu-met-fast-019, case-1, 1.0, 0.0028 +heu-met-fast-019, case-2, 1.0, 0.0028 +heu-met-fast-020, case-1, 1.0, 0.0028 +heu-met-fast-020, case-2, 1.0, 0.0028 +heu-met-fast-021, case-1, 1.0, 0.0024 +heu-met-fast-021, case-2, 1.0, 0.0024 +heu-met-fast-022, case-1, 1.0, 0.0019 +heu-met-fast-022, case-2, 1.0, 0.0019 +heu-met-fast-026, b-1, 0.9982, 0.0042 +heu-met-fast-026, b-2, 0.9982, 0.0042 +heu-met-fast-026, b-3, 1.0, 0.0038 +heu-met-fast-026, b-4, 1.0, 0.0038 +heu-met-fast-026, b-5, 1.0, 0.0038 +heu-met-fast-026, b-6, 0.9982, 0.0042 +heu-met-fast-026, b-7, 0.9982, 0.0042 +heu-met-fast-026, b-8, 1.0, 0.0038 +heu-met-fast-026, b-9, 1.0, 0.0038 +heu-met-fast-026, b-10, 1.0, 0.0038 +heu-met-fast-026, c-1, 0.9982, 0.0042 +heu-met-fast-026, c-2, 0.9982, 0.0042 +heu-met-fast-026, c-3, 0.9982, 0.0042 +heu-met-fast-026, c-4, 1.0, 0.0038 +heu-met-fast-026, c-5, 1.0, 0.0038 +heu-met-fast-026, c-6, 1.0, 0.0038 +heu-met-fast-026, c-7, 1.0, 0.0038 +heu-met-fast-026, c-8, 0.9982, 0.0042 +heu-met-fast-026, c-9, 0.9982, 0.0042 +heu-met-fast-026, c-10, 1.0, 0.0038 +heu-met-fast-026, c-11, 1.0, 0.0038 +heu-met-fast-026, c-12, 1.0, 0.0038 +heu-met-fast-026, d-1, 0.9982, 0.0042 +heu-met-fast-026, d-2, 0.9982, 0.0042 +heu-met-fast-026, d-3, 1.0, 0.0038 +heu-met-fast-026, d-4, 1.0, 0.0038 +heu-met-fast-026, d-5, 1.0, 0.0038 +heu-met-fast-026, d-6, 0.9982, 0.0042 +heu-met-fast-026, d-7, 0.9982, 0.0042 +heu-met-fast-026, d-8, 1.0, 0.0038 +heu-met-fast-026, d-9, 1.0, 0.0038 +heu-met-fast-026, d-10, 1.0, 0.0038 +heu-met-fast-027, , 1.0, 0.0025 +heu-met-fast-028, , 1.0, 0.0030 +heu-met-fast-029, , 1.0, 0.0020 +heu-met-fast-032, case-1, 1.0, 0.0016 +heu-met-fast-032, case-2, 1.0, 0.0027 +heu-met-fast-032, case-3, 1.0, 0.0017 +heu-met-fast-032, case-4, 1.0, 0.0017 +heu-met-fast-034, case-1, 0.9990, 0.0012 +heu-met-fast-034, case-2, 0.9990, 0.0012 +heu-met-fast-034, case-3, 0.9990, 0.0012 +heu-met-fast-041, case-1, 1.0013, 0.0030 +heu-met-fast-041, case-2, 1.0022, 0.0043 +heu-met-fast-041, case-3, 1.0006, 0.0029 +heu-met-fast-041, case-4, 1.0006, 0.0025 +heu-met-fast-041, case-5, 1.0006, 0.0031 +heu-met-fast-041, case-6, 1.0006, 0.0045 +heu-met-fast-058, case-1, 1.0, 0.0025 +heu-met-fast-058, case-2, 1.0, 0.0035 +heu-met-fast-058, case-3, 1.0, 0.0027 +heu-met-fast-058, case-4, 1.0, 0.0021 +heu-met-fast-058, case-5, 1.0, 0.0033 +heu-met-fast-066, case-1, 1.0030, 0.0033 +heu-met-fast-066, case-2, 1.0023, 0.0029 +heu-met-fast-066, case-3, 1.0023, 0.0026 +heu-met-fast-066, case-4, 1.0043, 0.0043 +heu-met-fast-066, case-5, 1.0030, 0.0033 +heu-met-fast-066, case-6, 1.0028, 0.0030 +heu-met-fast-066, case-7, 1.0048, 0.0039 +heu-met-fast-066, case-8, 1.0039, 0.0040 +heu-met-fast-066, case-9, 1.0027, 0.0036 +heu-met-fast-069, case-1, 0.9998, 0.0004 +heu-met-fast-069, case-2, 0.9994, 0.0004 +heu-met-inter-006, case-1, 0.9977, 0.0008 +heu-met-inter-006, case-2, 1.0001, 0.0008 +heu-met-inter-006, case-3, 1.0015, 0.0009 +heu-met-inter-006, case-4, 1.0016, 0.0008 +heu-met-therm-001, case-1, 1.0010, 0.0060 +heu-met-therm-001, case-2, 1.0010, 0.0060 +heu-met-therm-014, case-1, 0.9931, 0.0015 +heu-met-therm-014, case-2, 0.9939, 0.0015 +heu-sol-therm-001, case-1, 1.0004, 0.0060 +heu-sol-therm-001, case-2, 1.0021, 0.0072 +heu-sol-therm-001, case-3, 1.0003, 0.0035 +heu-sol-therm-001, case-4, 1.0008, 0.0053 +heu-sol-therm-001, case-5, 1.0001, 0.0049 +heu-sol-therm-001, case-6, 1.0002, 0.0046 +heu-sol-therm-001, case-7, 1.0008, 0.0040 +heu-sol-therm-001, case-8, 0.9998, 0.0038 +heu-sol-therm-001, case-9, 1.0008, 0.0054 +heu-sol-therm-001, case-10, 0.9993, 0.0054 +heu-sol-therm-004, case-1, 1.0, 0.00325 +heu-sol-therm-004, case-2, 1.0, 0.00355 +heu-sol-therm-004, case-3, 1.0, 0.0039 +heu-sol-therm-004, case-4, 1.0, 0.00455 +heu-sol-therm-004, case-5, 1.0, 0.0052 +heu-sol-therm-004, case-6, 1.0, 0.00585 +heu-sol-therm-009, case-1, 0.9990, 0.0043 +heu-sol-therm-009, case-2, 1.0, 0.0039 +heu-sol-therm-009, case-3, 1.0, 0.0036 +heu-sol-therm-009, case-4, 0.9986, 0.0035 +heu-sol-therm-010, case-1, 1.0, 0.0029 +heu-sol-therm-010, case-2, 1.0, 0.0029 +heu-sol-therm-010, case-3, 1.0, 0.0029 +heu-sol-therm-010, case-4, 0.9992, 0.0029 +heu-sol-therm-011, case-1, 1.0, 0.0023 +heu-sol-therm-011, case-2, 1.0, 0.0023 +heu-sol-therm-012, , 0.9999, 0.0058 +heu-sol-therm-013, case-1, 1.0012, 0.0026 +heu-sol-therm-013, case-2, 1.0007, 0.0036 +heu-sol-therm-013, case-3, 1.0009, 0.0036 +heu-sol-therm-013, case-4, 1.0003, 0.0036 +heu-sol-therm-020, case-1, 0.9966, 0.0116 +heu-sol-therm-020, case-2, 0.9956, 0.0093 +heu-sol-therm-020, case-3, 0.9957, 0.0079 +heu-sol-therm-020, case-4, 0.9955, 0.0078 +heu-sol-therm-020, case-5, 0.9959, 0.0077 +heu-sol-therm-032, , 1.0015, 0.0026 +heu-sol-therm-042, case-1, 0.9957, 0.0039 +heu-sol-therm-042, case-2, 0.9965, 0.0036 +heu-sol-therm-042, case-3, 0.9994, 0.0028 +heu-sol-therm-042, case-4, 1.0, 0.0034 +heu-sol-therm-042, case-5, 1.0, 0.0034 +heu-sol-therm-042, case-6, 1.0, 0.0037 +heu-sol-therm-042, case-7, 1.0, 0.0036 +heu-sol-therm-042, case-8, 1.0, 0.0035 +heu-sol-therm-043, case-1, 0.9986, 0.0031 +heu-sol-therm-043, case-2, 0.9995, 0.0026 +heu-sol-therm-043, case-3, 0.9990, 0.0025 +ieu-met-fast-001, case-1, 0.9988, 0.0009 +ieu-met-fast-001, case-2, 0.9997, 0.0009 +ieu-met-fast-001, case-3, 0.9993, 0.0003 +ieu-met-fast-001, case-4, 1.0002, 0.0003 +ieu-met-fast-002, , 1.0, 0.0030 +ieu-met-fast-003, case-1, 1.0, 0.0017 +ieu-met-fast-003, case-2, 1.0, 0.0017 +ieu-met-fast-004, case-1, 1.0, 0.0030 +ieu-met-fast-004, case-2, 1.0, 0.0030 +ieu-met-fast-005, case-1, 1.0, 0.0021 +ieu-met-fast-005, case-2, 1.0, 0.0021 +ieu-met-fast-006, case-1, 1.0, 0.0023 +ieu-met-fast-006, case-2, 1.0, 0.0023 +ieu-met-fast-007, case-1, 1.0045, 0.0007 +ieu-met-fast-007, case-2, 1.0049, 0.0008 +ieu-met-fast-007, case-4, 1.0049, 0.0008 +ieu-met-fast-009, , 1.0, 0.0053 +leu-comp-therm-008, case-1, 1.0007, 0.0012 +leu-comp-therm-008, case-2, 1.0007, 0.0012 +leu-comp-therm-008, case-3, 1.0007, 0.0012 +leu-comp-therm-008, case-4, 1.0007, 0.0012 +leu-comp-therm-008, case-5, 1.0007, 0.0012 +leu-comp-therm-008, case-6, 1.0007, 0.0012 +leu-comp-therm-008, case-7, 1.0007, 0.0012 +leu-comp-therm-008, case-8, 1.0007, 0.0012 +leu-comp-therm-008, case-9, 1.0007, 0.0012 +leu-comp-therm-008, case-10, 1.0007, 0.0012 +leu-comp-therm-008, case-11, 1.0007, 0.0012 +leu-comp-therm-008, case-12, 1.0007, 0.0012 +leu-comp-therm-008, case-13, 1.0007, 0.0012 +leu-comp-therm-008, case-14, 1.0007, 0.0012 +leu-comp-therm-008, case-15, 1.0007, 0.0012 +leu-comp-therm-008, case-16, 1.0007, 0.0012 +leu-comp-therm-008, case-17, 1.0007, 0.0012 +leu-sol-therm-001, , 0.9991, 0.0029 +leu-sol-therm-002, case-1, 1.0038, 0.0040 +leu-sol-therm-002, case-2, 1.0024, 0.0037 +leu-sol-therm-002, case-3, 1.0024, 0.0044 +leu-sol-therm-003, case-1, 0.9997, 0.0039 +leu-sol-therm-003, case-2, 0.9993, 0.0042 +leu-sol-therm-003, case-3, 0.9995, 0.0042 +leu-sol-therm-003, case-4, 0.9995, 0.0042 +leu-sol-therm-003, case-5, 0.9997, 0.0048 +leu-sol-therm-003, case-6, 0.9999, 0.0049 +leu-sol-therm-003, case-7, 0.9994, 0.0049 +leu-sol-therm-003, case-8, 0.9993, 0.0052 +leu-sol-therm-003, case-9, 0.9996, 0.0052 +leu-sol-therm-004, case-1, 0.9994, 0.0008 +leu-sol-therm-004, case-29, 0.9999, 0.0009 +leu-sol-therm-004, case-33, 0.9999, 0.0009 +leu-sol-therm-004, case-34, 0.9999, 0.0010 +leu-sol-therm-004, case-46, 0.9999, 0.0010 +leu-sol-therm-004, case-51, 0.9994, 0.0011 +leu-sol-therm-004, case-54, 0.9996, 0.0011 +leu-sol-therm-007, case-14, 0.9961, 0.0009 +leu-sol-therm-007, case-30, 0.9973, 0.0009 +leu-sol-therm-007, case-32, 0.9985, 0.0010 +leu-sol-therm-007, case-36, 0.9988, 0.0011 +leu-sol-therm-007, case-49, 0.9983, 0.0011 +leu-sol-therm-016, case-105, 0.9996, 0.0013 +leu-sol-therm-016, case-113, 0.9999, 0.0013 +leu-sol-therm-016, case-125, 0.9994, 0.0014 +leu-sol-therm-016, case-129, 0.9996, 0.0014 +leu-sol-therm-016, case-131, 0.9995, 0.0014 +leu-sol-therm-016, case-140, 0.9992, 0.0015 +leu-sol-therm-016, case-196, 0.9994, 0.0015 +mix-comp-therm-002, pnl-30d, 1.0010, 0.0059 +mix-comp-therm-002, pnl-31d, 1.0009, 0.0045 +mix-comp-therm-002, pnl-32d, 1.0024, 0.0029 +mix-comp-therm-002, pnl-33d, 1.0024, 0.0021 +mix-comp-therm-002, pnl-34d, 1.0038, 0.0022 +mix-comp-therm-002, pnl-35d, 1.0029, 0.0024 +mix-comp-therm-002, pnl-30, 1.0024, 0.0060 +mix-comp-therm-002, pnl-31, 1.0009, 0.0047 +mix-comp-therm-002, pnl-32, 1.0042, 0.0031 +mix-comp-therm-002, pnl-33, 1.0024, 0.0024 +mix-comp-therm-002, pnl-34, 1.0038, 0.0025 +mix-comp-therm-002, pnl-35, 1.0029, 0.0027 +mix-comp-therm-004, case-1, 1.0, 0.0046 +mix-comp-therm-004, case-2, 1.0, 0.0046 +mix-comp-therm-004, case-3, 1.0, 0.0046 +mix-comp-therm-004, case-4, 1.0, 0.0039 +mix-comp-therm-004, case-5, 1.0, 0.0039 +mix-comp-therm-004, case-6, 1.0, 0.0039 +mix-comp-therm-004, case-7, 1.0, 0.0040 +mix-comp-therm-004, case-8, 1.0, 0.0040 +mix-comp-therm-004, case-9, 1.0, 0.0040 +mix-comp-therm-004, case-10, 1.0, 0.0051 +mix-comp-therm-004, case-11, 1.0, 0.0051 +mix-met-fast-001, , 1.0, 0.0016 +mix-met-fast-003, , 0.9993, 0.0016 +mix-met-fast-007, case-1, 1.0, 0.0045 +mix-met-fast-007, case-2, 1.0, 0.0023 +mix-met-fast-007, case-3, 1.0, 0.0028 +mix-met-fast-007, case-4, 1.0, 0.0028 +mix-met-fast-007, case-5, 1.0, 0.0032 +mix-met-fast-007, case-6, 1.0, 0.0035 +mix-met-fast-007, case-7, 1.0, 0.0032 +mix-met-fast-007, case-8, 1.0, 0.0030 +mix-met-fast-007, case-9, 1.0, 0.0028 +mix-met-fast-007, case-10, 1.0, 0.0027 +mix-met-fast-007, case-11, 1.0, 0.0026 +mix-met-fast-007, case-12, 1.0, 0.0030 +mix-met-fast-007, case-13, 1.0, 0.0033 +mix-met-fast-007, case-14, 1.0, 0.0032 +mix-met-fast-007, case-15, 1.0, 0.0032 +mix-met-fast-007, case-16, 1.0, 0.0028 +mix-met-fast-007, case-17, 1.0, 0.0028 +mix-met-fast-007, case-18, 1.0, 0.0030 +mix-met-fast-007, case-19, 1.0, 0.0034 +mix-met-fast-007, case-20, 1.0, 0.0030 +mix-met-fast-007, case-21, 1.0, 0.0031 +mix-met-fast-007, case-22, 1.0, 0.0030 +mix-met-fast-007, case-23, 1.0, 0.0028 +mix-met-fast-008, 8a-2, 0.9992, 0.0063 +mix-met-fast-008, 8b, 1.0010, 0.0023 +mix-met-fast-008, 8c-2, 0.9860, 0.0044 +mix-met-fast-008, 8d, 0.9730, 0.0045 +mix-met-fast-008, 8e, 1.0060, 0.0069 +mix-met-fast-008, 8f-2, 0.9710, 0.0042 +mix-met-fast-008, 8h, 1.0300, 0.0025 +pu-comp-inter-001, , 1.0, 0.0110 +pu-met-fast-001, , 1.0, 0.0020 +pu-met-fast-002, , 1.0, 0.0020 +pu-met-fast-003, case-101, 1.0, 0.0030 +pu-met-fast-003, case-102, 1.0, 0.0030 +pu-met-fast-003, case-103, 1.0, 0.0030 +pu-met-fast-003, case-104, 1.0, 0.0030 +pu-met-fast-003, case-105, 1.0, 0.0030 +pu-met-fast-005, , 1.0, 0.0013 +pu-met-fast-006, , 1.0, 0.0030 +pu-met-fast-008, case-1, 1.0, 0.0006 +pu-met-fast-008, case-2, 1.0, 0.0006 +pu-met-fast-009, , 1.0, 0.0027 +pu-met-fast-010, , 1.0, 0.0018 +pu-met-fast-011, , 1.0, 0.0010 +pu-met-fast-012, case-1, 1.0009, 0.0021 +pu-met-fast-015, case-1, 1.0041, 0.0026 +pu-met-fast-018, , 1.0, 0.0030 +pu-met-fast-019, , 0.9992, 0.0015 +pu-met-fast-020, , 0.9993, 0.0017 +pu-met-fast-021, case-1, 1.0, 0.0026 +pu-met-fast-021, case-2, 1.0, 0.0026 +pu-met-fast-022, case-1, 1.0, 0.0021 +pu-met-fast-022, case-2, 1.0, 0.0021 +pu-met-fast-023, case-1, 1.0, 0.0020 +pu-met-fast-023, case-2, 1.0, 0.0020 +pu-met-fast-024, case-1, 1.0, 0.0020 +pu-met-fast-024, case-2, 1.0, 0.0020 +pu-met-fast-025, case-1, 1.0, 0.0020 +pu-met-fast-025, case-2, 1.0, 0.0020 +pu-met-fast-026, case-1, 1.0, 0.0024 +pu-met-fast-026, case-2, 1.0, 0.0024 +pu-met-fast-029, case-1, 1.0, 0.0020 +pu-met-fast-029, case-2, 1.0, 0.0020 +pu-met-fast-032, case-1, 1.0, 0.0020 +pu-met-fast-032, case-2, 1.0, 0.0020 +pu-met-fast-035, case-1, 1.0, 0.0016 +pu-met-fast-036, case-1, 1.0, 0.0031 +pu-met-fast-039, case-1, 1.0, 0.0022 +pu-met-fast-040, case-1, 1.0, 0.0038 +pu-met-fast-044, case-1, 0.9977, 0.0021 +pu-met-fast-044, case-2, 0.9980, 0.0022 +pu-met-fast-044, case-3, 0.9977, 0.0021 +pu-met-fast-044, case-4, 0.9978, 0.0026 +pu-met-fast-044, case-5, 0.9977, 0.0024 +pu-sol-therm-001, case-1, 1.0, 0.0050 +pu-sol-therm-001, case-2, 1.0, 0.0050 +pu-sol-therm-001, case-3, 1.0, 0.0050 +pu-sol-therm-001, case-4, 1.0, 0.0050 +pu-sol-therm-001, case-5, 1.0, 0.0050 +pu-sol-therm-001, case-6, 1.0, 0.0050 +pu-sol-therm-002, case-1, 1.0, 0.0047 +pu-sol-therm-002, case-2, 1.0, 0.0047 +pu-sol-therm-002, case-3, 1.0, 0.0047 +pu-sol-therm-002, case-4, 1.0, 0.0047 +pu-sol-therm-002, case-5, 1.0, 0.0047 +pu-sol-therm-002, case-6, 1.0, 0.0047 +pu-sol-therm-002, case-7, 1.0, 0.0047 +pu-sol-therm-003, case-1, 1.0, 0.0047 +pu-sol-therm-003, case-2, 1.0, 0.0047 +pu-sol-therm-003, case-3, 1.0, 0.0047 +pu-sol-therm-003, case-4, 1.0, 0.0047 +pu-sol-therm-003, case-5, 1.0, 0.0047 +pu-sol-therm-003, case-6, 1.0, 0.0047 +pu-sol-therm-003, case-7, 1.0, 0.0047 +pu-sol-therm-003, case-8, 1.0, 0.0047 +pu-sol-therm-004, case-1, 1.0, 0.0047 +pu-sol-therm-004, case-2, 1.0, 0.0047 +pu-sol-therm-004, case-3, 1.0, 0.0047 +pu-sol-therm-004, case-4, 1.0, 0.0047 +pu-sol-therm-004, case-5, 1.0, 0.0047 +pu-sol-therm-004, case-6, 1.0, 0.0047 +pu-sol-therm-004, case-7, 1.0, 0.0047 +pu-sol-therm-004, case-8, 1.0, 0.0047 +pu-sol-therm-004, case-9, 1.0, 0.0047 +pu-sol-therm-004, case-10, 1.0, 0.0047 +pu-sol-therm-004, case-11, 1.0, 0.0047 +pu-sol-therm-004, case-12, 1.0, 0.0047 +pu-sol-therm-004, case-13, 1.0, 0.0047 +pu-sol-therm-005, case-1, 1.0, 0.0047 +pu-sol-therm-005, case-2, 1.0, 0.0047 +pu-sol-therm-005, case-3, 1.0, 0.0047 +pu-sol-therm-005, case-4, 1.0, 0.0047 +pu-sol-therm-005, case-5, 1.0, 0.0047 +pu-sol-therm-005, case-6, 1.0, 0.0047 +pu-sol-therm-005, case-7, 1.0, 0.0047 +pu-sol-therm-005, case-8, 1.0, 0.0047 +pu-sol-therm-005, case-9, 1.0, 0.0047 +pu-sol-therm-006, case-1, 1.0, 0.0035 +pu-sol-therm-006, case-2, 1.0, 0.0035 +pu-sol-therm-006, case-3, 1.0, 0.0035 +pu-sol-therm-007, case-2, 1.0, 0.0047 +pu-sol-therm-007, case-3, 1.0, 0.0047 +pu-sol-therm-007, case-5, 1.0, 0.0047 +pu-sol-therm-007, case-6, 1.0, 0.0047 +pu-sol-therm-007, case-7, 1.0, 0.0047 +pu-sol-therm-007, case-8, 1.0, 0.0047 +pu-sol-therm-007, case-9, 1.0, 0.0047 +pu-sol-therm-007, case-10, 1.0, 0.0047 +pu-sol-therm-009, case-1, 1.0000, 0.0033 +pu-sol-therm-009, case-1a, 1.0003, 0.0033 +pu-sol-therm-009, case-2, 1.0000, 0.0033 +pu-sol-therm-009, case-2a, 1.0003, 0.0033 +pu-sol-therm-009, case-3, 1.0000, 0.0033 +pu-sol-therm-009, case-3a, 1.0003, 0.0033 +pu-sol-therm-011, case-16-1, 1.0, 0.0052 +pu-sol-therm-011, case-16-2, 1.0, 0.0052 +pu-sol-therm-011, case-16-3, 1.0, 0.0052 +pu-sol-therm-011, case-16-4, 1.0, 0.0052 +pu-sol-therm-011, case-16-5, 1.0, 0.0052 +pu-sol-therm-011, case-18-1, 1.0, 0.0052 +pu-sol-therm-011, case-18-2, 1.0, 0.0052 +pu-sol-therm-011, case-18-3, 1.0, 0.0052 +pu-sol-therm-011, case-18-4, 1.0, 0.0052 +pu-sol-therm-011, case-18-5, 1.0, 0.0052 +pu-sol-therm-011, case-18-6, 1.0, 0.0052 +pu-sol-therm-011, case-18-7, 1.0, 0.0052 +pu-sol-therm-012, case-1, 1.0, 0.0043 +pu-sol-therm-012, case-2, 1.0, 0.0043 +pu-sol-therm-012, case-3, 1.0, 0.0058 +pu-sol-therm-012, case-4, 1.0, 0.0058 +pu-sol-therm-012, case-5, 1.0, 0.0058 +pu-sol-therm-012, case-6, 1.0, 0.0007 +pu-sol-therm-012, case-7, 1.0, 0.0013 +pu-sol-therm-012, case-8, 1.0, 0.0013 +pu-sol-therm-012, case-9, 1.0, 0.0043 +pu-sol-therm-012, case-10, 1.0, 0.0043 +pu-sol-therm-012, case-11, 1.0, 0.0043 +pu-sol-therm-012, case-12, 1.0, 0.0043 +pu-sol-therm-012, case-13, 1.0, 0.0058 +pu-sol-therm-012, case-14, 1.0, 0.0013 +pu-sol-therm-012, case-15, 1.0, 0.0043 +pu-sol-therm-012, case-16, 1.0, 0.0043 +pu-sol-therm-012, case-17, 1.0, 0.0043 +pu-sol-therm-012, case-18, 1.0, 0.0043 +pu-sol-therm-012, case-19, 1.0, 0.0043 +pu-sol-therm-012, case-20, 1.0, 0.0058 +pu-sol-therm-012, case-21, 1.0, 0.0058 +pu-sol-therm-012, case-22, 1.0, 0.0058 +pu-sol-therm-012, case-23, 1.0, 0.0058 +pu-sol-therm-018, case-1, 1.0, 0.0034 +pu-sol-therm-018, case-2, 1.0, 0.0034 +pu-sol-therm-018, case-3, 1.0, 0.0032 +pu-sol-therm-018, case-4, 1.0, 0.0030 +pu-sol-therm-018, case-5, 1.0, 0.0030 +pu-sol-therm-018, case-6, 1.0, 0.0031 +pu-sol-therm-018, case-7, 1.0, 0.0032 +pu-sol-therm-018, case-8, 1.0, 0.0033 +pu-sol-therm-018, case-9, 1.0, 0.0034 +pu-sol-therm-021, case-1, 1.0, 0.0032 +pu-sol-therm-021, case-2, 1.0, 0.0032 +pu-sol-therm-021, case-3, 1.0, 0.0065 +pu-sol-therm-021, case-4, 1.0, 0.0025 +pu-sol-therm-021, case-5, 1.0, 0.0025 +pu-sol-therm-021, case-6, 1.0, 0.0044 +pu-sol-therm-021, case-7, 1.0, 0.0032 +pu-sol-therm-021, case-8, 1.0, 0.0065 +pu-sol-therm-021, case-9, 1.0, 0.0032 +pu-sol-therm-021, case-10, 1.0, 0.0025 +pu-sol-therm-034, case-1, 1.0, 0.0062 +pu-sol-therm-034, case-2, 1.0, 0.0044 +pu-sol-therm-034, case-3, 1.0, 0.0040 +pu-sol-therm-034, case-4, 1.0, 0.0039 +pu-sol-therm-034, case-5, 1.0, 0.0040 +pu-sol-therm-034, case-6, 1.0, 0.0042 +pu-sol-therm-034, case-7, 1.0, 0.0057 +pu-sol-therm-034, case-8, 1.0, 0.0055 +pu-sol-therm-034, case-9, 1.0, 0.0052 +pu-sol-therm-034, case-10, 1.0, 0.0052 +pu-sol-therm-034, case-11, 1.0, 0.0048 +pu-sol-therm-034, case-12, 1.0, 0.0042 +pu-sol-therm-034, case-13, 1.0, 0.0043 +pu-sol-therm-034, case-14, 1.0, 0.0044 +pu-sol-therm-034, case-15, 1.0, 0.0042 +u233-comp-therm-001, case-1, 1.0006, 0.0027 +u233-comp-therm-001, case-2, 1.0015, 0.0025 +u233-comp-therm-001, case-3, 1.0000, 0.0024 +u233-comp-therm-001, case-4, 1.0007, 0.0025 +u233-comp-therm-001, case-5, 1.0015, 0.0026 +u233-comp-therm-001, case-6, 1.0015, 0.0028 +u233-comp-therm-001, case-7, 0.9995, 0.0027 +u233-comp-therm-001, case-8, 1.0004, 0.0028 +u233-met-fast-001, , 1.0, 0.0010 +u233-met-fast-002, case-1, 1.0, 0.0010 +u233-met-fast-002, case-2, 1.0, 0.0011 +u233-met-fast-003, case-1, 1.0, 0.0010 +u233-met-fast-003, case-2, 1.0, 0.0010 +u233-met-fast-004, case-1, 1.0, 0.0007 +u233-met-fast-004, case-2, 1.0, 0.0008 +u233-met-fast-005, case-1, 1.0, 0.0030 +u233-met-fast-005, case-2, 1.0, 0.0030 +u233-met-fast-006, , 1.0, 0.0014 +u233-sol-inter-001, case-1, 1.0, 0.0083 +u233-sol-therm-001, case-1, 1.0, 0.0031 +u233-sol-therm-001, case-2, 1.0005, 0.0033 +u233-sol-therm-001, case-3, 1.0006, 0.0033 +u233-sol-therm-001, case-4, 0.9998, 0.0033 +u233-sol-therm-001, case-5, 0.9999, 0.0033 +u233-sol-therm-008, , 1.0006, 0.0029