forked from crp/openmc-designs
Added new stress test
This commit is contained in:
parent
6bc46284d4
commit
ff50c1f1d2
7 changed files with 1204 additions and 1 deletions
123
run_all.sh
Executable file
123
run_all.sh
Executable file
|
|
@ -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"
|
||||
|
||||
2
setup.sh
2
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
|
||||
|
|
|
|||
205
stress-test/benchmarking/benchmark.py
Normal file
205
stress-test/benchmarking/benchmark.py
Normal file
|
|
@ -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)
|
||||
194
stress-test/benchmarking/plot.py
Normal file
194
stress-test/benchmarking/plot.py
Normal file
|
|
@ -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()
|
||||
119
stress-test/benchmarking/report.py
Normal file
119
stress-test/benchmarking/report.py
Normal file
|
|
@ -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)
|
||||
75
stress-test/benchmarking/results.py
Normal file
75
stress-test/benchmarking/results.py
Normal file
|
|
@ -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)
|
||||
487
stress-test/benchmarking/uncertainties.csv
Normal file
487
stress-test/benchmarking/uncertainties.csv
Normal file
|
|
@ -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
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue