Merge pull request #313 from smharper/hex_lattice

Hexagonal lattice capability
This commit is contained in:
Paul Romano 2015-02-24 08:17:44 -05:00
commit 6fd4ed3f60
63 changed files with 3635 additions and 800 deletions

View 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

View 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

View file

@ -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
----------------------------------------

View file

@ -851,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
@ -877,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
@ -895,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

View file

@ -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

View file

@ -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

View file

@ -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)) then
p % coord % xyz = matmul(c % rotation, p % coord % xyz)
p % coord % uvw = matmul(c % rotation, 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)) then
p % coord % xyz = matmul(c % rotation, p % coord % xyz)
p % coord % uvw = matmul(c % rotation, 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

View file

@ -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)
@ -72,4 +148,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

View file

@ -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

View file

@ -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")
@ -148,8 +147,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
@ -272,52 +271,104 @@ contains
! Write information on each lattice
LATTICE_LOOP: do i = 1, n_lattices
lat => lattices(i)
lat => lattices(i) % obj
! 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 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
! 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 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(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 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

View file

@ -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

View file

@ -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,9 +898,9 @@ 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
@ -911,16 +911,17 @@ contains
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)
@ -1240,17 +1241,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
@ -1265,32 +1272,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
@ -1298,24 +1294,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
@ -1333,7 +1347,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
@ -1356,7 +1370,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)

View file

@ -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

View file

@ -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 })?
}*

View file

@ -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

View file

@ -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

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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"/>

View file

@ -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>

View 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>

View 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>

View 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>

View file

@ -0,0 +1,25 @@
#!/usr/bin/env python
import sys
# import statepoint
sys.path.append('../../src/utils')
import statepoint
# read in statepoint file
if len(sys.argv) > 1:
sp = statepoint.StatePoint(sys.argv[1])
else:
sp = statepoint.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)

View file

@ -0,0 +1,2 @@
k-combined:
2.831017E-01 2.269866E-02

View 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>

View 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()

View 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>

View 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>

View 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>

View file

@ -0,0 +1,25 @@
#!/usr/bin/env python
import sys
# import statepoint
sys.path.append('../../src/utils')
import statepoint
# read in statepoint file
if len(sys.argv) > 1:
sp = statepoint.StatePoint(sys.argv[1])
else:
sp = statepoint.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)

View file

@ -0,0 +1,2 @@
k-combined:
9.670751E-01 1.903257E-02

View 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>

View 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()

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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