mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-29 06:35:48 -04:00
Merged in hex lattices
This commit is contained in:
commit
93556654f5
75 changed files with 3972 additions and 834 deletions
27
.travis.yml
Normal file
27
.travis.yml
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
before_install:
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -qq -y python-numpy
|
||||
- sudo apt-get install -qq -y python-scipy
|
||||
- sudo apt-get install -qq -y python-h5py
|
||||
- sudo apt-get install -qq -y gfortran
|
||||
- sudo apt-get install -qq -y g++
|
||||
- ./tests/travis_install.sh
|
||||
- export FC=gfortran
|
||||
- export MPI_DIR=$PWD/mpich_install
|
||||
- export PHDF5_DIR=$PWD/phdf5_install
|
||||
- export HDF5_DIR=$PWD/hdf5_install
|
||||
- export PETSC_DIR=$PWD/petsc_install
|
||||
|
||||
before_script:
|
||||
- cd data
|
||||
- git clone --branch=master git://github.com/bhermanmit/nndc_xs nndc_xs
|
||||
- cat nndc_xs/nndc.tar.gza* | tar xzvf -
|
||||
- rm -rf nndc_xs
|
||||
- export CROSS_SECTIONS=$PWD/nndc/cross_sections.xml
|
||||
- cd ..
|
||||
|
||||
script:
|
||||
- cd tests
|
||||
- export OMP_NUM_THREADS=3
|
||||
- ./travis.sh
|
||||
- cd ..
|
||||
|
|
@ -8,6 +8,12 @@ import sys
|
|||
import tarfile
|
||||
import glob
|
||||
import hashlib
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('-b', '--batch', action = 'store_true',
|
||||
help = 'supresses standard in')
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
from urllib.request import urlopen
|
||||
|
|
@ -73,7 +79,7 @@ for f in files:
|
|||
|
||||
print('Verifying MD5 checksums...')
|
||||
for f, checksum in zip(files, checksums):
|
||||
downloadsum = hashlib.md5(open(f, 'r').read()).hexdigest()
|
||||
downloadsum = hashlib.md5(open(f, 'rb').read()).hexdigest()
|
||||
if downloadsum != checksum:
|
||||
raise IOError("MD5 checksum for {} does not match. If this is your first "
|
||||
"time receiving this message, please re-run the script. "
|
||||
|
|
@ -118,10 +124,13 @@ shutil.copyfile('cross_sections_nndc.xml', 'nndc/cross_sections.xml')
|
|||
# PROMPT USER TO DELETE .TAR.GZ FILES
|
||||
|
||||
# Ask user to delete
|
||||
if sys.version_info[0] < 3:
|
||||
response = raw_input('Delete *.tar.gz files? ([y]/n) ')
|
||||
if not args.batch:
|
||||
if sys.version_info[0] < 3:
|
||||
response = raw_input('Delete *.tar.gz files? ([y]/n) ')
|
||||
else:
|
||||
response = input('Delete *.tar.gz files? ([y]/n) ')
|
||||
else:
|
||||
response = input('Delete *.tar.gz files? ([y]/n) ')
|
||||
response = 'y'
|
||||
|
||||
# Delete files if requested
|
||||
if not response or response.lower().startswith('y'):
|
||||
|
|
@ -134,10 +143,13 @@ if not response or response.lower().startswith('y'):
|
|||
# PROMPT USER TO CONVERT ASCII TO BINARY
|
||||
|
||||
# Ask user to convert
|
||||
if sys.version_info[0] < 3:
|
||||
response = raw_input('Convert ACE files to binary? ([y]/n) ')
|
||||
if not args.batch:
|
||||
if sys.version_info[0] < 3:
|
||||
response = raw_input('Convert ACE files to binary? ([y]/n) ')
|
||||
else:
|
||||
response = input('Convert ACE files to binary? ([y]/n) ')
|
||||
else:
|
||||
response = input('Convert ACE files to binary? ([y]/n) ')
|
||||
response = 'y'
|
||||
|
||||
# Convert files if requested
|
||||
if not response or response.lower().startswith('y'):
|
||||
|
|
|
|||
780
docs/source/_images/hex_lat.svg
Normal file
780
docs/source/_images/hex_lat.svg
Normal file
|
|
@ -0,0 +1,780 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Created with matplotlib (http://matplotlib.org/) -->
|
||||
<svg height="513pt" version="1.1" viewBox="0 0 513 513" width="513pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<style type="text/css">
|
||||
*{stroke-linecap:butt;stroke-linejoin:round;}
|
||||
</style>
|
||||
</defs>
|
||||
<g id="figure_1">
|
||||
<g id="patch_1">
|
||||
<path d="
|
||||
M0 513
|
||||
L513 513
|
||||
L513 0
|
||||
L0 0
|
||||
z
|
||||
" style="fill:#ffffff;"/>
|
||||
</g>
|
||||
<g id="axes_1">
|
||||
<g id="patch_2">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M231.818 213.75
|
||||
L207.137 256.5
|
||||
L231.818 299.25
|
||||
L281.182 299.25
|
||||
L305.863 256.5
|
||||
L281.182 213.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_3">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M234.286 218.025
|
||||
L212.073 256.5
|
||||
L234.286 294.975
|
||||
L278.714 294.975
|
||||
L300.927 256.5
|
||||
L278.714 218.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_4">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M231.818 128.25
|
||||
L207.137 171
|
||||
L231.818 213.75
|
||||
L281.182 213.75
|
||||
L305.863 171
|
||||
L281.182 128.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_5">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M234.286 132.525
|
||||
L212.073 171
|
||||
L234.286 209.475
|
||||
L278.714 209.475
|
||||
L300.927 171
|
||||
L278.714 132.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_6">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M305.863 171
|
||||
L281.182 213.75
|
||||
L305.863 256.5
|
||||
L355.227 256.5
|
||||
L379.909 213.75
|
||||
L355.227 171
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_7">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M308.332 175.275
|
||||
L286.118 213.75
|
||||
L308.332 252.225
|
||||
L352.759 252.225
|
||||
L374.972 213.75
|
||||
L352.759 175.275
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_8">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M305.863 256.5
|
||||
L281.182 299.25
|
||||
L305.863 342
|
||||
L355.227 342
|
||||
L379.909 299.25
|
||||
L355.227 256.5
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_9">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M308.332 260.775
|
||||
L286.118 299.25
|
||||
L308.332 337.725
|
||||
L352.759 337.725
|
||||
L374.972 299.25
|
||||
L352.759 260.775
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_10">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M231.818 299.25
|
||||
L207.137 342
|
||||
L231.818 384.75
|
||||
L281.182 384.75
|
||||
L305.863 342
|
||||
L281.182 299.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_11">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M234.286 303.525
|
||||
L212.073 342
|
||||
L234.286 380.475
|
||||
L278.714 380.475
|
||||
L300.927 342
|
||||
L278.714 303.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_12">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M157.773 256.5
|
||||
L133.091 299.25
|
||||
L157.773 342
|
||||
L207.137 342
|
||||
L231.818 299.25
|
||||
L207.137 256.5
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_13">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M160.241 260.775
|
||||
L138.028 299.25
|
||||
L160.241 337.725
|
||||
L204.668 337.725
|
||||
L226.882 299.25
|
||||
L204.668 260.775
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_14">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M157.773 171
|
||||
L133.091 213.75
|
||||
L157.773 256.5
|
||||
L207.137 256.5
|
||||
L231.818 213.75
|
||||
L207.137 171
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_15">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M160.241 175.275
|
||||
L138.028 213.75
|
||||
L160.241 252.225
|
||||
L204.668 252.225
|
||||
L226.882 213.75
|
||||
L204.668 175.275
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_16">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M231.818 42.75
|
||||
L207.137 85.5
|
||||
L231.818 128.25
|
||||
L281.182 128.25
|
||||
L305.863 85.5
|
||||
L281.182 42.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_17">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M234.286 47.025
|
||||
L212.073 85.5
|
||||
L234.286 123.975
|
||||
L278.714 123.975
|
||||
L300.927 85.5
|
||||
L278.714 47.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_18">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M305.863 85.5
|
||||
L281.182 128.25
|
||||
L305.863 171
|
||||
L355.227 171
|
||||
L379.909 128.25
|
||||
L355.227 85.5
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_19">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M308.332 89.775
|
||||
L286.118 128.25
|
||||
L308.332 166.725
|
||||
L352.759 166.725
|
||||
L374.972 128.25
|
||||
L352.759 89.775
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_20">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M379.909 128.25
|
||||
L355.227 171
|
||||
L379.909 213.75
|
||||
L429.272 213.75
|
||||
L453.954 171
|
||||
L429.272 128.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_21">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M382.377 132.525
|
||||
L360.163 171
|
||||
L382.377 209.475
|
||||
L426.804 209.475
|
||||
L449.017 171
|
||||
L426.804 132.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_22">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M379.909 213.75
|
||||
L355.227 256.5
|
||||
L379.909 299.25
|
||||
L429.272 299.25
|
||||
L453.954 256.5
|
||||
L429.272 213.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_23">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M382.377 218.025
|
||||
L360.163 256.5
|
||||
L382.377 294.975
|
||||
L426.804 294.975
|
||||
L449.017 256.5
|
||||
L426.804 218.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_24">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M379.909 299.25
|
||||
L355.227 342
|
||||
L379.909 384.75
|
||||
L429.272 384.75
|
||||
L453.954 342
|
||||
L429.272 299.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_25">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M382.377 303.525
|
||||
L360.163 342
|
||||
L382.377 380.475
|
||||
L426.804 380.475
|
||||
L449.017 342
|
||||
L426.804 303.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_26">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M305.863 342
|
||||
L281.182 384.75
|
||||
L305.863 427.5
|
||||
L355.227 427.5
|
||||
L379.909 384.75
|
||||
L355.227 342
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_27">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M308.332 346.275
|
||||
L286.118 384.75
|
||||
L308.332 423.225
|
||||
L352.759 423.225
|
||||
L374.972 384.75
|
||||
L352.759 346.275
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_28">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M231.818 384.75
|
||||
L207.137 427.5
|
||||
L231.818 470.25
|
||||
L281.182 470.25
|
||||
L305.863 427.5
|
||||
L281.182 384.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_29">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M234.286 389.025
|
||||
L212.073 427.5
|
||||
L234.286 465.975
|
||||
L278.714 465.975
|
||||
L300.927 427.5
|
||||
L278.714 389.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_30">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M157.773 342
|
||||
L133.091 384.75
|
||||
L157.773 427.5
|
||||
L207.137 427.5
|
||||
L231.818 384.75
|
||||
L207.137 342
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_31">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M160.241 346.275
|
||||
L138.028 384.75
|
||||
L160.241 423.225
|
||||
L204.668 423.225
|
||||
L226.882 384.75
|
||||
L204.668 346.275
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_32">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M83.7279 299.25
|
||||
L59.0462 342
|
||||
L83.7279 384.75
|
||||
L133.091 384.75
|
||||
L157.773 342
|
||||
L133.091 299.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_33">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M86.1961 303.525
|
||||
L63.9826 342
|
||||
L86.1961 380.475
|
||||
L130.623 380.475
|
||||
L152.837 342
|
||||
L130.623 303.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_34">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M83.7279 213.75
|
||||
L59.0462 256.5
|
||||
L83.7279 299.25
|
||||
L133.091 299.25
|
||||
L157.773 256.5
|
||||
L133.091 213.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_35">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M86.1961 218.025
|
||||
L63.9826 256.5
|
||||
L86.1961 294.975
|
||||
L130.623 294.975
|
||||
L152.837 256.5
|
||||
L130.623 218.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_36">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M83.7279 128.25
|
||||
L59.0462 171
|
||||
L83.7279 213.75
|
||||
L133.091 213.75
|
||||
L157.773 171
|
||||
L133.091 128.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_37">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M86.1961 132.525
|
||||
L63.9826 171
|
||||
L86.1961 209.475
|
||||
L130.623 209.475
|
||||
L152.837 171
|
||||
L130.623 132.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_38">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M157.773 85.5
|
||||
L133.091 128.25
|
||||
L157.773 171
|
||||
L207.137 171
|
||||
L231.818 128.25
|
||||
L207.137 85.5
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_39">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M160.241 89.775
|
||||
L138.028 128.25
|
||||
L160.241 166.725
|
||||
L204.668 166.725
|
||||
L226.882 128.25
|
||||
L204.668 89.775
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_40">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M41.04 58.995
|
||||
L41.04 64.125
|
||||
L82.08 64.125
|
||||
L82.08 69.255
|
||||
L92.34 61.56
|
||||
L82.08 53.865
|
||||
L82.08 58.995
|
||||
z
|
||||
" style="fill:#0000ff;stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_41">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M38.8186 62.8425
|
||||
L43.2614 60.2775
|
||||
L22.7414 24.7358
|
||||
L27.1841 22.1708
|
||||
L15.39 17.1329
|
||||
L13.8559 29.8658
|
||||
L18.2986 27.3008
|
||||
z
|
||||
" style="fill:#ff0000;stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="line2d_1">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M108.41 513
|
||||
L108.41 0" style="fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_2">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M0 575.59
|
||||
M106.678 514
|
||||
L513 279.41" style="fill:none;stroke:#ff0000;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_3">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M182.455 513
|
||||
L182.455 0" style="fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_4">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M0 490.09
|
||||
L513 193.91" style="fill:none;stroke:#ff0000;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_5">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M256.5 513
|
||||
L256.5 0" style="fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_6">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M0 404.59
|
||||
L513 108.41" style="fill:none;stroke:#ff0000;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_7">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M330.545 513
|
||||
L330.545 0" style="fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_8">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M0 319.09
|
||||
L513 22.9097" style="fill:none;stroke:#ff0000;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_9">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M404.59 513
|
||||
L404.59 0" style="fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_10">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M0 233.59
|
||||
L406.322 -1" style="fill:none;stroke:#ff0000;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="text_1">
|
||||
<!-- -2 -->
|
||||
<defs>
|
||||
<path d="
|
||||
M19.1875 8.29688
|
||||
L53.6094 8.29688
|
||||
L53.6094 0
|
||||
L7.32812 0
|
||||
L7.32812 8.29688
|
||||
Q12.9375 14.1094 22.625 23.8906
|
||||
Q32.3281 33.6875 34.8125 36.5312
|
||||
Q39.5469 41.8438 41.4219 45.5312
|
||||
Q43.3125 49.2188 43.3125 52.7812
|
||||
Q43.3125 58.5938 39.2344 62.25
|
||||
Q35.1562 65.9219 28.6094 65.9219
|
||||
Q23.9688 65.9219 18.8125 64.3125
|
||||
Q13.6719 62.7031 7.8125 59.4219
|
||||
L7.8125 69.3906
|
||||
Q13.7656 71.7812 18.9375 73
|
||||
Q24.125 74.2188 28.4219 74.2188
|
||||
Q39.75 74.2188 46.4844 68.5469
|
||||
Q53.2188 62.8906 53.2188 53.4219
|
||||
Q53.2188 48.9219 51.5312 44.8906
|
||||
Q49.8594 40.875 45.4062 35.4062
|
||||
Q44.1875 33.9844 37.6406 27.2188
|
||||
Q31.1094 20.4531 19.1875 8.29688" id="DejaVuSans-32"/>
|
||||
<path d="
|
||||
M4.89062 31.3906
|
||||
L31.2031 31.3906
|
||||
L31.2031 23.3906
|
||||
L4.89062 23.3906
|
||||
z
|
||||
" id="DejaVuSans-2d"/>
|
||||
</defs>
|
||||
<g transform="translate(116.959655953 504.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-2d"/>
|
||||
<use x="36.083984375" xlink:href="#DejaVuSans-32"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_2">
|
||||
<!-- -1 -->
|
||||
<defs>
|
||||
<path d="
|
||||
M12.4062 8.29688
|
||||
L28.5156 8.29688
|
||||
L28.5156 63.9219
|
||||
L10.9844 60.4062
|
||||
L10.9844 69.3906
|
||||
L28.4219 72.9062
|
||||
L38.2812 72.9062
|
||||
L38.2812 8.29688
|
||||
L54.3906 8.29688
|
||||
L54.3906 0
|
||||
L12.4062 0
|
||||
z
|
||||
" id="DejaVuSans-31"/>
|
||||
</defs>
|
||||
<g transform="translate(191.004827976 504.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-2d"/>
|
||||
<use x="36.083984375" xlink:href="#DejaVuSans-31"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_3">
|
||||
<!-- -1 -->
|
||||
<g transform="translate(8.55 472.990344047)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-2d"/>
|
||||
<use x="36.083984375" xlink:href="#DejaVuSans-31"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_4">
|
||||
<!-- 0 -->
|
||||
<defs>
|
||||
<path d="
|
||||
M31.7812 66.4062
|
||||
Q24.1719 66.4062 20.3281 58.9062
|
||||
Q16.5 51.4219 16.5 36.375
|
||||
Q16.5 21.3906 20.3281 13.8906
|
||||
Q24.1719 6.39062 31.7812 6.39062
|
||||
Q39.4531 6.39062 43.2812 13.8906
|
||||
Q47.125 21.3906 47.125 36.375
|
||||
Q47.125 51.4219 43.2812 58.9062
|
||||
Q39.4531 66.4062 31.7812 66.4062
|
||||
M31.7812 74.2188
|
||||
Q44.0469 74.2188 50.5156 64.5156
|
||||
Q56.9844 54.8281 56.9844 36.375
|
||||
Q56.9844 17.9688 50.5156 8.26562
|
||||
Q44.0469 -1.42188 31.7812 -1.42188
|
||||
Q19.5312 -1.42188 13.0625 8.26562
|
||||
Q6.59375 17.9688 6.59375 36.375
|
||||
Q6.59375 54.8281 13.0625 64.5156
|
||||
Q19.5312 74.2188 31.7812 74.2188" id="DejaVuSans-30"/>
|
||||
</defs>
|
||||
<g transform="translate(265.05 504.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-30"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_5">
|
||||
<!-- 0 -->
|
||||
<g transform="translate(8.55 387.490344047)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-30"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_6">
|
||||
<!-- 1 -->
|
||||
<g transform="translate(339.095172024 504.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-31"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_7">
|
||||
<!-- 1 -->
|
||||
<g transform="translate(8.55 301.990344047)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-31"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_8">
|
||||
<!-- 2 -->
|
||||
<g transform="translate(413.140344047 504.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-32"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_9">
|
||||
<!-- 2 -->
|
||||
<g transform="translate(8.55 216.490344047)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-32"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_10">
|
||||
<!-- $\hat x$ -->
|
||||
<defs>
|
||||
<path d="
|
||||
M13.4844 53.8125
|
||||
L11.5312 55.9062
|
||||
L25 69.3906
|
||||
L38.375 55.9062
|
||||
L36.375 53.8125
|
||||
L25 63.8125
|
||||
z
|
||||
" id="Cmr10-5e"/>
|
||||
<path d="
|
||||
M7.8125 2.875
|
||||
Q9.57812 1.51562 12.7969 1.51562
|
||||
Q15.9219 1.51562 18.3125 4.51562
|
||||
Q20.7031 7.51562 21.5781 11.0781
|
||||
L26.125 28.8125
|
||||
Q27.2031 33.6406 27.2031 35.4062
|
||||
Q27.2031 37.8906 25.8125 39.75
|
||||
Q24.4219 41.6094 21.9219 41.6094
|
||||
Q18.75 41.6094 15.9688 39.625
|
||||
Q13.1875 37.6406 11.2812 34.5938
|
||||
Q9.375 31.5469 8.59375 28.4219
|
||||
Q8.40625 27.7812 7.8125 27.7812
|
||||
L6.59375 27.7812
|
||||
Q5.8125 27.7812 5.8125 28.7188
|
||||
L5.8125 29
|
||||
Q6.78125 32.7188 9.125 36.25
|
||||
Q11.4688 39.7969 14.8594 41.9844
|
||||
Q18.2656 44.1875 22.125 44.1875
|
||||
Q25.7812 44.1875 28.7344 42.2344
|
||||
Q31.6875 40.2812 32.9062 36.9219
|
||||
Q34.625 39.9844 37.2812 42.0781
|
||||
Q39.9375 44.1875 43.1094 44.1875
|
||||
Q45.2656 44.1875 47.5 43.4219
|
||||
Q49.75 42.6719 51.1719 41.1094
|
||||
Q52.5938 39.5469 52.5938 37.2031
|
||||
Q52.5938 34.6719 50.9531 32.8281
|
||||
Q49.3125 31 46.7812 31
|
||||
Q45.1719 31 44.0938 32.0312
|
||||
Q43.0156 33.0625 43.0156 34.625
|
||||
Q43.0156 36.7188 44.4531 38.2969
|
||||
Q45.9062 39.8906 47.9062 40.1875
|
||||
Q46.0938 41.6094 42.9219 41.6094
|
||||
Q39.7031 41.6094 37.3281 38.625
|
||||
Q34.9688 35.6406 33.9844 31.9844
|
||||
L29.5938 14.3125
|
||||
Q28.5156 10.2969 28.5156 7.71875
|
||||
Q28.5156 5.17188 29.9531 3.34375
|
||||
Q31.3906 1.51562 33.7969 1.51562
|
||||
Q38.4844 1.51562 42.1562 5.64062
|
||||
Q45.8438 9.76562 47.0156 14.7031
|
||||
Q47.2188 15.2812 47.7969 15.2812
|
||||
L49.0312 15.2812
|
||||
Q49.4219 15.2812 49.6562 15.0156
|
||||
Q49.9062 14.75 49.9062 14.4062
|
||||
Q49.9062 14.3125 49.8125 14.1094
|
||||
Q48.3906 8.15625 43.8438 3.51562
|
||||
Q39.3125 -1.125 33.5938 -1.125
|
||||
Q29.9375 -1.125 26.9844 0.84375
|
||||
Q24.0312 2.82812 22.7969 6.20312
|
||||
Q21.2344 3.26562 18.4688 1.0625
|
||||
Q15.7188 -1.125 12.5938 -1.125
|
||||
Q10.4531 -1.125 8.17188 -0.359375
|
||||
Q5.90625 0.390625 4.48438 1.95312
|
||||
Q3.07812 3.51562 3.07812 5.90625
|
||||
Q3.07812 8.25 4.70312 10.1719
|
||||
Q6.34375 12.1094 8.79688 12.1094
|
||||
Q10.4531 12.1094 11.5781 11.1094
|
||||
Q12.7031 10.1094 12.7031 8.5
|
||||
Q12.7031 6.39062 11.2969 4.82812
|
||||
Q9.90625 3.26562 7.8125 2.875" id="Cmmi10-78"/>
|
||||
</defs>
|
||||
<g transform="translate(61.56 81.886875)scale(0.2 -0.2)">
|
||||
<use transform="translate(-0.53125 3.609375)" xlink:href="#Cmr10-5e"/>
|
||||
<use transform="translate(0.0 0.734375)" xlink:href="#Cmmi10-78"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_11">
|
||||
<!-- $\hat \alpha$ -->
|
||||
<defs>
|
||||
<path d="
|
||||
M20.125 -1.125
|
||||
Q15.375 -1.125 11.6875 1.125
|
||||
Q8.01562 3.375 6 7.17188
|
||||
Q4 10.9844 4 15.8281
|
||||
Q4 22.6094 7.78125 29.25
|
||||
Q11.5781 35.8906 17.8438 40.0312
|
||||
Q24.125 44.1875 31 44.1875
|
||||
Q36.0781 44.1875 39.9375 41.5312
|
||||
Q43.7969 38.875 45.7969 34.4531
|
||||
Q47.7969 30.0312 47.7969 25
|
||||
L47.9062 18.3125
|
||||
Q51.3125 23.0469 53.6875 28.1406
|
||||
Q56.0625 33.25 57.3281 38.7188
|
||||
Q57.5156 39.3125 58.1094 39.3125
|
||||
L59.2812 39.3125
|
||||
Q60.2031 39.3125 60.2031 38.375
|
||||
Q60.2031 38.2812 60.1094 38.0938
|
||||
Q58.9375 33.5 57.1719 29.2656
|
||||
Q55.4219 25.0469 53.0469 21.0938
|
||||
Q50.6875 17.1406 47.9062 13.9219
|
||||
Q47.9062 1.51562 50.7812 1.51562
|
||||
Q52.6406 1.51562 53.8281 2.60938
|
||||
Q55.0312 3.71875 55.9375 5.32812
|
||||
Q56.8438 6.9375 57.0781 6.98438
|
||||
L58.2969 6.98438
|
||||
Q59.0781 6.98438 59.0781 6
|
||||
Q59.0781 3.51562 56.2188 1.1875
|
||||
Q53.375 -1.125 50.5938 -1.125
|
||||
Q46.9688 -1.125 44.5781 1.21875
|
||||
Q42.1875 3.5625 41.3125 7.32812
|
||||
Q36.625 3.32812 31.1562 1.09375
|
||||
Q25.6875 -1.125 20.125 -1.125
|
||||
M20.3125 1.51562
|
||||
Q31 1.51562 40.8281 10.2969
|
||||
Q40.7656 10.8906 40.6719 11.7344
|
||||
Q40.5781 12.5938 40.5781 12.7031
|
||||
L40.5781 23.4844
|
||||
Q40.5781 41.6094 30.8125 41.6094
|
||||
Q24.9531 41.6094 20.5469 36.5938
|
||||
Q16.1562 31.5938 13.9375 24.625
|
||||
Q11.7188 17.6719 11.7188 11.9219
|
||||
Q11.7188 7.5625 13.9375 4.53125
|
||||
Q16.1562 1.51562 20.3125 1.51562" id="Cmmi10-ae"/>
|
||||
</defs>
|
||||
<g transform="translate(35.91 35.91)scale(0.2 -0.2)">
|
||||
<use transform="translate(3.46875 3.609375)" xlink:href="#Cmr10-5e"/>
|
||||
<use transform="translate(0.0 0.734375)" xlink:href="#Cmmi10-ae"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="p5382b9a736">
|
||||
<rect height="513.0" width="513.0" x="0.0" y="0.0"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
711
docs/source/_images/rect_lat.svg
Normal file
711
docs/source/_images/rect_lat.svg
Normal file
|
|
@ -0,0 +1,711 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Created with matplotlib (http://matplotlib.org/) -->
|
||||
<svg height="513pt" version="1.1" viewBox="0 0 513 513" width="513pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<style type="text/css">
|
||||
*{stroke-linecap:butt;stroke-linejoin:round;}
|
||||
</style>
|
||||
</defs>
|
||||
<g id="figure_1">
|
||||
<g id="patch_1">
|
||||
<path d="
|
||||
M0 513
|
||||
L513 513
|
||||
L513 0
|
||||
L0 0
|
||||
z
|
||||
" style="fill:#ffffff;"/>
|
||||
</g>
|
||||
<g id="axes_1">
|
||||
<g id="patch_2">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M42.75 470.25
|
||||
L128.25 470.25
|
||||
L128.25 384.75
|
||||
L42.75 384.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_3">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M47.025 465.975
|
||||
L123.975 465.975
|
||||
L123.975 389.025
|
||||
L47.025 389.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_4">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M128.25 470.25
|
||||
L213.75 470.25
|
||||
L213.75 384.75
|
||||
L128.25 384.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_5">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M132.525 465.975
|
||||
L209.475 465.975
|
||||
L209.475 389.025
|
||||
L132.525 389.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_6">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M213.75 470.25
|
||||
L299.25 470.25
|
||||
L299.25 384.75
|
||||
L213.75 384.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_7">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M218.025 465.975
|
||||
L294.975 465.975
|
||||
L294.975 389.025
|
||||
L218.025 389.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_8">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M299.25 470.25
|
||||
L384.75 470.25
|
||||
L384.75 384.75
|
||||
L299.25 384.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_9">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M303.525 465.975
|
||||
L380.475 465.975
|
||||
L380.475 389.025
|
||||
L303.525 389.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_10">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M384.75 470.25
|
||||
L470.25 470.25
|
||||
L470.25 384.75
|
||||
L384.75 384.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_11">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M389.025 465.975
|
||||
L465.975 465.975
|
||||
L465.975 389.025
|
||||
L389.025 389.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_12">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M42.75 384.75
|
||||
L128.25 384.75
|
||||
L128.25 299.25
|
||||
L42.75 299.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_13">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M47.025 380.475
|
||||
L123.975 380.475
|
||||
L123.975 303.525
|
||||
L47.025 303.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_14">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M128.25 384.75
|
||||
L213.75 384.75
|
||||
L213.75 299.25
|
||||
L128.25 299.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_15">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M132.525 380.475
|
||||
L209.475 380.475
|
||||
L209.475 303.525
|
||||
L132.525 303.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_16">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M213.75 384.75
|
||||
L299.25 384.75
|
||||
L299.25 299.25
|
||||
L213.75 299.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_17">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M218.025 380.475
|
||||
L294.975 380.475
|
||||
L294.975 303.525
|
||||
L218.025 303.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_18">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M299.25 384.75
|
||||
L384.75 384.75
|
||||
L384.75 299.25
|
||||
L299.25 299.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_19">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M303.525 380.475
|
||||
L380.475 380.475
|
||||
L380.475 303.525
|
||||
L303.525 303.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_20">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M384.75 384.75
|
||||
L470.25 384.75
|
||||
L470.25 299.25
|
||||
L384.75 299.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_21">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M389.025 380.475
|
||||
L465.975 380.475
|
||||
L465.975 303.525
|
||||
L389.025 303.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_22">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M42.75 299.25
|
||||
L128.25 299.25
|
||||
L128.25 213.75
|
||||
L42.75 213.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_23">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M47.025 294.975
|
||||
L123.975 294.975
|
||||
L123.975 218.025
|
||||
L47.025 218.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_24">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M128.25 299.25
|
||||
L213.75 299.25
|
||||
L213.75 213.75
|
||||
L128.25 213.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_25">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M132.525 294.975
|
||||
L209.475 294.975
|
||||
L209.475 218.025
|
||||
L132.525 218.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_26">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M213.75 299.25
|
||||
L299.25 299.25
|
||||
L299.25 213.75
|
||||
L213.75 213.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_27">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M218.025 294.975
|
||||
L294.975 294.975
|
||||
L294.975 218.025
|
||||
L218.025 218.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_28">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M299.25 299.25
|
||||
L384.75 299.25
|
||||
L384.75 213.75
|
||||
L299.25 213.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_29">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M303.525 294.975
|
||||
L380.475 294.975
|
||||
L380.475 218.025
|
||||
L303.525 218.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_30">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M384.75 299.25
|
||||
L470.25 299.25
|
||||
L470.25 213.75
|
||||
L384.75 213.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_31">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M389.025 294.975
|
||||
L465.975 294.975
|
||||
L465.975 218.025
|
||||
L389.025 218.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_32">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M42.75 213.75
|
||||
L128.25 213.75
|
||||
L128.25 128.25
|
||||
L42.75 128.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_33">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M47.025 209.475
|
||||
L123.975 209.475
|
||||
L123.975 132.525
|
||||
L47.025 132.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_34">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M128.25 213.75
|
||||
L213.75 213.75
|
||||
L213.75 128.25
|
||||
L128.25 128.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_35">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M132.525 209.475
|
||||
L209.475 209.475
|
||||
L209.475 132.525
|
||||
L132.525 132.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_36">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M213.75 213.75
|
||||
L299.25 213.75
|
||||
L299.25 128.25
|
||||
L213.75 128.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_37">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M218.025 209.475
|
||||
L294.975 209.475
|
||||
L294.975 132.525
|
||||
L218.025 132.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_38">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M299.25 213.75
|
||||
L384.75 213.75
|
||||
L384.75 128.25
|
||||
L299.25 128.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_39">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M303.525 209.475
|
||||
L380.475 209.475
|
||||
L380.475 132.525
|
||||
L303.525 132.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_40">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M384.75 213.75
|
||||
L470.25 213.75
|
||||
L470.25 128.25
|
||||
L384.75 128.25
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_41">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M389.025 209.475
|
||||
L465.975 209.475
|
||||
L465.975 132.525
|
||||
L389.025 132.525
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_42">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M42.75 128.25
|
||||
L128.25 128.25
|
||||
L128.25 42.75
|
||||
L42.75 42.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_43">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M47.025 123.975
|
||||
L123.975 123.975
|
||||
L123.975 47.025
|
||||
L47.025 47.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_44">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M128.25 128.25
|
||||
L213.75 128.25
|
||||
L213.75 42.75
|
||||
L128.25 42.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_45">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M132.525 123.975
|
||||
L209.475 123.975
|
||||
L209.475 47.025
|
||||
L132.525 47.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_46">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M213.75 128.25
|
||||
L299.25 128.25
|
||||
L299.25 42.75
|
||||
L213.75 42.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_47">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M218.025 123.975
|
||||
L294.975 123.975
|
||||
L294.975 47.025
|
||||
L218.025 47.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_48">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M299.25 128.25
|
||||
L384.75 128.25
|
||||
L384.75 42.75
|
||||
L299.25 42.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_49">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M303.525 123.975
|
||||
L380.475 123.975
|
||||
L380.475 47.025
|
||||
L303.525 47.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="patch_50">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M384.75 128.25
|
||||
L470.25 128.25
|
||||
L470.25 42.75
|
||||
L384.75 42.75
|
||||
z
|
||||
" style="stroke:#000000;"/>
|
||||
</g>
|
||||
<g id="patch_51">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M389.025 123.975
|
||||
L465.975 123.975
|
||||
L465.975 47.025
|
||||
L389.025 47.025
|
||||
z
|
||||
" style="fill:#ffffff;stroke:#ffffff;"/>
|
||||
</g>
|
||||
<g id="line2d_1">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M85.5 513
|
||||
L85.5 0" style="fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_2">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M171 513
|
||||
L171 0" style="fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_3">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M256.5 513
|
||||
L256.5 0" style="fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_4">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M342 513
|
||||
L342 0" style="fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_5">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M427.5 513
|
||||
L427.5 0" style="fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_6">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M0 427.5
|
||||
L513 427.5" style="fill:none;stroke:#ff0000;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_7">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M0 342
|
||||
L513 342" style="fill:none;stroke:#ff0000;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_8">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M0 256.5
|
||||
L513 256.5" style="fill:none;stroke:#ff0000;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_9">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M0 171
|
||||
L513 171" style="fill:none;stroke:#ff0000;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="line2d_10">
|
||||
<path clip-path="url(#p5382b9a736)" d="
|
||||
M0 85.5
|
||||
L513 85.5" style="fill:none;stroke:#ff0000;stroke-linecap:square;stroke-width:3;"/>
|
||||
</g>
|
||||
<g id="text_1">
|
||||
<!-- 1 -->
|
||||
<defs>
|
||||
<path d="
|
||||
M12.4062 8.29688
|
||||
L28.5156 8.29688
|
||||
L28.5156 63.9219
|
||||
L10.9844 60.4062
|
||||
L10.9844 69.3906
|
||||
L28.4219 72.9062
|
||||
L38.2812 72.9062
|
||||
L38.2812 8.29688
|
||||
L54.3906 8.29688
|
||||
L54.3906 0
|
||||
L12.4062 0
|
||||
z
|
||||
" id="DejaVuSans-31"/>
|
||||
</defs>
|
||||
<g transform="translate(94.05 504.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-31"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_2">
|
||||
<!-- 2 -->
|
||||
<defs>
|
||||
<path d="
|
||||
M19.1875 8.29688
|
||||
L53.6094 8.29688
|
||||
L53.6094 0
|
||||
L7.32812 0
|
||||
L7.32812 8.29688
|
||||
Q12.9375 14.1094 22.625 23.8906
|
||||
Q32.3281 33.6875 34.8125 36.5312
|
||||
Q39.5469 41.8438 41.4219 45.5312
|
||||
Q43.3125 49.2188 43.3125 52.7812
|
||||
Q43.3125 58.5938 39.2344 62.25
|
||||
Q35.1562 65.9219 28.6094 65.9219
|
||||
Q23.9688 65.9219 18.8125 64.3125
|
||||
Q13.6719 62.7031 7.8125 59.4219
|
||||
L7.8125 69.3906
|
||||
Q13.7656 71.7812 18.9375 73
|
||||
Q24.125 74.2188 28.4219 74.2188
|
||||
Q39.75 74.2188 46.4844 68.5469
|
||||
Q53.2188 62.8906 53.2188 53.4219
|
||||
Q53.2188 48.9219 51.5312 44.8906
|
||||
Q49.8594 40.875 45.4062 35.4062
|
||||
Q44.1875 33.9844 37.6406 27.2188
|
||||
Q31.1094 20.4531 19.1875 8.29688" id="DejaVuSans-32"/>
|
||||
</defs>
|
||||
<g transform="translate(179.55 504.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-32"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_3">
|
||||
<!-- 3 -->
|
||||
<defs>
|
||||
<path d="
|
||||
M40.5781 39.3125
|
||||
Q47.6562 37.7969 51.625 33
|
||||
Q55.6094 28.2188 55.6094 21.1875
|
||||
Q55.6094 10.4062 48.1875 4.48438
|
||||
Q40.7656 -1.42188 27.0938 -1.42188
|
||||
Q22.5156 -1.42188 17.6562 -0.515625
|
||||
Q12.7969 0.390625 7.625 2.20312
|
||||
L7.625 11.7188
|
||||
Q11.7188 9.32812 16.5938 8.10938
|
||||
Q21.4844 6.89062 26.8125 6.89062
|
||||
Q36.0781 6.89062 40.9375 10.5469
|
||||
Q45.7969 14.2031 45.7969 21.1875
|
||||
Q45.7969 27.6406 41.2812 31.2656
|
||||
Q36.7656 34.9062 28.7188 34.9062
|
||||
L20.2188 34.9062
|
||||
L20.2188 43.0156
|
||||
L29.1094 43.0156
|
||||
Q36.375 43.0156 40.2344 45.9219
|
||||
Q44.0938 48.8281 44.0938 54.2969
|
||||
Q44.0938 59.9062 40.1094 62.9062
|
||||
Q36.1406 65.9219 28.7188 65.9219
|
||||
Q24.6562 65.9219 20.0156 65.0312
|
||||
Q15.375 64.1562 9.8125 62.3125
|
||||
L9.8125 71.0938
|
||||
Q15.4375 72.6562 20.3438 73.4375
|
||||
Q25.25 74.2188 29.5938 74.2188
|
||||
Q40.8281 74.2188 47.3594 69.1094
|
||||
Q53.9062 64.0156 53.9062 55.3281
|
||||
Q53.9062 49.2656 50.4375 45.0938
|
||||
Q46.9688 40.9219 40.5781 39.3125" id="DejaVuSans-33"/>
|
||||
</defs>
|
||||
<g transform="translate(265.05 504.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-33"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_4">
|
||||
<!-- 4 -->
|
||||
<defs>
|
||||
<path d="
|
||||
M37.7969 64.3125
|
||||
L12.8906 25.3906
|
||||
L37.7969 25.3906
|
||||
z
|
||||
|
||||
M35.2031 72.9062
|
||||
L47.6094 72.9062
|
||||
L47.6094 25.3906
|
||||
L58.0156 25.3906
|
||||
L58.0156 17.1875
|
||||
L47.6094 17.1875
|
||||
L47.6094 0
|
||||
L37.7969 0
|
||||
L37.7969 17.1875
|
||||
L4.89062 17.1875
|
||||
L4.89062 26.7031
|
||||
z
|
||||
" id="DejaVuSans-34"/>
|
||||
</defs>
|
||||
<g transform="translate(350.55 504.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-34"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_5">
|
||||
<!-- 5 -->
|
||||
<defs>
|
||||
<path d="
|
||||
M10.7969 72.9062
|
||||
L49.5156 72.9062
|
||||
L49.5156 64.5938
|
||||
L19.8281 64.5938
|
||||
L19.8281 46.7344
|
||||
Q21.9688 47.4688 24.1094 47.8281
|
||||
Q26.2656 48.1875 28.4219 48.1875
|
||||
Q40.625 48.1875 47.75 41.5
|
||||
Q54.8906 34.8125 54.8906 23.3906
|
||||
Q54.8906 11.625 47.5625 5.09375
|
||||
Q40.2344 -1.42188 26.9062 -1.42188
|
||||
Q22.3125 -1.42188 17.5469 -0.640625
|
||||
Q12.7969 0.140625 7.71875 1.70312
|
||||
L7.71875 11.625
|
||||
Q12.1094 9.23438 16.7969 8.0625
|
||||
Q21.4844 6.89062 26.7031 6.89062
|
||||
Q35.1562 6.89062 40.0781 11.3281
|
||||
Q45.0156 15.7656 45.0156 23.3906
|
||||
Q45.0156 31 40.0781 35.4375
|
||||
Q35.1562 39.8906 26.7031 39.8906
|
||||
Q22.75 39.8906 18.8125 39.0156
|
||||
Q14.8906 38.1406 10.7969 36.2812
|
||||
z
|
||||
" id="DejaVuSans-35"/>
|
||||
</defs>
|
||||
<g transform="translate(436.05 504.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-35"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_6">
|
||||
<!-- 1 -->
|
||||
<g transform="translate(8.55 418.95)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-31"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_7">
|
||||
<!-- 2 -->
|
||||
<g transform="translate(8.55 333.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-32"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_8">
|
||||
<!-- 3 -->
|
||||
<g transform="translate(8.55 247.95)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-33"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_9">
|
||||
<!-- 4 -->
|
||||
<g transform="translate(8.55 162.45)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-34"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_10">
|
||||
<!-- 5 -->
|
||||
<g transform="translate(8.55 76.95)scale(0.2 -0.2)">
|
||||
<use xlink:href="#DejaVuSans-35"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="p5382b9a736">
|
||||
<rect height="513.0" width="513.0" x="0.0" y="0.0"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
|
|
@ -385,6 +385,101 @@ is found that contains the specified point.
|
|||
|
||||
.. _cell-contains:
|
||||
|
||||
----------------------
|
||||
Finding a Lattice Tile
|
||||
----------------------
|
||||
|
||||
If a particle is inside a lattice, its position inside the lattice must be
|
||||
determined before assigning it to a cell. Throughout this section, the
|
||||
volumetric units of the lattice will be referred to as "tiles". Tiles are
|
||||
identified by thier indices, and the process of discovering which tile contains
|
||||
the particle is referred to as "indexing".
|
||||
|
||||
Rectilinear Lattice Indexing
|
||||
----------------------------
|
||||
|
||||
Indices are assigned to tiles in a rectilinear lattice based on the tile's
|
||||
position along the :math:`x`, :math:`y`, and :math:`z` axes. The figure below
|
||||
maps the indices for a 2D lattice. The indices, (1, 1), map to the
|
||||
lower-left tile. (5, 1) and (5, 5) map to the lower-right and upper-right
|
||||
tiles, respectively.
|
||||
|
||||
.. figure:: ../_images/rect_lat.*
|
||||
:align: center
|
||||
:figclass: align-center
|
||||
:width: 400px
|
||||
|
||||
Rectilinear lattice tile indices.
|
||||
|
||||
In general, a lattice tile is specified by the three indices,
|
||||
:math:`(i_x, i_y, i_z)`. If a particle's current coordinates are
|
||||
:math:`(x, y, z)` then the indices can be determined from these formulas:
|
||||
|
||||
.. math::
|
||||
:label: rect_indexing
|
||||
|
||||
i_x = \left \lceil \frac{x - x_0}{p_0} \right \rceil
|
||||
|
||||
i_y = \left \lceil \frac{y - y_0}{p_1} \right \rceil
|
||||
|
||||
i_z = \left \lceil \frac{z - z_0}{p_2} \right \rceil
|
||||
|
||||
where :math:`(x_0, y_0, z_0)` are the coordinates to the lower-left-bottom
|
||||
corner of the lattice, and :math:`p_0, p_1, p_2` are the pitches along the
|
||||
:math:`x`, :math:`y`, and :math:`z` axes, respectively.
|
||||
|
||||
Hexagonal Lattice Indexing
|
||||
--------------------------
|
||||
|
||||
A skewed coordinate system is used for indexing hexagonal lattice tiles. Rather
|
||||
than a :math:`y`-axis, another axis is used that is rotated 30 degrees
|
||||
counter-clockwise from the :math:`y`-axis. This axis is referred to as the
|
||||
:math:`\alpha`-axis. The figure below shows how 2D hexagonal tiles are mapped
|
||||
with the :math:`(x, \alpha)` basis. In this system, (0, 0) maps to the center
|
||||
tile, (0, 2) to the top tile, and (2, -1) to the middle tile on the right side.
|
||||
|
||||
.. figure:: ../_images/hex_lat.*
|
||||
:align: center
|
||||
:figclass: align-center
|
||||
:width: 400px
|
||||
|
||||
Hexagonal lattice tile indices.
|
||||
|
||||
Unfortunately, the indices cannot be determined with one simple formula as
|
||||
before. Indexing requires a two-step process, a coarse step which determines a
|
||||
set of four tiles that contains the particle and a fine step that determines
|
||||
which of those four tiles actually contains the particle.
|
||||
|
||||
In the first step, indices are found using these formulas:
|
||||
|
||||
.. math::
|
||||
:label: hex_indexing
|
||||
|
||||
\alpha = -\frac{x}{\sqrt{3}} + y
|
||||
|
||||
i_x^* = \left \lfloor \frac{x}{p_0 \sqrt{3} / 2} \right \rfloor
|
||||
|
||||
i_\alpha^* = \left \lfloor \frac{\alpha}{p_0} \right \rfloor
|
||||
|
||||
where :math:`p_0` is the lattice pitch (in the :math:`x`-:math:`y` plane). The
|
||||
true index of the particle could be :math:`(i_x^*, i_\alpha^*)`,
|
||||
:math:`(i_x^* + 1, i_\alpha^*)`, :math:`(i_x^*, i_\alpha^* + 1)`, or
|
||||
:math:`(i_x^* + 1, i_\alpha^* + 1)`.
|
||||
|
||||
The second step selects the correct tile from that neighborhood of 4. OpenMC
|
||||
does this by calculating the distance between the particle and the centers of
|
||||
each of the 4 tiles, and then picking the closest tile. This works because
|
||||
regular hexagonal tiles form a Voronoi tessellation which means that all of the
|
||||
points within a tile are closest to the center of that same tile.
|
||||
|
||||
Indexing along the :math:`z`-axis uses the same method from rectilinear
|
||||
lattices, i.e.
|
||||
|
||||
.. math::
|
||||
:label: hex_indexing_z
|
||||
|
||||
i_z = \left \lceil \frac{z - z_0}{p_2} \right \rceil
|
||||
|
||||
----------------------------------------
|
||||
Determining if a Coordinate is in a Cell
|
||||
----------------------------------------
|
||||
|
|
|
|||
|
|
@ -146,13 +146,12 @@ and `Volume II`_. You may also find it helpful to review the following terms:
|
|||
.. _constructive solid geometry: http://en.wikipedia.org/wiki/Constructive_solid_geometry
|
||||
.. _git: http://git-scm.com/
|
||||
.. _git tutorials: http://git-scm.com/documentation
|
||||
.. _Reactor Concepts Manual: http://web.mit.edu/romano7/www/reactor_concepts.pdf
|
||||
.. _Volume I: http://www.hss.doe.gov/nuclearsafety/techstds/docs/handbook/h1019v1.pdf
|
||||
.. _Volume II: http://www.hss.doe.gov/nuclearsafety/techstds/docs/handbook/h1019v2.pdf
|
||||
.. _Reactor Concepts Manual: http://www.tayloredge.com/periodic/trivia/ReactorConcepts.pdf
|
||||
.. _Volume I: http://energy.gov/sites/prod/files/2013/06/f2/h1019v1.pdf
|
||||
.. _Volume II: http://energy.gov/sites/prod/files/2013/06/f2/h1019v2.pdf
|
||||
.. _OpenMC source code: https://github.com/mit-crpg/openmc
|
||||
.. _GitHub: https://github.com/
|
||||
.. _bug reports: https://github.com/mit-crpg/openmc/issues
|
||||
.. _Neutron cross section: http://en.wikipedia.org/wiki/Neutron_cross_section
|
||||
.. _Effective multiplication factor: http://en.wikipedia.org/wiki/Effective_multiplication_factor
|
||||
.. _Flux: http://en.wikipedia.org/wiki/Neutron_flux
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,55 @@ files are called:
|
|||
* ``plots.xml``
|
||||
* ``cmfd.xml``
|
||||
|
||||
--------------------
|
||||
Validating XML Files
|
||||
--------------------
|
||||
|
||||
Input files can be checked before executing OpenMC using the ``xml_validate``
|
||||
script. It is located in ``src/utils/xml_validate.py`` in the source code or in
|
||||
``bin/xml_validate`` in the install directory. Before use, the third party
|
||||
package TRANG_ must be installed and in your ``PATH`` to convert the compact
|
||||
RelaxNG schema to standard RelaxNG format. For Ubuntu, you can install with:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo apt-get install trang
|
||||
|
||||
Two command line arguments can be set when running ``xml_validate``:
|
||||
|
||||
* ``-i``, ``--input-path`` - Location of OpenMC input files.
|
||||
*Default*: current working directory
|
||||
* ``-r``, ``--relaxng-path`` - Location of OpenMC RelaxNG files.
|
||||
*Default*: None
|
||||
|
||||
If the RelaxNG path is not set, ``xml_validate`` will search for these files
|
||||
because it expects that the user is either running the script located in the
|
||||
install directory ``bin`` folder or in ``src/utils``. Once executed, it will
|
||||
match OpenMC XML files with their RelaxNG schema and check if they are valid.
|
||||
Below is a table of the messages that will be printed after each file is
|
||||
checked.
|
||||
|
||||
======================== ===================================
|
||||
Message Description
|
||||
======================== ===================================
|
||||
[XML ERROR] Cannot parse XML file.
|
||||
[NO RELAXNG FOUND] No RelaxNG file found for XML file.
|
||||
[TRANG FAILED] TRANG not installed properly.
|
||||
[NOT VALID] XML file does not match RelaxNG.
|
||||
[VALID] XML file matches RelaxNG.
|
||||
======================== ===================================
|
||||
|
||||
As an example, if OpenMC is installed in the directory
|
||||
``/opt/openmc/0.6.2`` and the current working directory is where
|
||||
OpenMC XML input files are located, they can be validated using
|
||||
the following command:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
/opt/openmc/0.6.2/bin/xml_validate
|
||||
|
||||
.. _TRANG: http://www.thaiopensource.com/relaxng/trang.html
|
||||
|
||||
--------------------------------------
|
||||
Settings Specification -- settings.xml
|
||||
--------------------------------------
|
||||
|
|
@ -802,19 +851,12 @@ Each ``<cell>`` element can have the following attributes or sub-elements:
|
|||
---------------------
|
||||
|
||||
The ``<lattice>`` can be used to represent repeating structures (e.g. fuel pins
|
||||
in an assembly) or other geometry which naturally fits into a two- or
|
||||
three-dimensional structured mesh. Each cell within the lattice is filled with a
|
||||
specified universe. A ``<lattice>`` accepts the following attributes or
|
||||
sub-elements:
|
||||
in an assembly) or other geometry which fits onto a rectilinear grid. Each cell
|
||||
within the lattice is filled with a specified universe. A ``<lattice>`` accepts
|
||||
the following attributes or sub-elements:
|
||||
|
||||
:id:
|
||||
A unique integer that can be used to identify the surface.
|
||||
|
||||
:type:
|
||||
A string indicating the arrangement of lattice cells. Currently, the only
|
||||
accepted option is "rectangular".
|
||||
|
||||
*Default*: rectangular
|
||||
A unique integer that can be used to identify the lattice.
|
||||
|
||||
:dimension:
|
||||
Two or three integers representing the number of lattice cells in the x- and
|
||||
|
|
@ -828,8 +870,10 @@ sub-elements:
|
|||
|
||||
*Default*: None
|
||||
|
||||
:width:
|
||||
The width of the lattice cell in the x- and y- (and z-) directions.
|
||||
:pitch:
|
||||
If the lattice is 3D, then three real numbers that express the distance
|
||||
between the centers of lattice cells in the x-, y-, and z- directions. If
|
||||
the lattice is 2D, then omit the third value.
|
||||
|
||||
*Default*: None
|
||||
|
||||
|
|
@ -846,6 +890,92 @@ sub-elements:
|
|||
|
||||
*Default*: None
|
||||
|
||||
Here is an example of a properly defined 2d rectangular lattice:
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<lattice id="10" dimension="3 3" outer="1">
|
||||
<lower_left> -1.5 -1.5 </lower_left>
|
||||
<pitch> 1.0 1.0 </pitch>
|
||||
<universes>
|
||||
2 2 2
|
||||
2 1 2
|
||||
2 2 2
|
||||
</universes>
|
||||
</lattice>
|
||||
|
||||
``<hex_lattice>`` Element
|
||||
-------------------------
|
||||
|
||||
The ``<hex_lattice>`` can be used to represent repeating structures (e.g. fuel
|
||||
pins in an assembly) or other geometry which naturally fits onto a hexagonal
|
||||
grid or hexagonal prism grid. Each cell within the lattice is filled with a
|
||||
specified universe. This lattice uses the "flat-topped hexagon" scheme where two
|
||||
of the six edges are perpendicular to the y-axis. A ``<hex_lattice>`` accepts
|
||||
the following attributes or sub-elements:
|
||||
|
||||
:id:
|
||||
A unique integer that can be used to identify the lattice.
|
||||
|
||||
:n_rings:
|
||||
An integer representing the number of radial ring positions in the xy-plane.
|
||||
Note that this number includes the degenerate center ring which only has one
|
||||
element.
|
||||
|
||||
*Default*: None
|
||||
|
||||
:n_axial:
|
||||
An integer representing the number of positions along the z-axis. This
|
||||
element is optional.
|
||||
|
||||
*Default*: None
|
||||
|
||||
:center:
|
||||
The coordinates of the center of the lattice. If the lattice does not have
|
||||
axial sections then only the x- and y-coordinates are specified.
|
||||
|
||||
*Default*: None
|
||||
|
||||
:pitch:
|
||||
If the lattice is 3D, then two real numbers that express the distance
|
||||
between the centers of lattice cells in the xy-plane and along the z-axis,
|
||||
respectively. If the lattice is 2D, then omit the second value.
|
||||
|
||||
*Default*: None
|
||||
|
||||
:outer:
|
||||
The unique integer identifier of a universe that will be used to fill all
|
||||
space outside of the lattice. The universe will be tiled repeatedly as if
|
||||
it were placed in a lattice of infinite size. This element is optional.
|
||||
|
||||
*Default*: An error will be raised if a particle leaves a lattice with no
|
||||
outer universe.
|
||||
|
||||
:universes:
|
||||
A list of the universe numbers that fill each cell of the lattice.
|
||||
|
||||
*Default*: None
|
||||
|
||||
Here is an example of a properly defined 2d hexagonal lattice:
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<hex_lattice id="10" n_rings="3" outer="1">
|
||||
<center> 0.0 0.0 </center>
|
||||
<pitch> 1.0 </pitch>
|
||||
<universes>
|
||||
202
|
||||
202 202
|
||||
202 202 202
|
||||
202 202
|
||||
202 101 202
|
||||
202 202
|
||||
202 202 202
|
||||
202 202
|
||||
202
|
||||
</universes>
|
||||
</hex_lattice>
|
||||
|
||||
.. _constructive solid geometry: http://en.wikipedia.org/wiki/Constructive_solid_geometry
|
||||
|
||||
.. _quadratic surfaces: http://en.wikipedia.org/wiki/Quadric
|
||||
|
|
|
|||
|
|
@ -88,11 +88,11 @@ Prerequisites
|
|||
|
||||
* PETSc_ for CMFD acceleration
|
||||
|
||||
To enable CMFD acceleration, you will need to have PETSc_ (3.4.2 or higher)
|
||||
installed on your computer. The installed version will need to have been
|
||||
compiled with the same compiler you intend to compile OpenMC with. OpenMC
|
||||
requires PETSc_ to be configured with Fortran datatypes. An example of
|
||||
configuring PETSc_ is listed below::
|
||||
To enable some features of CMFD acceleration, you will need to have
|
||||
PETSc_ (3.4.2 or higher) installed on your computer. The installed version
|
||||
will need to have been compiled with the same compiler you intend to
|
||||
compile OpenMC with. OpenMC requires PETSc_ to be configured with Fortran
|
||||
datatypes. An example of configuring PETSc_ is listed below::
|
||||
|
||||
./configure --prefix=/opt/petsc/3.4.4 --download-f-blas-lapack \
|
||||
--with-mpi-dir=/opt/mpich/3.1 --with-shared-libraries \
|
||||
|
|
|
|||
|
|
@ -12,10 +12,9 @@
|
|||
|
||||
<!-- 4 x 4 assembly -->
|
||||
<lattice id="4">
|
||||
<type>rectangular</type>
|
||||
<dimension>2 2</dimension>
|
||||
<lower_left>-1.0 -1.0</lower_left>
|
||||
<width>1.0 1.0</width>
|
||||
<pitch>1.0 1.0</pitch>
|
||||
<universes>
|
||||
1 2
|
||||
2 3
|
||||
|
|
@ -24,10 +23,9 @@
|
|||
|
||||
<!-- 4 x 4 core -->
|
||||
<lattice id="6">
|
||||
<type>rectangular</type>
|
||||
<dimension>2 2</dimension>
|
||||
<lower_left>-2.0 -2.0</lower_left>
|
||||
<width>2.0 2.0</width>
|
||||
<pitch>2.0 2.0</pitch>
|
||||
<universes>
|
||||
5 5
|
||||
5 5
|
||||
|
|
|
|||
|
|
@ -10,10 +10,9 @@
|
|||
<cell id="302" universe="3" material="2" surfaces="7" />
|
||||
|
||||
<lattice id="5">
|
||||
<type>rectangular</type>
|
||||
<dimension>4 4</dimension>
|
||||
<lower_left>-2.0 -2.0</lower_left>
|
||||
<width>1.0 1.0</width>
|
||||
<pitch>1.0 1.0</pitch>
|
||||
<universes>
|
||||
1 2 1 2
|
||||
2 3 2 3
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@
|
|||
OpenMC Monte Carlo Particle Transport Code
|
||||
==========================================
|
||||
|
||||
.. image:: https://travis-ci.org/mit-crpg/openmc.svg?branch=develop
|
||||
:target: https://travis-ci.org/mit-crpg/openmc
|
||||
|
||||
The OpenMC project aims to provide a fully-featured Monte Carlo particle
|
||||
transport code based on modern methods. It is a constructive solid geometry,
|
||||
continuous-energy transport code that uses ACE format cross sections. The
|
||||
|
|
|
|||
|
|
@ -272,6 +272,10 @@ install(PROGRAMS utils/statepoint_meshplot.py
|
|||
install(PROGRAMS utils/update_inputs.py
|
||||
DESTINATION bin
|
||||
RENAME update_inputs)
|
||||
install(PROGRAMS utils/xml_validate.py
|
||||
DESTINATION bin
|
||||
RENAME xml_validate)
|
||||
install(DIRECTORY relaxng DESTINATION share)
|
||||
install(FILES ../man/man1/openmc.1 DESTINATION share/man/man1)
|
||||
install(FILES ../LICENSE DESTINATION "share/doc/${program}/copyright")
|
||||
|
||||
|
|
|
|||
642
src/geometry.F90
642
src/geometry.F90
|
|
@ -2,7 +2,8 @@ module geometry
|
|||
|
||||
use constants
|
||||
use error, only: fatal_error, warning
|
||||
use geometry_header, only: Cell, Surface, Universe, Lattice
|
||||
use geometry_header, only: Cell, Surface, Universe, Lattice, &
|
||||
&RectLattice, HexLattice
|
||||
use global
|
||||
use output, only: write_message
|
||||
use particle_header, only: LocalCoord, deallocate_coord, Particle
|
||||
|
|
@ -131,18 +132,13 @@ contains
|
|||
logical, intent(inout) :: found
|
||||
integer, optional :: search_cells(:)
|
||||
|
||||
integer :: i ! index over cells
|
||||
integer :: i_x, i_y, i_z ! indices in lattice
|
||||
integer :: n_x, n_y, n_z ! size of lattice
|
||||
integer :: n ! number of cells to search
|
||||
integer :: index_cell ! index in cells array
|
||||
real(8) :: xyz(3) ! temporary location
|
||||
real(8) :: upper_right(3) ! lattice upper_right
|
||||
logical :: use_search_cells ! use cells provided as argument
|
||||
logical :: outside_lattice ! if particle is not inside lattice bounds
|
||||
logical :: lattice_edge ! if particle is on a lattice edge
|
||||
integer :: i ! index over cells
|
||||
integer :: i_xyz(3) ! indices in lattice
|
||||
integer :: n ! number of cells to search
|
||||
integer :: index_cell ! index in cells array
|
||||
logical :: use_search_cells ! use cells provided as argument
|
||||
type(Cell), pointer, save :: c => null() ! pointer to cell
|
||||
type(Lattice), pointer, save :: lat => null() ! pointer to lattice
|
||||
class(Lattice), pointer, save :: lat => null() ! pointer to lattice
|
||||
type(Universe), pointer, save :: univ => null() ! universe to search in
|
||||
!$omp threadprivate(c, lat, univ)
|
||||
|
||||
|
|
@ -159,7 +155,7 @@ contains
|
|||
n = univ % n_cells
|
||||
end if
|
||||
|
||||
do i = 1, n
|
||||
CELL_LOOP: do i = 1, n
|
||||
! select cells based on whether we are searching a universe or a provided
|
||||
! list of cells (this would be for lists of neighbor cells)
|
||||
if (use_search_cells) then
|
||||
|
|
@ -173,170 +169,102 @@ contains
|
|||
! get pointer to cell
|
||||
c => cells(index_cell)
|
||||
|
||||
if (simple_cell_contains(c, p)) then
|
||||
! Set cell on this level
|
||||
p % coord % cell = index_cell
|
||||
! Move on to the next cell if the particle is not inside this cell
|
||||
if (.not. simple_cell_contains(c, p)) cycle
|
||||
|
||||
! Show cell information on trace
|
||||
if (verbosity >= 10 .or. trace) then
|
||||
call write_message(" Entering cell " // trim(to_str(c % id)))
|
||||
end if
|
||||
! Set cell on this level
|
||||
p % coord % cell = index_cell
|
||||
|
||||
if (c % type == CELL_NORMAL) then
|
||||
! ====================================================================
|
||||
! AT LOWEST UNIVERSE, TERMINATE SEARCH
|
||||
|
||||
! set material
|
||||
p % last_material = p % material
|
||||
p % material = c % material
|
||||
|
||||
elseif (c % type == CELL_FILL) then
|
||||
! ====================================================================
|
||||
! CELL CONTAINS LOWER UNIVERSE, RECURSIVELY FIND CELL
|
||||
|
||||
! Create new level of coordinates
|
||||
allocate(p % coord % next)
|
||||
p % coord % next % xyz = p % coord % xyz
|
||||
p % coord % next % uvw = p % coord % uvw
|
||||
|
||||
! Move particle to next level and set universe
|
||||
p % coord => p % coord % next
|
||||
p % coord % universe = c % fill
|
||||
|
||||
! Apply translation
|
||||
if (allocated(c % translation)) then
|
||||
p % coord % xyz = p % coord % xyz - c % translation
|
||||
end if
|
||||
|
||||
! Apply rotation
|
||||
if (allocated(c % rotation_matrix)) then
|
||||
p % coord % xyz = matmul(c % rotation_matrix, p % coord % xyz)
|
||||
p % coord % uvw = matmul(c % rotation_matrix, p % coord % uvw)
|
||||
p % coord % rotated = .true.
|
||||
end if
|
||||
|
||||
call find_cell(p, found)
|
||||
if (.not. found) exit
|
||||
|
||||
elseif (c % type == CELL_LATTICE) then
|
||||
! ====================================================================
|
||||
! CELL CONTAINS LATTICE, RECURSIVELY FIND CELL
|
||||
|
||||
! Set current lattice
|
||||
lat => lattices(c % fill)
|
||||
|
||||
outside_lattice = .false.
|
||||
lattice_edge = .false.
|
||||
|
||||
! determine lattice index based on position
|
||||
xyz = p % coord % xyz + TINY_BIT * p % coord % uvw
|
||||
i_x = ceiling((xyz(1) - lat % lower_left(1))/lat % width(1))
|
||||
i_y = ceiling((xyz(2) - lat % lower_left(2))/lat % width(2))
|
||||
n_x = lat % dimension(1)
|
||||
n_y = lat % dimension(2)
|
||||
if (lat % n_dimension == 3) then
|
||||
i_z = ceiling((xyz(3) - lat % lower_left(3))/lat % width(3))
|
||||
n_z = lat % dimension(3)
|
||||
else
|
||||
i_z = 1
|
||||
n_z = 1
|
||||
end if
|
||||
|
||||
! Check if lattice coordinates are within bounds
|
||||
if (i_x < 1 .or. i_x > n_x .or. i_y < 1 .or. i_y > n_y .or. &
|
||||
i_z < 1 .or. i_z > n_z) then
|
||||
|
||||
! Check for when particle is on lattice edge
|
||||
upper_right(1) = lat % lower_left(1) + &
|
||||
lat % width(1) * dble(lat % dimension(1))
|
||||
upper_right(2) = lat % lower_left(2) + &
|
||||
lat % width(2) * dble(lat % dimension(2))
|
||||
if ( abs(xyz(1) - lat % lower_left(1)) < FP_COINCIDENT .or. &
|
||||
abs(xyz(2) - lat % lower_left(2)) < FP_COINCIDENT .or. &
|
||||
abs(upper_right(1) - xyz(1)) < FP_COINCIDENT .or. &
|
||||
abs(upper_right(2) - xyz(2)) < FP_COINCIDENT) then
|
||||
lattice_edge = .true.
|
||||
end if
|
||||
if (lat % n_dimension == 3) then
|
||||
upper_right(3) = lat % lower_left(3) + &
|
||||
lat % width(3) * dble(lat % dimension(3))
|
||||
if (abs(xyz(3) - lat % lower_left(3)) < FP_COINCIDENT .or. &
|
||||
abs(upper_right(3) - xyz(3)) < FP_COINCIDENT) then
|
||||
lattice_edge = .true.
|
||||
end if
|
||||
end if
|
||||
|
||||
if (lattice_edge) then
|
||||
|
||||
! In this case the neutron is leaving the lattice, so we move it
|
||||
! out, remove all lower coordinate levels and then search from
|
||||
! universe 0.
|
||||
|
||||
p % coord => p % coord0
|
||||
call deallocate_coord(p % coord % next)
|
||||
|
||||
! Reset surface and advance particle a tiny bit
|
||||
p % surface = NONE
|
||||
p % coord % xyz = xyz
|
||||
|
||||
else
|
||||
outside_lattice = .true.
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
if (.not. lattice_edge) then
|
||||
|
||||
! Create new level of coordinates
|
||||
allocate(p % coord % next)
|
||||
|
||||
! adjust local position of particle
|
||||
p % coord % next % xyz(1) = p % coord % xyz(1) - &
|
||||
(lat % lower_left(1) + (i_x - 0.5_8)*lat % width(1))
|
||||
p % coord % next % xyz(2) = p % coord % xyz(2) - &
|
||||
(lat % lower_left(2) + (i_y - 0.5_8)*lat % width(2))
|
||||
if (lat % n_dimension == 3) then
|
||||
p % coord % next % xyz(3) = p % coord % xyz(3) - &
|
||||
(lat % lower_left(3) + (i_z - 0.5_8)*lat % width(3))
|
||||
else
|
||||
p % coord % next % xyz(3) = p % coord % xyz(3)
|
||||
end if
|
||||
p % coord % next % uvw = p % coord % uvw
|
||||
|
||||
! set particle lattice indices
|
||||
p % coord % next% lattice = c % fill
|
||||
p % coord % next% lattice_x = i_x
|
||||
p % coord % next% lattice_y = i_y
|
||||
p % coord % next% lattice_z = i_z
|
||||
if (.not. outside_lattice) then
|
||||
p % coord % next % universe = lat % universes(i_x,i_y,i_z)
|
||||
else
|
||||
if (lat % outer == NO_OUTER_UNIVERSE) then
|
||||
call fatal_error("A particle is outside latttice " &
|
||||
&// trim(to_str(lat % id)) // " but the lattice has no &
|
||||
&defined outer universe.")
|
||||
else
|
||||
p % coord % next % universe = lat % outer
|
||||
end if
|
||||
end if
|
||||
|
||||
! Move particle to next level
|
||||
p % coord => p % coord % next
|
||||
|
||||
end if
|
||||
|
||||
! Find in the next lowest coordinate level.
|
||||
call find_cell(p, found)
|
||||
if (.not. found) exit
|
||||
|
||||
end if
|
||||
|
||||
! Found cell so we can return
|
||||
found = .true.
|
||||
return
|
||||
! Show cell information on trace
|
||||
if (verbosity >= 10 .or. trace) then
|
||||
call write_message(" Entering cell " // trim(to_str(c % id)))
|
||||
end if
|
||||
end do
|
||||
|
||||
CELL_TYPE: if (c % type == CELL_NORMAL) then
|
||||
! ======================================================================
|
||||
! AT LOWEST UNIVERSE, TERMINATE SEARCH
|
||||
|
||||
! set material
|
||||
p % last_material = p % material
|
||||
p % material = c % material
|
||||
|
||||
elseif (c % type == CELL_FILL) then CELL_TYPE
|
||||
! ======================================================================
|
||||
! CELL CONTAINS LOWER UNIVERSE, RECURSIVELY FIND CELL
|
||||
|
||||
! Create new level of coordinates
|
||||
allocate(p % coord % next)
|
||||
p % coord % next % xyz = p % coord % xyz
|
||||
p % coord % next % uvw = p % coord % uvw
|
||||
|
||||
! Move particle to next level and set universe
|
||||
p % coord => p % coord % next
|
||||
p % coord % universe = c % fill
|
||||
|
||||
! Apply translation
|
||||
if (allocated(c % translation)) then
|
||||
p % coord % xyz = p % coord % xyz - c % translation
|
||||
end if
|
||||
|
||||
! Apply rotation
|
||||
if (allocated(c % rotation_matrix)) then
|
||||
p % coord % xyz = matmul(c % rotation_matrix, p % coord % xyz)
|
||||
p % coord % uvw = matmul(c % rotation_matrix, p % coord % uvw)
|
||||
p % coord % rotated = .true.
|
||||
end if
|
||||
|
||||
call find_cell(p, found)
|
||||
if (.not. found) exit
|
||||
|
||||
elseif (c % type == CELL_LATTICE) then CELL_TYPE
|
||||
! ======================================================================
|
||||
! CELL CONTAINS LATTICE, RECURSIVELY FIND CELL
|
||||
|
||||
! Set current lattice
|
||||
lat => lattices(c % fill) % obj
|
||||
|
||||
! Determine lattice indices
|
||||
i_xyz = lat % get_indices(p % coord % xyz + TINY_BIT * p % coord % uvw)
|
||||
|
||||
! Create new level of coordinates
|
||||
allocate(p % coord % next)
|
||||
p % coord % next % xyz = lat % get_local_xyz(p % coord % xyz, i_xyz)
|
||||
p % coord % next % uvw = p % coord % uvw
|
||||
|
||||
! set particle lattice indices
|
||||
p % coord % next% lattice = c % fill
|
||||
p % coord % next% lattice_x = i_xyz(1)
|
||||
p % coord % next% lattice_y = i_xyz(2)
|
||||
p % coord % next% lattice_z = i_xyz(3)
|
||||
|
||||
! Set the next lowest coordinate level.
|
||||
if (lat % are_valid_indices(i_xyz)) then
|
||||
! Particle is inside the lattice.
|
||||
p % coord % next % universe = &
|
||||
&lat % universes(i_xyz(1), i_xyz(2), i_xyz(3))
|
||||
|
||||
else
|
||||
! Particle is outside the lattice.
|
||||
if (lat % outer == NO_OUTER_UNIVERSE) then
|
||||
call fatal_error("A particle is outside latttice " &
|
||||
&// trim(to_str(lat % id)) // " but the lattice has no &
|
||||
&defined outer universe.")
|
||||
else
|
||||
p % coord % next % universe = lat % outer
|
||||
end if
|
||||
end if
|
||||
|
||||
! Move particle to next level and search for the lower cells.
|
||||
p % coord => p % coord % next
|
||||
call find_cell(p, found)
|
||||
if (.not. found) exit
|
||||
|
||||
end if CELL_TYPE
|
||||
|
||||
! Found cell so we can return
|
||||
found = .true.
|
||||
return
|
||||
end do CELL_LOOP
|
||||
|
||||
found = .false.
|
||||
|
||||
|
|
@ -640,19 +568,18 @@ contains
|
|||
! CROSS_LATTICE moves a particle into a new lattice element
|
||||
!===============================================================================
|
||||
|
||||
subroutine cross_lattice(p, lattice_crossed)
|
||||
subroutine cross_lattice(p, lattice_translation)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
integer, intent(in) :: lattice_crossed
|
||||
integer, intent(in) :: lattice_translation(3)
|
||||
|
||||
integer :: i_x, i_y, i_z ! indices in lattice
|
||||
integer :: n_x, n_y, n_z ! size of lattice
|
||||
real(8) :: x0, y0, z0 ! half width of lattice element
|
||||
logical :: found ! particle found in cell?
|
||||
type(Lattice), pointer, save :: lat => null()
|
||||
!$omp threadprivate(lat)
|
||||
integer :: i_xyz(3) ! indices in lattice
|
||||
logical :: found ! particle found in cell?
|
||||
class(Lattice), pointer, save :: lat => null()
|
||||
type(LocalCoord), pointer, save :: parent_coord => null()
|
||||
!$omp threadprivate(lat, parent_coord)
|
||||
|
||||
lat => lattices(p % coord % lattice)
|
||||
lat => lattices(p % coord % lattice) % obj
|
||||
|
||||
if (verbosity >= 10 .or. trace) then
|
||||
call write_message(" Crossing lattice " // trim(to_str(lat % id)) &
|
||||
|
|
@ -661,80 +588,42 @@ contains
|
|||
&// trim(to_str(p % coord % lattice_z)) // ")")
|
||||
end if
|
||||
|
||||
if (lat % type == LATTICE_RECT) then
|
||||
x0 = lat % width(1) * 0.5_8
|
||||
y0 = lat % width(2) * 0.5_8
|
||||
if (lat % n_dimension == 3) z0 = lat % width(3) * 0.5_8
|
||||
! Find the coordiante level just above the current one.
|
||||
parent_coord => p % coord0
|
||||
do while(.not. associated(parent_coord % next, p % coord))
|
||||
parent_coord => parent_coord % next
|
||||
end do
|
||||
|
||||
select case (lattice_crossed)
|
||||
case (LATTICE_LEFT)
|
||||
! Move particle to left element
|
||||
p % coord % lattice_x = p % coord % lattice_x - 1
|
||||
p % coord % xyz(1) = x0
|
||||
! Set the lattice indices.
|
||||
p % coord % lattice_x = p % coord % lattice_x + lattice_translation(1)
|
||||
p % coord % lattice_y = p % coord % lattice_y + lattice_translation(2)
|
||||
p % coord % lattice_z = p % coord % lattice_z + lattice_translation(3)
|
||||
i_xyz(1) = p % coord % lattice_x
|
||||
i_xyz(2) = p % coord % lattice_y
|
||||
i_xyz(3) = p % coord % lattice_z
|
||||
|
||||
case (LATTICE_RIGHT)
|
||||
! Move particle to right element
|
||||
p % coord % lattice_x = p % coord % lattice_x + 1
|
||||
p % coord % xyz(1) = -x0
|
||||
! Set the new coordinate position.
|
||||
p % coord % xyz = lat % get_local_xyz(parent_coord % xyz, i_xyz)
|
||||
|
||||
case (LATTICE_BACK)
|
||||
! Move particle to bottom element
|
||||
p % coord % lattice_y = p % coord % lattice_y - 1
|
||||
p % coord % xyz(2) = y0
|
||||
|
||||
case (LATTICE_FRONT)
|
||||
! Move particle to top element
|
||||
p % coord % lattice_y = p % coord % lattice_y + 1
|
||||
p % coord % xyz(2) = -y0
|
||||
|
||||
case (LATTICE_BOTTOM)
|
||||
! Move particle to bottom element
|
||||
p % coord % lattice_z = p % coord % lattice_z - 1
|
||||
p % coord % xyz(3) = z0
|
||||
|
||||
case (LATTICE_TOP)
|
||||
! Move particle to top element
|
||||
p % coord % lattice_z = p % coord % lattice_z + 1
|
||||
p % coord % xyz(3) = -z0
|
||||
|
||||
end select
|
||||
elseif (lat % type == LATTICE_HEX) then
|
||||
! TODO: Add hex lattice support
|
||||
end if
|
||||
|
||||
! Check to make sure still in lattice
|
||||
i_x = p % coord % lattice_x
|
||||
i_y = p % coord % lattice_y
|
||||
i_z = p % coord % lattice_z
|
||||
n_x = lat % dimension(1)
|
||||
n_y = lat % dimension(2)
|
||||
if (lat % n_dimension == 3) then
|
||||
n_z = lat % dimension(3)
|
||||
else
|
||||
n_z = 1
|
||||
end if
|
||||
if (i_x < 1 .or. i_x > n_x .or. i_y < 1 .or. i_y > n_y .or. &
|
||||
i_z < 1 .or. i_z > n_z) then
|
||||
OUTSIDE_LAT: if (.not. lat % are_valid_indices(i_xyz)) then
|
||||
! The particle is outside the lattice. Search for it from coord0.
|
||||
call deallocate_coord(p % coord0 % next)
|
||||
p % coord => p % coord0
|
||||
|
||||
! Search for particle
|
||||
call find_cell(p, found)
|
||||
if (.not. found) then
|
||||
call handle_lost_particle(p, "Could not locate particle " &
|
||||
&// trim(to_str(p % id)) // " after crossing a lattice boundary.")
|
||||
return
|
||||
end if
|
||||
else
|
||||
! Find universe for next lattice element
|
||||
p % coord % universe = lat % universes(i_x, i_y, i_z)
|
||||
|
||||
else OUTSIDE_LAT
|
||||
! Find cell in next lattice element
|
||||
p % coord % universe = lat % universes(i_xyz(1), i_xyz(2), i_xyz(3))
|
||||
call find_cell(p, found)
|
||||
if (.not. found) then
|
||||
! In some circumstances, a particle crossing the corner of a cell may not
|
||||
! be able to be found in the next universe. In this scenario we cut off
|
||||
! all lower-level coordinates and search from universe zero
|
||||
! In some circumstances, a particle crossing the corner of a cell may
|
||||
! not be able to be found in the next universe. In this scenario we cut
|
||||
! off all lower-level coordinates and search from universe zero
|
||||
|
||||
! Remove lower coordinates
|
||||
call deallocate_coord(p % coord0 % next)
|
||||
|
|
@ -749,7 +638,7 @@ contains
|
|||
return
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end if OUTSIDE_LAT
|
||||
|
||||
end subroutine cross_lattice
|
||||
|
||||
|
|
@ -759,34 +648,47 @@ contains
|
|||
! that has a parent cell, also include the surfaces of the edge of the universe.
|
||||
!===============================================================================
|
||||
|
||||
subroutine distance_to_boundary(p, dist, surface_crossed, lattice_crossed)
|
||||
subroutine distance_to_boundary(p, dist, surface_crossed, lattice_translation)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
real(8), intent(out) :: dist
|
||||
integer, intent(out) :: surface_crossed
|
||||
integer, intent(out) :: lattice_crossed
|
||||
integer, intent(out) :: lattice_translation(3)
|
||||
|
||||
integer :: i ! index for surface in cell
|
||||
integer :: index_surf ! index in surfaces array (with sign)
|
||||
real(8) :: x,y,z ! particle coordinates
|
||||
real(8) :: u,v,w ! particle directions
|
||||
real(8) :: d ! evaluated distance
|
||||
real(8) :: x0,y0,z0 ! coefficients for surface
|
||||
real(8) :: r ! radius for quadratic surfaces
|
||||
real(8) :: tmp ! dot product of surface normal with direction
|
||||
real(8) :: a,b,c,k ! quadratic equation coefficients
|
||||
real(8) :: quad ! discriminant of quadratic equation
|
||||
logical :: on_surface ! is particle on surface?
|
||||
integer :: i ! index for surface in cell
|
||||
integer :: index_surf ! index in surfaces array (with sign)
|
||||
integer :: i_xyz(3) ! lattice indices
|
||||
integer :: level_surf_cross ! surface crossed on current level
|
||||
integer :: level_lat_trans(3) ! lattice translation on current level
|
||||
real(8) :: x,y,z ! particle coordinates
|
||||
real(8) :: xyz_t(3) ! local particle coordinates
|
||||
real(8) :: beta, gama ! skewed particle coordiantes
|
||||
real(8) :: u,v,w ! particle directions
|
||||
real(8) :: beta_dir ! skewed particle direction
|
||||
real(8) :: gama_dir ! skewed particle direction
|
||||
real(8) :: edge ! distance to oncoming edge
|
||||
real(8) :: d ! evaluated distance
|
||||
real(8) :: d_lat ! distance to lattice boundary
|
||||
real(8) :: d_surf ! distance to surface
|
||||
real(8) :: x0,y0,z0 ! coefficients for surface
|
||||
real(8) :: r ! radius for quadratic surfaces
|
||||
real(8) :: tmp ! dot product of surface normal with direction
|
||||
real(8) :: a,b,c,k ! quadratic equation coefficients
|
||||
real(8) :: quad ! discriminant of quadratic equation
|
||||
logical :: on_surface ! is particle on surface?
|
||||
type(Cell), pointer, save :: cl => null()
|
||||
type(Surface), pointer, save :: surf => null()
|
||||
type(Lattice), pointer, save :: lat => null()
|
||||
class(Lattice), pointer, save :: lat => null()
|
||||
type(LocalCoord), pointer, save :: coord => null()
|
||||
type(LocalCoord), pointer, save :: final_coord => null()
|
||||
!$omp threadprivate(cl, surf, lat, coord, final_coord)
|
||||
type(LocalCoord), pointer, save :: parent_coord => null()
|
||||
!$omp threadprivate(cl, surf, lat, coord, final_coord, parent_coord)
|
||||
|
||||
! inialize distance to infinity (huge)
|
||||
dist = INFINITY
|
||||
lattice_crossed = NONE
|
||||
d_lat = INFINITY
|
||||
d_surf = INFINITY
|
||||
lattice_translation(:) = [0, 0, 0]
|
||||
nullify(final_coord)
|
||||
|
||||
! Get pointer to top-level coordinates
|
||||
|
|
@ -1220,12 +1122,10 @@ contains
|
|||
end select
|
||||
|
||||
! Check is calculated distance is new minimum
|
||||
if (d < dist) then
|
||||
if (abs(d - dist)/dist >= FP_PRECISION) then
|
||||
dist = d
|
||||
surface_crossed = -cl % surfaces(i)
|
||||
lattice_crossed = NONE
|
||||
final_coord => coord
|
||||
if (d < d_surf) then
|
||||
if (abs(d - d_surf)/d_surf >= FP_PRECISION) then
|
||||
d_surf = d
|
||||
level_surf_cross = -cl % surfaces(i)
|
||||
end if
|
||||
end if
|
||||
|
||||
|
|
@ -1234,17 +1134,20 @@ contains
|
|||
! =======================================================================
|
||||
! FIND MINIMUM DISTANCE TO LATTICE SURFACES
|
||||
|
||||
if (coord % lattice /= NONE) then
|
||||
lat => lattices(coord % lattice)
|
||||
if (lat % type == LATTICE_RECT) then
|
||||
LAT_COORD: if (coord % lattice /= NONE) then
|
||||
lat => lattices(coord % lattice) % obj
|
||||
|
||||
LAT_TYPE: select type(lat)
|
||||
|
||||
type is (RectLattice)
|
||||
! copy local coordinates
|
||||
x = coord % xyz(1)
|
||||
y = coord % xyz(2)
|
||||
z = coord % xyz(3)
|
||||
|
||||
! determine oncoming edge
|
||||
x0 = sign(lat % width(1) * 0.5_8, u)
|
||||
y0 = sign(lat % width(2) * 0.5_8, v)
|
||||
x0 = sign(lat % pitch(1) * 0.5_8, u)
|
||||
y0 = sign(lat % pitch(2) * 0.5_8, v)
|
||||
|
||||
! left and right sides
|
||||
if (abs(x - x0) < FP_PRECISION) then
|
||||
|
|
@ -1255,23 +1158,11 @@ contains
|
|||
d = (x0 - x)/u
|
||||
end if
|
||||
|
||||
! If the lattice boundary is coincident with the parent cell boundary,
|
||||
! we need to make sure that the lattice is not selected. This is
|
||||
! complicated by the fact that floating point may determine that one
|
||||
! is closer than the other (can't check direct equality). Thus, the
|
||||
! logic here checks whether the relative difference is within floating
|
||||
! point precision.
|
||||
|
||||
if (d < dist) then
|
||||
if (abs(d - dist)/dist >= FP_REL_PRECISION) then
|
||||
dist = d
|
||||
if (u > 0) then
|
||||
lattice_crossed = LATTICE_RIGHT
|
||||
else
|
||||
lattice_crossed = LATTICE_LEFT
|
||||
end if
|
||||
final_coord => coord
|
||||
end if
|
||||
d_lat = d
|
||||
if (u > 0) then
|
||||
level_lat_trans(:) = [1, 0, 0]
|
||||
else
|
||||
level_lat_trans(:) = [-1, 0, 0]
|
||||
end if
|
||||
|
||||
! front and back sides
|
||||
|
|
@ -1283,20 +1174,17 @@ contains
|
|||
d = (y0 - y)/v
|
||||
end if
|
||||
|
||||
if (d < dist) then
|
||||
if (abs(d - dist)/dist >= FP_REL_PRECISION) then
|
||||
dist = d
|
||||
if (v > 0) then
|
||||
lattice_crossed = LATTICE_FRONT
|
||||
else
|
||||
lattice_crossed = LATTICE_BACK
|
||||
end if
|
||||
final_coord => coord
|
||||
if (d < d_lat) then
|
||||
d_lat = d
|
||||
if (v > 0) then
|
||||
level_lat_trans(:) = [0, 1, 0]
|
||||
else
|
||||
level_lat_trans(:) = [0, -1, 0]
|
||||
end if
|
||||
end if
|
||||
|
||||
if (lat % n_dimension == 3) then
|
||||
z0 = sign(lat % width(3) * 0.5_8, w)
|
||||
if (lat % is_3d) then
|
||||
z0 = sign(lat % pitch(3) * 0.5_8, w)
|
||||
|
||||
! top and bottom sides
|
||||
if (abs(z - z0) < FP_PRECISION) then
|
||||
|
|
@ -1307,21 +1195,157 @@ contains
|
|||
d = (z0 - z)/w
|
||||
end if
|
||||
|
||||
if (d < dist) then
|
||||
if (abs(d - dist)/dist >= FP_REL_PRECISION) then
|
||||
dist = d
|
||||
if (w > 0) then
|
||||
lattice_crossed = LATTICE_TOP
|
||||
else
|
||||
lattice_crossed = LATTICE_BOTTOM
|
||||
end if
|
||||
final_coord => coord
|
||||
if (d < d_lat) then
|
||||
d_lat = d
|
||||
if (w > 0) then
|
||||
level_lat_trans(:) = [0, 0, 1]
|
||||
else
|
||||
level_lat_trans(:) = [0, 0, -1]
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
|
||||
elseif (lat % type == LATTICE_HEX) then
|
||||
! TODO: Add hex lattice support
|
||||
type is (HexLattice) LAT_TYPE
|
||||
! Copy local coordinates.
|
||||
z = coord % xyz(3)
|
||||
i_xyz(1) = coord % lattice_x
|
||||
i_xyz(2) = coord % lattice_y
|
||||
i_xyz(3) = coord % lattice_z
|
||||
parent_coord => p % coord0
|
||||
do while(.not. associated(parent_coord % next, coord))
|
||||
parent_coord => parent_coord % next
|
||||
end do
|
||||
|
||||
! Compute velocities along the hexagonal axes.
|
||||
beta_dir = u*sqrt(3.0_8)/2.0_8 + v/2.0_8
|
||||
gama_dir = u*sqrt(3.0_8)/2.0_8 - v/2.0_8
|
||||
|
||||
! Note that hexagonal lattice distance calculations are performed
|
||||
! using the particle's coordinates relative to the neighbor lattice
|
||||
! cells, not relative to the particle's current cell. This is done
|
||||
! because there is significant disagreement between neighboring cells
|
||||
! on where the lattice boundary is due to the worse finite precision
|
||||
! of hex lattices.
|
||||
|
||||
! Upper right and lower left sides.
|
||||
edge = -sign(lat % pitch(1)/2.0_8, beta_dir) ! Oncoming edge
|
||||
if (beta_dir > 0.0) then
|
||||
xyz_t = lat % get_local_xyz(parent_coord % xyz, i_xyz+[1, 0, 0])
|
||||
else
|
||||
xyz_t = lat % get_local_xyz(parent_coord % xyz, i_xyz+[-1, 0, 0])
|
||||
end if
|
||||
beta = xyz_t(1)*sqrt(3.0_8)/2.0_8 + xyz_t(2)/2.0_8
|
||||
if (abs(beta - edge) < FP_PRECISION) then
|
||||
d = INFINITY
|
||||
else if (beta_dir == ZERO) then
|
||||
d = INFINITY
|
||||
else
|
||||
d = (edge - beta)/beta_dir
|
||||
end if
|
||||
|
||||
d_lat = d
|
||||
if (beta_dir > 0) then
|
||||
level_lat_trans(:) = [1, 0, 0]
|
||||
else
|
||||
level_lat_trans(:) = [-1, 0, 0]
|
||||
end if
|
||||
|
||||
! Lower right and upper left sides.
|
||||
edge = -sign(lat % pitch(1)/2.0_8, gama_dir) ! Oncoming edge
|
||||
if (gama_dir > 0.0) then
|
||||
xyz_t = lat % get_local_xyz(parent_coord % xyz, i_xyz+[1, -1, 0])
|
||||
else
|
||||
xyz_t = lat % get_local_xyz(parent_coord % xyz, i_xyz+[-1, 1, 0])
|
||||
end if
|
||||
gama = xyz_t(1)*sqrt(3.0_8)/2.0_8 - xyz_t(2)/2.0_8
|
||||
if (abs(gama - edge) < FP_PRECISION) then
|
||||
d = INFINITY
|
||||
else if (gama_dir == ZERO) then
|
||||
d = INFINITY
|
||||
else
|
||||
d = (edge - gama)/gama_dir
|
||||
end if
|
||||
|
||||
if (d < d_lat) then
|
||||
d_lat = d
|
||||
if (gama_dir > 0) then
|
||||
level_lat_trans(:) = [1, -1, 0]
|
||||
else
|
||||
level_lat_trans(:) = [-1, 1, 0]
|
||||
end if
|
||||
end if
|
||||
|
||||
! Upper and lower sides.
|
||||
edge = -sign(lat % pitch(1)/2.0_8, v) ! Oncoming edge
|
||||
if (v > 0.0) then
|
||||
xyz_t = lat % get_local_xyz(parent_coord % xyz, i_xyz+[0, 1, 0])
|
||||
else
|
||||
xyz_t = lat % get_local_xyz(parent_coord % xyz, i_xyz+[0, -1, 0])
|
||||
end if
|
||||
if (abs(xyz_t(2) - edge) < FP_PRECISION) then
|
||||
d = INFINITY
|
||||
else if (v == ZERO) then
|
||||
d = INFINITY
|
||||
else
|
||||
d = (edge - xyz_t(2))/v
|
||||
end if
|
||||
|
||||
if (d < d_lat) then
|
||||
d_lat = d
|
||||
if (v > 0) then
|
||||
level_lat_trans(:) = [0, 1, 0]
|
||||
else
|
||||
level_lat_trans(:) = [0, -1, 0]
|
||||
end if
|
||||
end if
|
||||
|
||||
! Top and bottom sides.
|
||||
if (lat % is_3d) then
|
||||
z0 = sign(lat % pitch(2) * 0.5_8, w)
|
||||
|
||||
if (abs(z - z0) < FP_PRECISION) then
|
||||
d = INFINITY
|
||||
elseif (w == ZERO) then
|
||||
d = INFINITY
|
||||
else
|
||||
d = (z0 - z)/w
|
||||
end if
|
||||
|
||||
if (d < d_lat) then
|
||||
d_lat = d
|
||||
if (w > 0) then
|
||||
level_lat_trans(:) = [0, 0, 1]
|
||||
else
|
||||
level_lat_trans(:) = [0, 0, -1]
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end select LAT_TYPE
|
||||
|
||||
if (d_lat < 0.0) then
|
||||
call handle_lost_particle(p, "Particle " // trim(to_str(p % id)) &
|
||||
&//" had a negative distance to a lattice boundary. d = " &
|
||||
&//trim(to_str(d_lat)))
|
||||
end if
|
||||
end if LAT_COORD
|
||||
|
||||
! If the boundary on this lattice level is coincident with a boundary on
|
||||
! a higher level then we need to make sure that the higher level boundary
|
||||
! is selected. This logic must include consideration of floating point
|
||||
! precision.
|
||||
if (d_surf < d_lat) then
|
||||
if ((dist - d_surf)/dist >= FP_REL_PRECISION) then
|
||||
dist = d_surf
|
||||
surface_crossed = level_surf_cross
|
||||
lattice_translation(:) = [0, 0, 0]
|
||||
final_coord => coord
|
||||
end if
|
||||
else
|
||||
if ((dist - d_lat)/dist >= FP_REL_PRECISION) then
|
||||
dist = d_lat
|
||||
surface_crossed = None
|
||||
lattice_translation(:) = level_lat_trans
|
||||
final_coord => coord
|
||||
end if
|
||||
end if
|
||||
|
||||
|
|
|
|||
|
|
@ -17,22 +17,98 @@ module geometry_header
|
|||
end type Universe
|
||||
|
||||
!===============================================================================
|
||||
! LATTICE is an ordered array of elements (either rectangular, hexagonal, or
|
||||
! triangular)
|
||||
! LATTICE abstract type for ordered array of universes.
|
||||
!===============================================================================
|
||||
|
||||
type Lattice
|
||||
integer :: id ! Universe number for lattice
|
||||
integer :: type ! Type of lattice (rectangular, hex, etc)
|
||||
integer :: level ! Level of lattice
|
||||
integer :: n_dimension ! Number of dimensions
|
||||
integer, allocatable :: dimension(:) ! number of cells in each direction
|
||||
real(8), allocatable :: lower_left(:) ! lower-left corner of lattice
|
||||
real(8), allocatable :: width(:) ! width of each lattice cell
|
||||
integer, allocatable :: universes(:,:,:) ! specified universes
|
||||
integer :: outer ! universe to tile outside the lat
|
||||
type, abstract :: Lattice
|
||||
integer :: id ! Universe number for lattice
|
||||
real(8), allocatable :: pitch(:) ! Pitch along each axis
|
||||
integer, allocatable :: universes(:,:,:) ! Specified universes
|
||||
integer :: outside ! Material to fill area outside
|
||||
integer :: outer ! universe to tile outside the lat
|
||||
logical :: is_3d ! Lattice has cells on z axis
|
||||
|
||||
contains
|
||||
|
||||
procedure(are_valid_indices_), deferred :: are_valid_indices
|
||||
procedure(get_indices_), deferred :: get_indices
|
||||
procedure(get_local_xyz_), deferred :: get_local_xyz
|
||||
end type Lattice
|
||||
|
||||
abstract interface
|
||||
|
||||
!===============================================================================
|
||||
! ARE_VALID_INDICES returns .true. if the given lattice indices fit within the
|
||||
! bounds of the lattice. Returns false otherwise.
|
||||
|
||||
function are_valid_indices_(this, i_xyz) result(is_valid)
|
||||
import Lattice
|
||||
class(Lattice), intent(in) :: this
|
||||
integer, intent(in) :: i_xyz(3)
|
||||
logical :: is_valid
|
||||
end function are_valid_indices_
|
||||
|
||||
!===============================================================================
|
||||
! GET_INDICES returns the indices in a lattice for the given global xyz.
|
||||
|
||||
function get_indices_(this, global_xyz) result(i_xyz)
|
||||
import Lattice
|
||||
class(Lattice), intent(in) :: this
|
||||
real(8), intent(in) :: global_xyz(3)
|
||||
integer :: i_xyz(3)
|
||||
end function get_indices_
|
||||
|
||||
!===============================================================================
|
||||
! GET_LOCAL_XYZ returns the translated local version of the given global xyz.
|
||||
|
||||
function get_local_xyz_(this, global_xyz, i_xyz) result(local_xyz)
|
||||
import Lattice
|
||||
class(Lattice), intent(in) :: this
|
||||
real(8), intent(in) :: global_xyz(3)
|
||||
integer, intent(in) :: i_xyz(3)
|
||||
real(8) :: local_xyz(3)
|
||||
end function get_local_xyz_
|
||||
end interface
|
||||
|
||||
!===============================================================================
|
||||
! RECTLATTICE extends LATTICE for rectilinear arrays.
|
||||
!===============================================================================
|
||||
|
||||
type, extends(Lattice) :: RectLattice
|
||||
integer :: n_cells(3) ! Number of cells along each axis
|
||||
real(8), allocatable :: lower_left(:) ! Global lower-left corner of lat
|
||||
|
||||
contains
|
||||
|
||||
procedure :: are_valid_indices => valid_inds_rect
|
||||
procedure :: get_indices => get_inds_rect
|
||||
procedure :: get_local_xyz => get_local_rect
|
||||
end type RectLattice
|
||||
|
||||
!===============================================================================
|
||||
! HEXLATTICE extends LATTICE for hexagonal (sometimes called triangular) arrays.
|
||||
!===============================================================================
|
||||
|
||||
type, extends(Lattice) :: HexLattice
|
||||
integer :: n_rings ! Number of radial ring cell positoins
|
||||
integer :: n_axial ! Number of axial cell positions
|
||||
real(8), allocatable :: center(:) ! Global center of lattice
|
||||
|
||||
contains
|
||||
|
||||
procedure :: are_valid_indices => valid_inds_hex
|
||||
procedure :: get_indices => get_inds_hex
|
||||
procedure :: get_local_xyz => get_local_hex
|
||||
end type HexLattice
|
||||
|
||||
!===============================================================================
|
||||
! LATTICECONTAINER pointer array for storing lattices
|
||||
!===============================================================================
|
||||
|
||||
type LatticeContainer
|
||||
class(Lattice), allocatable :: obj
|
||||
end type LatticeContainer
|
||||
|
||||
!===============================================================================
|
||||
! SURFACE type defines a first- or second-order surface that can be used to
|
||||
! construct closed volumes (cells)
|
||||
|
|
@ -73,4 +149,166 @@ module geometry_header
|
|||
! array index of universe 0
|
||||
integer :: BASE_UNIVERSE
|
||||
|
||||
contains
|
||||
|
||||
!===============================================================================
|
||||
|
||||
function valid_inds_rect(this, i_xyz) result(is_valid)
|
||||
class(RectLattice), intent(in) :: this
|
||||
integer, intent(in) :: i_xyz(3)
|
||||
logical :: is_valid
|
||||
|
||||
is_valid = all(i_xyz > 0 .and. i_xyz <= this % n_cells)
|
||||
end function valid_inds_rect
|
||||
|
||||
!===============================================================================
|
||||
|
||||
function valid_inds_hex(this, i_xyz) result(is_valid)
|
||||
class(HexLattice), intent(in) :: this
|
||||
integer, intent(in) :: i_xyz(3)
|
||||
logical :: is_valid
|
||||
|
||||
is_valid = (all(i_xyz > 0) .and. &
|
||||
&i_xyz(1) < 2*this % n_rings .and. &
|
||||
&i_xyz(2) < 2*this % n_rings .and. &
|
||||
&i_xyz(1) + i_xyz(2) > this % n_rings .and. &
|
||||
&i_xyz(1) + i_xyz(2) < 3*this % n_rings .and. &
|
||||
&i_xyz(3) <= this % n_axial)
|
||||
end function valid_inds_hex
|
||||
|
||||
!===============================================================================
|
||||
|
||||
function get_inds_rect(this, global_xyz) result(i_xyz)
|
||||
class(RectLattice), intent(in) :: this
|
||||
real(8), intent(in) :: global_xyz(3)
|
||||
integer :: i_xyz(3)
|
||||
|
||||
real(8) :: xyz(3) ! global_xyz alias
|
||||
|
||||
xyz = global_xyz
|
||||
|
||||
i_xyz(1) = ceiling((xyz(1) - this % lower_left(1))/this % pitch(1))
|
||||
i_xyz(2) = ceiling((xyz(2) - this % lower_left(2))/this % pitch(2))
|
||||
if (this % is_3d) then
|
||||
i_xyz(3) = ceiling((xyz(3) - this % lower_left(3))/this % pitch(3))
|
||||
else
|
||||
i_xyz(3) = 1
|
||||
end if
|
||||
end function get_inds_rect
|
||||
|
||||
!===============================================================================
|
||||
|
||||
function get_inds_hex(this, global_xyz) result(i_xyz)
|
||||
class(HexLattice), intent(in) :: this
|
||||
real(8), intent(in) :: global_xyz(3)
|
||||
integer :: i_xyz(3)
|
||||
|
||||
real(8) :: xyz(3) ! global_xyz alias
|
||||
real(8) :: alpha ! Skewed coord axis
|
||||
real(8) :: xyz_t(3) ! Local xyz
|
||||
real(8) :: dists(4) ! Squared distances from cell centers
|
||||
integer :: i, j, k ! Iterators
|
||||
integer :: loc(1) ! Minimum distance index
|
||||
|
||||
xyz = global_xyz
|
||||
|
||||
! Index z direction.
|
||||
if (this % is_3d) then
|
||||
i_xyz(3) = ceiling((xyz(3) - this % center(3))/this % pitch(2) + 0.5_8)&
|
||||
&+ this % n_axial/2
|
||||
else
|
||||
i_xyz(3) = 1
|
||||
end if
|
||||
|
||||
! Convert coordinates into skewed bases. The (x, alpha) basis is used to
|
||||
! find the index of the global coordinates to within 4 cells.
|
||||
alpha = xyz(2) - xyz(1) / sqrt(3.0_8)
|
||||
i_xyz(1) = floor(xyz(1) / (sqrt(3.0_8) / 2.0_8 * this % pitch(1)))
|
||||
i_xyz(2) = floor(alpha / this % pitch(1))
|
||||
|
||||
! Add offset to indices (the center cell is (i_x, i_alpha) = (0, 0) but
|
||||
! the array is offset so that the indices never go below 1).
|
||||
i_xyz(1) = i_xyz(1) + this % n_rings
|
||||
i_xyz(2) = i_xyz(2) + this % n_rings
|
||||
|
||||
! Calculate the (squared) distance between the particle and the centers of
|
||||
! the four possible cells. Regular hexagonal tiles form a centroidal
|
||||
! Voronoi tessellation so the global xyz should be in the hexagonal cell
|
||||
! that it is closest to the center of. This method is used over a
|
||||
! method that uses the remainders of the floor divisions above becasue it
|
||||
! provides better finite precision performance. Squared distances are
|
||||
! used becasue they are more computationally efficient than normal
|
||||
! distances.
|
||||
k = 1
|
||||
do i=0,1
|
||||
do j=0,1
|
||||
xyz_t = this % get_local_xyz(xyz, i_xyz + (/j, i, 0/))
|
||||
dists(k) = xyz_t(1)**2 + xyz_t(2)**2
|
||||
k = k + 1
|
||||
end do
|
||||
end do
|
||||
|
||||
! Select the minimum squared distance which corresponds to the cell the
|
||||
! coordinates are in.
|
||||
loc = minloc(dists)
|
||||
if (loc(1) == 2) then
|
||||
i_xyz = i_xyz + (/1, 0, 0/)
|
||||
else if (loc(1) == 3) then
|
||||
i_xyz = i_xyz + (/0, 1, 0/)
|
||||
else if (loc(1) == 4) then
|
||||
i_xyz = i_xyz + (/1, 1, 0/)
|
||||
end if
|
||||
end function get_inds_hex
|
||||
|
||||
!===============================================================================
|
||||
|
||||
function get_local_rect(this, global_xyz, i_xyz) result(local_xyz)
|
||||
class(RectLattice), intent(in) :: this
|
||||
real(8), intent(in) :: global_xyz(3)
|
||||
integer, intent(in) :: i_xyz(3)
|
||||
real(8) :: local_xyz(3)
|
||||
|
||||
real(8) :: xyz(3) ! global_xyz alias
|
||||
|
||||
xyz = global_xyz
|
||||
|
||||
local_xyz(1) = xyz(1) - (this % lower_left(1) + &
|
||||
&(i_xyz(1) - 0.5_8)*this % pitch(1))
|
||||
local_xyz(2) = xyz(2) - (this % lower_left(2) + &
|
||||
&(i_xyz(2) - 0.5_8)*this % pitch(2))
|
||||
if (this % is_3d) then
|
||||
local_xyz(3) = xyz(3) - (this % lower_left(3) + &
|
||||
&(i_xyz(3) - 0.5_8)*this % pitch(3))
|
||||
else
|
||||
local_xyz(3) = xyz(3)
|
||||
end if
|
||||
end function get_local_rect
|
||||
|
||||
!===============================================================================
|
||||
|
||||
function get_local_hex(this, global_xyz, i_xyz) result(local_xyz)
|
||||
class(HexLattice), intent(in) :: this
|
||||
real(8), intent(in) :: global_xyz(3)
|
||||
integer, intent(in) :: i_xyz(3)
|
||||
real(8) :: local_xyz(3)
|
||||
|
||||
real(8) :: xyz(3) ! global_xyz alias
|
||||
|
||||
xyz = global_xyz
|
||||
|
||||
! x_l = x_g - (center + pitch_x*cos(30)*index_x)
|
||||
local_xyz(1) = xyz(1) - (this % center(1) + &
|
||||
&sqrt(3.0_8) / 2.0_8 * (i_xyz(1) - this % n_rings) * this % pitch(1))
|
||||
! y_l = y_g - (center + pitch_x*index_x + pitch_y*sin(30)*index_y)
|
||||
local_xyz(2) = xyz(2) - (this % center(2) + &
|
||||
&(i_xyz(2) - this % n_rings) * this % pitch(1) + &
|
||||
&(i_xyz(1) - this % n_rings) * this % pitch(1) / 2.0_8)
|
||||
if (this % is_3d) then
|
||||
local_xyz(3) = xyz(3) - this % center(3) &
|
||||
&+ (this % n_axial/2 - i_xyz(3) + 1) * this % pitch(2)
|
||||
else
|
||||
local_xyz(3) = xyz(3)
|
||||
end if
|
||||
end function get_local_hex
|
||||
|
||||
end module geometry_header
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ module global
|
|||
use cmfd_header
|
||||
use constants
|
||||
use dict_header, only: DictCharInt, DictIntInt
|
||||
use geometry_header, only: Cell, Universe, Lattice, Surface
|
||||
use geometry_header, only: Cell, Universe, Lattice, LatticeContainer, Surface
|
||||
use material_header, only: Material
|
||||
use mesh_header, only: StructuredMesh
|
||||
use plot_header, only: ObjectPlot
|
||||
|
|
@ -26,12 +26,12 @@ module global
|
|||
! GEOMETRY-RELATED VARIABLES
|
||||
|
||||
! Main arrays
|
||||
type(Cell), allocatable, target :: cells(:)
|
||||
type(Universe), allocatable, target :: universes(:)
|
||||
type(Lattice), allocatable, target :: lattices(:)
|
||||
type(Surface), allocatable, target :: surfaces(:)
|
||||
type(Material), allocatable, target :: materials(:)
|
||||
type(ObjectPlot),allocatable, target :: plots(:)
|
||||
type(Cell), allocatable, target :: cells(:)
|
||||
type(Universe), allocatable, target :: universes(:)
|
||||
type(LatticeContainer), allocatable, target :: lattices(:)
|
||||
type(Surface), allocatable, target :: surfaces(:)
|
||||
type(Material), allocatable, target :: materials(:)
|
||||
type(ObjectPlot), allocatable, target :: plots(:)
|
||||
|
||||
! Size of main arrays
|
||||
integer :: n_cells ! # of cells
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ module hdf5_summary
|
|||
use ace_header, only: Reaction, UrrData, Nuclide
|
||||
use constants
|
||||
use endf, only: reaction_name
|
||||
use geometry_header, only: Cell, Surface, Universe, Lattice
|
||||
use geometry_header, only: Cell, Surface, Universe, Lattice, RectLattice, &
|
||||
&HexLattice
|
||||
use global
|
||||
use material_header, only: Material
|
||||
use mesh_header, only: StructuredMesh
|
||||
|
|
@ -99,13 +100,11 @@ contains
|
|||
subroutine hdf5_write_geometry()
|
||||
|
||||
integer :: i, j, k, m
|
||||
integer :: n_x, n_y, n_z
|
||||
integer :: length(3)
|
||||
integer, allocatable :: lattice_universes(:,:,:)
|
||||
type(Cell), pointer :: c => null()
|
||||
type(Surface), pointer :: s => null()
|
||||
type(Universe), pointer :: u => null()
|
||||
type(Lattice), pointer :: lat => null()
|
||||
class(Lattice), pointer :: lat => null()
|
||||
|
||||
! Use H5LT interface to write number of geometry objects
|
||||
call su % write_data(n_cells, "n_cells", group="geometry")
|
||||
|
|
@ -174,8 +173,8 @@ contains
|
|||
case (CELL_LATTICE)
|
||||
call su % write_data("lattice", "fill_type", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
call su % write_data(lattices(c % fill) % id, "lattice", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
call su % write_data(lattices(c % fill) % obj % id, "lattice", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
end select
|
||||
|
||||
! Write list of bounding surfaces
|
||||
|
|
@ -306,7 +305,7 @@ contains
|
|||
|
||||
! Write information on each lattice
|
||||
LATTICE_LOOP: do i = 1, n_lattices
|
||||
lat => lattices(i)
|
||||
lat => lattices(i) % obj
|
||||
|
||||
! Write internal OpenMC index for this lattice
|
||||
call su % write_data(i, "index", &
|
||||
|
|
@ -315,50 +314,125 @@ contains
|
|||
! Write lattice type
|
||||
select case(lat % type)
|
||||
case (LATTICE_RECT)
|
||||
select type (lat)
|
||||
type is (RectLattice)
|
||||
! Write lattice type.
|
||||
call su % write_data("rectangular", "type", &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
case (LATTICE_HEX)
|
||||
call su % write_data("hexagonal", "type", &
|
||||
|
||||
! Write number of lattice cells.
|
||||
call su % write_data(lat % n_cells, "n_cells", length=3, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
end select
|
||||
|
||||
! Write lattice dimensions, lower left corner, and width of element
|
||||
call su % write_data(lat % dimension, "dimension", &
|
||||
length=lat % n_dimension, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
call su % write_data(lat % lower_left, "lower_left", &
|
||||
length=lat % n_dimension, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
call su % write_data(lat % width, "width", &
|
||||
length=lat % n_dimension, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
! Write lattice dimensions, lower left corner, and width of element
|
||||
call su % write_data(lat % dimension, "dimension", &
|
||||
length=lat % n_dimension, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
call su % write_data(lat % lower_left, "lower_left", &
|
||||
length=lat % n_dimension, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
call su % write_data(lat % width, "width", &
|
||||
length=lat % n_dimension, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
|
||||
call su % write_data(lat % outer, "outer", &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
call su % write_data(lat % outer, "outer", &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
|
||||
! Determine dimensions of lattice
|
||||
n_x = lat % dimension(1)
|
||||
n_y = lat % dimension(2)
|
||||
if (lat % n_dimension == 3) then
|
||||
n_z = lat % dimension(3)
|
||||
else
|
||||
n_z = 1
|
||||
end if
|
||||
! Determine dimensions of lattice
|
||||
n_x = lat % dimension(1)
|
||||
n_y = lat % dimension(2)
|
||||
if (lat % n_dimension == 3) then
|
||||
n_z = lat % dimension(3)
|
||||
else
|
||||
n_z = 1
|
||||
end if
|
||||
|
||||
! Write lattice universes
|
||||
allocate(lattice_universes(n_x, n_y, n_z))
|
||||
do j = 1, n_x
|
||||
do k = 1, n_y
|
||||
do m = 1, n_z
|
||||
lattice_universes(j,k,m) = universes(lat % universes(j,k,m)) % id
|
||||
! Write lattice lower-left.
|
||||
if (lat % is_3d) then
|
||||
call su % write_data(lat % lower_left, "lower_left", length=3, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
else
|
||||
call su % write_data(lat % lower_left, "lower_left", length=2, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
end if
|
||||
|
||||
! Write lattice pitch.
|
||||
if (lat % is_3d) then
|
||||
call su % write_data(lat % pitch, "pitch", length=3, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
else
|
||||
call su % write_data(lat % pitch, "pitch", length=2, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
end if
|
||||
|
||||
! Write lattice universes.
|
||||
allocate(lattice_universes(lat % n_cells(1), lat % n_cells(2), &
|
||||
&lat % n_cells(3)))
|
||||
do j = 1, lat % n_cells(1)
|
||||
do k = 1, lat % n_cells(2)
|
||||
do m = 1, lat % n_cells(3)
|
||||
lattice_universes(j,k,m) = universes(lat % universes(j,k,m)) % id
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
length = [n_x, n_y, n_z]
|
||||
call su % write_data(lattice_universes, "universes", length=length, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
deallocate(lattice_universes)
|
||||
call su % write_data(lattice_universes, "universes", &
|
||||
length=lat % n_cells, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
deallocate(lattice_universes)
|
||||
|
||||
type is (HexLattice)
|
||||
! Write lattice type.
|
||||
call su % write_data("hexagonal", "type", &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
|
||||
! Write number of lattice cells.
|
||||
call su % write_data(lat % n_rings, "n_rings", &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
call su % write_data(lat % n_rings, "n_axial", &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
|
||||
! Write lattice center.
|
||||
if (lat % is_3d) then
|
||||
call su % write_data(lat % center, "center", length=3, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
else
|
||||
call su % write_data(lat % center, "center", length=2, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
end if
|
||||
|
||||
! Write lattice pitch.
|
||||
if (lat % is_3d) then
|
||||
call su % write_data(lat % pitch, "pitch", length=2, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
else
|
||||
call su % write_data(lat % pitch, "pitch", length=1, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
end if
|
||||
|
||||
! Write lattice universes.
|
||||
allocate(lattice_universes(2*lat % n_rings - 1, 2*lat % n_rings - 1, &
|
||||
&lat % n_axial))
|
||||
do j = 1, lat % n_axial
|
||||
do k = 1, 2*lat % n_rings - 1
|
||||
do m = 1, 2*lat % n_rings - 1
|
||||
if (j + k < lat % n_rings + 1) then
|
||||
! This array position is never used; put a -1 to indicate this
|
||||
lattice_universes(j,k,m) = -1
|
||||
cycle
|
||||
else if (j + k > 3*lat % n_rings - 1) then
|
||||
! This array position is never used; put a -1 to indicate this
|
||||
lattice_universes(j,k,m) = -1
|
||||
cycle
|
||||
end if
|
||||
lattice_universes(j,k,m) = universes(lat % universes(j,k,m)) % id
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
call su % write_data(lattice_universes, "universes", &
|
||||
&length=(/lat % n_axial, 2*lat % n_rings-1, 2*lat % n_rings-1/), &
|
||||
&group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
deallocate(lattice_universes)
|
||||
end select
|
||||
end do LATTICE_LOOP
|
||||
|
||||
end subroutine hdf5_write_geometry
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@ module initialize
|
|||
use energy_grid, only: logarithmic_grid, grid_method
|
||||
use error, only: fatal_error, warning
|
||||
use geometry, only: neighbor_lists
|
||||
use geometry_header, only: Cell, Universe, Lattice, BASE_UNIVERSE
|
||||
use geometry_header, only: Cell, Universe, Lattice, RectLattice, HexLattice,&
|
||||
&BASE_UNIVERSE
|
||||
use global
|
||||
use input_xml, only: read_input_xml, read_cross_sections_xml, &
|
||||
cells_in_univ_dict, read_plots_xml
|
||||
|
|
@ -545,16 +546,15 @@ contains
|
|||
|
||||
subroutine adjust_indices()
|
||||
|
||||
integer :: i ! index for various purposes
|
||||
integer :: j ! index for various purposes
|
||||
integer :: k ! loop index for lattices
|
||||
integer :: m ! loop index for lattices
|
||||
integer :: lid ! lattice IDs
|
||||
integer :: n_x, n_y, n_z ! size of lattice
|
||||
integer :: i_array ! index in surfaces/materials array
|
||||
integer :: id ! user-specified id
|
||||
integer :: i ! index for various purposes
|
||||
integer :: j ! index for various purposes
|
||||
integer :: k ! loop index for lattices
|
||||
integer :: m ! loop index for lattices
|
||||
integer :: lid ! lattice IDs
|
||||
integer :: i_array ! index in surfaces/materials array
|
||||
integer :: id ! user-specified id
|
||||
type(Cell), pointer :: c => null()
|
||||
type(Lattice), pointer :: lat => null()
|
||||
class(Lattice), pointer :: lat => null()
|
||||
type(TallyObject), pointer :: t => null()
|
||||
|
||||
do i = 1, n_cells
|
||||
|
|
@ -621,28 +621,47 @@ contains
|
|||
! ADJUST UNIVERSE INDICES FOR EACH LATTICE
|
||||
|
||||
do i = 1, n_lattices
|
||||
lat => lattices(i)
|
||||
n_x = lat % dimension(1)
|
||||
n_y = lat % dimension(2)
|
||||
if (lat % n_dimension == 3) then
|
||||
n_z = lat % dimension(3)
|
||||
else
|
||||
n_z = 1
|
||||
end if
|
||||
lat => lattices(i) % obj
|
||||
select type (lat)
|
||||
|
||||
do m = 1, n_z
|
||||
do k = 1, n_y
|
||||
do j = 1, n_x
|
||||
id = lat % universes(j,k,m)
|
||||
if (universe_dict % has_key(id)) then
|
||||
lat % universes(j,k,m) = universe_dict % get_key(id)
|
||||
else
|
||||
call fatal_error("Invalid universe number " // trim(to_str(id)) &
|
||||
&// " specified on lattice " // trim(to_str(lat % id)))
|
||||
end if
|
||||
type is (RectLattice)
|
||||
do m = 1, lat % n_cells(3)
|
||||
do k = 1, lat % n_cells(2)
|
||||
do j = 1, lat % n_cells(1)
|
||||
id = lat % universes(j,k,m)
|
||||
if (universe_dict % has_key(id)) then
|
||||
lat % universes(j,k,m) = universe_dict % get_key(id)
|
||||
else
|
||||
call fatal_error("Invalid universe number " &
|
||||
&// trim(to_str(id)) // " specified on lattice " &
|
||||
&// trim(to_str(lat % id)))
|
||||
end if
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
type is (HexLattice)
|
||||
do m = 1, lat % n_axial
|
||||
do k = 1, 2*lat % n_rings - 1
|
||||
do j = 1, 2*lat % n_rings - 1
|
||||
if (j + k < lat % n_rings + 1) then
|
||||
cycle
|
||||
else if (j + k > 3*lat % n_rings - 1) then
|
||||
cycle
|
||||
end if
|
||||
id = lat % universes(j, k, m)
|
||||
if (universe_dict % has_key(id)) then
|
||||
lat % universes(j, k, m) = universe_dict % get_key(id)
|
||||
else
|
||||
call fatal_error("Invalid universe number " &
|
||||
&// trim(to_str(id)) // " specified on lattice " &
|
||||
&// trim(to_str(lat % id)))
|
||||
end if
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
end select
|
||||
|
||||
if (lat % outer /= NO_OUTER_UNIVERSE) then
|
||||
if (universe_dict % has_key(lat % outer)) then
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ module input_xml
|
|||
use dict_header, only: DictIntInt, ElemKeyValueCI
|
||||
use energy_grid, only: grid_method, n_log_bins
|
||||
use error, only: fatal_error, warning
|
||||
use geometry_header, only: Cell, Surface, Lattice
|
||||
use geometry_header, only: Cell, Surface, Lattice, RectLattice, HexLattice
|
||||
use global
|
||||
use list_header, only: ListChar, ListReal
|
||||
use mesh_header, only: StructuredMesh
|
||||
|
|
@ -898,29 +898,30 @@ contains
|
|||
|
||||
subroutine read_geometry_xml()
|
||||
|
||||
integer :: i, j, k, m
|
||||
integer :: i, j, k, m, i_x, i_a, input_index
|
||||
integer :: n
|
||||
integer :: n_x, n_y, n_z
|
||||
integer :: n_x, n_y, n_z, n_rings, n_rlats, n_hlats
|
||||
integer :: universe_num
|
||||
integer :: n_cells_in_univ
|
||||
integer :: coeffs_reqd
|
||||
integer :: temp_int_array3(3)
|
||||
integer :: temp_double_array3(3)
|
||||
integer, allocatable :: temp_int_array(:)
|
||||
real(8) :: phi, theta, psi
|
||||
logical :: file_exists
|
||||
logical :: boundary_exists
|
||||
character(MAX_LINE_LEN) :: filename
|
||||
character(MAX_WORD_LEN) :: word
|
||||
type(Cell), pointer :: c => null()
|
||||
type(Surface), pointer :: s => null()
|
||||
type(Lattice), pointer :: lat => null()
|
||||
type(Cell), pointer :: c => null()
|
||||
type(Surface), pointer :: s => null()
|
||||
class(Lattice), pointer :: lat => null()
|
||||
type(Node), pointer :: doc => null()
|
||||
type(Node), pointer :: node_cell => null()
|
||||
type(Node), pointer :: node_surf => null()
|
||||
type(Node), pointer :: node_lat => null()
|
||||
type(NodeList), pointer :: node_cell_list => null()
|
||||
type(NodeList), pointer :: node_surf_list => null()
|
||||
type(NodeList), pointer :: node_lat_list => null()
|
||||
type(NodeList), pointer :: node_rlat_list => null()
|
||||
type(NodeList), pointer :: node_hlat_list => null()
|
||||
|
||||
! Display output message
|
||||
call write_message("Reading geometry XML file...", 5)
|
||||
|
|
@ -1052,11 +1053,11 @@ contains
|
|||
end if
|
||||
|
||||
! Copy rotation angles in x,y,z directions
|
||||
call get_node_array(node_cell, "rotation", temp_int_array3)
|
||||
c % rotation = temp_int_array3
|
||||
phi = -temp_int_array3(1) * PI/180.0_8
|
||||
theta = -temp_int_array3(2) * PI/180.0_8
|
||||
psi = -temp_int_array3(3) * PI/180.0_8
|
||||
call get_node_array(node_cell, "rotation", temp_double_array3)
|
||||
c % rotation = temp_double_array3
|
||||
phi = -temp_double_array3(1) * PI/180.0_8
|
||||
theta = -temp_double_array3(2) * PI/180.0_8
|
||||
psi = -temp_double_array3(3) * PI/180.0_8
|
||||
|
||||
! Calculate rotation matrix based on angles given
|
||||
allocate(c % rotation_matrix(3,3))
|
||||
|
|
@ -1241,17 +1242,23 @@ contains
|
|||
! READ LATTICES FROM GEOMETRY.XML
|
||||
|
||||
! Get pointer to list of XML <lattice>
|
||||
call get_node_list(doc, "lattice", node_lat_list)
|
||||
call get_node_list(doc, "lattice", node_rlat_list)
|
||||
call get_node_list(doc, "hex_lattice", node_hlat_list)
|
||||
|
||||
! Allocate lattices array
|
||||
n_lattices = get_list_size(node_lat_list)
|
||||
n_rlats = get_list_size(node_rlat_list)
|
||||
n_hlats = get_list_size(node_hlat_list)
|
||||
n_lattices = n_rlats + n_hlats
|
||||
allocate(lattices(n_lattices))
|
||||
|
||||
do i = 1, n_lattices
|
||||
lat => lattices(i)
|
||||
RECT_LATTICES: do i = 1, n_rlats
|
||||
allocate(RectLattice::lattices(i) % obj)
|
||||
lat => lattices(i) % obj
|
||||
select type(lat)
|
||||
type is (RectLattice)
|
||||
|
||||
! Get pointer to i-th lattice
|
||||
call get_list_item(node_lat_list, i, node_lat)
|
||||
call get_list_item(node_rlat_list, i, node_lat)
|
||||
|
||||
! ID of lattice
|
||||
if (check_for_node(node_lat, "id")) then
|
||||
|
|
@ -1266,32 +1273,21 @@ contains
|
|||
&// to_str(lat % id))
|
||||
end if
|
||||
|
||||
! Read lattice type
|
||||
word = ''
|
||||
if (check_for_node(node_lat, "type")) &
|
||||
call get_node_value(node_lat, "type", word)
|
||||
select case (to_lower(word))
|
||||
case ('rect', 'rectangle', 'rectangular')
|
||||
lat % type = LATTICE_RECT
|
||||
case ('hex', 'hexagon', 'hexagonal')
|
||||
lat % type = LATTICE_HEX
|
||||
case default
|
||||
call fatal_error("Invalid lattice type: " // trim(word))
|
||||
end select
|
||||
|
||||
! Read number of lattice cells in each dimension
|
||||
n = get_arraysize_integer(node_lat, "dimension")
|
||||
if (n /= 2 .and. n /= 3) then
|
||||
call fatal_error("Lattice must be two or three dimensions.")
|
||||
if (n == 2) then
|
||||
call get_node_array(node_lat, "dimension", lat % n_cells(1:2))
|
||||
lat % n_cells(3) = 1
|
||||
lat % is_3d = .false.
|
||||
else if (n == 3) then
|
||||
call get_node_array(node_lat, "dimension", lat % n_cells)
|
||||
lat % is_3d = .true.
|
||||
else
|
||||
call fatal_error("Rectangular lattice must be two or three dimensions.")
|
||||
end if
|
||||
|
||||
lat % n_dimension = n
|
||||
allocate(lat % dimension(n))
|
||||
call get_node_array(node_lat, "dimension", lat % dimension)
|
||||
|
||||
! Read lattice lower-left location
|
||||
if (size(lat % dimension) /= &
|
||||
get_arraysize_double(node_lat, "lower_left")) then
|
||||
if (get_arraysize_double(node_lat, "lower_left") /= n) then
|
||||
call fatal_error("Number of entries on <lower_left> must be the same &
|
||||
&as the number of entries on <dimension>.")
|
||||
end if
|
||||
|
|
@ -1299,24 +1295,42 @@ contains
|
|||
allocate(lat % lower_left(n))
|
||||
call get_node_array(node_lat, "lower_left", lat % lower_left)
|
||||
|
||||
! Read lattice widths
|
||||
if (size(lat % dimension) /= &
|
||||
get_arraysize_double(node_lat, "width")) then
|
||||
call fatal_error("Number of entries on <width> must be the same as &
|
||||
&the number of entries on <lower_left>.")
|
||||
! Read lattice pitches.
|
||||
! TODO: Remove this deprecation warning in a future release.
|
||||
if (check_for_node(node_lat, "width")) then
|
||||
call warning("The use of 'width' is deprecated and will be disallowed &
|
||||
&in a future release. Use 'pitch' instead. The utility openmc/&
|
||||
&src/utils/update_inputs.py can be used to automatically update &
|
||||
&geometry.xml files.")
|
||||
if (get_arraysize_double(node_lat, "width") /= n) then
|
||||
call fatal_error("Number of entries on <pitch> must be the same as &
|
||||
&the number of entries on <dimension>.")
|
||||
end if
|
||||
|
||||
else if (get_arraysize_double(node_lat, "pitch") /= n) then
|
||||
call fatal_error("Number of entries on <pitch> must be the same as &
|
||||
&the number of entries on <dimension>.")
|
||||
end if
|
||||
|
||||
allocate(lat % width(n))
|
||||
call get_node_array(node_lat, "width", lat % width)
|
||||
allocate(lat % pitch(n))
|
||||
! TODO: Remove the 'width' code in a future release.
|
||||
if (check_for_node(node_lat, "width")) then
|
||||
call get_node_array(node_lat, "width", lat % pitch)
|
||||
else
|
||||
call get_node_array(node_lat, "pitch", lat % pitch)
|
||||
end if
|
||||
|
||||
! TODO: Remove deprecation warning in a future release.
|
||||
if (check_for_node(node_lat, "type")) then
|
||||
call warning("The use of 'type' is no longer needed. The utility &
|
||||
&openmc/src/utils/update_inputs.py can be used to automatically &
|
||||
&update geometry.xml files.")
|
||||
end if
|
||||
|
||||
! Copy number of dimensions
|
||||
n_x = lat % dimension(1)
|
||||
n_y = lat % dimension(2)
|
||||
if (lat % n_dimension == 3) then
|
||||
n_z = lat % dimension(3)
|
||||
else
|
||||
n_z = 1
|
||||
end if
|
||||
n_x = lat % n_cells(1)
|
||||
n_y = lat % n_cells(2)
|
||||
n_z = lat % n_cells(3)
|
||||
allocate(lat % universes(n_x, n_y, n_z))
|
||||
|
||||
! Check that number of universes matches size
|
||||
|
|
@ -1334,7 +1348,7 @@ contains
|
|||
do k = 0, n_y - 1
|
||||
do j = 1, n_x
|
||||
lat % universes(j, n_y - k, m) = &
|
||||
temp_int_array(j + n_x*k + n_x*n_y*(m-1))
|
||||
&temp_int_array(j + n_x*k + n_x*n_y*(m-1))
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
|
@ -1357,7 +1371,182 @@ contains
|
|||
! Add lattice to dictionary
|
||||
call lattice_dict % add_key(lat % id, i)
|
||||
|
||||
end do
|
||||
end select
|
||||
end do RECT_LATTICES
|
||||
|
||||
HEX_LATTICES: do i = 1, n_hlats
|
||||
allocate(HexLattice::lattices(n_rlats + i) % obj)
|
||||
lat => lattices(n_rlats + i) % obj
|
||||
select type (lat)
|
||||
type is (HexLattice)
|
||||
|
||||
! Get pointer to i-th lattice
|
||||
call get_list_item(node_hlat_list, i, node_lat)
|
||||
|
||||
! ID of lattice
|
||||
if (check_for_node(node_lat, "id")) then
|
||||
call get_node_value(node_lat, "id", lat % id)
|
||||
else
|
||||
call fatal_error("Must specify id of lattice in geometry XML file.")
|
||||
end if
|
||||
|
||||
! Check to make sure 'id' hasn't been used
|
||||
if (lattice_dict % has_key(lat % id)) then
|
||||
call fatal_error("Two or more lattices use the same unique ID: " &
|
||||
&// to_str(lat % id))
|
||||
end if
|
||||
|
||||
! Read number of lattice cells in each dimension
|
||||
call get_node_value(node_lat, "n_rings", lat % n_rings)
|
||||
if (check_for_node(node_lat, "n_axial")) then
|
||||
call get_node_value(node_lat, "n_axial", lat % n_axial)
|
||||
lat % is_3d = .true.
|
||||
else
|
||||
lat % n_axial = 1
|
||||
lat % is_3d = .false.
|
||||
end if
|
||||
|
||||
! Read lattice lower-left location
|
||||
n = get_arraysize_double(node_lat, "center")
|
||||
if (lat % is_3d .and. n /= 3) then
|
||||
call fatal_error("A hexagonal lattice with <n_axial> must have &
|
||||
&<center> specified by 3 numbers.")
|
||||
else if ((.not. lat % is_3d) .and. n /= 2) then
|
||||
call fatal_error("A hexagonal lattice without <n_axial> must have &
|
||||
&<center> specified by 2 numbers.")
|
||||
end if
|
||||
|
||||
allocate(lat % center(n))
|
||||
call get_node_array(node_lat, "center", lat % center)
|
||||
|
||||
! Read lattice pitches
|
||||
n = get_arraysize_double(node_lat, "pitch")
|
||||
if (lat % is_3d .and. n /= 2) then
|
||||
call fatal_error("A hexagonal lattice with <n_axial> must have <pitch> &
|
||||
&specified by 2 numbers.")
|
||||
else if ((.not. lat % is_3d) .and. n /= 1) then
|
||||
call fatal_error("A hexagonal lattice without <n_axial> must have &
|
||||
&<pitch> specified by 1 number.")
|
||||
end if
|
||||
|
||||
allocate(lat % pitch(n))
|
||||
call get_node_array(node_lat, "pitch", lat % pitch)
|
||||
|
||||
! Copy number of dimensions
|
||||
n_rings = lat % n_rings
|
||||
n_z = lat % n_axial
|
||||
allocate(lat % universes(2*n_rings - 1, 2*n_rings - 1, n_z))
|
||||
|
||||
! Check that number of universes matches size
|
||||
n = get_arraysize_integer(node_lat, "universes")
|
||||
if (n /= (3*n_rings**2 - 3*n_rings + 1)*n_z) then
|
||||
call fatal_error("Number of universes on <universes> does not match &
|
||||
&size of lattice " // trim(to_str(lat % id)) // ".")
|
||||
end if
|
||||
|
||||
allocate(temp_int_array(n))
|
||||
call get_node_array(node_lat, "universes", temp_int_array)
|
||||
|
||||
! Read universes
|
||||
! Universes in hexagonal lattices are stored in a manner that represents
|
||||
! a skewed coordinate system: (x, alpha) rather than (x, y). There is
|
||||
! no obvious, direct relationship between the order of universes in the
|
||||
! input and the order that they will be stored in the skewed array so
|
||||
! the following code walks a set of index values across the skewed array
|
||||
! in a manner that matches the input order. Note that i_x = 0, i_a = 0
|
||||
! corresponds to the center of the hexagonal lattice.
|
||||
|
||||
input_index = 1
|
||||
do m = 1, n_z
|
||||
! Initialize lattice indecies.
|
||||
i_x = 1
|
||||
i_a = n_rings - 1
|
||||
|
||||
! Map upper triangular region of hexagonal lattice.
|
||||
do k = 1, n_rings-1
|
||||
! Walk index to lower-left neighbor of last row start.
|
||||
i_x = i_x - 1
|
||||
do j = 1, k
|
||||
! Place universe in array.
|
||||
lat % universes(i_x + n_rings, i_a + n_rings, m) = &
|
||||
&temp_int_array(input_index)
|
||||
! Walk index to closest non-adjacent right neighbor.
|
||||
i_x = i_x + 2
|
||||
i_a = i_a - 1
|
||||
! Increment XML array index.
|
||||
input_index = input_index + 1
|
||||
end do
|
||||
! Return lattice index to start of current row.
|
||||
i_x = i_x - 2*k
|
||||
i_a = i_a + k
|
||||
end do
|
||||
|
||||
! Map middle square region of hexagonal lattice.
|
||||
do k = 1, 2*n_rings - 1
|
||||
if (mod(k, 2) == 1) then
|
||||
! Walk index to lower-left neighbor of last row start.
|
||||
i_x = i_x - 1
|
||||
else
|
||||
! Walk index to lower-right neighbor of last row start
|
||||
i_x = i_x + 1
|
||||
i_a = i_a - 1
|
||||
end if
|
||||
do j = 1, n_rings - mod(k-1, 2)
|
||||
! Place universe in array.
|
||||
lat % universes(i_x + n_rings, i_a + n_rings, m) = &
|
||||
&temp_int_array(input_index)
|
||||
! Walk index to closest non-adjacent right neighbor.
|
||||
i_x = i_x + 2
|
||||
i_a = i_a - 1
|
||||
! Increment XML array index.
|
||||
input_index = input_index + 1
|
||||
end do
|
||||
! Return lattice index to start of current row.
|
||||
i_x = i_x - 2*(n_rings - mod(k-1, 2))
|
||||
i_a = i_a + n_rings - mod(k-1, 2)
|
||||
end do
|
||||
|
||||
! Map lower triangular region of hexagonal lattice.
|
||||
do k = 1, n_rings-1
|
||||
! Walk index to lower-right neighbor of last row start.
|
||||
i_x = i_x + 1
|
||||
i_a = i_a - 1
|
||||
do j = 1, n_rings - k
|
||||
! Place universe in array.
|
||||
lat % universes(i_x + n_rings, i_a + n_rings, m) = &
|
||||
&temp_int_array(input_index)
|
||||
! Walk index to closest non-adjacent right neighbor.
|
||||
i_x = i_x + 2
|
||||
i_a = i_a - 1
|
||||
! Increment XML array index.
|
||||
input_index = input_index + 1
|
||||
end do
|
||||
! Return lattice index to start of current row.
|
||||
i_x = i_x - 2*(n_rings - k)
|
||||
i_a = i_a + n_rings - k
|
||||
end do
|
||||
end do
|
||||
deallocate(temp_int_array)
|
||||
|
||||
! Read outer universe for area outside lattice.
|
||||
lat % outer = NO_OUTER_UNIVERSE
|
||||
if (check_for_node(node_lat, "outer")) then
|
||||
call get_node_value(node_lat, "outer", lat % outer)
|
||||
end if
|
||||
|
||||
! Check for 'outside' nodes which are no longer supported.
|
||||
if (check_for_node(node_lat, "outside")) then
|
||||
call fatal_error("The use of 'outside' in lattices is no longer &
|
||||
&supported. Instead, use 'outer' which defines a universe rather &
|
||||
&than a material. The utility openmc/src/utils/update_inputs.py &
|
||||
&can be used automatically replace 'outside' with 'outer'.")
|
||||
end if
|
||||
|
||||
! Add lattice to dictionary
|
||||
call lattice_dict % add_key(lat % id, n_rlats + i)
|
||||
|
||||
end select
|
||||
end do HEX_LATTICES
|
||||
|
||||
! Close geometry XML file
|
||||
call close_xmldoc(doc)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ module output
|
|||
use constants
|
||||
use endf, only: reaction_name
|
||||
use error, only: warning
|
||||
use geometry_header, only: Cell, Universe, Surface, BASE_UNIVERSE
|
||||
use geometry_header, only: Cell, Universe, Surface, Lattice, RectLattice, &
|
||||
&HexLattice, BASE_UNIVERSE
|
||||
use global
|
||||
use math, only: t_percentile
|
||||
use mesh_header, only: StructuredMesh
|
||||
|
|
@ -256,7 +257,7 @@ contains
|
|||
type(Cell), pointer :: c => null()
|
||||
type(Surface), pointer :: s => null()
|
||||
type(Universe), pointer :: u => null()
|
||||
type(Lattice), pointer :: l => null()
|
||||
class(Lattice), pointer :: l => null()
|
||||
type(LocalCoord), pointer :: coord => null()
|
||||
|
||||
! display type of particle
|
||||
|
|
@ -292,7 +293,7 @@ contains
|
|||
|
||||
! Print information on lattice
|
||||
if (coord % lattice /= NONE) then
|
||||
l => lattices(coord % lattice)
|
||||
l => lattices(coord % lattice) % obj
|
||||
write(ou,*) ' Lattice = ' // trim(to_str(l % id))
|
||||
write(ou,*) ' Lattice position = (' // trim(to_str(&
|
||||
p % coord % lattice_x)) // ',' // trim(to_str(&
|
||||
|
|
@ -355,7 +356,7 @@ contains
|
|||
integer :: unit_ ! unit to write to
|
||||
character(MAX_LINE_LEN) :: string
|
||||
type(Universe), pointer :: u => null()
|
||||
type(Lattice), pointer :: l => null()
|
||||
class(Lattice), pointer :: l => null()
|
||||
type(Material), pointer :: m => null()
|
||||
|
||||
! Set unit to stdout if not already set
|
||||
|
|
@ -384,7 +385,7 @@ contains
|
|||
u => universes(c % fill)
|
||||
write(unit_,*) ' Fill = Universe ' // to_str(u % id)
|
||||
case (CELL_LATTICE)
|
||||
l => lattices(c % fill)
|
||||
l => lattices(c % fill) % obj
|
||||
write(unit_,*) ' Fill = Lattice ' // to_str(l % id)
|
||||
end select
|
||||
|
||||
|
|
@ -471,13 +472,10 @@ contains
|
|||
|
||||
subroutine print_lattice(lat, unit)
|
||||
|
||||
type(Lattice), pointer :: lat
|
||||
integer, optional :: unit
|
||||
class(Lattice), pointer :: lat
|
||||
integer, optional :: unit
|
||||
|
||||
integer :: i ! loop index
|
||||
integer :: unit_ ! unit to write to
|
||||
character(MAX_LINE_LEN) :: string
|
||||
|
||||
|
||||
! set default unit if not specified
|
||||
if (present(unit)) then
|
||||
|
|
@ -489,27 +487,64 @@ contains
|
|||
! Write information about lattice
|
||||
write(unit_,*) 'Lattice ' // to_str(lat % id)
|
||||
|
||||
! Write dimension of lattice
|
||||
string = ""
|
||||
do i = 1, lat % n_dimension
|
||||
string = trim(string) // ' ' // to_str(lat % dimension(i))
|
||||
end do
|
||||
write(unit_,*) ' Dimension =' // string
|
||||
select type(lat)
|
||||
type is (RectLattice)
|
||||
! Write dimension of lattice.
|
||||
if (lat % is_3d) then
|
||||
write(unit_, *) ' Dimension = ' // to_str(lat % n_cells(1)) &
|
||||
&// ' ' // to_str(lat % n_cells(2)) // ' ' &
|
||||
&// to_str(lat % n_cells(3))
|
||||
else
|
||||
write(unit_, *) ' Dimension = ' // to_str(lat % n_cells(1)) &
|
||||
&// ' ' // to_str(lat % n_cells(2))
|
||||
end if
|
||||
|
||||
! Write lower-left coordinates of lattice
|
||||
string = ""
|
||||
do i = 1, lat % n_dimension
|
||||
string = trim(string) // ' ' // to_str(lat % lower_left(i))
|
||||
end do
|
||||
write(unit_,*) ' Lower-left =' // string
|
||||
! Write lower-left coordinates of lattice.
|
||||
if (lat % is_3d) then
|
||||
write(unit_, *) ' Lower-left = ' // to_str(lat % lower_left(1)) &
|
||||
&// ' ' // to_str(lat % lower_left(2)) // ' ' &
|
||||
&// to_str(lat % lower_left(3))
|
||||
else
|
||||
write(unit_, *) ' Lower-left = ' // to_str(lat % lower_left(1)) &
|
||||
&// ' ' // to_str(lat % lower_left(2))
|
||||
end if
|
||||
|
||||
! Write lattice pitch along each axis.
|
||||
if (lat % is_3d) then
|
||||
write(unit_, *) ' Pitch = ' // to_str(lat % pitch(1)) &
|
||||
&// ' ' // to_str(lat % pitch(2)) // ' ' &
|
||||
&// to_str(lat % pitch(3))
|
||||
else
|
||||
write(unit_, *) ' Pitch = ' // to_str(lat % pitch(1)) &
|
||||
&// ' ' // to_str(lat % pitch(2))
|
||||
end if
|
||||
write(unit_,*)
|
||||
|
||||
type is (HexLattice)
|
||||
! Write dimension of lattice.
|
||||
write(unit_,*) ' N-rings = ' // to_str(lat % n_rings)
|
||||
if (lat % is_3d) write(unit_,*) ' N-axial = ' // to_str(lat % n_axial)
|
||||
|
||||
! Write center coordinates of lattice.
|
||||
if (lat % is_3d) then
|
||||
write(unit_, *) ' Center = ' // to_str(lat % center(1)) &
|
||||
&// ' ' // to_str(lat % center(2)) // ' ' &
|
||||
&// to_str(lat % center(3))
|
||||
else
|
||||
write(unit_, *) ' Center = ' // to_str(lat % center(1)) &
|
||||
&// ' ' // to_str(lat % center(2))
|
||||
end if
|
||||
|
||||
! Write lattice pitch along each axis.
|
||||
if (lat % is_3d) then
|
||||
write(unit_, *) ' Pitch = ' // to_str(lat % pitch(1)) &
|
||||
&// ' ' // to_str(lat % pitch(2))
|
||||
else
|
||||
write(unit_, *) ' Pitch = ' // to_str(lat % pitch(1))
|
||||
end if
|
||||
write(unit_,*)
|
||||
end select
|
||||
|
||||
! Write width of each lattice cell
|
||||
string = ""
|
||||
do i = 1, lat % n_dimension
|
||||
string = trim(string) // ' ' // to_str(lat % width(i))
|
||||
end do
|
||||
write(unit_,*) ' Width =' // string
|
||||
write(unit_,*)
|
||||
|
||||
end subroutine print_lattice
|
||||
|
||||
|
|
@ -919,7 +954,7 @@ contains
|
|||
type(Surface), pointer :: s => null()
|
||||
type(Cell), pointer :: c => null()
|
||||
type(Universe), pointer :: u => null()
|
||||
type(Lattice), pointer :: l => null()
|
||||
class(Lattice), pointer :: l => null()
|
||||
|
||||
! print summary of surfaces
|
||||
call header("SURFACE SUMMARY", unit=UNIT_SUMMARY)
|
||||
|
|
@ -946,7 +981,7 @@ contains
|
|||
if (n_lattices > 0) then
|
||||
call header("LATTICE SUMMARY", unit=UNIT_SUMMARY)
|
||||
do i = 1, n_lattices
|
||||
l => lattices(i)
|
||||
l => lattices(i) % obj
|
||||
call print_lattice(l, unit=UNIT_SUMMARY)
|
||||
end do
|
||||
end if
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ element cmfd {
|
|||
(element energy { list { xsd:double+ } } |
|
||||
attribute energy { list { xsd:double+ } })?
|
||||
} &
|
||||
|
||||
|
||||
element norm { xsd:double }? &
|
||||
|
||||
element feedback { xsd:boolean }? &
|
||||
|
|
@ -50,9 +50,9 @@ element cmfd {
|
|||
|
||||
element shift { xsd:double }? &
|
||||
|
||||
element ktol { xsd: double }? &
|
||||
element ktol { xsd:double }? &
|
||||
|
||||
element stol { xsd: double }? &
|
||||
element stol { xsd:double }? &
|
||||
|
||||
element gauss_seidel_tolerance { list { xsd:double+ } }?
|
||||
|
||||
|
|
|
|||
|
|
@ -23,12 +23,20 @@ element geometry {
|
|||
|
||||
& element lattice {
|
||||
(element id { xsd:int } | attribute id { xsd:int }) &
|
||||
(element type { ( "rect" | "rectangle" | "rectangular" | "hexagonal" ) } |
|
||||
attribute type { ( "rect" | "rectangle" | "rectangular" | "hexagonal" ) })? &
|
||||
(element dimension { list { xsd:positiveInteger+ } } |
|
||||
attribute dimension { list { xsd:positiveInteger+ } }) &
|
||||
(element lower_left { list { xsd:double+ } } | attribute lower_left { list { xsd:double+ } }) &
|
||||
(element width { list { xsd:double+ } } | attribute width { list { xsd:double+ } }) &
|
||||
(element pitch { list { xsd:double+ } } | attribute pitch { list { xsd:double+ } }) &
|
||||
(element universes { list { xsd:int+ } } | attribute universes { list { xsd:int+ } }) &
|
||||
(element outside { xsd:int } | attribute outside { xsd:int })?
|
||||
}*
|
||||
|
||||
& element hex_lattice {
|
||||
(element id { xsd:int } | attribute id { xsd:int }) &
|
||||
(element n_rings { xsd:int } | attribute n_rings { xsd:int }) &
|
||||
(element n_axial { xsd:int } | attribute n_axial { xsd:int })? &
|
||||
(element center { list { xsd:double+ } } | attribute center { list { xsd:double+ } }) &
|
||||
(element pitch { list { xsd:double+ } } | attribute pitch { list { xsd:double+ } }) &
|
||||
(element universes { list { xsd:int+ } } | attribute universes { list { xsd:int+ } }) &
|
||||
(element outer { xsd:int } | attribute outer { xsd:int })?
|
||||
}*
|
||||
|
|
|
|||
|
|
@ -26,10 +26,8 @@ element tallies {
|
|||
"surface" | "mesh" | "energy" | "energyout" ) } |
|
||||
attribute type { ( "cell" | "cellborn" | "material" | "universe" |
|
||||
"surface" | "mesh" | "energy" | "energyout" ) }) &
|
||||
(element bins { list { xsd:string { maxLength = "20" }+ } } |
|
||||
attribute bins { list { xsd:string { maxLength = "20" }+ } }) &
|
||||
(element groups { xsd:string { maxLength = "20" }+ } |
|
||||
attribute groups { xsd:string { maxLength = "20" }+ })?
|
||||
(element bins { list { xsd:double+ } } |
|
||||
attribute bins { list { xsd:double+ } })
|
||||
}* &
|
||||
element nuclides {
|
||||
list { xsd:string { maxLength = "12" }+ }
|
||||
|
|
|
|||
|
|
@ -28,14 +28,14 @@ contains
|
|||
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
integer :: surface_crossed ! surface which particle is on
|
||||
integer :: lattice_crossed ! lattice boundary which particle crossed
|
||||
integer :: last_cell ! most recent cell particle was in
|
||||
integer :: n_event ! number of collisions/crossings
|
||||
real(8) :: d_boundary ! distance to nearest boundary
|
||||
real(8) :: d_collision ! sampled distance to collision
|
||||
real(8) :: distance ! distance particle travels
|
||||
logical :: found_cell ! found cell which particle is in?
|
||||
integer :: surface_crossed ! surface which particle is on
|
||||
integer :: lattice_translation(3) ! in-lattice translation vector
|
||||
integer :: last_cell ! most recent cell particle was in
|
||||
integer :: n_event ! number of collisions/crossings
|
||||
real(8) :: d_boundary ! distance to nearest boundary
|
||||
real(8) :: d_collision ! sampled distance to collision
|
||||
real(8) :: distance ! distance particle travels
|
||||
logical :: found_cell ! found cell which particle is in?
|
||||
type(LocalCoord), pointer, save :: coord => null()
|
||||
!$omp threadprivate(coord)
|
||||
|
||||
|
|
@ -87,7 +87,8 @@ contains
|
|||
if (p % material /= p % last_material) call calculate_xs(p)
|
||||
|
||||
! Find the distance to the nearest boundary
|
||||
call distance_to_boundary(p, d_boundary, surface_crossed, lattice_crossed)
|
||||
call distance_to_boundary(p, d_boundary, surface_crossed, &
|
||||
&lattice_translation)
|
||||
|
||||
! Sample a distance to collision
|
||||
if (material_xs % total == ZERO) then
|
||||
|
|
@ -122,10 +123,10 @@ contains
|
|||
|
||||
last_cell = p % coord % cell
|
||||
p % coord % cell = NONE
|
||||
if (lattice_crossed /= NONE) then
|
||||
if (any(lattice_translation /= 0)) then
|
||||
! Particle crosses lattice boundary
|
||||
p % surface = NONE
|
||||
call cross_lattice(p, lattice_crossed)
|
||||
call cross_lattice(p, lattice_translation)
|
||||
p % event = EVENT_LATTICE
|
||||
else
|
||||
! Particle crosses surface
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ optional arguments:
|
|||
from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
from itertools import chain
|
||||
from random import randint
|
||||
from shutil import move
|
||||
import xml.etree.ElementTree as ET
|
||||
|
|
@ -180,13 +181,14 @@ def update_geometry(geometry_root):
|
|||
cids = get_cell_ids(root)
|
||||
taken_ids = uids.union(cids)
|
||||
|
||||
# Update the definitions of each lattice
|
||||
for lat in root.iter('lattice'):
|
||||
# Replace 'outside' with 'outer' in lattices.
|
||||
for lat in chain(root.iter('lattice'), root.iter('hex_lattice')):
|
||||
# Get the lattice's id.
|
||||
lat_id = get_lat_id(lat)
|
||||
|
||||
# Ignore lattices that have 'outer' specified.
|
||||
if any([child.tag == 'outer' for child in lat]): continue
|
||||
if 'outer' in lat.attrib: continue
|
||||
|
||||
# Pop the 'outside' material.
|
||||
material = pop_lat_outside(lat)
|
||||
|
|
@ -210,6 +212,27 @@ def update_geometry(geometry_root):
|
|||
|
||||
was_updated = True
|
||||
|
||||
# Remove 'type' from lattice definitions.
|
||||
for lat in root.iter('lattice'):
|
||||
elem = lat.find('type')
|
||||
if elem is not None:
|
||||
lat.remove(elem)
|
||||
was_updated = True
|
||||
if 'type' in lat.attrib:
|
||||
del lat.attrib['type']
|
||||
was_updated = True
|
||||
|
||||
# Change 'width' to 'pitch' in lattice definitions.
|
||||
for lat in root.iter('lattice'):
|
||||
elem = lat.find('width')
|
||||
if elem is not None:
|
||||
elem.tag = 'pitch'
|
||||
was_updated = True
|
||||
if 'width' in lat.attrib:
|
||||
lat.attrib['pitch'] = lat.attrib['width']
|
||||
del lat.attrib['width']
|
||||
was_updated = True
|
||||
|
||||
return was_updated
|
||||
|
||||
|
||||
|
|
|
|||
115
src/utils/xml_validate.py
Executable file
115
src/utils/xml_validate.py
Executable file
|
|
@ -0,0 +1,115 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import os
|
||||
import sys
|
||||
import glob
|
||||
import lxml.etree as etree
|
||||
from subprocess import call
|
||||
from optparse import OptionParser
|
||||
|
||||
# Command line parsing
|
||||
parser = OptionParser()
|
||||
parser.add_option('-r', '--relaxng-path', dest='relaxng',
|
||||
help="Path to RelaxNG files.")
|
||||
parser.add_option('-i', '--input-path', dest='inputs', default=os.getcwd(),
|
||||
help="Path to OpenMC input files." )
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
# Colored output
|
||||
if sys.stdout.isatty():
|
||||
OK = '\033[92m'
|
||||
FAIL = '\033[91m'
|
||||
NOT_FOUND = '\033[93m'
|
||||
ENDC = '\033[0m'
|
||||
BOLD = '\033[1m'
|
||||
else:
|
||||
OK = ''
|
||||
FAIL = ''
|
||||
ENDC = ''
|
||||
BOLD = ''
|
||||
NOT_FOUND = ''
|
||||
|
||||
# Get absolute paths
|
||||
if options.relaxng is not None:
|
||||
relaxng_path = os.path.abspath(options.relaxng)
|
||||
if options.inputs is not None:
|
||||
inputs_path = os.path.abspath(options.inputs)
|
||||
|
||||
# Search for relaxng path if not set
|
||||
if options.relaxng is None:
|
||||
xml_validate_path = os.path.abspath(os.path.dirname(sys.argv[0]))
|
||||
if "bin" in xml_validate_path:
|
||||
relaxng_path = os.path.join(xml_validate_path, "..", "share", "relaxng")
|
||||
elif os.path.join("src", "utils") in xml_validate_path:
|
||||
relaxng_path = os.path.join(xml_validate_path, "..", "relaxng")
|
||||
else:
|
||||
raise Exception("Set RelaxNG path with -r command line option.")
|
||||
if not os.path.exists(relaxng_path):
|
||||
raise Exception("RelaxNG path: {0} does not exist, set with -r "
|
||||
"command line option.".format(relaxng_path))
|
||||
|
||||
# Make sure there are .rnc files in RelaxNG path
|
||||
rnc_files = glob.glob(os.path.join(relaxng_path, "*.rnc"))
|
||||
if len(rnc_files) == 0:
|
||||
raise Exception("No .rnc files found in RelaxNG "
|
||||
"path: {0}.".format(relaxng_path))
|
||||
|
||||
# Get list of xml input files
|
||||
xml_files = glob.glob(os.path.join(inputs_path, "*.xml"))
|
||||
if len(xml_files) == 0:
|
||||
raise Exception("No .xml files found at input path: {0}"
|
||||
".".format(inputs_path))
|
||||
|
||||
# Begin loop around input files
|
||||
for xml_file in xml_files:
|
||||
|
||||
text = "Validating {0}".format(os.path.basename(xml_file))
|
||||
print(text + '.'*(30 - len(text)), end="")
|
||||
|
||||
# Validate the XML file
|
||||
try:
|
||||
xml_tree = etree.parse(xml_file)
|
||||
except etree.XMLSyntaxError as e:
|
||||
print(BOLD + FAIL + '[XML ERROR]' + ENDC)
|
||||
print(" {0}".format(e))
|
||||
continue
|
||||
|
||||
# Get xml_filename prefix
|
||||
xml_prefix = os.path.basename(xml_file)
|
||||
xml_prefix = xml_prefix.split(".")[0]
|
||||
|
||||
# Search for rnc file
|
||||
rnc_file = os.path.join(relaxng_path, xml_prefix + ".rnc")
|
||||
rng_file = xml_prefix + ".rng"
|
||||
if rnc_file in rnc_files:
|
||||
|
||||
# convert RNC to RNG file
|
||||
rc = call("trang {0} {1}".format(rnc_file, rng_file), shell=True)
|
||||
|
||||
# check return code
|
||||
if rc == 0:
|
||||
|
||||
# read in RelaxNG
|
||||
relaxng_doc = etree.parse(rng_file)
|
||||
relaxng = etree.RelaxNG(relaxng_doc)
|
||||
|
||||
# validate xml file again RelaxNG
|
||||
try:
|
||||
relaxng.assertValid(xml_tree)
|
||||
print(BOLD + OK + '[VALID]' + ENDC)
|
||||
except (etree.DocumentInvalid, TypeError) as e:
|
||||
print(BOLD + FAIL + '[NOT VALID]' + ENDC)
|
||||
print(" {0}".format(e))
|
||||
|
||||
# remove rng file
|
||||
os.remove(rng_file)
|
||||
|
||||
# trang command failed
|
||||
else:
|
||||
print(BOLD + FAIL + '[TRANG FAILED]' + ENDC)
|
||||
|
||||
# RNC file does not exist
|
||||
else:
|
||||
print(BOLD + NOT_FOUND + '[NO RELAXNG FOUND]' + ENDC)
|
||||
|
|
@ -87,17 +87,23 @@ set(ENV{{COVERAGE}} ${{COVERAGE}})
|
|||
{subproject}
|
||||
|
||||
ctest_start("{dashboard}")
|
||||
ctest_configure()
|
||||
ctest_configure(RETURN_VALUE res)
|
||||
{update}
|
||||
ctest_build()
|
||||
ctest_test({tests} PARALLEL_LEVEL {n_procs})
|
||||
ctest_build(RETURN_VALUE res)
|
||||
ctest_test({tests} PARALLEL_LEVEL {n_procs}, RETURN_VALUE res)
|
||||
if(MEM_CHECK)
|
||||
ctest_memcheck({tests})
|
||||
ctest_memcheck({tests}, RETURN_VALUE res)
|
||||
endif(MEM_CHECK)
|
||||
if(COVERAGE)
|
||||
ctest_coverage()
|
||||
ctest_coverage(RETURN_VALUE res)
|
||||
endif(COVERAGE)
|
||||
{submit}"""
|
||||
{submit}
|
||||
|
||||
if (res EQUAL 0)
|
||||
else()
|
||||
message(FATAL_ERROR "")
|
||||
endif()
|
||||
"""
|
||||
|
||||
# Define test data structure
|
||||
tests = OrderedDict()
|
||||
|
|
@ -509,6 +515,8 @@ else:
|
|||
ENDC = ''
|
||||
BOLD = ''
|
||||
|
||||
return_code = 0
|
||||
|
||||
for test in tests:
|
||||
print(test + '.'*(50 - len(test)), end='')
|
||||
if tests[test].success:
|
||||
|
|
@ -516,3 +524,6 @@ for test in tests:
|
|||
else:
|
||||
print(BOLD + FAIL + '[FAILED]' + ENDC)
|
||||
print(' '*len(test)+tests[test].msg)
|
||||
return_code = 1
|
||||
|
||||
sys.exit(return_code)
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -3,14 +3,13 @@
|
|||
<cell id="11" universe="11" material="1"/>
|
||||
<cell id="12" universe="12" material="2" surfaces=""/>
|
||||
|
||||
<lattice id="21" type="rect" dimension="2 2" lower_left="-2.0 -2.0"
|
||||
width="2.0 2.0" outer="22">
|
||||
<lattice id="21" dimension="2 2" lower_left="-2.0 -2.0"
|
||||
pitch="2.0 2.0" outer="12">
|
||||
<universes>
|
||||
11 12
|
||||
12 11
|
||||
</universes>
|
||||
</lattice>
|
||||
<cell id="22" universe="22" material="2"/>
|
||||
|
||||
|
||||
<surface id="101" type="z-cylinder" coeffs="0.0 0.0 5.0" boundary="vacuum"/>
|
||||
|
|
|
|||
|
|
@ -48,10 +48,9 @@
|
|||
|
||||
<!-- Cube cell filled Fuel -->
|
||||
<lattice id="11">
|
||||
<type>rectangular</type>
|
||||
<dimension>29 29</dimension>
|
||||
<lower_left>-0.889 -0.889</lower_left>
|
||||
<width>1.778 1.778</width>
|
||||
<pitch>1.778 1.778</pitch>
|
||||
<universes>
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
|
||||
|
|
@ -120,4 +119,4 @@
|
|||
<cell id="52" universe="2" material="4" surfaces="9 -10 37 -38 39 -40" /> <!-- Moderator within top egg-crate -->
|
||||
<cell id="53" universe="2" material="4" surfaces="10" /> <!-- Moderator within top egg-crate -->
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
199
tests/test_lattice_hex/geometry.xml
Normal file
199
tests/test_lattice_hex/geometry.xml
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
This geometry approximately describes a Russian-style VVER-1000 fuel assembly.
|
||||
-->
|
||||
|
||||
<geometry>
|
||||
|
||||
<!-- Universe 011: Fuel pellet -->
|
||||
<surface id="011" type="z-cylinder" coeffs="0.0 0.0 0.06"/>
|
||||
<surface id="012" type="z-cylinder" coeffs="0.0 0.0 0.378"/>
|
||||
<surface id="013" type="z-cylinder" coeffs="0.0 0.0 0.3865"/>
|
||||
<surface id="014" type="z-cylinder" coeffs="0.0 0.0 0.455"/>
|
||||
<surface id="015" type="sphere" coeffs="0.0 0.0 -2.5639 2.0"/>
|
||||
<surface id="016" type="sphere" coeffs="0.0 0.0 2.5639 2.0"/>
|
||||
|
||||
<cell id="011" universe="011" material="void" surfaces="-011"/>
|
||||
<cell id="012" universe="011" material="13" surfaces="011 -012 015 016"/>
|
||||
<cell id="013" universe="011" material="void" surfaces="011 -012 -015"/>
|
||||
<cell id="014" universe="011" material="void" surfaces="011 -012 -016"/>
|
||||
<cell id="015" universe="011" material="void" surfaces="012 -013"/>
|
||||
<cell id="016" universe="011" material="21" surfaces="013 -014"/>
|
||||
<cell id="017" universe="011" material="01" surfaces="014"/>
|
||||
|
||||
|
||||
<!-- Universe 051: Central guide tube -->
|
||||
<surface id="051" type="z-cylinder" coeffs="0.0 0.0 0.44"/>
|
||||
<surface id="052" type="z-cylinder" coeffs="0.0 0.0 0.515"/>
|
||||
<cell id="051" universe="051" material="01" surfaces="-051"/>
|
||||
<cell id="052" universe="051" material="21" surfaces="051 -052"/>
|
||||
<cell id="053" universe="051" material="01" surfaces="052"/>
|
||||
|
||||
|
||||
<!-- Universe 055: Cluster tube -->
|
||||
<surface id="155" type="z-cylinder" coeffs="0.0 0.0 0.55"/>
|
||||
<surface id="156" type="z-cylinder" coeffs="0.0 0.0 0.63"/>
|
||||
<cell id="155" universe="055" material="01" surfaces="-155"/>
|
||||
<cell id="156" universe="055" material="22" surfaces="155 -156"/>
|
||||
<cell id="157" universe="055" material="01" surfaces="156"/>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Lattice 101: Fuel assembly pins -->
|
||||
<cell id="100" universe="100" material="01"/>
|
||||
<hex_lattice id="101" outer="100" n_rings="11" n_axial="3"
|
||||
center="0.0 0.0 0.0" pitch="1.265 1.2">
|
||||
<universes>
|
||||
011
|
||||
011 011
|
||||
011 011 011
|
||||
011 011 011 011
|
||||
011 011 011 011 011
|
||||
011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 055 011 011 011 011 011
|
||||
011 011 011 055 011 011 055 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 055 011 011 055 011 055 011 011
|
||||
011 011 011 011 055 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 055 011 011 011
|
||||
011 011 055 011 011 051 011 011 055 011 011
|
||||
011 011 011 055 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 055 011 011 011 011
|
||||
011 011 055 011 055 011 011 055 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 055 011 011 055 011 011 011
|
||||
011 011 011 011 011 055 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011
|
||||
011 011 011 011 011
|
||||
011 011 011 011
|
||||
011 011 011
|
||||
011 011
|
||||
011
|
||||
|
||||
011
|
||||
011 011
|
||||
011 011 011
|
||||
011 011 011 011
|
||||
011 011 011 011 011
|
||||
011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 055 011 011 011 011 011
|
||||
011 011 011 055 011 011 055 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 055 011 011 055 011 055 011 011
|
||||
011 011 011 011 055 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 055 011 011 011
|
||||
011 011 055 011 011 051 011 011 055 011 011
|
||||
011 011 011 055 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 055 011 011 011 011
|
||||
011 011 055 011 055 011 011 055 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 055 011 011 055 011 011 011
|
||||
011 011 011 011 011 055 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011
|
||||
011 011 011 011 011
|
||||
011 011 011 011
|
||||
011 011 011
|
||||
011 011
|
||||
011
|
||||
|
||||
011
|
||||
011 011
|
||||
011 011 011
|
||||
011 011 011 011
|
||||
011 011 011 011 011
|
||||
011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 055 011 011 011 011 011
|
||||
011 011 011 055 011 011 055 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 055 011 011 055 011 055 011 011
|
||||
011 011 011 011 055 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 055 011 011 011
|
||||
011 011 055 011 011 051 011 011 055 011 011
|
||||
011 011 011 055 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 055 011 011 011 011
|
||||
011 011 055 011 055 011 011 055 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 055 011 011 055 011 011 011
|
||||
011 011 011 011 011 055 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011
|
||||
011 011 011 011 011
|
||||
011 011 011 011
|
||||
011 011 011
|
||||
011 011
|
||||
011
|
||||
</universes>
|
||||
</hex_lattice>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Universe 0 -->
|
||||
<surface id="1001" type="plane" coeffs="1.0 0.0 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1002" type="plane" coeffs="0.5 0.866 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1003" type="plane" coeffs="-0.5 0.866 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1004" type="plane" coeffs="-1.0 0.0 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1005" type="plane" coeffs="-0.5 -0.866 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1006" type="plane" coeffs="0.5 -0.866 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1007" type="z-plane" coeffs="-177.4" boundary="vacuum"/>
|
||||
<surface id="1008" type="z-plane" coeffs="177.4" boundary="vacuum"/>
|
||||
|
||||
<cell id="1001" universe="0" fill="101"
|
||||
surfaces="-1001 -1002 -1003 -1004 -1005 -1006 1007 -1008"/>
|
||||
|
||||
</geometry>
|
||||
42
tests/test_lattice_hex/materials.xml
Normal file
42
tests/test_lattice_hex/materials.xml
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0"?>
|
||||
<materials>
|
||||
|
||||
<!-- Material 01: Water -->
|
||||
<material id="01">
|
||||
<density value="0.998" units="g/cc"/>
|
||||
<nuclide name="H-1" xs="71c" ao="2.0"/>
|
||||
<nuclide name="O-16" xs="71c" ao="1.0"/>
|
||||
<nuclide name="B-10" xs="71c" ao="0.00085"/>
|
||||
</material>
|
||||
|
||||
<!-- Material 13: Fuel (3.30%) -->
|
||||
<material id="13">
|
||||
<density value="10.371" units="g/cc"/>
|
||||
<nuclide name="U-235" xs="71c" ao="0.033408078"/>
|
||||
<nuclide name="U-238" xs="71c" ao="0.966591922"/>
|
||||
<nuclide name="O-16" xs="71c" ao="2.0"/>
|
||||
</material>
|
||||
|
||||
<!-- Material 21: Zircaloy -->
|
||||
<material id="21">
|
||||
<density value="6.44" units="g/cc" />
|
||||
<nuclide name="Zr-90" xs="71c" wo="0.501807"/>
|
||||
<nuclide name="Zr-91" xs="71c" wo="0.110712"/>
|
||||
<nuclide name="Zr-92" xs="71c" wo="0.170991"/>
|
||||
<nuclide name="Zr-94" xs="71c" wo="0.177057"/>
|
||||
<nuclide name="Zr-96" xs="71c" wo="0.029133"/>
|
||||
</material>
|
||||
|
||||
<!-- Material 22: Steel -->
|
||||
<material id="22">
|
||||
<density value="7.9" units="g/cc"/>
|
||||
<nuclide name="Mn-55" xs="71c" wo="2"/>
|
||||
<nuclide name="Ni-58" xs="71c" wo="6.83"/>
|
||||
<nuclide name="Ni-60" xs="71c" wo="2.61"/>
|
||||
<nuclide name="Cr-53" xs="71c" wo="1.71"/>
|
||||
<nuclide name="Fe-54" xs="71c" wo="3.98257"/>
|
||||
<nuclide name="Fe-56" xs="71c" wo="63.03447"/>
|
||||
<nuclide name="Fe-57" xs="71c" wo="1.4763"/>
|
||||
</material>
|
||||
|
||||
</materials>
|
||||
32
tests/test_lattice_hex/plots.xml
Normal file
32
tests/test_lattice_hex/plots.xml
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0"?>
|
||||
<plots>
|
||||
|
||||
<plot id="1" type="slice" basis="xy" color="cell">
|
||||
<filename>xy_cell</filename>
|
||||
<origin>0 0 0</origin>
|
||||
<width>30 30</width>
|
||||
<pixels>500 500</pixels>
|
||||
</plot>
|
||||
|
||||
<plot id="2" type="slice" basis="xy" color="material">
|
||||
<filename>xy_material</filename>
|
||||
<origin>0 0 0</origin>
|
||||
<width>30 30</width>
|
||||
<pixels>500 500</pixels>
|
||||
</plot>
|
||||
|
||||
<plot id="3" type="slice" basis="yz" color="cell">
|
||||
<filename>yz_cell</filename>
|
||||
<origin>0 0 0</origin>
|
||||
<width>50 400</width>
|
||||
<pixels>500 4000</pixels>
|
||||
</plot>
|
||||
|
||||
<plot id="4" type="slice" basis="yz" color="material">
|
||||
<filename>yz_material</filename>
|
||||
<origin>0 0 0</origin>
|
||||
<width>5 5</width>
|
||||
<pixels>500 500</pixels>
|
||||
</plot>
|
||||
|
||||
</plots>
|
||||
25
tests/test_lattice_hex/results.py
Normal file
25
tests/test_lattice_hex/results.py
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
# import statepoint
|
||||
from openmc.statepoint import StatePoint
|
||||
|
||||
# read in statepoint file
|
||||
if len(sys.argv) > 1:
|
||||
sp = StatePoint(sys.argv[1])
|
||||
else:
|
||||
sp = StatePoint('statepoint.10.binary')
|
||||
|
||||
sp.read_results()
|
||||
|
||||
# set up output string
|
||||
outstr = ''
|
||||
|
||||
# write out k-combined
|
||||
outstr += 'k-combined:\n'
|
||||
outstr += "{0:12.6E} {1:12.6E}\n".format(sp.k_combined[0], sp.k_combined[1])
|
||||
|
||||
# write results to file
|
||||
with open('results_test.dat','w') as fh:
|
||||
fh.write(outstr)
|
||||
2
tests/test_lattice_hex/results_true.dat
Normal file
2
tests/test_lattice_hex/results_true.dat
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
k-combined:
|
||||
2.831017E-01 2.269866E-02
|
||||
15
tests/test_lattice_hex/settings.xml
Normal file
15
tests/test_lattice_hex/settings.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<settings>
|
||||
<eigenvalue>
|
||||
<batches>10</batches>
|
||||
<inactive>5</inactive>
|
||||
<particles>500</particles>
|
||||
</eigenvalue>
|
||||
|
||||
<source>
|
||||
<space type="box">
|
||||
<parameters>-8.0 -8.0 -1.5
|
||||
8.0 8.0 1.5</parameters>
|
||||
</space>
|
||||
</source>
|
||||
</settings>
|
||||
59
tests/test_lattice_hex/test_lattice_hex.py
Normal file
59
tests/test_lattice_hex/test_lattice_hex.py
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
from subprocess import Popen, STDOUT, PIPE, call
|
||||
import filecmp
|
||||
import glob
|
||||
from optparse import OptionParser
|
||||
|
||||
parser = OptionParser()
|
||||
parser.add_option('--mpi_exec', dest='mpi_exec', default='')
|
||||
parser.add_option('--mpi_np', dest='mpi_np', default='3')
|
||||
parser.add_option('--exe', dest='exe')
|
||||
(opts, args) = parser.parse_args()
|
||||
cwd = os.getcwd()
|
||||
|
||||
def test_run():
|
||||
if opts.mpi_exec != '':
|
||||
proc = Popen([opts.mpi_exec, '-np', opts.mpi_np, opts.exe, cwd],
|
||||
stderr=STDOUT, stdout=PIPE)
|
||||
else:
|
||||
proc = Popen([opts.exe, cwd], stderr=STDOUT, stdout=PIPE)
|
||||
print(proc.communicate()[0])
|
||||
returncode = proc.returncode
|
||||
assert returncode == 0, 'OpenMC did not exit successfully.'
|
||||
|
||||
def test_created_statepoint():
|
||||
statepoint = glob.glob(os.path.join(cwd, 'statepoint.10.*'))
|
||||
assert len(statepoint) == 1, 'Either multiple or no statepoint files exist.'
|
||||
assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5'),\
|
||||
'Statepoint file is not a binary or hdf5 file.'
|
||||
|
||||
def test_results():
|
||||
statepoint = glob.glob(os.path.join(cwd, 'statepoint.10.*'))
|
||||
call(['python', 'results.py', statepoint[0]])
|
||||
compare = filecmp.cmp('results_test.dat', 'results_true.dat')
|
||||
if not compare:
|
||||
os.rename('results_test.dat', 'results_error.dat')
|
||||
assert compare, 'Results do not agree.'
|
||||
|
||||
def teardown():
|
||||
output = glob.glob(os.path.join(cwd, 'statepoint.10.*'))
|
||||
output.append(os.path.join(cwd, 'results_test.dat'))
|
||||
for f in output:
|
||||
if os.path.exists(f):
|
||||
os.remove(f)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
# test for openmc executable
|
||||
if opts.exe is None:
|
||||
raise Exception('Must specify OpenMC executable from command line with --exe.')
|
||||
|
||||
# run tests
|
||||
try:
|
||||
test_run()
|
||||
test_created_statepoint()
|
||||
test_results()
|
||||
finally:
|
||||
teardown()
|
||||
156
tests/test_lattice_mixed/geometry.xml
Normal file
156
tests/test_lattice_mixed/geometry.xml
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
This geometry approximately describes a Russian-style VVER-1000 fuel assembly.
|
||||
-->
|
||||
|
||||
<geometry>
|
||||
<surface id="001" type="z-plane" coeffs="-10000"/>
|
||||
|
||||
<!-- Universe 011: Fuel pellet -->
|
||||
<surface id="011" type="z-cylinder" coeffs="0.0 0.0 0.06"/>
|
||||
<surface id="012" type="z-cylinder" coeffs="0.0 0.0 0.378"/>
|
||||
<surface id="013" type="z-cylinder" coeffs="0.0 0.0 0.3865"/>
|
||||
<surface id="014" type="z-cylinder" coeffs="0.0 0.0 0.455"/>
|
||||
<surface id="015" type="sphere" coeffs="0.0 0.0 -2.5639 2.0"/>
|
||||
<surface id="016" type="sphere" coeffs="0.0 0.0 2.5639 2.0"/>
|
||||
|
||||
<cell id="011" universe="011" material="void" surfaces="-011"/>
|
||||
<cell id="012" universe="011" material="13" surfaces="011 -012 015 016"/>
|
||||
<cell id="013" universe="011" material="void" surfaces="011 -012 -015"/>
|
||||
<cell id="014" universe="011" material="void" surfaces="011 -012 -016"/>
|
||||
<cell id="015" universe="011" material="void" surfaces="012 -013"/>
|
||||
<cell id="016" universe="011" material="21" surfaces="013 -014"/>
|
||||
<cell id="017" universe="011" material="01" surfaces="014"/>
|
||||
|
||||
|
||||
<!-- Universe 051: Central guide tube -->
|
||||
<surface id="051" type="z-cylinder" coeffs="0.0 0.0 0.44"/>
|
||||
<surface id="052" type="z-cylinder" coeffs="0.0 0.0 0.515"/>
|
||||
<cell id="051" universe="051" material="01" surfaces="-051"/>
|
||||
<cell id="052" universe="051" material="21" surfaces="051 -052"/>
|
||||
<cell id="053" universe="051" material="01" surfaces="052"/>
|
||||
|
||||
|
||||
<!-- Universe 055: Cluster tube -->
|
||||
<surface id="155" type="z-cylinder" coeffs="0.0 0.0 0.55"/>
|
||||
<surface id="156" type="z-cylinder" coeffs="0.0 0.0 0.63"/>
|
||||
<cell id="155" universe="055" material="01" surfaces="-155"/>
|
||||
<cell id="156" universe="055" material="22" surfaces="155 -156"/>
|
||||
<cell id="157" universe="055" material="01" surfaces="156"/>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Lattice 101: Fuel assembly pins -->
|
||||
<cell id="100" universe="100" material="01"/>
|
||||
<hex_lattice id="101" outer="100" n_rings="11"
|
||||
center="0.0 0.0" pitch="1.265">
|
||||
<universes>
|
||||
011
|
||||
011 011
|
||||
011 011 011
|
||||
011 011 011 011
|
||||
011 011 011 011 011
|
||||
011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 055 011 011 011 011 011
|
||||
011 011 011 055 011 011 055 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 055 011 011 055 011 055 011 011
|
||||
011 011 011 011 055 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 055 011 011 011
|
||||
011 011 055 011 011 051 011 011 055 011 011
|
||||
011 011 011 055 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 055 011 011 011 011
|
||||
011 011 055 011 055 011 011 055 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 055 011 011 055 011 011 011
|
||||
011 011 011 011 011 055 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011 011
|
||||
011 011 011 011 011 011
|
||||
011 011 011 011 011
|
||||
011 011 011 011
|
||||
011 011 011
|
||||
011 011
|
||||
011
|
||||
</universes>
|
||||
</hex_lattice>
|
||||
|
||||
<cell id="102" universe="102" fill="101"/>
|
||||
|
||||
<lattice id="103" outer="100" dimension="1 1 294"
|
||||
lower_left="-25.0 -25.0 -177.0" pitch="50.0 50.0 1.2">
|
||||
<universes>
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102 102 102 102 102 102 102
|
||||
102 102 102 102
|
||||
</universes>
|
||||
</lattice>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Universe 0 -->
|
||||
<surface id="1001" type="plane" coeffs="1.0 0.0 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1002" type="plane" coeffs="0.5 0.866 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1003" type="plane" coeffs="-0.5 0.866 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1004" type="plane" coeffs="-1.0 0.0 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1005" type="plane" coeffs="-0.5 -0.866 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1006" type="plane" coeffs="0.5 -0.866 0.0 11.8"
|
||||
boundary="reflective"/>
|
||||
<surface id="1007" type="z-plane" coeffs="-177.4" boundary="vacuum"/>
|
||||
<surface id="1008" type="z-plane" coeffs="177.4" boundary="vacuum"/>
|
||||
|
||||
<cell id="1001" universe="0" fill="103"
|
||||
surfaces="-1001 -1002 -1003 -1004 -1005 -1006 1007 -1008"/>
|
||||
|
||||
</geometry>
|
||||
42
tests/test_lattice_mixed/materials.xml
Normal file
42
tests/test_lattice_mixed/materials.xml
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0"?>
|
||||
<materials>
|
||||
|
||||
<!-- Material 01: Water -->
|
||||
<material id="01">
|
||||
<density value="0.998" units="g/cc"/>
|
||||
<nuclide name="H-1" xs="71c" ao="2.0"/>
|
||||
<nuclide name="O-16" xs="71c" ao="1.0"/>
|
||||
<nuclide name="B-10" xs="71c" ao="0.00085"/>
|
||||
</material>
|
||||
|
||||
<!-- Material 13: Fuel (3.30%) -->
|
||||
<material id="13">
|
||||
<density value="10.371" units="g/cc"/>
|
||||
<nuclide name="U-235" xs="71c" ao="0.033408078"/>
|
||||
<nuclide name="U-238" xs="71c" ao="0.966591922"/>
|
||||
<nuclide name="O-16" xs="71c" ao="2.0"/>
|
||||
</material>
|
||||
|
||||
<!-- Material 21: Zircaloy -->
|
||||
<material id="21">
|
||||
<density value="6.44" units="g/cc" />
|
||||
<nuclide name="Zr-90" xs="71c" wo="0.501807"/>
|
||||
<nuclide name="Zr-91" xs="71c" wo="0.110712"/>
|
||||
<nuclide name="Zr-92" xs="71c" wo="0.170991"/>
|
||||
<nuclide name="Zr-94" xs="71c" wo="0.177057"/>
|
||||
<nuclide name="Zr-96" xs="71c" wo="0.029133"/>
|
||||
</material>
|
||||
|
||||
<!-- Material 22: Steel -->
|
||||
<material id="22">
|
||||
<density value="7.9" units="g/cc"/>
|
||||
<nuclide name="Mn-55" xs="71c" wo="2"/>
|
||||
<nuclide name="Ni-58" xs="71c" wo="6.83"/>
|
||||
<nuclide name="Ni-60" xs="71c" wo="2.61"/>
|
||||
<nuclide name="Cr-53" xs="71c" wo="1.71"/>
|
||||
<nuclide name="Fe-54" xs="71c" wo="3.98257"/>
|
||||
<nuclide name="Fe-56" xs="71c" wo="63.03447"/>
|
||||
<nuclide name="Fe-57" xs="71c" wo="1.4763"/>
|
||||
</material>
|
||||
|
||||
</materials>
|
||||
32
tests/test_lattice_mixed/plots.xml
Normal file
32
tests/test_lattice_mixed/plots.xml
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0"?>
|
||||
<plots>
|
||||
|
||||
<plot id="1" type="slice" basis="xy" color="cell">
|
||||
<filename>xy_cell</filename>
|
||||
<origin>0 0 0</origin>
|
||||
<width>30 30</width>
|
||||
<pixels>500 500</pixels>
|
||||
</plot>
|
||||
|
||||
<plot id="2" type="slice" basis="xy" color="material">
|
||||
<filename>xy_material</filename>
|
||||
<origin>0 0 0</origin>
|
||||
<width>30 30</width>
|
||||
<pixels>500 500</pixels>
|
||||
</plot>
|
||||
|
||||
<plot id="3" type="slice" basis="yz" color="cell">
|
||||
<filename>yz_cell</filename>
|
||||
<origin>0 0 0</origin>
|
||||
<width>50 400</width>
|
||||
<pixels>500 4000</pixels>
|
||||
</plot>
|
||||
|
||||
<plot id="4" type="slice" basis="yz" color="material">
|
||||
<filename>yz_material</filename>
|
||||
<origin>0 0 0</origin>
|
||||
<width>5 5</width>
|
||||
<pixels>500 500</pixels>
|
||||
</plot>
|
||||
|
||||
</plots>
|
||||
25
tests/test_lattice_mixed/results.py
Normal file
25
tests/test_lattice_mixed/results.py
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
# import statepoint
|
||||
from openmc.statepoint import StatePoint
|
||||
|
||||
# read in statepoint file
|
||||
if len(sys.argv) > 1:
|
||||
sp = StatePoint(sys.argv[1])
|
||||
else:
|
||||
sp = StatePoint('statepoint.10.binary')
|
||||
|
||||
sp.read_results()
|
||||
|
||||
# set up output string
|
||||
outstr = ''
|
||||
|
||||
# write out k-combined
|
||||
outstr += 'k-combined:\n'
|
||||
outstr += "{0:12.6E} {1:12.6E}\n".format(sp._k_combined[0], sp._k_combined[1])
|
||||
|
||||
# write results to file
|
||||
with open('results_test.dat','w') as fh:
|
||||
fh.write(outstr)
|
||||
2
tests/test_lattice_mixed/results_true.dat
Normal file
2
tests/test_lattice_mixed/results_true.dat
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
k-combined:
|
||||
9.670751E-01 1.903257E-02
|
||||
15
tests/test_lattice_mixed/settings.xml
Normal file
15
tests/test_lattice_mixed/settings.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<settings>
|
||||
<eigenvalue>
|
||||
<batches>10</batches>
|
||||
<inactive>5</inactive>
|
||||
<particles>500</particles>
|
||||
</eigenvalue>
|
||||
|
||||
<source>
|
||||
<space type="box">
|
||||
<parameters>-8.0 -8.0 -176
|
||||
8.0 8.0 176</parameters>
|
||||
</space>
|
||||
</source>
|
||||
</settings>
|
||||
59
tests/test_lattice_mixed/test_lattice_mixed.py
Normal file
59
tests/test_lattice_mixed/test_lattice_mixed.py
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
from subprocess import Popen, STDOUT, PIPE, call
|
||||
import filecmp
|
||||
import glob
|
||||
from optparse import OptionParser
|
||||
|
||||
parser = OptionParser()
|
||||
parser.add_option('--mpi_exec', dest='mpi_exec', default='')
|
||||
parser.add_option('--mpi_np', dest='mpi_np', default='3')
|
||||
parser.add_option('--exe', dest='exe')
|
||||
(opts, args) = parser.parse_args()
|
||||
cwd = os.getcwd()
|
||||
|
||||
def test_run():
|
||||
if opts.mpi_exec != '':
|
||||
proc = Popen([opts.mpi_exec, '-np', opts.mpi_np, opts.exe, cwd],
|
||||
stderr=STDOUT, stdout=PIPE)
|
||||
else:
|
||||
proc = Popen([opts.exe, cwd], stderr=STDOUT, stdout=PIPE)
|
||||
print(proc.communicate()[0])
|
||||
returncode = proc.returncode
|
||||
assert returncode == 0, 'OpenMC did not exit successfully.'
|
||||
|
||||
def test_created_statepoint():
|
||||
statepoint = glob.glob(os.path.join(cwd, 'statepoint.10.*'))
|
||||
assert len(statepoint) == 1, 'Either multiple or no statepoint files exist.'
|
||||
assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5'),\
|
||||
'Statepoint file is not a binary or hdf5 file.'
|
||||
|
||||
def test_results():
|
||||
statepoint = glob.glob(os.path.join(cwd, 'statepoint.10.*'))
|
||||
call(['python', 'results.py', statepoint[0]])
|
||||
compare = filecmp.cmp('results_test.dat', 'results_true.dat')
|
||||
if not compare:
|
||||
os.rename('results_test.dat', 'results_error.dat')
|
||||
assert compare, 'Results do not agree.'
|
||||
|
||||
def teardown():
|
||||
output = glob.glob(os.path.join(cwd, 'statepoint.10.*'))
|
||||
output.append(os.path.join(cwd, 'results_test.dat'))
|
||||
for f in output:
|
||||
if os.path.exists(f):
|
||||
os.remove(f)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
# test for openmc executable
|
||||
if opts.exe is None:
|
||||
raise Exception('Must specify OpenMC executable from command line with --exe.')
|
||||
|
||||
# run tests
|
||||
try:
|
||||
test_run()
|
||||
test_created_statepoint()
|
||||
test_results()
|
||||
finally:
|
||||
teardown()
|
||||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Lower Half) -->
|
||||
<lattice id="100">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -95,10 +94,9 @@
|
|||
|
||||
<!-- Fuel Assembly (Upper Half) -->
|
||||
<lattice id="101">
|
||||
<type>rectangular</type>
|
||||
<dimension>17 17</dimension>
|
||||
<lower_left>-10.71 -10.71</lower_left>
|
||||
<width>1.26 1.26</width>
|
||||
<pitch>1.26 1.26</pitch>
|
||||
<universes>
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
|
||||
|
|
@ -122,10 +120,9 @@
|
|||
|
||||
<!-- Core Lattice (Lower Half) -->
|
||||
<lattice id="200">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||
|
|
@ -153,10 +150,9 @@
|
|||
|
||||
<!-- Core Lattice (Upper Half) -->
|
||||
<lattice id="201">
|
||||
<type>rectangular</type>
|
||||
<dimension>21 21</dimension>
|
||||
<lower_left>-224.91 -224.91</lower_left>
|
||||
<width>21.42 21.42</width>
|
||||
<pitch>21.42 21.42</pitch>
|
||||
<universes>
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
|
||||
|
|
@ -182,4 +178,4 @@
|
|||
</universes>
|
||||
</lattice>
|
||||
|
||||
</geometry>
|
||||
</geometry>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
<!-- Central Fuel Assembly -->
|
||||
<lattice id="11" type="rectangular" dimension="15 15">
|
||||
<lower_left> -12.2682 -12.2682 </lower_left>
|
||||
<width> 1.63576 1.63576 </width>
|
||||
<pitch> 1.63576 1.63576 </pitch>
|
||||
<universes>
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
<!-- North Fuel Assembly -->
|
||||
<lattice id="22" type="rectangular" dimension="15 15">
|
||||
<lower_left> -12.2682 -12.2682 </lower_left>
|
||||
<width> 1.63576 1.63576 </width>
|
||||
<pitch> 1.63576 1.63576 </pitch>
|
||||
<universes>
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
|
||||
|
|
@ -88,7 +88,7 @@
|
|||
<!-- Northeast Fuel Assembly -->
|
||||
<lattice id="33" type="rectangular" dimension="15 15">
|
||||
<lower_left> -12.2682 -12.2682 </lower_left>
|
||||
<width> 1.63576 1.63576 </width>
|
||||
<pitch> 1.63576 1.63576 </pitch>
|
||||
<universes>
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
<!-- Full Driver Assembly -->
|
||||
<lattice id="24" type="rectangular" dimension="15 15">
|
||||
<lower_left> -12.2682 -12.2682 </lower_left>
|
||||
<width> 1.63576 1.63576 </width>
|
||||
<pitch> 1.63576 1.63576 </pitch>
|
||||
<universes>
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
|
||||
|
|
@ -141,7 +141,7 @@
|
|||
<!-- North Edge -->
|
||||
<lattice id="14" type="rectangular" dimension="15 15">
|
||||
<lower_left> -12.2682 -12.2682 </lower_left>
|
||||
<width> 1.63576 1.63576 </width>
|
||||
<pitch> 1.63576 1.63576 </pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -168,7 +168,7 @@
|
|||
<!-- Northeast Edge Corner -->
|
||||
<lattice id="15" type="rectangular" dimension="15 15">
|
||||
<lower_left> -12.2682 -12.2682 </lower_left>
|
||||
<width> 1.63576 1.63576 </width>
|
||||
<pitch> 1.63576 1.63576 </pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -195,7 +195,7 @@
|
|||
<!-- Northeast Top Steps -->
|
||||
<lattice id="25" type="rectangular" dimension="15 15">
|
||||
<lower_left> -12.2682 -12.2682 </lower_left>
|
||||
<width> 1.63576 1.63576 </width>
|
||||
<pitch> 1.63576 1.63576 </pitch>
|
||||
<universes>
|
||||
2 2 2 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
2 2 2 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -223,7 +223,7 @@
|
|||
<!-- Northeast Middle Corner -->
|
||||
<lattice id="26" type="rectangular" dimension="15 15">
|
||||
<lower_left> -12.2682 -12.2682 </lower_left>
|
||||
<width> 1.63576 1.63576 </width>
|
||||
<pitch> 1.63576 1.63576 </pitch>
|
||||
<universes>
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
||||
|
|
@ -250,7 +250,7 @@
|
|||
<!-- Northeast Bottom Steps -->
|
||||
<lattice id="36" type="rectangular" dimension="15 15">
|
||||
<lower_left> -12.2682 -12.2682 </lower_left>
|
||||
<width> 1.63576 1.63576 </width>
|
||||
<pitch> 1.63576 1.63576 </pitch>
|
||||
<universes>
|
||||
2 2 2 2 2 2 2 2 1 1 1 1 1 1 1
|
||||
2 2 2 2 2 2 2 2 1 1 1 1 1 1 1
|
||||
|
|
@ -286,7 +286,7 @@
|
|||
<!-- Core lattice -->
|
||||
<lattice id="99" type="rectangular" dimension="7 7">
|
||||
<lower_left> -85.8774 -85.8774 </lower_left>
|
||||
<width> 24.5364 24.5364 </width>
|
||||
<pitch> 24.5364 24.5364 </pitch>
|
||||
<universes>
|
||||
999 999 130 140 150 999 999
|
||||
999 220 230 240 250 260 999
|
||||
|
|
|
|||
10
tests/travis.sh
Executable file
10
tests/travis.sh
Executable file
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -ev
|
||||
|
||||
# Run all debug tests
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||
./run_tests.py -C "^basic-debug$|^hdf5-debug$|^mpi-omp-debug$|^phdf5-omp-debug$|^omp-phdf5-petsc-debug$" -j 4 -s
|
||||
else
|
||||
./run_tests.py -C "^basic-debug$" -j 4
|
||||
fi
|
||||
52
tests/travis_install.sh
Executable file
52
tests/travis_install.sh
Executable file
|
|
@ -0,0 +1,52 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -ev
|
||||
|
||||
# Build HDF5 and PETSc for rest of debug tests
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||
|
||||
# Build MPICH
|
||||
wget -q http://www.mpich.org/static/downloads/3.1.3/mpich-3.1.3.tar.gz
|
||||
tar -xzvf mpich-3.1.3.tar.gz >/dev/null 2>&1
|
||||
cd mpich-3.1.3
|
||||
./configure --prefix=$PWD/../mpich_install -q
|
||||
make -j >/dev/null 2>&1
|
||||
make install >/dev/null 2>&1
|
||||
cd ..
|
||||
|
||||
# Build PHDF5
|
||||
wget -q http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.8.14.tar.gz
|
||||
tar -xzvf hdf5-1.8.14.tar.gz >/dev/null 2>&1
|
||||
mv hdf5-1.8.14 phdf5-1.8.14; cd phdf5-1.8.14
|
||||
CC=$PWD/../mpich_install/bin/mpicc FC=$PWD/../mpich_install/bin/mpif90 \
|
||||
./configure \
|
||||
--prefix=$PWD/../phdf5_install -q --enable-fortran \
|
||||
--enable-fortran2003 --enable-parallel
|
||||
make -j >/dev/null 2>&1
|
||||
make install >/dev/null 2>&1
|
||||
cd ..
|
||||
|
||||
# Build HDF5
|
||||
tar -xzvf hdf5-1.8.14.tar.gz >/dev/null 2>&1
|
||||
cd hdf5-1.8.14
|
||||
CC=gcc FC=gfortran ./configure --prefix=$PWD/../hdf5_install -q \
|
||||
--enable-fortran --enable-fortran2003
|
||||
make -j >/dev/null 2>&1
|
||||
make install >/dev/null 2>&1
|
||||
cd ..
|
||||
|
||||
# Build PETSc
|
||||
wget -q http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-lite-3.5.3.tar.gz
|
||||
tar -xzvf petsc-lite-3.5.3.tar.gz >/dev/null 2>&1
|
||||
cd petsc-3.5.3
|
||||
./configure --prefix=$PWD/../petsc_install -q --download-fblaslapack \
|
||||
--with-mpi-dir=$PWD/../mpich_install --with-share-libraries \
|
||||
--with-fortran-datatypes
|
||||
make PETSC_DIR=$PWD \
|
||||
PETSC_ARCH=arch-linux2-c-debug all >/dev/null 2>&1
|
||||
make PETSC_DIR=$PWD \
|
||||
PETSC_ARCH=arch-linux2-c-debug install >/dev/null 2>&1
|
||||
make install >/dev/null 2>&1
|
||||
cd ..
|
||||
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue