mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 06:05:58 -04:00
merged develop into cmfd_rbgs
This commit is contained in:
commit
9b7744b3a4
436 changed files with 193595 additions and 226238 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -38,3 +38,6 @@ results_error.dat
|
|||
|
||||
# HDF5 files
|
||||
*.h5
|
||||
|
||||
# Data downloaded from NNDC
|
||||
data/nndc
|
||||
|
|
|
|||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[submodule "src/xml/fox"]
|
||||
path = src/xml/fox
|
||||
url = https://github.com/mit-crpg/fox.git
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
<ace_table alias="Fe-57.71c" awr="56.446" location="1" name="26057.71c" path="293.6K/Fe_057_293.6K.ace" temperature="2.53e-08" zaid="26057"/>
|
||||
<ace_table alias="Fe-58.71c" awr="57.436" location="1" name="26058.71c" path="293.6K/Fe_058_293.6K.ace" temperature="2.53e-08" zaid="26058"/>
|
||||
<ace_table alias="Co-58.71c" awr="57.4381" location="1" name="27058.71c" path="293.6K/Co_058_293.6K.ace" temperature="2.53e-08" zaid="27058"/>
|
||||
<ace_table alias="Co-59.71c" awr="57.4381" location="1" name="27059.71c" path="293.6K/Co_058m1_293.6K.ace" temperature="2.53e-08" zaid="27059"/>
|
||||
<ace_table alias="Co-58m.71c" awr="57.4381" location="1" metastable="1" name="27059.71c" path="293.6K/Co_058m1_293.6K.ace" temperature="2.53e-08" zaid="27059"/>
|
||||
<ace_table alias="Co-59.71c" awr="58.4269" location="1" name="27059.71c" path="293.6K/Co_059_293.6K.ace" temperature="2.53e-08" zaid="27059"/>
|
||||
<ace_table alias="Ni-58.71c" awr="57.438" location="1" name="28058.71c" path="293.6K/Ni_058_293.6K.ace" temperature="2.53e-08" zaid="28058"/>
|
||||
<ace_table alias="Ni-59.71c" awr="58.4281" location="1" name="28059.71c" path="293.6K/Ni_059_293.6K.ace" temperature="2.53e-08" zaid="28059"/>
|
||||
|
|
@ -157,7 +157,7 @@
|
|||
<ace_table alias="Pd-110.71c" awr="108.961" location="1" name="46110.71c" path="293.6K/Pd_110_293.6K.ace" temperature="2.53e-08" zaid="46110"/>
|
||||
<ace_table alias="Ag-107.71c" awr="105.987" location="1" name="47107.71c" path="293.6K/Ag_107_293.6K.ace" temperature="2.53e-08" zaid="47107"/>
|
||||
<ace_table alias="Ag-109.71c" awr="107.969" location="1" name="47109.71c" path="293.6K/Ag_109_293.6K.ace" temperature="2.53e-08" zaid="47109"/>
|
||||
<ace_table alias="Ag-119.71c" awr="108.962" location="1" name="47119.71c" path="293.6K/Ag_110m1_293.6K.ace" temperature="2.53e-08" zaid="47119"/>
|
||||
<ace_table alias="Ag-110m.71c" awr="108.962" location="1" metastable="1" name="47119.71c" path="293.6K/Ag_110m1_293.6K.ace" temperature="2.53e-08" zaid="47119"/>
|
||||
<ace_table alias="Ag-111.71c" awr="109.953" location="1" name="47111.71c" path="293.6K/Ag_111_293.6K.ace" temperature="2.53e-08" zaid="47111"/>
|
||||
<ace_table alias="Cd-106.71c" awr="104.996" location="1" name="48106.71c" path="293.6K/Cd_106_293.6K.ace" temperature="2.53e-08" zaid="48106"/>
|
||||
<ace_table alias="Cd-108.71c" awr="106.977" location="1" name="48108.71c" path="293.6K/Cd_108_293.6K.ace" temperature="2.53e-08" zaid="48108"/>
|
||||
|
|
@ -166,7 +166,7 @@
|
|||
<ace_table alias="Cd-112.71c" awr="110.942" location="1" name="48112.71c" path="293.6K/Cd_112_293.6K.ace" temperature="2.53e-08" zaid="48112"/>
|
||||
<ace_table alias="Cd-113.71c" awr="111.93" location="1" name="48113.71c" path="293.6K/Cd_113_293.6K.ace" temperature="2.53e-08" zaid="48113"/>
|
||||
<ace_table alias="Cd-114.71c" awr="112.925" location="1" name="48114.71c" path="293.6K/Cd_114_293.6K.ace" temperature="2.53e-08" zaid="48114"/>
|
||||
<ace_table alias="Cd-119.71c" awr="113.918" location="1" name="48119.71c" path="293.6K/Cd_115m1_293.6K.ace" temperature="2.53e-08" zaid="48119"/>
|
||||
<ace_table alias="Cd-115m.71c" awr="113.918" location="1" metastable="1" name="48119.71c" path="293.6K/Cd_115m1_293.6K.ace" temperature="2.53e-08" zaid="48119"/>
|
||||
<ace_table alias="Cd-116.71c" awr="114.909" location="1" name="48116.71c" path="293.6K/Cd_116_293.6K.ace" temperature="2.53e-08" zaid="48116"/>
|
||||
<ace_table alias="In-113.71c" awr="111.934" location="1" name="49113.71c" path="293.6K/In_113_293.6K.ace" temperature="2.53e-08" zaid="49113"/>
|
||||
<ace_table alias="In-115.71c" awr="113.917" location="1" name="49115.71c" path="293.6K/In_115_293.6K.ace" temperature="2.53e-08" zaid="49115"/>
|
||||
|
|
@ -195,9 +195,9 @@
|
|||
<ace_table alias="Te-124.71c" awr="122.839" location="1" name="52124.71c" path="293.6K/Te_124_293.6K.ace" temperature="2.53e-08" zaid="52124"/>
|
||||
<ace_table alias="Te-125.71c" awr="123.831" location="1" name="52125.71c" path="293.6K/Te_125_293.6K.ace" temperature="2.53e-08" zaid="52125"/>
|
||||
<ace_table alias="Te-126.71c" awr="124.821" location="1" name="52126.71c" path="293.6K/Te_126_293.6K.ace" temperature="2.53e-08" zaid="52126"/>
|
||||
<ace_table alias="Te-129.71c" awr="125.815" location="1" name="52129.71c" path="293.6K/Te_127m1_293.6K.ace" temperature="2.53e-08" zaid="52129"/>
|
||||
<ace_table alias="Te-127m.71c" awr="125.815" location="1" metastable="1" name="52129.71c" path="293.6K/Te_127m1_293.6K.ace" temperature="2.53e-08" zaid="52129"/>
|
||||
<ace_table alias="Te-128.71c" awr="126.805" location="1" name="52128.71c" path="293.6K/Te_128_293.6K.ace" temperature="2.53e-08" zaid="52128"/>
|
||||
<ace_table alias="Te-129.71c" awr="127.8" location="1" name="52129.71c" path="293.6K/Te_129m1_293.6K.ace" temperature="2.53e-08" zaid="52129"/>
|
||||
<ace_table alias="Te-129m.71c" awr="127.8" location="1" metastable="1" name="52129.71c" path="293.6K/Te_129m1_293.6K.ace" temperature="2.53e-08" zaid="52129"/>
|
||||
<ace_table alias="Te-130.71c" awr="128.79" location="1" name="52130.71c" path="293.6K/Te_130_293.6K.ace" temperature="2.53e-08" zaid="52130"/>
|
||||
<ace_table alias="Te-132.71c" awr="130.775" location="1" name="52132.71c" path="293.6K/Te_132_293.6K.ace" temperature="2.53e-08" zaid="52132"/>
|
||||
<ace_table alias="I-127.71c" awr="125.8143" location="1" name="53127.71c" path="293.6K/I_127_293.6K.ace" temperature="2.53e-08" zaid="53127"/>
|
||||
|
|
@ -255,7 +255,7 @@
|
|||
<ace_table alias="Nd-150.71c" awr="148.633" location="1" name="60150.71c" path="293.6K/Nd_150_293.6K.ace" temperature="2.53e-08" zaid="60150"/>
|
||||
<ace_table alias="Pm-147.71c" awr="145.653" location="1" name="61147.71c" path="293.6K/Pm_147_293.6K.ace" temperature="2.53e-08" zaid="61147"/>
|
||||
<ace_table alias="Pm-148.71c" awr="146.646" location="1" name="61148.71c" path="293.6K/Pm_148_293.6K.ace" temperature="2.53e-08" zaid="61148"/>
|
||||
<ace_table alias="Pm-149.71c" awr="146.65" location="1" name="61149.71c" path="293.6K/Pm_148m1_293.6K.ace" temperature="2.53e-08" zaid="61149"/>
|
||||
<ace_table alias="Pm-148m.71c" awr="146.65" location="1" metastable="1" name="61149.71c" path="293.6K/Pm_148m1_293.6K.ace" temperature="2.53e-08" zaid="61149"/>
|
||||
<ace_table alias="Pm-149.71c" awr="147.639" location="1" name="61149.71c" path="293.6K/Pm_149_293.6K.ace" temperature="2.53e-08" zaid="61149"/>
|
||||
<ace_table alias="Pm-151.71c" awr="149.625" location="1" name="61151.71c" path="293.6K/Pm_151_293.6K.ace" temperature="2.53e-08" zaid="61151"/>
|
||||
<ace_table alias="Sm-144.71c" awr="142.676" location="1" name="62144.71c" path="293.6K/Sm_144_293.6K.ace" temperature="2.53e-08" zaid="62144"/>
|
||||
|
|
@ -292,7 +292,7 @@
|
|||
<ace_table alias="Dy-163.71c" awr="161.529" location="1" name="66163.71c" path="293.6K/Dy_163_293.6K.ace" temperature="2.53e-08" zaid="66163"/>
|
||||
<ace_table alias="Dy-164.71c" awr="162.521" location="1" name="66164.71c" path="293.6K/Dy_164_293.6K.ace" temperature="2.53e-08" zaid="66164"/>
|
||||
<ace_table alias="Ho-165.71c" awr="163.513" location="1" name="67165.71c" path="293.6K/Ho_165_293.6K.ace" temperature="2.53e-08" zaid="67165"/>
|
||||
<ace_table alias="Ho-169.71c" awr="164.507" location="1" name="67169.71c" path="293.6K/Ho_166m1_293.6K.ace" temperature="2.53e-08" zaid="67169"/>
|
||||
<ace_table alias="Ho-166m.71c" awr="164.507" location="1" metastable="1" name="67169.71c" path="293.6K/Ho_166m1_293.6K.ace" temperature="2.53e-08" zaid="67169"/>
|
||||
<ace_table alias="Er-162.71c" awr="160.538" location="1" name="68162.71c" path="293.6K/Er_162_293.6K.ace" temperature="2.53e-08" zaid="68162"/>
|
||||
<ace_table alias="Er-164.71c" awr="162.521" location="1" name="68164.71c" path="293.6K/Er_164_293.6K.ace" temperature="2.53e-08" zaid="68164"/>
|
||||
<ace_table alias="Er-166.71c" awr="164.505" location="1" name="68166.71c" path="293.6K/Er_166_293.6K.ace" temperature="2.53e-08" zaid="68166"/>
|
||||
|
|
@ -387,11 +387,11 @@
|
|||
<ace_table alias="Pu-246.71c" awr="243.956" location="1" name="94246.71c" path="293.6K/Pu_246_293.6K.ace" temperature="2.53e-08" zaid="94246"/>
|
||||
<ace_table alias="Am-240.71c" awr="237.993" location="1" name="95240.71c" path="293.6K/Am_240_293.6K.ace" temperature="2.53e-08" zaid="95240"/>
|
||||
<ace_table alias="Am-241.71c" awr="238.986" location="1" name="95241.71c" path="293.6K/Am_241_293.6K.ace" temperature="2.53e-08" zaid="95241"/>
|
||||
<ace_table alias="Am-242m.71c" awr="239.9801" location="1" metastable="1" name="95242.71c" path="293.6K/Am_242_293.6K.ace" temperature="2.53e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-249.71c" awr="239.9801" location="1" name="95249.71c" path="293.6K/Am_242m1_293.6K.ace" temperature="2.53e-08" zaid="95249"/>
|
||||
<ace_table alias="Am-242.71c" awr="239.9801" location="1" name="95242.71c" path="293.6K/Am_242_293.6K.ace" temperature="2.53e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-242m.71c" awr="239.9801" location="1" metastable="1" name="95249.71c" path="293.6K/Am_242m1_293.6K.ace" temperature="2.53e-08" zaid="95249"/>
|
||||
<ace_table alias="Am-243.71c" awr="240.9734" location="1" name="95243.71c" path="293.6K/Am_243_293.6K.ace" temperature="2.53e-08" zaid="95243"/>
|
||||
<ace_table alias="Am-244.71c" awr="241.968" location="1" name="95244.71c" path="293.6K/Am_244_293.6K.ace" temperature="2.53e-08" zaid="95244"/>
|
||||
<ace_table alias="Am-249.71c" awr="241.968" location="1" name="95249.71c" path="293.6K/Am_244m1_293.6K.ace" temperature="2.53e-08" zaid="95249"/>
|
||||
<ace_table alias="Am-244m.71c" awr="241.968" location="1" metastable="1" name="95249.71c" path="293.6K/Am_244m1_293.6K.ace" temperature="2.53e-08" zaid="95249"/>
|
||||
<ace_table alias="Cm-240.71c" awr="237.993" location="1" name="96240.71c" path="293.6K/Cm_240_293.6K.ace" temperature="2.53e-08" zaid="96240"/>
|
||||
<ace_table alias="Cm-241.71c" awr="238.987" location="1" name="96241.71c" path="293.6K/Cm_241_293.6K.ace" temperature="2.53e-08" zaid="96241"/>
|
||||
<ace_table alias="Cm-242.71c" awr="239.979" location="1" name="96242.71c" path="293.6K/Cm_242_293.6K.ace" temperature="2.53e-08" zaid="96242"/>
|
||||
|
|
@ -421,7 +421,7 @@
|
|||
<ace_table alias="Es-252.71c" awr="249.917" location="1" name="99252.71c" path="293.6K/Es_252_293.6K.ace" temperature="2.53e-08" zaid="99252"/>
|
||||
<ace_table alias="Es-253.71c" awr="250.911" location="1" name="99253.71c" path="293.6K/Es_253_293.6K.ace" temperature="2.53e-08" zaid="99253"/>
|
||||
<ace_table alias="Es-254.71c" awr="251.905" location="1" name="99254.71c" path="293.6K/Es_254_293.6K.ace" temperature="2.53e-08" zaid="99254"/>
|
||||
<ace_table alias="Es-259.71c" awr="251.905" location="1" name="99259.71c" path="293.6K/Es_254m1_293.6K.ace" temperature="2.53e-08" zaid="99259"/>
|
||||
<ace_table alias="Es-254m.71c" awr="251.905" location="1" metastable="1" name="99259.71c" path="293.6K/Es_254m1_293.6K.ace" temperature="2.53e-08" zaid="99259"/>
|
||||
<ace_table alias="Es-255.71c" awr="252.899" location="1" name="99255.71c" path="293.6K/Es_255_293.6K.ace" temperature="2.53e-08" zaid="99255"/>
|
||||
<ace_table alias="Fm-255.71c" awr="252.899" location="1" name="100255.71c" path="293.6K/Fm_255_293.6K.ace" temperature="2.53e-08" zaid="100255"/>
|
||||
<ace_table alias="H-1.72c" awr="0.999167" location="1" name="1001.72c" path="300K/H_001_300K.ace" temperature="2.585e-08" zaid="1001"/>
|
||||
|
|
@ -487,7 +487,7 @@
|
|||
<ace_table alias="Fe-57.72c" awr="56.446" location="1" name="26057.72c" path="300K/Fe_057_300K.ace" temperature="2.585e-08" zaid="26057"/>
|
||||
<ace_table alias="Fe-58.72c" awr="57.436" location="1" name="26058.72c" path="300K/Fe_058_300K.ace" temperature="2.585e-08" zaid="26058"/>
|
||||
<ace_table alias="Co-58.72c" awr="57.4381" location="1" name="27058.72c" path="300K/Co_058_300K.ace" temperature="2.585e-08" zaid="27058"/>
|
||||
<ace_table alias="Co-59.72c" awr="57.4381" location="1" name="27059.72c" path="300K/Co_058m1_300K.ace" temperature="2.585e-08" zaid="27059"/>
|
||||
<ace_table alias="Co-58m.72c" awr="57.4381" location="1" metastable="1" name="27059.72c" path="300K/Co_058m1_300K.ace" temperature="2.585e-08" zaid="27059"/>
|
||||
<ace_table alias="Co-59.72c" awr="58.4269" location="1" name="27059.72c" path="300K/Co_059_300K.ace" temperature="2.585e-08" zaid="27059"/>
|
||||
<ace_table alias="Ni-58.72c" awr="57.438" location="1" name="28058.72c" path="300K/Ni_058_300K.ace" temperature="2.585e-08" zaid="28058"/>
|
||||
<ace_table alias="Ni-59.72c" awr="58.4281" location="1" name="28059.72c" path="300K/Ni_059_300K.ace" temperature="2.585e-08" zaid="28059"/>
|
||||
|
|
@ -580,7 +580,7 @@
|
|||
<ace_table alias="Pd-110.72c" awr="108.961" location="1" name="46110.72c" path="300K/Pd_110_300K.ace" temperature="2.585e-08" zaid="46110"/>
|
||||
<ace_table alias="Ag-107.72c" awr="105.987" location="1" name="47107.72c" path="300K/Ag_107_300K.ace" temperature="2.585e-08" zaid="47107"/>
|
||||
<ace_table alias="Ag-109.72c" awr="107.969" location="1" name="47109.72c" path="300K/Ag_109_300K.ace" temperature="2.585e-08" zaid="47109"/>
|
||||
<ace_table alias="Ag-119.72c" awr="108.962" location="1" name="47119.72c" path="300K/Ag_110m1_300K.ace" temperature="2.585e-08" zaid="47119"/>
|
||||
<ace_table alias="Ag-110m.72c" awr="108.962" location="1" metastable="1" name="47119.72c" path="300K/Ag_110m1_300K.ace" temperature="2.585e-08" zaid="47119"/>
|
||||
<ace_table alias="Ag-111.72c" awr="109.953" location="1" name="47111.72c" path="300K/Ag_111_300K.ace" temperature="2.585e-08" zaid="47111"/>
|
||||
<ace_table alias="Cd-106.72c" awr="104.996" location="1" name="48106.72c" path="300K/Cd_106_300K.ace" temperature="2.585e-08" zaid="48106"/>
|
||||
<ace_table alias="Cd-108.72c" awr="106.977" location="1" name="48108.72c" path="300K/Cd_108_300K.ace" temperature="2.585e-08" zaid="48108"/>
|
||||
|
|
@ -589,7 +589,7 @@
|
|||
<ace_table alias="Cd-112.72c" awr="110.942" location="1" name="48112.72c" path="300K/Cd_112_300K.ace" temperature="2.585e-08" zaid="48112"/>
|
||||
<ace_table alias="Cd-113.72c" awr="111.93" location="1" name="48113.72c" path="300K/Cd_113_300K.ace" temperature="2.585e-08" zaid="48113"/>
|
||||
<ace_table alias="Cd-114.72c" awr="112.925" location="1" name="48114.72c" path="300K/Cd_114_300K.ace" temperature="2.585e-08" zaid="48114"/>
|
||||
<ace_table alias="Cd-119.72c" awr="113.918" location="1" name="48119.72c" path="300K/Cd_115m1_300K.ace" temperature="2.585e-08" zaid="48119"/>
|
||||
<ace_table alias="Cd-115m.72c" awr="113.918" location="1" metastable="1" name="48119.72c" path="300K/Cd_115m1_300K.ace" temperature="2.585e-08" zaid="48119"/>
|
||||
<ace_table alias="Cd-116.72c" awr="114.909" location="1" name="48116.72c" path="300K/Cd_116_300K.ace" temperature="2.585e-08" zaid="48116"/>
|
||||
<ace_table alias="In-113.72c" awr="111.934" location="1" name="49113.72c" path="300K/In_113_300K.ace" temperature="2.585e-08" zaid="49113"/>
|
||||
<ace_table alias="In-115.72c" awr="113.917" location="1" name="49115.72c" path="300K/In_115_300K.ace" temperature="2.585e-08" zaid="49115"/>
|
||||
|
|
@ -618,9 +618,9 @@
|
|||
<ace_table alias="Te-124.72c" awr="122.839" location="1" name="52124.72c" path="300K/Te_124_300K.ace" temperature="2.585e-08" zaid="52124"/>
|
||||
<ace_table alias="Te-125.72c" awr="123.831" location="1" name="52125.72c" path="300K/Te_125_300K.ace" temperature="2.585e-08" zaid="52125"/>
|
||||
<ace_table alias="Te-126.72c" awr="124.821" location="1" name="52126.72c" path="300K/Te_126_300K.ace" temperature="2.585e-08" zaid="52126"/>
|
||||
<ace_table alias="Te-129.72c" awr="125.815" location="1" name="52129.72c" path="300K/Te_127m1_300K.ace" temperature="2.585e-08" zaid="52129"/>
|
||||
<ace_table alias="Te-127m.72c" awr="125.815" location="1" metastable="1" name="52129.72c" path="300K/Te_127m1_300K.ace" temperature="2.585e-08" zaid="52129"/>
|
||||
<ace_table alias="Te-128.72c" awr="126.805" location="1" name="52128.72c" path="300K/Te_128_300K.ace" temperature="2.585e-08" zaid="52128"/>
|
||||
<ace_table alias="Te-129.72c" awr="127.8" location="1" name="52129.72c" path="300K/Te_129m1_300K.ace" temperature="2.585e-08" zaid="52129"/>
|
||||
<ace_table alias="Te-129m.72c" awr="127.8" location="1" metastable="1" name="52129.72c" path="300K/Te_129m1_300K.ace" temperature="2.585e-08" zaid="52129"/>
|
||||
<ace_table alias="Te-130.72c" awr="128.79" location="1" name="52130.72c" path="300K/Te_130_300K.ace" temperature="2.585e-08" zaid="52130"/>
|
||||
<ace_table alias="Te-132.72c" awr="130.775" location="1" name="52132.72c" path="300K/Te_132_300K.ace" temperature="2.585e-08" zaid="52132"/>
|
||||
<ace_table alias="I-127.72c" awr="125.8143" location="1" name="53127.72c" path="300K/I_127_300K.ace" temperature="2.585e-08" zaid="53127"/>
|
||||
|
|
@ -678,7 +678,7 @@
|
|||
<ace_table alias="Nd-150.72c" awr="148.633" location="1" name="60150.72c" path="300K/Nd_150_300K.ace" temperature="2.585e-08" zaid="60150"/>
|
||||
<ace_table alias="Pm-147.72c" awr="145.653" location="1" name="61147.72c" path="300K/Pm_147_300K.ace" temperature="2.585e-08" zaid="61147"/>
|
||||
<ace_table alias="Pm-148.72c" awr="146.646" location="1" name="61148.72c" path="300K/Pm_148_300K.ace" temperature="2.585e-08" zaid="61148"/>
|
||||
<ace_table alias="Pm-149.72c" awr="146.65" location="1" name="61149.72c" path="300K/Pm_148m1_300K.ace" temperature="2.585e-08" zaid="61149"/>
|
||||
<ace_table alias="Pm-148m.72c" awr="146.65" location="1" metastable="1" name="61149.72c" path="300K/Pm_148m1_300K.ace" temperature="2.585e-08" zaid="61149"/>
|
||||
<ace_table alias="Pm-149.72c" awr="147.639" location="1" name="61149.72c" path="300K/Pm_149_300K.ace" temperature="2.585e-08" zaid="61149"/>
|
||||
<ace_table alias="Pm-151.72c" awr="149.625" location="1" name="61151.72c" path="300K/Pm_151_300K.ace" temperature="2.585e-08" zaid="61151"/>
|
||||
<ace_table alias="Sm-144.72c" awr="142.676" location="1" name="62144.72c" path="300K/Sm_144_300K.ace" temperature="2.585e-08" zaid="62144"/>
|
||||
|
|
@ -715,7 +715,7 @@
|
|||
<ace_table alias="Dy-163.72c" awr="161.529" location="1" name="66163.72c" path="300K/Dy_163_300K.ace" temperature="2.585e-08" zaid="66163"/>
|
||||
<ace_table alias="Dy-164.72c" awr="162.521" location="1" name="66164.72c" path="300K/Dy_164_300K.ace" temperature="2.585e-08" zaid="66164"/>
|
||||
<ace_table alias="Ho-165.72c" awr="163.513" location="1" name="67165.72c" path="300K/Ho_165_300K.ace" temperature="2.585e-08" zaid="67165"/>
|
||||
<ace_table alias="Ho-169.72c" awr="164.507" location="1" name="67169.72c" path="300K/Ho_166m1_300K.ace" temperature="2.585e-08" zaid="67169"/>
|
||||
<ace_table alias="Ho-166m.72c" awr="164.507" location="1" metastable="1" name="67169.72c" path="300K/Ho_166m1_300K.ace" temperature="2.585e-08" zaid="67169"/>
|
||||
<ace_table alias="Er-162.72c" awr="160.538" location="1" name="68162.72c" path="300K/Er_162_300K.ace" temperature="2.585e-08" zaid="68162"/>
|
||||
<ace_table alias="Er-164.72c" awr="162.521" location="1" name="68164.72c" path="300K/Er_164_300K.ace" temperature="2.585e-08" zaid="68164"/>
|
||||
<ace_table alias="Er-166.72c" awr="164.505" location="1" name="68166.72c" path="300K/Er_166_300K.ace" temperature="2.585e-08" zaid="68166"/>
|
||||
|
|
@ -810,11 +810,11 @@
|
|||
<ace_table alias="Pu-246.72c" awr="243.956" location="1" name="94246.72c" path="300K/Pu_246_300K.ace" temperature="2.585e-08" zaid="94246"/>
|
||||
<ace_table alias="Am-240.72c" awr="237.993" location="1" name="95240.72c" path="300K/Am_240_300K.ace" temperature="2.585e-08" zaid="95240"/>
|
||||
<ace_table alias="Am-241.72c" awr="238.986" location="1" name="95241.72c" path="300K/Am_241_300K.ace" temperature="2.585e-08" zaid="95241"/>
|
||||
<ace_table alias="Am-242m.72c" awr="239.9801" location="1" metastable="1" name="95242.72c" path="300K/Am_242_300K.ace" temperature="2.585e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-249.72c" awr="239.9801" location="1" name="95249.72c" path="300K/Am_242m1_300K.ace" temperature="2.585e-08" zaid="95249"/>
|
||||
<ace_table alias="Am-242.72c" awr="239.9801" location="1" name="95242.72c" path="300K/Am_242_300K.ace" temperature="2.585e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-242m.72c" awr="239.9801" location="1" metastable="1" name="95249.72c" path="300K/Am_242m1_300K.ace" temperature="2.585e-08" zaid="95249"/>
|
||||
<ace_table alias="Am-243.72c" awr="240.9734" location="1" name="95243.72c" path="300K/Am_243_300K.ace" temperature="2.585e-08" zaid="95243"/>
|
||||
<ace_table alias="Am-244.72c" awr="241.968" location="1" name="95244.72c" path="300K/Am_244_300K.ace" temperature="2.585e-08" zaid="95244"/>
|
||||
<ace_table alias="Am-249.72c" awr="241.968" location="1" name="95249.72c" path="300K/Am_244m1_300K.ace" temperature="2.585e-08" zaid="95249"/>
|
||||
<ace_table alias="Am-244m.72c" awr="241.968" location="1" metastable="1" name="95249.72c" path="300K/Am_244m1_300K.ace" temperature="2.585e-08" zaid="95249"/>
|
||||
<ace_table alias="Cm-240.72c" awr="237.993" location="1" name="96240.72c" path="300K/Cm_240_300K.ace" temperature="2.585e-08" zaid="96240"/>
|
||||
<ace_table alias="Cm-241.72c" awr="238.987" location="1" name="96241.72c" path="300K/Cm_241_300K.ace" temperature="2.585e-08" zaid="96241"/>
|
||||
<ace_table alias="Cm-242.72c" awr="239.979" location="1" name="96242.72c" path="300K/Cm_242_300K.ace" temperature="2.585e-08" zaid="96242"/>
|
||||
|
|
@ -844,855 +844,9 @@
|
|||
<ace_table alias="Es-252.72c" awr="249.917" location="1" name="99252.72c" path="300K/Es_252_300K.ace" temperature="2.585e-08" zaid="99252"/>
|
||||
<ace_table alias="Es-253.72c" awr="250.911" location="1" name="99253.72c" path="300K/Es_253_300K.ace" temperature="2.585e-08" zaid="99253"/>
|
||||
<ace_table alias="Es-254.72c" awr="251.905" location="1" name="99254.72c" path="300K/Es_254_300K.ace" temperature="2.585e-08" zaid="99254"/>
|
||||
<ace_table alias="Es-259.72c" awr="251.905" location="1" name="99259.72c" path="300K/Es_254m1_300K.ace" temperature="2.585e-08" zaid="99259"/>
|
||||
<ace_table alias="Es-254m.72c" awr="251.905" location="1" metastable="1" name="99259.72c" path="300K/Es_254m1_300K.ace" temperature="2.585e-08" zaid="99259"/>
|
||||
<ace_table alias="Es-255.72c" awr="252.899" location="1" name="99255.72c" path="300K/Es_255_300K.ace" temperature="2.585e-08" zaid="99255"/>
|
||||
<ace_table alias="Fm-255.72c" awr="252.899" location="1" name="100255.72c" path="300K/Fm_255_300K.ace" temperature="2.585e-08" zaid="100255"/>
|
||||
<ace_table alias="H-1.73c" awr="0.999167" location="1" name="1001.73c" path="900K/H_001_900K.ace" temperature="7.756e-08" zaid="1001"/>
|
||||
<ace_table alias="H-2.73c" awr="1.9968" location="1" name="1002.73c" path="900K/H_002_900K.ace" temperature="7.756e-08" zaid="1002"/>
|
||||
<ace_table alias="H-3.73c" awr="2.989596" location="1" name="1003.73c" path="900K/H_003_900K.ace" temperature="7.756e-08" zaid="1003"/>
|
||||
<ace_table alias="He-3.73c" awr="2.989032" location="1" name="2003.73c" path="900K/He_003_900K.ace" temperature="7.756e-08" zaid="2003"/>
|
||||
<ace_table alias="He-4.73c" awr="3.968219" location="1" name="2004.73c" path="900K/He_004_900K.ace" temperature="7.756e-08" zaid="2004"/>
|
||||
<ace_table alias="Li-6.73c" awr="5.9634" location="1" name="3006.73c" path="900K/Li_006_900K.ace" temperature="7.756e-08" zaid="3006"/>
|
||||
<ace_table alias="Li-7.73c" awr="6.955732" location="1" name="3007.73c" path="900K/Li_007_900K.ace" temperature="7.756e-08" zaid="3007"/>
|
||||
<ace_table alias="Be-7.73c" awr="6.9545" location="1" name="4007.73c" path="900K/Be_007_900K.ace" temperature="7.756e-08" zaid="4007"/>
|
||||
<ace_table alias="Be-9.73c" awr="8.93478" location="1" name="4009.73c" path="900K/Be_009_900K.ace" temperature="7.756e-08" zaid="4009"/>
|
||||
<ace_table alias="B-10.73c" awr="9.926921" location="1" name="5010.73c" path="900K/B_010_900K.ace" temperature="7.756e-08" zaid="5010"/>
|
||||
<ace_table alias="B-11.73c" awr="10.9147" location="1" name="5011.73c" path="900K/B_011_900K.ace" temperature="7.756e-08" zaid="5011"/>
|
||||
<ace_table alias="C-Nat.73c" awr="11.898" location="1" name="6000.73c" path="900K/C_000_900K.ace" temperature="7.756e-08" zaid="6000"/>
|
||||
<ace_table alias="N-14.73c" awr="13.88278" location="1" name="7014.73c" path="900K/N_014_900K.ace" temperature="7.756e-08" zaid="7014"/>
|
||||
<ace_table alias="N-15.73c" awr="14.871" location="1" name="7015.73c" path="900K/N_015_900K.ace" temperature="7.756e-08" zaid="7015"/>
|
||||
<ace_table alias="O-16.73c" awr="15.85751" location="1" name="8016.73c" path="900K/O_016_900K.ace" temperature="7.756e-08" zaid="8016"/>
|
||||
<ace_table alias="O-17.73c" awr="16.8531" location="1" name="8017.73c" path="900K/O_017_900K.ace" temperature="7.756e-08" zaid="8017"/>
|
||||
<ace_table alias="F-19.73c" awr="18.835" location="1" name="9019.73c" path="900K/F_019_900K.ace" temperature="7.756e-08" zaid="9019"/>
|
||||
<ace_table alias="Na-22.73c" awr="21.8055" location="1" name="11022.73c" path="900K/Na_022_900K.ace" temperature="7.756e-08" zaid="11022"/>
|
||||
<ace_table alias="Na-23.73c" awr="22.792" location="1" name="11023.73c" path="900K/Na_023_900K.ace" temperature="7.756e-08" zaid="11023"/>
|
||||
<ace_table alias="Mg-24.73c" awr="23.779" location="1" name="12024.73c" path="900K/Mg_024_900K.ace" temperature="7.756e-08" zaid="12024"/>
|
||||
<ace_table alias="Mg-25.73c" awr="24.7712" location="1" name="12025.73c" path="900K/Mg_025_900K.ace" temperature="7.756e-08" zaid="12025"/>
|
||||
<ace_table alias="Mg-26.73c" awr="25.7594" location="1" name="12026.73c" path="900K/Mg_026_900K.ace" temperature="7.756e-08" zaid="12026"/>
|
||||
<ace_table alias="Al-27.73c" awr="26.74975" location="1" name="13027.73c" path="900K/Al_027_900K.ace" temperature="7.756e-08" zaid="13027"/>
|
||||
<ace_table alias="Si-28.73c" awr="27.737" location="1" name="14028.73c" path="900K/Si_028_900K.ace" temperature="7.756e-08" zaid="14028"/>
|
||||
<ace_table alias="Si-29.73c" awr="28.728" location="1" name="14029.73c" path="900K/Si_029_900K.ace" temperature="7.756e-08" zaid="14029"/>
|
||||
<ace_table alias="Si-30.73c" awr="29.716" location="1" name="14030.73c" path="900K/Si_030_900K.ace" temperature="7.756e-08" zaid="14030"/>
|
||||
<ace_table alias="P-31.73c" awr="30.708" location="1" name="15031.73c" path="900K/P_031_900K.ace" temperature="7.756e-08" zaid="15031"/>
|
||||
<ace_table alias="S-32.73c" awr="31.6973" location="1" name="16032.73c" path="900K/S_032_900K.ace" temperature="7.756e-08" zaid="16032"/>
|
||||
<ace_table alias="S-33.73c" awr="32.6878" location="1" name="16033.73c" path="900K/S_033_900K.ace" temperature="7.756e-08" zaid="16033"/>
|
||||
<ace_table alias="S-34.73c" awr="33.6762" location="1" name="16034.73c" path="900K/S_034_900K.ace" temperature="7.756e-08" zaid="16034"/>
|
||||
<ace_table alias="S-36.73c" awr="35.658" location="1" name="16036.73c" path="900K/S_036_900K.ace" temperature="7.756e-08" zaid="16036"/>
|
||||
<ace_table alias="Cl-35.73c" awr="34.66845" location="1" name="17035.73c" path="900K/Cl_035_900K.ace" temperature="7.756e-08" zaid="17035"/>
|
||||
<ace_table alias="Cl-37.73c" awr="36.6483" location="1" name="17037.73c" path="900K/Cl_037_900K.ace" temperature="7.756e-08" zaid="17037"/>
|
||||
<ace_table alias="Ar-36.73c" awr="35.6585" location="1" name="18036.73c" path="900K/Ar_036_900K.ace" temperature="7.756e-08" zaid="18036"/>
|
||||
<ace_table alias="Ar-38.73c" awr="37.6366" location="1" name="18038.73c" path="900K/Ar_038_900K.ace" temperature="7.756e-08" zaid="18038"/>
|
||||
<ace_table alias="Ar-40.73c" awr="39.6191" location="1" name="18040.73c" path="900K/Ar_040_900K.ace" temperature="7.756e-08" zaid="18040"/>
|
||||
<ace_table alias="K-39.73c" awr="38.6293" location="1" name="19039.73c" path="900K/K_039_900K.ace" temperature="7.756e-08" zaid="19039"/>
|
||||
<ace_table alias="K-40.73c" awr="39.6207" location="1" name="19040.73c" path="900K/K_040_900K.ace" temperature="7.756e-08" zaid="19040"/>
|
||||
<ace_table alias="K-41.73c" awr="40.6101" location="1" name="19041.73c" path="900K/K_041_900K.ace" temperature="7.756e-08" zaid="19041"/>
|
||||
<ace_table alias="Ca-40.73c" awr="39.6193" location="1" name="20040.73c" path="900K/Ca_040_900K.ace" temperature="7.756e-08" zaid="20040"/>
|
||||
<ace_table alias="Ca-42.73c" awr="41.59818" location="1" name="20042.73c" path="900K/Ca_042_900K.ace" temperature="7.756e-08" zaid="20042"/>
|
||||
<ace_table alias="Ca-43.73c" awr="42.58973" location="1" name="20043.73c" path="900K/Ca_043_900K.ace" temperature="7.756e-08" zaid="20043"/>
|
||||
<ace_table alias="Ca-44.73c" awr="43.57788" location="1" name="20044.73c" path="900K/Ca_044_900K.ace" temperature="7.756e-08" zaid="20044"/>
|
||||
<ace_table alias="Ca-46.73c" awr="45.55893" location="1" name="20046.73c" path="900K/Ca_046_900K.ace" temperature="7.756e-08" zaid="20046"/>
|
||||
<ace_table alias="Ca-48.73c" awr="47.5406" location="1" name="20048.73c" path="900K/Ca_048_900K.ace" temperature="7.756e-08" zaid="20048"/>
|
||||
<ace_table alias="Sc-45.73c" awr="44.5679" location="1" name="21045.73c" path="900K/Sc_045_900K.ace" temperature="7.756e-08" zaid="21045"/>
|
||||
<ace_table alias="Ti-46.73c" awr="45.5579" location="1" name="22046.73c" path="900K/Ti_046_900K.ace" temperature="7.756e-08" zaid="22046"/>
|
||||
<ace_table alias="Ti-47.73c" awr="46.5484" location="1" name="22047.73c" path="900K/Ti_047_900K.ace" temperature="7.756e-08" zaid="22047"/>
|
||||
<ace_table alias="Ti-48.73c" awr="47.5361" location="1" name="22048.73c" path="900K/Ti_048_900K.ace" temperature="7.756e-08" zaid="22048"/>
|
||||
<ace_table alias="Ti-49.73c" awr="48.5274" location="1" name="22049.73c" path="900K/Ti_049_900K.ace" temperature="7.756e-08" zaid="22049"/>
|
||||
<ace_table alias="Ti-50.73c" awr="49.5157" location="1" name="22050.73c" path="900K/Ti_050_900K.ace" temperature="7.756e-08" zaid="22050"/>
|
||||
<ace_table alias="V-50.73c" awr="49.5181" location="1" name="23050.73c" path="900K/V_050_900K.ace" temperature="7.756e-08" zaid="23050"/>
|
||||
<ace_table alias="V-51.73c" awr="50.5063" location="1" name="23051.73c" path="900K/V_051_900K.ace" temperature="7.756e-08" zaid="23051"/>
|
||||
<ace_table alias="Cr-50.73c" awr="49.517" location="1" name="24050.73c" path="900K/Cr_050_900K.ace" temperature="7.756e-08" zaid="24050"/>
|
||||
<ace_table alias="Cr-52.73c" awr="51.494" location="1" name="24052.73c" path="900K/Cr_052_900K.ace" temperature="7.756e-08" zaid="24052"/>
|
||||
<ace_table alias="Cr-53.73c" awr="52.486" location="1" name="24053.73c" path="900K/Cr_053_900K.ace" temperature="7.756e-08" zaid="24053"/>
|
||||
<ace_table alias="Cr-54.73c" awr="53.476" location="1" name="24054.73c" path="900K/Cr_054_900K.ace" temperature="7.756e-08" zaid="24054"/>
|
||||
<ace_table alias="Mn-55.73c" awr="54.4661" location="1" name="25055.73c" path="900K/Mn_055_900K.ace" temperature="7.756e-08" zaid="25055"/>
|
||||
<ace_table alias="Fe-54.73c" awr="53.476" location="1" name="26054.73c" path="900K/Fe_054_900K.ace" temperature="7.756e-08" zaid="26054"/>
|
||||
<ace_table alias="Fe-56.73c" awr="55.454" location="1" name="26056.73c" path="900K/Fe_056_900K.ace" temperature="7.756e-08" zaid="26056"/>
|
||||
<ace_table alias="Fe-57.73c" awr="56.446" location="1" name="26057.73c" path="900K/Fe_057_900K.ace" temperature="7.756e-08" zaid="26057"/>
|
||||
<ace_table alias="Fe-58.73c" awr="57.436" location="1" name="26058.73c" path="900K/Fe_058_900K.ace" temperature="7.756e-08" zaid="26058"/>
|
||||
<ace_table alias="Co-58.73c" awr="57.4381" location="1" name="27058.73c" path="900K/Co_058_900K.ace" temperature="7.756e-08" zaid="27058"/>
|
||||
<ace_table alias="Co-59.73c" awr="57.4381" location="1" name="27059.73c" path="900K/Co_058m1_900K.ace" temperature="7.756e-08" zaid="27059"/>
|
||||
<ace_table alias="Co-59.73c" awr="58.4269" location="1" name="27059.73c" path="900K/Co_059_900K.ace" temperature="7.756e-08" zaid="27059"/>
|
||||
<ace_table alias="Ni-58.73c" awr="57.438" location="1" name="28058.73c" path="900K/Ni_058_900K.ace" temperature="7.756e-08" zaid="28058"/>
|
||||
<ace_table alias="Ni-59.73c" awr="58.4281" location="1" name="28059.73c" path="900K/Ni_059_900K.ace" temperature="7.756e-08" zaid="28059"/>
|
||||
<ace_table alias="Ni-60.73c" awr="59.416" location="1" name="28060.73c" path="900K/Ni_060_900K.ace" temperature="7.756e-08" zaid="28060"/>
|
||||
<ace_table alias="Ni-61.73c" awr="60.408" location="1" name="28061.73c" path="900K/Ni_061_900K.ace" temperature="7.756e-08" zaid="28061"/>
|
||||
<ace_table alias="Ni-62.73c" awr="61.396" location="1" name="28062.73c" path="900K/Ni_062_900K.ace" temperature="7.756e-08" zaid="28062"/>
|
||||
<ace_table alias="Ni-64.73c" awr="63.379" location="1" name="28064.73c" path="900K/Ni_064_900K.ace" temperature="7.756e-08" zaid="28064"/>
|
||||
<ace_table alias="Cu-63.73c" awr="62.389" location="1" name="29063.73c" path="900K/Cu_063_900K.ace" temperature="7.756e-08" zaid="29063"/>
|
||||
<ace_table alias="Cu-65.73c" awr="64.37" location="1" name="29065.73c" path="900K/Cu_065_900K.ace" temperature="7.756e-08" zaid="29065"/>
|
||||
<ace_table alias="Zn-64.73c" awr="63.38" location="1" name="30064.73c" path="900K/Zn_064_900K.ace" temperature="7.756e-08" zaid="30064"/>
|
||||
<ace_table alias="Zn-65.73c" awr="64.3715" location="1" name="30065.73c" path="900K/Zn_065_900K.ace" temperature="7.756e-08" zaid="30065"/>
|
||||
<ace_table alias="Zn-66.73c" awr="65.3597" location="1" name="30066.73c" path="900K/Zn_066_900K.ace" temperature="7.756e-08" zaid="30066"/>
|
||||
<ace_table alias="Zn-67.73c" awr="66.3522" location="1" name="30067.73c" path="900K/Zn_067_900K.ace" temperature="7.756e-08" zaid="30067"/>
|
||||
<ace_table alias="Zn-68.73c" awr="67.3413" location="1" name="30068.73c" path="900K/Zn_068_900K.ace" temperature="7.756e-08" zaid="30068"/>
|
||||
<ace_table alias="Zn-70.73c" awr="69.3246" location="1" name="30070.73c" path="900K/Zn_070_900K.ace" temperature="7.756e-08" zaid="30070"/>
|
||||
<ace_table alias="Ga-69.73c" awr="68.3336" location="1" name="31069.73c" path="900K/Ga_069_900K.ace" temperature="7.756e-08" zaid="31069"/>
|
||||
<ace_table alias="Ga-71.73c" awr="70.315" location="1" name="31071.73c" path="900K/Ga_071_900K.ace" temperature="7.756e-08" zaid="31071"/>
|
||||
<ace_table alias="Ge-70.73c" awr="69.3236" location="1" name="32070.73c" path="900K/Ge_070_900K.ace" temperature="7.756e-08" zaid="32070"/>
|
||||
<ace_table alias="Ge-72.73c" awr="71.3042" location="1" name="32072.73c" path="900K/Ge_072_900K.ace" temperature="7.756e-08" zaid="32072"/>
|
||||
<ace_table alias="Ge-73.73c" awr="72.297" location="1" name="32073.73c" path="900K/Ge_073_900K.ace" temperature="7.756e-08" zaid="32073"/>
|
||||
<ace_table alias="Ge-74.73c" awr="73.2862" location="1" name="32074.73c" path="900K/Ge_074_900K.ace" temperature="7.756e-08" zaid="32074"/>
|
||||
<ace_table alias="Ge-76.73c" awr="75.2692" location="1" name="32076.73c" path="900K/Ge_076_900K.ace" temperature="7.756e-08" zaid="32076"/>
|
||||
<ace_table alias="As-74.73c" awr="73.2889" location="1" name="33074.73c" path="900K/As_074_900K.ace" temperature="7.756e-08" zaid="33074"/>
|
||||
<ace_table alias="As-75.73c" awr="74.278" location="1" name="33075.73c" path="900K/As_075_900K.ace" temperature="7.756e-08" zaid="33075"/>
|
||||
<ace_table alias="Se-74.73c" awr="73.2875" location="1" name="34074.73c" path="900K/Se_074_900K.ace" temperature="7.756e-08" zaid="34074"/>
|
||||
<ace_table alias="Se-76.73c" awr="75.267" location="1" name="34076.73c" path="900K/Se_076_900K.ace" temperature="7.756e-08" zaid="34076"/>
|
||||
<ace_table alias="Se-77.73c" awr="76.2591" location="1" name="34077.73c" path="900K/Se_077_900K.ace" temperature="7.756e-08" zaid="34077"/>
|
||||
<ace_table alias="Se-78.73c" awr="77.2479" location="1" name="34078.73c" path="900K/Se_078_900K.ace" temperature="7.756e-08" zaid="34078"/>
|
||||
<ace_table alias="Se-79.73c" awr="78.2405" location="1" name="34079.73c" path="900K/Se_079_900K.ace" temperature="7.756e-08" zaid="34079"/>
|
||||
<ace_table alias="Se-80.73c" awr="79.23" location="1" name="34080.73c" path="900K/Se_080_900K.ace" temperature="7.756e-08" zaid="34080"/>
|
||||
<ace_table alias="Se-82.73c" awr="81.213" location="1" name="34082.73c" path="900K/Se_082_900K.ace" temperature="7.756e-08" zaid="34082"/>
|
||||
<ace_table alias="Br-79.73c" awr="78.2403" location="1" name="35079.73c" path="900K/Br_079_900K.ace" temperature="7.756e-08" zaid="35079"/>
|
||||
<ace_table alias="Br-81.73c" awr="80.2212" location="1" name="35081.73c" path="900K/Br_081_900K.ace" temperature="7.756e-08" zaid="35081"/>
|
||||
<ace_table alias="Kr-78.73c" awr="77.25099" location="1" name="36078.73c" path="900K/Kr_078_900K.ace" temperature="7.756e-08" zaid="36078"/>
|
||||
<ace_table alias="Kr-80.73c" awr="79.2299" location="1" name="36080.73c" path="900K/Kr_080_900K.ace" temperature="7.756e-08" zaid="36080"/>
|
||||
<ace_table alias="Kr-82.73c" awr="81.2098" location="1" name="36082.73c" path="900K/Kr_082_900K.ace" temperature="7.756e-08" zaid="36082"/>
|
||||
<ace_table alias="Kr-83.73c" awr="82.202" location="1" name="36083.73c" path="900K/Kr_083_900K.ace" temperature="7.756e-08" zaid="36083"/>
|
||||
<ace_table alias="Kr-84.73c" awr="83.1907" location="1" name="36084.73c" path="900K/Kr_084_900K.ace" temperature="7.756e-08" zaid="36084"/>
|
||||
<ace_table alias="Kr-85.73c" awr="84.1831" location="1" name="36085.73c" path="900K/Kr_085_900K.ace" temperature="7.756e-08" zaid="36085"/>
|
||||
<ace_table alias="Kr-86.73c" awr="85.1726" location="1" name="36086.73c" path="900K/Kr_086_900K.ace" temperature="7.756e-08" zaid="36086"/>
|
||||
<ace_table alias="Rb-85.73c" awr="84.1824" location="1" name="37085.73c" path="900K/Rb_085_900K.ace" temperature="7.756e-08" zaid="37085"/>
|
||||
<ace_table alias="Rb-86.73c" awr="85.1731" location="1" name="37086.73c" path="900K/Rb_086_900K.ace" temperature="7.756e-08" zaid="37086"/>
|
||||
<ace_table alias="Rb-87.73c" awr="86.1626" location="1" name="37087.73c" path="900K/Rb_087_900K.ace" temperature="7.756e-08" zaid="37087"/>
|
||||
<ace_table alias="Sr-84.73c" awr="83.1926" location="1" name="38084.73c" path="900K/Sr_084_900K.ace" temperature="7.756e-08" zaid="38084"/>
|
||||
<ace_table alias="Sr-86.73c" awr="85.1713" location="1" name="38086.73c" path="900K/Sr_086_900K.ace" temperature="7.756e-08" zaid="38086"/>
|
||||
<ace_table alias="Sr-87.73c" awr="86.1623" location="1" name="38087.73c" path="900K/Sr_087_900K.ace" temperature="7.756e-08" zaid="38087"/>
|
||||
<ace_table alias="Sr-88.73c" awr="87.15" location="1" name="38088.73c" path="900K/Sr_088_900K.ace" temperature="7.756e-08" zaid="38088"/>
|
||||
<ace_table alias="Sr-89.73c" awr="88.144" location="1" name="38089.73c" path="900K/Sr_089_900K.ace" temperature="7.756e-08" zaid="38089"/>
|
||||
<ace_table alias="Sr-90.73c" awr="89.1353" location="1" name="38090.73c" path="900K/Sr_090_900K.ace" temperature="7.756e-08" zaid="38090"/>
|
||||
<ace_table alias="Y-89.73c" awr="88.1421" location="1" name="39089.73c" path="900K/Y_089_900K.ace" temperature="7.756e-08" zaid="39089"/>
|
||||
<ace_table alias="Y-90.73c" awr="89.1348" location="1" name="39090.73c" path="900K/Y_090_900K.ace" temperature="7.756e-08" zaid="39090"/>
|
||||
<ace_table alias="Y-91.73c" awr="90.1264" location="1" name="39091.73c" path="900K/Y_091_900K.ace" temperature="7.756e-08" zaid="39091"/>
|
||||
<ace_table alias="Zr-90.73c" awr="89.1324" location="1" name="40090.73c" path="900K/Zr_090_900K.ace" temperature="7.756e-08" zaid="40090"/>
|
||||
<ace_table alias="Zr-91.73c" awr="90.1247" location="1" name="40091.73c" path="900K/Zr_091_900K.ace" temperature="7.756e-08" zaid="40091"/>
|
||||
<ace_table alias="Zr-92.73c" awr="91.1155" location="1" name="40092.73c" path="900K/Zr_092_900K.ace" temperature="7.756e-08" zaid="40092"/>
|
||||
<ace_table alias="Zr-93.73c" awr="92.1084" location="1" name="40093.73c" path="900K/Zr_093_900K.ace" temperature="7.756e-08" zaid="40093"/>
|
||||
<ace_table alias="Zr-94.73c" awr="93.0996" location="1" name="40094.73c" path="900K/Zr_094_900K.ace" temperature="7.756e-08" zaid="40094"/>
|
||||
<ace_table alias="Zr-95.73c" awr="94.0927" location="1" name="40095.73c" path="900K/Zr_095_900K.ace" temperature="7.756e-08" zaid="40095"/>
|
||||
<ace_table alias="Zr-96.73c" awr="95.0844" location="1" name="40096.73c" path="900K/Zr_096_900K.ace" temperature="7.756e-08" zaid="40096"/>
|
||||
<ace_table alias="Nb-93.73c" awr="92.1051" location="1" name="41093.73c" path="900K/Nb_093_900K.ace" temperature="7.756e-08" zaid="41093"/>
|
||||
<ace_table alias="Nb-94.73c" awr="93.1006" location="1" name="41094.73c" path="900K/Nb_094_900K.ace" temperature="7.756e-08" zaid="41094"/>
|
||||
<ace_table alias="Nb-95.73c" awr="94.0915" location="1" name="41095.73c" path="900K/Nb_095_900K.ace" temperature="7.756e-08" zaid="41095"/>
|
||||
<ace_table alias="Mo-92.73c" awr="91.1173" location="1" name="42092.73c" path="900K/Mo_092_900K.ace" temperature="7.756e-08" zaid="42092"/>
|
||||
<ace_table alias="Mo-94.73c" awr="93.0984" location="1" name="42094.73c" path="900K/Mo_094_900K.ace" temperature="7.756e-08" zaid="42094"/>
|
||||
<ace_table alias="Mo-95.73c" awr="94.0906" location="1" name="42095.73c" path="900K/Mo_095_900K.ace" temperature="7.756e-08" zaid="42095"/>
|
||||
<ace_table alias="Mo-96.73c" awr="95.0808" location="1" name="42096.73c" path="900K/Mo_096_900K.ace" temperature="7.756e-08" zaid="42096"/>
|
||||
<ace_table alias="Mo-97.73c" awr="96.0735" location="1" name="42097.73c" path="900K/Mo_097_900K.ace" temperature="7.756e-08" zaid="42097"/>
|
||||
<ace_table alias="Mo-98.73c" awr="97.0643" location="1" name="42098.73c" path="900K/Mo_098_900K.ace" temperature="7.756e-08" zaid="42098"/>
|
||||
<ace_table alias="Mo-99.73c" awr="98.058" location="1" name="42099.73c" path="900K/Mo_099_900K.ace" temperature="7.756e-08" zaid="42099"/>
|
||||
<ace_table alias="Mo-100.73c" awr="99.049" location="1" name="42100.73c" path="900K/Mo_100_900K.ace" temperature="7.756e-08" zaid="42100"/>
|
||||
<ace_table alias="Tc-99.73c" awr="98.0566" location="1" name="43099.73c" path="900K/Tc_099_900K.ace" temperature="7.756e-08" zaid="43099"/>
|
||||
<ace_table alias="Ru-96.73c" awr="95.0837" location="1" name="44096.73c" path="900K/Ru_096_900K.ace" temperature="7.756e-08" zaid="44096"/>
|
||||
<ace_table alias="Ru-98.73c" awr="97.0642" location="1" name="44098.73c" path="900K/Ru_098_900K.ace" temperature="7.756e-08" zaid="44098"/>
|
||||
<ace_table alias="Ru-99.73c" awr="98.0562" location="1" name="44099.73c" path="900K/Ru_099_900K.ace" temperature="7.756e-08" zaid="44099"/>
|
||||
<ace_table alias="Ru-100.73c" awr="99.046" location="1" name="44100.73c" path="900K/Ru_100_900K.ace" temperature="7.756e-08" zaid="44100"/>
|
||||
<ace_table alias="Ru-101.73c" awr="100.039" location="1" name="44101.73c" path="900K/Ru_101_900K.ace" temperature="7.756e-08" zaid="44101"/>
|
||||
<ace_table alias="Ru-102.73c" awr="101.03" location="1" name="44102.73c" path="900K/Ru_102_900K.ace" temperature="7.756e-08" zaid="44102"/>
|
||||
<ace_table alias="Ru-103.73c" awr="102.02" location="1" name="44103.73c" path="900K/Ru_103_900K.ace" temperature="7.756e-08" zaid="44103"/>
|
||||
<ace_table alias="Ru-104.73c" awr="103.01" location="1" name="44104.73c" path="900K/Ru_104_900K.ace" temperature="7.756e-08" zaid="44104"/>
|
||||
<ace_table alias="Ru-105.73c" awr="104.01" location="1" name="44105.73c" path="900K/Ru_105_900K.ace" temperature="7.756e-08" zaid="44105"/>
|
||||
<ace_table alias="Ru-106.73c" awr="104.997" location="1" name="44106.73c" path="900K/Ru_106_900K.ace" temperature="7.756e-08" zaid="44106"/>
|
||||
<ace_table alias="Rh-103.73c" awr="102.021" location="1" name="45103.73c" path="900K/Rh_103_900K.ace" temperature="7.756e-08" zaid="45103"/>
|
||||
<ace_table alias="Rh-105.73c" awr="104.0" location="1" name="45105.73c" path="900K/Rh_105_900K.ace" temperature="7.756e-08" zaid="45105"/>
|
||||
<ace_table alias="Pd-102.73c" awr="101.0302" location="1" name="46102.73c" path="900K/Pd_102_900K.ace" temperature="7.756e-08" zaid="46102"/>
|
||||
<ace_table alias="Pd-104.73c" awr="103.0114" location="1" name="46104.73c" path="900K/Pd_104_900K.ace" temperature="7.756e-08" zaid="46104"/>
|
||||
<ace_table alias="Pd-105.73c" awr="104.004" location="1" name="46105.73c" path="900K/Pd_105_900K.ace" temperature="7.756e-08" zaid="46105"/>
|
||||
<ace_table alias="Pd-106.73c" awr="104.9937" location="1" name="46106.73c" path="900K/Pd_106_900K.ace" temperature="7.756e-08" zaid="46106"/>
|
||||
<ace_table alias="Pd-107.73c" awr="105.987" location="1" name="46107.73c" path="900K/Pd_107_900K.ace" temperature="7.756e-08" zaid="46107"/>
|
||||
<ace_table alias="Pd-108.73c" awr="106.9769" location="1" name="46108.73c" path="900K/Pd_108_900K.ace" temperature="7.756e-08" zaid="46108"/>
|
||||
<ace_table alias="Pd-110.73c" awr="108.961" location="1" name="46110.73c" path="900K/Pd_110_900K.ace" temperature="7.756e-08" zaid="46110"/>
|
||||
<ace_table alias="Ag-107.73c" awr="105.987" location="1" name="47107.73c" path="900K/Ag_107_900K.ace" temperature="7.756e-08" zaid="47107"/>
|
||||
<ace_table alias="Ag-109.73c" awr="107.969" location="1" name="47109.73c" path="900K/Ag_109_900K.ace" temperature="7.756e-08" zaid="47109"/>
|
||||
<ace_table alias="Ag-119.73c" awr="108.962" location="1" name="47119.73c" path="900K/Ag_110m1_900K.ace" temperature="7.756e-08" zaid="47119"/>
|
||||
<ace_table alias="Ag-111.73c" awr="109.953" location="1" name="47111.73c" path="900K/Ag_111_900K.ace" temperature="7.756e-08" zaid="47111"/>
|
||||
<ace_table alias="Cd-106.73c" awr="104.996" location="1" name="48106.73c" path="900K/Cd_106_900K.ace" temperature="7.756e-08" zaid="48106"/>
|
||||
<ace_table alias="Cd-108.73c" awr="106.977" location="1" name="48108.73c" path="900K/Cd_108_900K.ace" temperature="7.756e-08" zaid="48108"/>
|
||||
<ace_table alias="Cd-110.73c" awr="108.959" location="1" name="48110.73c" path="900K/Cd_110_900K.ace" temperature="7.756e-08" zaid="48110"/>
|
||||
<ace_table alias="Cd-111.73c" awr="109.951" location="1" name="48111.73c" path="900K/Cd_111_900K.ace" temperature="7.756e-08" zaid="48111"/>
|
||||
<ace_table alias="Cd-112.73c" awr="110.942" location="1" name="48112.73c" path="900K/Cd_112_900K.ace" temperature="7.756e-08" zaid="48112"/>
|
||||
<ace_table alias="Cd-113.73c" awr="111.93" location="1" name="48113.73c" path="900K/Cd_113_900K.ace" temperature="7.756e-08" zaid="48113"/>
|
||||
<ace_table alias="Cd-114.73c" awr="112.925" location="1" name="48114.73c" path="900K/Cd_114_900K.ace" temperature="7.756e-08" zaid="48114"/>
|
||||
<ace_table alias="Cd-119.73c" awr="113.918" location="1" name="48119.73c" path="900K/Cd_115m1_900K.ace" temperature="7.756e-08" zaid="48119"/>
|
||||
<ace_table alias="Cd-116.73c" awr="114.909" location="1" name="48116.73c" path="900K/Cd_116_900K.ace" temperature="7.756e-08" zaid="48116"/>
|
||||
<ace_table alias="In-113.73c" awr="111.934" location="1" name="49113.73c" path="900K/In_113_900K.ace" temperature="7.756e-08" zaid="49113"/>
|
||||
<ace_table alias="In-115.73c" awr="113.917" location="1" name="49115.73c" path="900K/In_115_900K.ace" temperature="7.756e-08" zaid="49115"/>
|
||||
<ace_table alias="Sn-112.73c" awr="110.944" location="1" name="50112.73c" path="900K/Sn_112_900K.ace" temperature="7.756e-08" zaid="50112"/>
|
||||
<ace_table alias="Sn-113.73c" awr="111.935" location="1" name="50113.73c" path="900K/Sn_113_900K.ace" temperature="7.756e-08" zaid="50113"/>
|
||||
<ace_table alias="Sn-114.73c" awr="112.925" location="1" name="50114.73c" path="900K/Sn_114_900K.ace" temperature="7.756e-08" zaid="50114"/>
|
||||
<ace_table alias="Sn-115.73c" awr="113.916" location="1" name="50115.73c" path="900K/Sn_115_900K.ace" temperature="7.756e-08" zaid="50115"/>
|
||||
<ace_table alias="Sn-116.73c" awr="114.906" location="1" name="50116.73c" path="900K/Sn_116_900K.ace" temperature="7.756e-08" zaid="50116"/>
|
||||
<ace_table alias="Sn-117.73c" awr="115.899" location="1" name="50117.73c" path="900K/Sn_117_900K.ace" temperature="7.756e-08" zaid="50117"/>
|
||||
<ace_table alias="Sn-118.73c" awr="116.889" location="1" name="50118.73c" path="900K/Sn_118_900K.ace" temperature="7.756e-08" zaid="50118"/>
|
||||
<ace_table alias="Sn-119.73c" awr="117.882" location="1" name="50119.73c" path="900K/Sn_119_900K.ace" temperature="7.756e-08" zaid="50119"/>
|
||||
<ace_table alias="Sn-120.73c" awr="118.872" location="1" name="50120.73c" path="900K/Sn_120_900K.ace" temperature="7.756e-08" zaid="50120"/>
|
||||
<ace_table alias="Sn-122.73c" awr="120.856" location="1" name="50122.73c" path="900K/Sn_122_900K.ace" temperature="7.756e-08" zaid="50122"/>
|
||||
<ace_table alias="Sn-123.73c" awr="121.85" location="1" name="50123.73c" path="900K/Sn_123_900K.ace" temperature="7.756e-08" zaid="50123"/>
|
||||
<ace_table alias="Sn-124.73c" awr="122.841" location="1" name="50124.73c" path="900K/Sn_124_900K.ace" temperature="7.756e-08" zaid="50124"/>
|
||||
<ace_table alias="Sn-125.73c" awr="123.835" location="1" name="50125.73c" path="900K/Sn_125_900K.ace" temperature="7.756e-08" zaid="50125"/>
|
||||
<ace_table alias="Sn-126.73c" awr="124.826" location="1" name="50126.73c" path="900K/Sn_126_900K.ace" temperature="7.756e-08" zaid="50126"/>
|
||||
<ace_table alias="Sb-121.73c" awr="119.87" location="1" name="51121.73c" path="900K/Sb_121_900K.ace" temperature="7.756e-08" zaid="51121"/>
|
||||
<ace_table alias="Sb-123.73c" awr="121.85" location="1" name="51123.73c" path="900K/Sb_123_900K.ace" temperature="7.756e-08" zaid="51123"/>
|
||||
<ace_table alias="Sb-124.73c" awr="122.842" location="1" name="51124.73c" path="900K/Sb_124_900K.ace" temperature="7.756e-08" zaid="51124"/>
|
||||
<ace_table alias="Sb-125.73c" awr="123.832" location="1" name="51125.73c" path="900K/Sb_125_900K.ace" temperature="7.756e-08" zaid="51125"/>
|
||||
<ace_table alias="Sb-126.73c" awr="124.826" location="1" name="51126.73c" path="900K/Sb_126_900K.ace" temperature="7.756e-08" zaid="51126"/>
|
||||
<ace_table alias="Te-120.73c" awr="118.874" location="1" name="52120.73c" path="900K/Te_120_900K.ace" temperature="7.756e-08" zaid="52120"/>
|
||||
<ace_table alias="Te-122.73c" awr="120.856" location="1" name="52122.73c" path="900K/Te_122_900K.ace" temperature="7.756e-08" zaid="52122"/>
|
||||
<ace_table alias="Te-123.73c" awr="121.848" location="1" name="52123.73c" path="900K/Te_123_900K.ace" temperature="7.756e-08" zaid="52123"/>
|
||||
<ace_table alias="Te-124.73c" awr="122.839" location="1" name="52124.73c" path="900K/Te_124_900K.ace" temperature="7.756e-08" zaid="52124"/>
|
||||
<ace_table alias="Te-125.73c" awr="123.831" location="1" name="52125.73c" path="900K/Te_125_900K.ace" temperature="7.756e-08" zaid="52125"/>
|
||||
<ace_table alias="Te-126.73c" awr="124.821" location="1" name="52126.73c" path="900K/Te_126_900K.ace" temperature="7.756e-08" zaid="52126"/>
|
||||
<ace_table alias="Te-129.73c" awr="125.815" location="1" name="52129.73c" path="900K/Te_127m1_900K.ace" temperature="7.756e-08" zaid="52129"/>
|
||||
<ace_table alias="Te-128.73c" awr="126.805" location="1" name="52128.73c" path="900K/Te_128_900K.ace" temperature="7.756e-08" zaid="52128"/>
|
||||
<ace_table alias="Te-129.73c" awr="127.8" location="1" name="52129.73c" path="900K/Te_129m1_900K.ace" temperature="7.756e-08" zaid="52129"/>
|
||||
<ace_table alias="Te-130.73c" awr="128.79" location="1" name="52130.73c" path="900K/Te_130_900K.ace" temperature="7.756e-08" zaid="52130"/>
|
||||
<ace_table alias="Te-132.73c" awr="130.775" location="1" name="52132.73c" path="900K/Te_132_900K.ace" temperature="7.756e-08" zaid="52132"/>
|
||||
<ace_table alias="I-127.73c" awr="125.8143" location="1" name="53127.73c" path="900K/I_127_900K.ace" temperature="7.756e-08" zaid="53127"/>
|
||||
<ace_table alias="I-129.73c" awr="127.798" location="1" name="53129.73c" path="900K/I_129_900K.ace" temperature="7.756e-08" zaid="53129"/>
|
||||
<ace_table alias="I-130.73c" awr="128.791" location="1" name="53130.73c" path="900K/I_130_900K.ace" temperature="7.756e-08" zaid="53130"/>
|
||||
<ace_table alias="I-131.73c" awr="129.781" location="1" name="53131.73c" path="900K/I_131_900K.ace" temperature="7.756e-08" zaid="53131"/>
|
||||
<ace_table alias="I-135.73c" awr="133.75" location="1" name="53135.73c" path="900K/I_135_900K.ace" temperature="7.756e-08" zaid="53135"/>
|
||||
<ace_table alias="Xe-123.73c" awr="121.8526" location="1" name="54123.73c" path="900K/Xe_123_900K.ace" temperature="7.756e-08" zaid="54123"/>
|
||||
<ace_table alias="Xe-124.73c" awr="122.8415" location="1" name="54124.73c" path="900K/Xe_124_900K.ace" temperature="7.756e-08" zaid="54124"/>
|
||||
<ace_table alias="Xe-126.73c" awr="124.822" location="1" name="54126.73c" path="900K/Xe_126_900K.ace" temperature="7.756e-08" zaid="54126"/>
|
||||
<ace_table alias="Xe-128.73c" awr="126.804" location="1" name="54128.73c" path="900K/Xe_128_900K.ace" temperature="7.756e-08" zaid="54128"/>
|
||||
<ace_table alias="Xe-129.73c" awr="127.798" location="1" name="54129.73c" path="900K/Xe_129_900K.ace" temperature="7.756e-08" zaid="54129"/>
|
||||
<ace_table alias="Xe-130.73c" awr="128.788" location="1" name="54130.73c" path="900K/Xe_130_900K.ace" temperature="7.756e-08" zaid="54130"/>
|
||||
<ace_table alias="Xe-131.73c" awr="129.781" location="1" name="54131.73c" path="900K/Xe_131_900K.ace" temperature="7.756e-08" zaid="54131"/>
|
||||
<ace_table alias="Xe-132.73c" awr="130.77" location="1" name="54132.73c" path="900K/Xe_132_900K.ace" temperature="7.756e-08" zaid="54132"/>
|
||||
<ace_table alias="Xe-133.73c" awr="131.764" location="1" name="54133.73c" path="900K/Xe_133_900K.ace" temperature="7.756e-08" zaid="54133"/>
|
||||
<ace_table alias="Xe-134.73c" awr="132.76" location="1" name="54134.73c" path="900K/Xe_134_900K.ace" temperature="7.756e-08" zaid="54134"/>
|
||||
<ace_table alias="Xe-135.73c" awr="133.748" location="1" name="54135.73c" path="900K/Xe_135_900K.ace" temperature="7.756e-08" zaid="54135"/>
|
||||
<ace_table alias="Xe-136.73c" awr="134.74" location="1" name="54136.73c" path="900K/Xe_136_900K.ace" temperature="7.756e-08" zaid="54136"/>
|
||||
<ace_table alias="Cs-133.73c" awr="131.764" location="1" name="55133.73c" path="900K/Cs_133_900K.ace" temperature="7.756e-08" zaid="55133"/>
|
||||
<ace_table alias="Cs-134.73c" awr="132.757" location="1" name="55134.73c" path="900K/Cs_134_900K.ace" temperature="7.756e-08" zaid="55134"/>
|
||||
<ace_table alias="Cs-135.73c" awr="133.747" location="1" name="55135.73c" path="900K/Cs_135_900K.ace" temperature="7.756e-08" zaid="55135"/>
|
||||
<ace_table alias="Cs-136.73c" awr="134.739" location="1" name="55136.73c" path="900K/Cs_136_900K.ace" temperature="7.756e-08" zaid="55136"/>
|
||||
<ace_table alias="Cs-137.73c" awr="135.731" location="1" name="55137.73c" path="900K/Cs_137_900K.ace" temperature="7.756e-08" zaid="55137"/>
|
||||
<ace_table alias="Ba-130.73c" awr="128.79" location="1" name="56130.73c" path="900K/Ba_130_900K.ace" temperature="7.756e-08" zaid="56130"/>
|
||||
<ace_table alias="Ba-132.73c" awr="130.772" location="1" name="56132.73c" path="900K/Ba_132_900K.ace" temperature="7.756e-08" zaid="56132"/>
|
||||
<ace_table alias="Ba-133.73c" awr="131.764" location="1" name="56133.73c" path="900K/Ba_133_900K.ace" temperature="7.756e-08" zaid="56133"/>
|
||||
<ace_table alias="Ba-134.73c" awr="132.754" location="1" name="56134.73c" path="900K/Ba_134_900K.ace" temperature="7.756e-08" zaid="56134"/>
|
||||
<ace_table alias="Ba-135.73c" awr="133.747" location="1" name="56135.73c" path="900K/Ba_135_900K.ace" temperature="7.756e-08" zaid="56135"/>
|
||||
<ace_table alias="Ba-136.73c" awr="134.737" location="1" name="56136.73c" path="900K/Ba_136_900K.ace" temperature="7.756e-08" zaid="56136"/>
|
||||
<ace_table alias="Ba-137.73c" awr="135.73" location="1" name="56137.73c" path="900K/Ba_137_900K.ace" temperature="7.756e-08" zaid="56137"/>
|
||||
<ace_table alias="Ba-138.73c" awr="136.72" location="1" name="56138.73c" path="900K/Ba_138_900K.ace" temperature="7.756e-08" zaid="56138"/>
|
||||
<ace_table alias="Ba-140.73c" awr="138.708" location="1" name="56140.73c" path="900K/Ba_140_900K.ace" temperature="7.756e-08" zaid="56140"/>
|
||||
<ace_table alias="La-138.73c" awr="136.722" location="1" name="57138.73c" path="900K/La_138_900K.ace" temperature="7.756e-08" zaid="57138"/>
|
||||
<ace_table alias="La-139.73c" awr="137.71" location="1" name="57139.73c" path="900K/La_139_900K.ace" temperature="7.756e-08" zaid="57139"/>
|
||||
<ace_table alias="La-140.73c" awr="138.708" location="1" name="57140.73c" path="900K/La_140_900K.ace" temperature="7.756e-08" zaid="57140"/>
|
||||
<ace_table alias="Ce-136.73c" awr="134.74" location="1" name="58136.73c" path="900K/Ce_136_900K.ace" temperature="7.756e-08" zaid="58136"/>
|
||||
<ace_table alias="Ce-138.73c" awr="136.721" location="1" name="58138.73c" path="900K/Ce_138_900K.ace" temperature="7.756e-08" zaid="58138"/>
|
||||
<ace_table alias="Ce-139.73c" awr="137.713" location="1" name="58139.73c" path="900K/Ce_139_900K.ace" temperature="7.756e-08" zaid="58139"/>
|
||||
<ace_table alias="Ce-140.73c" awr="138.704" location="1" name="58140.73c" path="900K/Ce_140_900K.ace" temperature="7.756e-08" zaid="58140"/>
|
||||
<ace_table alias="Ce-141.73c" awr="139.7" location="1" name="58141.73c" path="900K/Ce_141_900K.ace" temperature="7.756e-08" zaid="58141"/>
|
||||
<ace_table alias="Ce-142.73c" awr="140.69" location="1" name="58142.73c" path="900K/Ce_142_900K.ace" temperature="7.756e-08" zaid="58142"/>
|
||||
<ace_table alias="Ce-143.73c" awr="141.685" location="1" name="58143.73c" path="900K/Ce_143_900K.ace" temperature="7.756e-08" zaid="58143"/>
|
||||
<ace_table alias="Ce-144.73c" awr="142.678" location="1" name="58144.73c" path="900K/Ce_144_900K.ace" temperature="7.756e-08" zaid="58144"/>
|
||||
<ace_table alias="Pr-141.73c" awr="139.697" location="1" name="59141.73c" path="900K/Pr_141_900K.ace" temperature="7.756e-08" zaid="59141"/>
|
||||
<ace_table alias="Pr-142.73c" awr="140.691" location="1" name="59142.73c" path="900K/Pr_142_900K.ace" temperature="7.756e-08" zaid="59142"/>
|
||||
<ace_table alias="Pr-143.73c" awr="141.683" location="1" name="59143.73c" path="900K/Pr_143_900K.ace" temperature="7.756e-08" zaid="59143"/>
|
||||
<ace_table alias="Nd-142.73c" awr="140.689" location="1" name="60142.73c" path="900K/Nd_142_900K.ace" temperature="7.756e-08" zaid="60142"/>
|
||||
<ace_table alias="Nd-143.73c" awr="141.682" location="1" name="60143.73c" path="900K/Nd_143_900K.ace" temperature="7.756e-08" zaid="60143"/>
|
||||
<ace_table alias="Nd-144.73c" awr="142.674" location="1" name="60144.73c" path="900K/Nd_144_900K.ace" temperature="7.756e-08" zaid="60144"/>
|
||||
<ace_table alias="Nd-145.73c" awr="143.668" location="1" name="60145.73c" path="900K/Nd_145_900K.ace" temperature="7.756e-08" zaid="60145"/>
|
||||
<ace_table alias="Nd-146.73c" awr="144.66" location="1" name="60146.73c" path="900K/Nd_146_900K.ace" temperature="7.756e-08" zaid="60146"/>
|
||||
<ace_table alias="Nd-147.73c" awr="145.654" location="1" name="60147.73c" path="900K/Nd_147_900K.ace" temperature="7.756e-08" zaid="60147"/>
|
||||
<ace_table alias="Nd-148.73c" awr="146.646" location="1" name="60148.73c" path="900K/Nd_148_900K.ace" temperature="7.756e-08" zaid="60148"/>
|
||||
<ace_table alias="Nd-150.73c" awr="148.633" location="1" name="60150.73c" path="900K/Nd_150_900K.ace" temperature="7.756e-08" zaid="60150"/>
|
||||
<ace_table alias="Pm-147.73c" awr="145.653" location="1" name="61147.73c" path="900K/Pm_147_900K.ace" temperature="7.756e-08" zaid="61147"/>
|
||||
<ace_table alias="Pm-148.73c" awr="146.646" location="1" name="61148.73c" path="900K/Pm_148_900K.ace" temperature="7.756e-08" zaid="61148"/>
|
||||
<ace_table alias="Pm-149.73c" awr="146.65" location="1" name="61149.73c" path="900K/Pm_148m1_900K.ace" temperature="7.756e-08" zaid="61149"/>
|
||||
<ace_table alias="Pm-149.73c" awr="147.639" location="1" name="61149.73c" path="900K/Pm_149_900K.ace" temperature="7.756e-08" zaid="61149"/>
|
||||
<ace_table alias="Pm-151.73c" awr="149.625" location="1" name="61151.73c" path="900K/Pm_151_900K.ace" temperature="7.756e-08" zaid="61151"/>
|
||||
<ace_table alias="Sm-144.73c" awr="142.676" location="1" name="62144.73c" path="900K/Sm_144_900K.ace" temperature="7.756e-08" zaid="62144"/>
|
||||
<ace_table alias="Sm-147.73c" awr="145.653" location="1" name="62147.73c" path="900K/Sm_147_900K.ace" temperature="7.756e-08" zaid="62147"/>
|
||||
<ace_table alias="Sm-148.73c" awr="146.644" location="1" name="62148.73c" path="900K/Sm_148_900K.ace" temperature="7.756e-08" zaid="62148"/>
|
||||
<ace_table alias="Sm-149.73c" awr="147.638" location="1" name="62149.73c" path="900K/Sm_149_900K.ace" temperature="7.756e-08" zaid="62149"/>
|
||||
<ace_table alias="Sm-150.73c" awr="148.629" location="1" name="62150.73c" path="900K/Sm_150_900K.ace" temperature="7.756e-08" zaid="62150"/>
|
||||
<ace_table alias="Sm-151.73c" awr="149.623" location="1" name="62151.73c" path="900K/Sm_151_900K.ace" temperature="7.756e-08" zaid="62151"/>
|
||||
<ace_table alias="Sm-152.73c" awr="150.615" location="1" name="62152.73c" path="900K/Sm_152_900K.ace" temperature="7.756e-08" zaid="62152"/>
|
||||
<ace_table alias="Sm-153.73c" awr="151.608" location="1" name="62153.73c" path="900K/Sm_153_900K.ace" temperature="7.756e-08" zaid="62153"/>
|
||||
<ace_table alias="Sm-154.73c" awr="152.6" location="1" name="62154.73c" path="900K/Sm_154_900K.ace" temperature="7.756e-08" zaid="62154"/>
|
||||
<ace_table alias="Eu-151.73c" awr="149.62" location="1" name="63151.73c" path="900K/Eu_151_900K.ace" temperature="7.756e-08" zaid="63151"/>
|
||||
<ace_table alias="Eu-152.73c" awr="150.617" location="1" name="63152.73c" path="900K/Eu_152_900K.ace" temperature="7.756e-08" zaid="63152"/>
|
||||
<ace_table alias="Eu-153.73c" awr="151.608" location="1" name="63153.73c" path="900K/Eu_153_900K.ace" temperature="7.756e-08" zaid="63153"/>
|
||||
<ace_table alias="Eu-154.73c" awr="152.6" location="1" name="63154.73c" path="900K/Eu_154_900K.ace" temperature="7.756e-08" zaid="63154"/>
|
||||
<ace_table alias="Eu-155.73c" awr="153.59" location="1" name="63155.73c" path="900K/Eu_155_900K.ace" temperature="7.756e-08" zaid="63155"/>
|
||||
<ace_table alias="Eu-156.73c" awr="154.586" location="1" name="63156.73c" path="900K/Eu_156_900K.ace" temperature="7.756e-08" zaid="63156"/>
|
||||
<ace_table alias="Eu-157.73c" awr="155.577" location="1" name="63157.73c" path="900K/Eu_157_900K.ace" temperature="7.756e-08" zaid="63157"/>
|
||||
<ace_table alias="Gd-152.73c" awr="150.615" location="1" name="64152.73c" path="900K/Gd_152_900K.ace" temperature="7.756e-08" zaid="64152"/>
|
||||
<ace_table alias="Gd-153.73c" awr="151.608" location="1" name="64153.73c" path="900K/Gd_153_900K.ace" temperature="7.756e-08" zaid="64153"/>
|
||||
<ace_table alias="Gd-154.73c" awr="152.599" location="1" name="64154.73c" path="900K/Gd_154_900K.ace" temperature="7.756e-08" zaid="64154"/>
|
||||
<ace_table alias="Gd-155.73c" awr="153.592" location="1" name="64155.73c" path="900K/Gd_155_900K.ace" temperature="7.756e-08" zaid="64155"/>
|
||||
<ace_table alias="Gd-156.73c" awr="154.583" location="1" name="64156.73c" path="900K/Gd_156_900K.ace" temperature="7.756e-08" zaid="64156"/>
|
||||
<ace_table alias="Gd-157.73c" awr="155.576" location="1" name="64157.73c" path="900K/Gd_157_900K.ace" temperature="7.756e-08" zaid="64157"/>
|
||||
<ace_table alias="Gd-158.73c" awr="156.567" location="1" name="64158.73c" path="900K/Gd_158_900K.ace" temperature="7.756e-08" zaid="64158"/>
|
||||
<ace_table alias="Gd-160.73c" awr="158.553" location="1" name="64160.73c" path="900K/Gd_160_900K.ace" temperature="7.756e-08" zaid="64160"/>
|
||||
<ace_table alias="Tb-159.73c" awr="157.56" location="1" name="65159.73c" path="900K/Tb_159_900K.ace" temperature="7.756e-08" zaid="65159"/>
|
||||
<ace_table alias="Tb-160.73c" awr="158.553" location="1" name="65160.73c" path="900K/Tb_160_900K.ace" temperature="7.756e-08" zaid="65160"/>
|
||||
<ace_table alias="Dy-156.73c" awr="154.585" location="1" name="66156.73c" path="900K/Dy_156_900K.ace" temperature="7.756e-08" zaid="66156"/>
|
||||
<ace_table alias="Dy-158.73c" awr="156.568" location="1" name="66158.73c" path="900K/Dy_158_900K.ace" temperature="7.756e-08" zaid="66158"/>
|
||||
<ace_table alias="Dy-160.73c" awr="158.551" location="1" name="66160.73c" path="900K/Dy_160_900K.ace" temperature="7.756e-08" zaid="66160"/>
|
||||
<ace_table alias="Dy-161.73c" awr="159.544" location="1" name="66161.73c" path="900K/Dy_161_900K.ace" temperature="7.756e-08" zaid="66161"/>
|
||||
<ace_table alias="Dy-162.73c" awr="160.536" location="1" name="66162.73c" path="900K/Dy_162_900K.ace" temperature="7.756e-08" zaid="66162"/>
|
||||
<ace_table alias="Dy-163.73c" awr="161.529" location="1" name="66163.73c" path="900K/Dy_163_900K.ace" temperature="7.756e-08" zaid="66163"/>
|
||||
<ace_table alias="Dy-164.73c" awr="162.521" location="1" name="66164.73c" path="900K/Dy_164_900K.ace" temperature="7.756e-08" zaid="66164"/>
|
||||
<ace_table alias="Ho-165.73c" awr="163.513" location="1" name="67165.73c" path="900K/Ho_165_900K.ace" temperature="7.756e-08" zaid="67165"/>
|
||||
<ace_table alias="Ho-169.73c" awr="164.507" location="1" name="67169.73c" path="900K/Ho_166m1_900K.ace" temperature="7.756e-08" zaid="67169"/>
|
||||
<ace_table alias="Er-162.73c" awr="160.538" location="1" name="68162.73c" path="900K/Er_162_900K.ace" temperature="7.756e-08" zaid="68162"/>
|
||||
<ace_table alias="Er-164.73c" awr="162.521" location="1" name="68164.73c" path="900K/Er_164_900K.ace" temperature="7.756e-08" zaid="68164"/>
|
||||
<ace_table alias="Er-166.73c" awr="164.505" location="1" name="68166.73c" path="900K/Er_166_900K.ace" temperature="7.756e-08" zaid="68166"/>
|
||||
<ace_table alias="Er-167.73c" awr="165.498" location="1" name="68167.73c" path="900K/Er_167_900K.ace" temperature="7.756e-08" zaid="68167"/>
|
||||
<ace_table alias="Er-168.73c" awr="166.487" location="1" name="68168.73c" path="900K/Er_168_900K.ace" temperature="7.756e-08" zaid="68168"/>
|
||||
<ace_table alias="Er-170.73c" awr="168.476" location="1" name="68170.73c" path="900K/Er_170_900K.ace" temperature="7.756e-08" zaid="68170"/>
|
||||
<ace_table alias="Tm-168.73c" awr="166.492" location="1" name="69168.73c" path="900K/Tm_168_900K.ace" temperature="7.756e-08" zaid="69168"/>
|
||||
<ace_table alias="Tm-169.73c" awr="167.483" location="1" name="69169.73c" path="900K/Tm_169_900K.ace" temperature="7.756e-08" zaid="69169"/>
|
||||
<ace_table alias="Tm-170.73c" awr="168.476" location="1" name="69170.73c" path="900K/Tm_170_900K.ace" temperature="7.756e-08" zaid="69170"/>
|
||||
<ace_table alias="Lu-175.73c" awr="173.438" location="1" name="71175.73c" path="900K/Lu_175_900K.ace" temperature="7.756e-08" zaid="71175"/>
|
||||
<ace_table alias="Lu-176.73c" awr="174.43" location="1" name="71176.73c" path="900K/Lu_176_900K.ace" temperature="7.756e-08" zaid="71176"/>
|
||||
<ace_table alias="Hf-174.73c" awr="172.446" location="1" name="72174.73c" path="900K/Hf_174_900K.ace" temperature="7.756e-08" zaid="72174"/>
|
||||
<ace_table alias="Hf-176.73c" awr="174.429" location="1" name="72176.73c" path="900K/Hf_176_900K.ace" temperature="7.756e-08" zaid="72176"/>
|
||||
<ace_table alias="Hf-177.73c" awr="175.42" location="1" name="72177.73c" path="900K/Hf_177_900K.ace" temperature="7.756e-08" zaid="72177"/>
|
||||
<ace_table alias="Hf-178.73c" awr="176.411" location="1" name="72178.73c" path="900K/Hf_178_900K.ace" temperature="7.756e-08" zaid="72178"/>
|
||||
<ace_table alias="Hf-179.73c" awr="177.413" location="1" name="72179.73c" path="900K/Hf_179_900K.ace" temperature="7.756e-08" zaid="72179"/>
|
||||
<ace_table alias="Hf-180.73c" awr="178.404" location="1" name="72180.73c" path="900K/Hf_180_900K.ace" temperature="7.756e-08" zaid="72180"/>
|
||||
<ace_table alias="Ta-180.73c" awr="178.4016" location="1" name="73180.73c" path="900K/Ta_180_900K.ace" temperature="7.756e-08" zaid="73180"/>
|
||||
<ace_table alias="Ta-181.73c" awr="179.3936" location="1" name="73181.73c" path="900K/Ta_181_900K.ace" temperature="7.756e-08" zaid="73181"/>
|
||||
<ace_table alias="Ta-182.73c" awr="180.387" location="1" name="73182.73c" path="900K/Ta_182_900K.ace" temperature="7.756e-08" zaid="73182"/>
|
||||
<ace_table alias="W-180.73c" awr="178.401" location="1" name="74180.73c" path="900K/W_180_900K.ace" temperature="7.756e-08" zaid="74180"/>
|
||||
<ace_table alias="W-182.73c" awr="180.385" location="1" name="74182.73c" path="900K/W_182_900K.ace" temperature="7.756e-08" zaid="74182"/>
|
||||
<ace_table alias="W-183.73c" awr="181.379" location="1" name="74183.73c" path="900K/W_183_900K.ace" temperature="7.756e-08" zaid="74183"/>
|
||||
<ace_table alias="W-184.73c" awr="182.371" location="1" name="74184.73c" path="900K/W_184_900K.ace" temperature="7.756e-08" zaid="74184"/>
|
||||
<ace_table alias="W-186.73c" awr="184.357" location="1" name="74186.73c" path="900K/W_186_900K.ace" temperature="7.756e-08" zaid="74186"/>
|
||||
<ace_table alias="Re-185.73c" awr="183.3641" location="1" name="75185.73c" path="900K/Re_185_900K.ace" temperature="7.756e-08" zaid="75185"/>
|
||||
<ace_table alias="Re-187.73c" awr="185.3497" location="1" name="75187.73c" path="900K/Re_187_900K.ace" temperature="7.756e-08" zaid="75187"/>
|
||||
<ace_table alias="Ir-191.73c" awr="189.32" location="1" name="77191.73c" path="900K/Ir_191_900K.ace" temperature="7.756e-08" zaid="77191"/>
|
||||
<ace_table alias="Ir-193.73c" awr="191.305" location="1" name="77193.73c" path="900K/Ir_193_900K.ace" temperature="7.756e-08" zaid="77193"/>
|
||||
<ace_table alias="Au-197.73c" awr="195.274" location="1" name="79197.73c" path="900K/Au_197_900K.ace" temperature="7.756e-08" zaid="79197"/>
|
||||
<ace_table alias="Hg-196.73c" awr="194.282" location="1" name="80196.73c" path="900K/Hg_196_900K.ace" temperature="7.756e-08" zaid="80196"/>
|
||||
<ace_table alias="Hg-198.73c" awr="196.266" location="1" name="80198.73c" path="900K/Hg_198_900K.ace" temperature="7.756e-08" zaid="80198"/>
|
||||
<ace_table alias="Hg-199.73c" awr="197.259" location="1" name="80199.73c" path="900K/Hg_199_900K.ace" temperature="7.756e-08" zaid="80199"/>
|
||||
<ace_table alias="Hg-200.73c" awr="198.25" location="1" name="80200.73c" path="900K/Hg_200_900K.ace" temperature="7.756e-08" zaid="80200"/>
|
||||
<ace_table alias="Hg-201.73c" awr="199.244" location="1" name="80201.73c" path="900K/Hg_201_900K.ace" temperature="7.756e-08" zaid="80201"/>
|
||||
<ace_table alias="Hg-202.73c" awr="200.236" location="1" name="80202.73c" path="900K/Hg_202_900K.ace" temperature="7.756e-08" zaid="80202"/>
|
||||
<ace_table alias="Hg-204.73c" awr="202.221" location="1" name="80204.73c" path="900K/Hg_204_900K.ace" temperature="7.756e-08" zaid="80204"/>
|
||||
<ace_table alias="Tl-203.73c" awr="201.229" location="1" name="81203.73c" path="900K/Tl_203_900K.ace" temperature="7.756e-08" zaid="81203"/>
|
||||
<ace_table alias="Tl-205.73c" awr="203.214" location="1" name="81205.73c" path="900K/Tl_205_900K.ace" temperature="7.756e-08" zaid="81205"/>
|
||||
<ace_table alias="Pb-204.73c" awr="202.2208" location="1" name="82204.73c" path="900K/Pb_204_900K.ace" temperature="7.756e-08" zaid="82204"/>
|
||||
<ace_table alias="Pb-206.73c" awr="204.205" location="1" name="82206.73c" path="900K/Pb_206_900K.ace" temperature="7.756e-08" zaid="82206"/>
|
||||
<ace_table alias="Pb-207.73c" awr="205.1979" location="1" name="82207.73c" path="900K/Pb_207_900K.ace" temperature="7.756e-08" zaid="82207"/>
|
||||
<ace_table alias="Pb-208.73c" awr="206.19" location="1" name="82208.73c" path="900K/Pb_208_900K.ace" temperature="7.756e-08" zaid="82208"/>
|
||||
<ace_table alias="Bi-209.73c" awr="207.185" location="1" name="83209.73c" path="900K/Bi_209_900K.ace" temperature="7.756e-08" zaid="83209"/>
|
||||
<ace_table alias="Ra-223.73c" awr="221.103" location="1" name="88223.73c" path="900K/Ra_223_900K.ace" temperature="7.756e-08" zaid="88223"/>
|
||||
<ace_table alias="Ra-224.73c" awr="222.096" location="1" name="88224.73c" path="900K/Ra_224_900K.ace" temperature="7.756e-08" zaid="88224"/>
|
||||
<ace_table alias="Ra-225.73c" awr="223.091" location="1" name="88225.73c" path="900K/Ra_225_900K.ace" temperature="7.756e-08" zaid="88225"/>
|
||||
<ace_table alias="Ra-226.73c" awr="224.084" location="1" name="88226.73c" path="900K/Ra_226_900K.ace" temperature="7.756e-08" zaid="88226"/>
|
||||
<ace_table alias="Ac-225.73c" awr="223.09" location="1" name="89225.73c" path="900K/Ac_225_900K.ace" temperature="7.756e-08" zaid="89225"/>
|
||||
<ace_table alias="Ac-226.73c" awr="224.084" location="1" name="89226.73c" path="900K/Ac_226_900K.ace" temperature="7.756e-08" zaid="89226"/>
|
||||
<ace_table alias="Ac-227.73c" awr="225.077" location="1" name="89227.73c" path="900K/Ac_227_900K.ace" temperature="7.756e-08" zaid="89227"/>
|
||||
<ace_table alias="Th-227.73c" awr="225.077" location="1" name="90227.73c" path="900K/Th_227_900K.ace" temperature="7.756e-08" zaid="90227"/>
|
||||
<ace_table alias="Th-228.73c" awr="226.07" location="1" name="90228.73c" path="900K/Th_228_900K.ace" temperature="7.756e-08" zaid="90228"/>
|
||||
<ace_table alias="Th-229.73c" awr="227.064" location="1" name="90229.73c" path="900K/Th_229_900K.ace" temperature="7.756e-08" zaid="90229"/>
|
||||
<ace_table alias="Th-230.73c" awr="228.057" location="1" name="90230.73c" path="900K/Th_230_900K.ace" temperature="7.756e-08" zaid="90230"/>
|
||||
<ace_table alias="Th-231.73c" awr="229.052" location="1" name="90231.73c" path="900K/Th_231_900K.ace" temperature="7.756e-08" zaid="90231"/>
|
||||
<ace_table alias="Th-232.73c" awr="230.045" location="1" name="90232.73c" path="900K/Th_232_900K.ace" temperature="7.756e-08" zaid="90232"/>
|
||||
<ace_table alias="Th-233.73c" awr="231.04" location="1" name="90233.73c" path="900K/Th_233_900K.ace" temperature="7.756e-08" zaid="90233"/>
|
||||
<ace_table alias="Th-234.73c" awr="232.033" location="1" name="90234.73c" path="900K/Th_234_900K.ace" temperature="7.756e-08" zaid="90234"/>
|
||||
<ace_table alias="Pa-229.73c" awr="227.065" location="1" name="91229.73c" path="900K/Pa_229_900K.ace" temperature="7.756e-08" zaid="91229"/>
|
||||
<ace_table alias="Pa-230.73c" awr="228.058" location="1" name="91230.73c" path="900K/Pa_230_900K.ace" temperature="7.756e-08" zaid="91230"/>
|
||||
<ace_table alias="Pa-231.73c" awr="229.051" location="1" name="91231.73c" path="900K/Pa_231_900K.ace" temperature="7.756e-08" zaid="91231"/>
|
||||
<ace_table alias="Pa-232.73c" awr="230.045" location="1" name="91232.73c" path="900K/Pa_232_900K.ace" temperature="7.756e-08" zaid="91232"/>
|
||||
<ace_table alias="Pa-233.73c" awr="231.038" location="1" name="91233.73c" path="900K/Pa_233_900K.ace" temperature="7.756e-08" zaid="91233"/>
|
||||
<ace_table alias="U-230.73c" awr="228.058" location="1" name="92230.73c" path="900K/U_230_900K.ace" temperature="7.756e-08" zaid="92230"/>
|
||||
<ace_table alias="U-231.73c" awr="229.052" location="1" name="92231.73c" path="900K/U_231_900K.ace" temperature="7.756e-08" zaid="92231"/>
|
||||
<ace_table alias="U-232.73c" awr="230.044" location="1" name="92232.73c" path="900K/U_232_900K.ace" temperature="7.756e-08" zaid="92232"/>
|
||||
<ace_table alias="U-233.73c" awr="231.0377" location="1" name="92233.73c" path="900K/U_233_900K.ace" temperature="7.756e-08" zaid="92233"/>
|
||||
<ace_table alias="U-234.73c" awr="232.0304" location="1" name="92234.73c" path="900K/U_234_900K.ace" temperature="7.756e-08" zaid="92234"/>
|
||||
<ace_table alias="U-235.73c" awr="233.0248" location="1" name="92235.73c" path="900K/U_235_900K.ace" temperature="7.756e-08" zaid="92235"/>
|
||||
<ace_table alias="U-236.73c" awr="234.0178" location="1" name="92236.73c" path="900K/U_236_900K.ace" temperature="7.756e-08" zaid="92236"/>
|
||||
<ace_table alias="U-237.73c" awr="235.0124" location="1" name="92237.73c" path="900K/U_237_900K.ace" temperature="7.756e-08" zaid="92237"/>
|
||||
<ace_table alias="U-238.73c" awr="236.0058" location="1" name="92238.73c" path="900K/U_238_900K.ace" temperature="7.756e-08" zaid="92238"/>
|
||||
<ace_table alias="U-239.73c" awr="237.0007" location="1" name="92239.73c" path="900K/U_239_900K.ace" temperature="7.756e-08" zaid="92239"/>
|
||||
<ace_table alias="U-240.73c" awr="237.9944" location="1" name="92240.73c" path="900K/U_240_900K.ace" temperature="7.756e-08" zaid="92240"/>
|
||||
<ace_table alias="U-241.73c" awr="238.9895" location="1" name="92241.73c" path="900K/U_241_900K.ace" temperature="7.756e-08" zaid="92241"/>
|
||||
<ace_table alias="Np-234.73c" awr="232.032" location="1" name="93234.73c" path="900K/Np_234_900K.ace" temperature="7.756e-08" zaid="93234"/>
|
||||
<ace_table alias="Np-235.73c" awr="233.025" location="1" name="93235.73c" path="900K/Np_235_900K.ace" temperature="7.756e-08" zaid="93235"/>
|
||||
<ace_table alias="Np-236.73c" awr="234.019" location="1" name="93236.73c" path="900K/Np_236_900K.ace" temperature="7.756e-08" zaid="93236"/>
|
||||
<ace_table alias="Np-237.73c" awr="235.0118" location="1" name="93237.73c" path="900K/Np_237_900K.ace" temperature="7.756e-08" zaid="93237"/>
|
||||
<ace_table alias="Np-238.73c" awr="236.006" location="1" name="93238.73c" path="900K/Np_238_900K.ace" temperature="7.756e-08" zaid="93238"/>
|
||||
<ace_table alias="Np-239.73c" awr="236.999" location="1" name="93239.73c" path="900K/Np_239_900K.ace" temperature="7.756e-08" zaid="93239"/>
|
||||
<ace_table alias="Pu-236.73c" awr="234.018" location="1" name="94236.73c" path="900K/Pu_236_900K.ace" temperature="7.756e-08" zaid="94236"/>
|
||||
<ace_table alias="Pu-237.73c" awr="235.012" location="1" name="94237.73c" path="900K/Pu_237_900K.ace" temperature="7.756e-08" zaid="94237"/>
|
||||
<ace_table alias="Pu-238.73c" awr="236.0046" location="1" name="94238.73c" path="900K/Pu_238_900K.ace" temperature="7.756e-08" zaid="94238"/>
|
||||
<ace_table alias="Pu-239.73c" awr="236.9986" location="1" name="94239.73c" path="900K/Pu_239_900K.ace" temperature="7.756e-08" zaid="94239"/>
|
||||
<ace_table alias="Pu-240.73c" awr="237.9916" location="1" name="94240.73c" path="900K/Pu_240_900K.ace" temperature="7.756e-08" zaid="94240"/>
|
||||
<ace_table alias="Pu-241.73c" awr="238.978" location="1" name="94241.73c" path="900K/Pu_241_900K.ace" temperature="7.756e-08" zaid="94241"/>
|
||||
<ace_table alias="Pu-242.73c" awr="239.979" location="1" name="94242.73c" path="900K/Pu_242_900K.ace" temperature="7.756e-08" zaid="94242"/>
|
||||
<ace_table alias="Pu-243.73c" awr="240.974" location="1" name="94243.73c" path="900K/Pu_243_900K.ace" temperature="7.756e-08" zaid="94243"/>
|
||||
<ace_table alias="Pu-244.73c" awr="241.967" location="1" name="94244.73c" path="900K/Pu_244_900K.ace" temperature="7.756e-08" zaid="94244"/>
|
||||
<ace_table alias="Pu-246.73c" awr="243.956" location="1" name="94246.73c" path="900K/Pu_246_900K.ace" temperature="7.756e-08" zaid="94246"/>
|
||||
<ace_table alias="Am-240.73c" awr="237.993" location="1" name="95240.73c" path="900K/Am_240_900K.ace" temperature="7.756e-08" zaid="95240"/>
|
||||
<ace_table alias="Am-241.73c" awr="238.986" location="1" name="95241.73c" path="900K/Am_241_900K.ace" temperature="7.756e-08" zaid="95241"/>
|
||||
<ace_table alias="Am-242m.73c" awr="239.9801" location="1" metastable="1" name="95242.73c" path="900K/Am_242_900K.ace" temperature="7.756e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-249.73c" awr="239.9801" location="1" name="95249.73c" path="900K/Am_242m1_900K.ace" temperature="7.756e-08" zaid="95249"/>
|
||||
<ace_table alias="Am-243.73c" awr="240.9734" location="1" name="95243.73c" path="900K/Am_243_900K.ace" temperature="7.756e-08" zaid="95243"/>
|
||||
<ace_table alias="Am-244.73c" awr="241.968" location="1" name="95244.73c" path="900K/Am_244_900K.ace" temperature="7.756e-08" zaid="95244"/>
|
||||
<ace_table alias="Am-249.73c" awr="241.968" location="1" name="95249.73c" path="900K/Am_244m1_900K.ace" temperature="7.756e-08" zaid="95249"/>
|
||||
<ace_table alias="Cm-240.73c" awr="237.993" location="1" name="96240.73c" path="900K/Cm_240_900K.ace" temperature="7.756e-08" zaid="96240"/>
|
||||
<ace_table alias="Cm-241.73c" awr="238.987" location="1" name="96241.73c" path="900K/Cm_241_900K.ace" temperature="7.756e-08" zaid="96241"/>
|
||||
<ace_table alias="Cm-242.73c" awr="239.979" location="1" name="96242.73c" path="900K/Cm_242_900K.ace" temperature="7.756e-08" zaid="96242"/>
|
||||
<ace_table alias="Cm-243.73c" awr="240.973" location="1" name="96243.73c" path="900K/Cm_243_900K.ace" temperature="7.756e-08" zaid="96243"/>
|
||||
<ace_table alias="Cm-244.73c" awr="241.966" location="1" name="96244.73c" path="900K/Cm_244_900K.ace" temperature="7.756e-08" zaid="96244"/>
|
||||
<ace_table alias="Cm-245.73c" awr="242.96" location="1" name="96245.73c" path="900K/Cm_245_900K.ace" temperature="7.756e-08" zaid="96245"/>
|
||||
<ace_table alias="Cm-246.73c" awr="243.953" location="1" name="96246.73c" path="900K/Cm_246_900K.ace" temperature="7.756e-08" zaid="96246"/>
|
||||
<ace_table alias="Cm-247.73c" awr="244.948" location="1" name="96247.73c" path="900K/Cm_247_900K.ace" temperature="7.756e-08" zaid="96247"/>
|
||||
<ace_table alias="Cm-248.73c" awr="245.941" location="1" name="96248.73c" path="900K/Cm_248_900K.ace" temperature="7.756e-08" zaid="96248"/>
|
||||
<ace_table alias="Cm-249.73c" awr="246.936" location="1" name="96249.73c" path="900K/Cm_249_900K.ace" temperature="7.756e-08" zaid="96249"/>
|
||||
<ace_table alias="Cm-250.73c" awr="247.93" location="1" name="96250.73c" path="900K/Cm_250_900K.ace" temperature="7.756e-08" zaid="96250"/>
|
||||
<ace_table alias="Bk-245.73c" awr="242.961" location="1" name="97245.73c" path="900K/Bk_245_900K.ace" temperature="7.756e-08" zaid="97245"/>
|
||||
<ace_table alias="Bk-246.73c" awr="243.955" location="1" name="97246.73c" path="900K/Bk_246_900K.ace" temperature="7.756e-08" zaid="97246"/>
|
||||
<ace_table alias="Bk-247.73c" awr="244.948" location="1" name="97247.73c" path="900K/Bk_247_900K.ace" temperature="7.756e-08" zaid="97247"/>
|
||||
<ace_table alias="Bk-248.73c" awr="245.942" location="1" name="97248.73c" path="900K/Bk_248_900K.ace" temperature="7.756e-08" zaid="97248"/>
|
||||
<ace_table alias="Bk-249.73c" awr="246.935" location="1" name="97249.73c" path="900K/Bk_249_900K.ace" temperature="7.756e-08" zaid="97249"/>
|
||||
<ace_table alias="Bk-250.73c" awr="247.93" location="1" name="97250.73c" path="900K/Bk_250_900K.ace" temperature="7.756e-08" zaid="97250"/>
|
||||
<ace_table alias="Cf-246.73c" awr="243.955" location="1" name="98246.73c" path="900K/Cf_246_900K.ace" temperature="7.756e-08" zaid="98246"/>
|
||||
<ace_table alias="Cf-248.73c" awr="245.941" location="1" name="98248.73c" path="900K/Cf_248_900K.ace" temperature="7.756e-08" zaid="98248"/>
|
||||
<ace_table alias="Cf-249.73c" awr="246.935" location="1" name="98249.73c" path="900K/Cf_249_900K.ace" temperature="7.756e-08" zaid="98249"/>
|
||||
<ace_table alias="Cf-250.73c" awr="247.928" location="1" name="98250.73c" path="900K/Cf_250_900K.ace" temperature="7.756e-08" zaid="98250"/>
|
||||
<ace_table alias="Cf-251.73c" awr="248.923" location="1" name="98251.73c" path="900K/Cf_251_900K.ace" temperature="7.756e-08" zaid="98251"/>
|
||||
<ace_table alias="Cf-252.73c" awr="249.916" location="1" name="98252.73c" path="900K/Cf_252_900K.ace" temperature="7.756e-08" zaid="98252"/>
|
||||
<ace_table alias="Cf-253.73c" awr="250.911" location="1" name="98253.73c" path="900K/Cf_253_900K.ace" temperature="7.756e-08" zaid="98253"/>
|
||||
<ace_table alias="Cf-254.73c" awr="251.905" location="1" name="98254.73c" path="900K/Cf_254_900K.ace" temperature="7.756e-08" zaid="98254"/>
|
||||
<ace_table alias="Es-251.73c" awr="248.923" location="1" name="99251.73c" path="900K/Es_251_900K.ace" temperature="7.756e-08" zaid="99251"/>
|
||||
<ace_table alias="Es-252.73c" awr="249.917" location="1" name="99252.73c" path="900K/Es_252_900K.ace" temperature="7.756e-08" zaid="99252"/>
|
||||
<ace_table alias="Es-253.73c" awr="250.911" location="1" name="99253.73c" path="900K/Es_253_900K.ace" temperature="7.756e-08" zaid="99253"/>
|
||||
<ace_table alias="Es-254.73c" awr="251.905" location="1" name="99254.73c" path="900K/Es_254_900K.ace" temperature="7.756e-08" zaid="99254"/>
|
||||
<ace_table alias="Es-259.73c" awr="251.905" location="1" name="99259.73c" path="900K/Es_254m1_900K.ace" temperature="7.756e-08" zaid="99259"/>
|
||||
<ace_table alias="Es-255.73c" awr="252.899" location="1" name="99255.73c" path="900K/Es_255_900K.ace" temperature="7.756e-08" zaid="99255"/>
|
||||
<ace_table alias="Fm-255.73c" awr="252.899" location="1" name="100255.73c" path="900K/Fm_255_900K.ace" temperature="7.756e-08" zaid="100255"/>
|
||||
<ace_table alias="H-1.74c" awr="0.999167" location="1" name="1001.74c" path="1500K/H_001_1500K.ace" temperature="1.293e-07" zaid="1001"/>
|
||||
<ace_table alias="H-2.74c" awr="1.9968" location="1" name="1002.74c" path="1500K/H_002_1500K.ace" temperature="1.293e-07" zaid="1002"/>
|
||||
<ace_table alias="H-3.74c" awr="2.989596" location="1" name="1003.74c" path="1500K/H_003_1500K.ace" temperature="1.293e-07" zaid="1003"/>
|
||||
<ace_table alias="He-3.74c" awr="2.989032" location="1" name="2003.74c" path="1500K/He_003_1500K.ace" temperature="1.293e-07" zaid="2003"/>
|
||||
<ace_table alias="He-4.74c" awr="3.968219" location="1" name="2004.74c" path="1500K/He_004_1500K.ace" temperature="1.293e-07" zaid="2004"/>
|
||||
<ace_table alias="Li-6.74c" awr="5.9634" location="1" name="3006.74c" path="1500K/Li_006_1500K.ace" temperature="1.293e-07" zaid="3006"/>
|
||||
<ace_table alias="Li-7.74c" awr="6.955732" location="1" name="3007.74c" path="1500K/Li_007_1500K.ace" temperature="1.293e-07" zaid="3007"/>
|
||||
<ace_table alias="Be-7.74c" awr="6.9545" location="1" name="4007.74c" path="1500K/Be_007_1500K.ace" temperature="1.293e-07" zaid="4007"/>
|
||||
<ace_table alias="Be-9.74c" awr="8.93478" location="1" name="4009.74c" path="1500K/Be_009_1500K.ace" temperature="1.293e-07" zaid="4009"/>
|
||||
<ace_table alias="B-10.74c" awr="9.926921" location="1" name="5010.74c" path="1500K/B_010_1500K.ace" temperature="1.293e-07" zaid="5010"/>
|
||||
<ace_table alias="B-11.74c" awr="10.9147" location="1" name="5011.74c" path="1500K/B_011_1500K.ace" temperature="1.293e-07" zaid="5011"/>
|
||||
<ace_table alias="C-Nat.74c" awr="11.898" location="1" name="6000.74c" path="1500K/C_000_1500K.ace" temperature="1.293e-07" zaid="6000"/>
|
||||
<ace_table alias="N-14.74c" awr="13.88278" location="1" name="7014.74c" path="1500K/N_014_1500K.ace" temperature="1.293e-07" zaid="7014"/>
|
||||
<ace_table alias="N-15.74c" awr="14.871" location="1" name="7015.74c" path="1500K/N_015_1500K.ace" temperature="1.293e-07" zaid="7015"/>
|
||||
<ace_table alias="O-16.74c" awr="15.85751" location="1" name="8016.74c" path="1500K/O_016_1500K.ace" temperature="1.293e-07" zaid="8016"/>
|
||||
<ace_table alias="O-17.74c" awr="16.8531" location="1" name="8017.74c" path="1500K/O_017_1500K.ace" temperature="1.293e-07" zaid="8017"/>
|
||||
<ace_table alias="F-19.74c" awr="18.835" location="1" name="9019.74c" path="1500K/F_019_1500K.ace" temperature="1.293e-07" zaid="9019"/>
|
||||
<ace_table alias="Na-22.74c" awr="21.8055" location="1" name="11022.74c" path="1500K/Na_022_1500K.ace" temperature="1.293e-07" zaid="11022"/>
|
||||
<ace_table alias="Na-23.74c" awr="22.792" location="1" name="11023.74c" path="1500K/Na_023_1500K.ace" temperature="1.293e-07" zaid="11023"/>
|
||||
<ace_table alias="Mg-24.74c" awr="23.779" location="1" name="12024.74c" path="1500K/Mg_024_1500K.ace" temperature="1.293e-07" zaid="12024"/>
|
||||
<ace_table alias="Mg-25.74c" awr="24.7712" location="1" name="12025.74c" path="1500K/Mg_025_1500K.ace" temperature="1.293e-07" zaid="12025"/>
|
||||
<ace_table alias="Mg-26.74c" awr="25.7594" location="1" name="12026.74c" path="1500K/Mg_026_1500K.ace" temperature="1.293e-07" zaid="12026"/>
|
||||
<ace_table alias="Al-27.74c" awr="26.74975" location="1" name="13027.74c" path="1500K/Al_027_1500K.ace" temperature="1.293e-07" zaid="13027"/>
|
||||
<ace_table alias="Si-28.74c" awr="27.737" location="1" name="14028.74c" path="1500K/Si_028_1500K.ace" temperature="1.293e-07" zaid="14028"/>
|
||||
<ace_table alias="Si-29.74c" awr="28.728" location="1" name="14029.74c" path="1500K/Si_029_1500K.ace" temperature="1.293e-07" zaid="14029"/>
|
||||
<ace_table alias="Si-30.74c" awr="29.716" location="1" name="14030.74c" path="1500K/Si_030_1500K.ace" temperature="1.293e-07" zaid="14030"/>
|
||||
<ace_table alias="P-31.74c" awr="30.708" location="1" name="15031.74c" path="1500K/P_031_1500K.ace" temperature="1.293e-07" zaid="15031"/>
|
||||
<ace_table alias="S-32.74c" awr="31.6973" location="1" name="16032.74c" path="1500K/S_032_1500K.ace" temperature="1.293e-07" zaid="16032"/>
|
||||
<ace_table alias="S-33.74c" awr="32.6878" location="1" name="16033.74c" path="1500K/S_033_1500K.ace" temperature="1.293e-07" zaid="16033"/>
|
||||
<ace_table alias="S-34.74c" awr="33.6762" location="1" name="16034.74c" path="1500K/S_034_1500K.ace" temperature="1.293e-07" zaid="16034"/>
|
||||
<ace_table alias="S-36.74c" awr="35.658" location="1" name="16036.74c" path="1500K/S_036_1500K.ace" temperature="1.293e-07" zaid="16036"/>
|
||||
<ace_table alias="Cl-35.74c" awr="34.66845" location="1" name="17035.74c" path="1500K/Cl_035_1500K.ace" temperature="1.293e-07" zaid="17035"/>
|
||||
<ace_table alias="Cl-37.74c" awr="36.6483" location="1" name="17037.74c" path="1500K/Cl_037_1500K.ace" temperature="1.293e-07" zaid="17037"/>
|
||||
<ace_table alias="Ar-36.74c" awr="35.6585" location="1" name="18036.74c" path="1500K/Ar_036_1500K.ace" temperature="1.293e-07" zaid="18036"/>
|
||||
<ace_table alias="Ar-38.74c" awr="37.6366" location="1" name="18038.74c" path="1500K/Ar_038_1500K.ace" temperature="1.293e-07" zaid="18038"/>
|
||||
<ace_table alias="Ar-40.74c" awr="39.6191" location="1" name="18040.74c" path="1500K/Ar_040_1500K.ace" temperature="1.293e-07" zaid="18040"/>
|
||||
<ace_table alias="K-39.74c" awr="38.6293" location="1" name="19039.74c" path="1500K/K_039_1500K.ace" temperature="1.293e-07" zaid="19039"/>
|
||||
<ace_table alias="K-40.74c" awr="39.6207" location="1" name="19040.74c" path="1500K/K_040_1500K.ace" temperature="1.293e-07" zaid="19040"/>
|
||||
<ace_table alias="K-41.74c" awr="40.6101" location="1" name="19041.74c" path="1500K/K_041_1500K.ace" temperature="1.293e-07" zaid="19041"/>
|
||||
<ace_table alias="Ca-40.74c" awr="39.6193" location="1" name="20040.74c" path="1500K/Ca_040_1500K.ace" temperature="1.293e-07" zaid="20040"/>
|
||||
<ace_table alias="Ca-42.74c" awr="41.59818" location="1" name="20042.74c" path="1500K/Ca_042_1500K.ace" temperature="1.293e-07" zaid="20042"/>
|
||||
<ace_table alias="Ca-43.74c" awr="42.58973" location="1" name="20043.74c" path="1500K/Ca_043_1500K.ace" temperature="1.293e-07" zaid="20043"/>
|
||||
<ace_table alias="Ca-44.74c" awr="43.57788" location="1" name="20044.74c" path="1500K/Ca_044_1500K.ace" temperature="1.293e-07" zaid="20044"/>
|
||||
<ace_table alias="Ca-46.74c" awr="45.55893" location="1" name="20046.74c" path="1500K/Ca_046_1500K.ace" temperature="1.293e-07" zaid="20046"/>
|
||||
<ace_table alias="Ca-48.74c" awr="47.5406" location="1" name="20048.74c" path="1500K/Ca_048_1500K.ace" temperature="1.293e-07" zaid="20048"/>
|
||||
<ace_table alias="Sc-45.74c" awr="44.5679" location="1" name="21045.74c" path="1500K/Sc_045_1500K.ace" temperature="1.293e-07" zaid="21045"/>
|
||||
<ace_table alias="Ti-46.74c" awr="45.5579" location="1" name="22046.74c" path="1500K/Ti_046_1500K.ace" temperature="1.293e-07" zaid="22046"/>
|
||||
<ace_table alias="Ti-47.74c" awr="46.5484" location="1" name="22047.74c" path="1500K/Ti_047_1500K.ace" temperature="1.293e-07" zaid="22047"/>
|
||||
<ace_table alias="Ti-48.74c" awr="47.5361" location="1" name="22048.74c" path="1500K/Ti_048_1500K.ace" temperature="1.293e-07" zaid="22048"/>
|
||||
<ace_table alias="Ti-49.74c" awr="48.5274" location="1" name="22049.74c" path="1500K/Ti_049_1500K.ace" temperature="1.293e-07" zaid="22049"/>
|
||||
<ace_table alias="Ti-50.74c" awr="49.5157" location="1" name="22050.74c" path="1500K/Ti_050_1500K.ace" temperature="1.293e-07" zaid="22050"/>
|
||||
<ace_table alias="V-50.74c" awr="49.5181" location="1" name="23050.74c" path="1500K/V_050_1500K.ace" temperature="1.293e-07" zaid="23050"/>
|
||||
<ace_table alias="V-51.74c" awr="50.5063" location="1" name="23051.74c" path="1500K/V_051_1500K.ace" temperature="1.293e-07" zaid="23051"/>
|
||||
<ace_table alias="Cr-50.74c" awr="49.517" location="1" name="24050.74c" path="1500K/Cr_050_1500K.ace" temperature="1.293e-07" zaid="24050"/>
|
||||
<ace_table alias="Cr-52.74c" awr="51.494" location="1" name="24052.74c" path="1500K/Cr_052_1500K.ace" temperature="1.293e-07" zaid="24052"/>
|
||||
<ace_table alias="Cr-53.74c" awr="52.486" location="1" name="24053.74c" path="1500K/Cr_053_1500K.ace" temperature="1.293e-07" zaid="24053"/>
|
||||
<ace_table alias="Cr-54.74c" awr="53.476" location="1" name="24054.74c" path="1500K/Cr_054_1500K.ace" temperature="1.293e-07" zaid="24054"/>
|
||||
<ace_table alias="Mn-55.74c" awr="54.4661" location="1" name="25055.74c" path="1500K/Mn_055_1500K.ace" temperature="1.293e-07" zaid="25055"/>
|
||||
<ace_table alias="Fe-54.74c" awr="53.476" location="1" name="26054.74c" path="1500K/Fe_054_1500K.ace" temperature="1.293e-07" zaid="26054"/>
|
||||
<ace_table alias="Fe-56.74c" awr="55.454" location="1" name="26056.74c" path="1500K/Fe_056_1500K.ace" temperature="1.293e-07" zaid="26056"/>
|
||||
<ace_table alias="Fe-57.74c" awr="56.446" location="1" name="26057.74c" path="1500K/Fe_057_1500K.ace" temperature="1.293e-07" zaid="26057"/>
|
||||
<ace_table alias="Fe-58.74c" awr="57.436" location="1" name="26058.74c" path="1500K/Fe_058_1500K.ace" temperature="1.293e-07" zaid="26058"/>
|
||||
<ace_table alias="Co-58.74c" awr="57.4381" location="1" name="27058.74c" path="1500K/Co_058_1500K.ace" temperature="1.293e-07" zaid="27058"/>
|
||||
<ace_table alias="Co-59.74c" awr="57.4381" location="1" name="27059.74c" path="1500K/Co_058m1_1500K.ace" temperature="1.293e-07" zaid="27059"/>
|
||||
<ace_table alias="Co-59.74c" awr="58.4269" location="1" name="27059.74c" path="1500K/Co_059_1500K.ace" temperature="1.293e-07" zaid="27059"/>
|
||||
<ace_table alias="Ni-58.74c" awr="57.438" location="1" name="28058.74c" path="1500K/Ni_058_1500K.ace" temperature="1.293e-07" zaid="28058"/>
|
||||
<ace_table alias="Ni-59.74c" awr="58.4281" location="1" name="28059.74c" path="1500K/Ni_059_1500K.ace" temperature="1.293e-07" zaid="28059"/>
|
||||
<ace_table alias="Ni-60.74c" awr="59.416" location="1" name="28060.74c" path="1500K/Ni_060_1500K.ace" temperature="1.293e-07" zaid="28060"/>
|
||||
<ace_table alias="Ni-61.74c" awr="60.408" location="1" name="28061.74c" path="1500K/Ni_061_1500K.ace" temperature="1.293e-07" zaid="28061"/>
|
||||
<ace_table alias="Ni-62.74c" awr="61.396" location="1" name="28062.74c" path="1500K/Ni_062_1500K.ace" temperature="1.293e-07" zaid="28062"/>
|
||||
<ace_table alias="Ni-64.74c" awr="63.379" location="1" name="28064.74c" path="1500K/Ni_064_1500K.ace" temperature="1.293e-07" zaid="28064"/>
|
||||
<ace_table alias="Cu-63.74c" awr="62.389" location="1" name="29063.74c" path="1500K/Cu_063_1500K.ace" temperature="1.293e-07" zaid="29063"/>
|
||||
<ace_table alias="Cu-65.74c" awr="64.37" location="1" name="29065.74c" path="1500K/Cu_065_1500K.ace" temperature="1.293e-07" zaid="29065"/>
|
||||
<ace_table alias="Zn-64.74c" awr="63.38" location="1" name="30064.74c" path="1500K/Zn_064_1500K.ace" temperature="1.293e-07" zaid="30064"/>
|
||||
<ace_table alias="Zn-65.74c" awr="64.3715" location="1" name="30065.74c" path="1500K/Zn_065_1500K.ace" temperature="1.293e-07" zaid="30065"/>
|
||||
<ace_table alias="Zn-66.74c" awr="65.3597" location="1" name="30066.74c" path="1500K/Zn_066_1500K.ace" temperature="1.293e-07" zaid="30066"/>
|
||||
<ace_table alias="Zn-67.74c" awr="66.3522" location="1" name="30067.74c" path="1500K/Zn_067_1500K.ace" temperature="1.293e-07" zaid="30067"/>
|
||||
<ace_table alias="Zn-68.74c" awr="67.3413" location="1" name="30068.74c" path="1500K/Zn_068_1500K.ace" temperature="1.293e-07" zaid="30068"/>
|
||||
<ace_table alias="Zn-70.74c" awr="69.3246" location="1" name="30070.74c" path="1500K/Zn_070_1500K.ace" temperature="1.293e-07" zaid="30070"/>
|
||||
<ace_table alias="Ga-69.74c" awr="68.3336" location="1" name="31069.74c" path="1500K/Ga_069_1500K.ace" temperature="1.293e-07" zaid="31069"/>
|
||||
<ace_table alias="Ga-71.74c" awr="70.315" location="1" name="31071.74c" path="1500K/Ga_071_1500K.ace" temperature="1.293e-07" zaid="31071"/>
|
||||
<ace_table alias="Ge-70.74c" awr="69.3236" location="1" name="32070.74c" path="1500K/Ge_070_1500K.ace" temperature="1.293e-07" zaid="32070"/>
|
||||
<ace_table alias="Ge-72.74c" awr="71.3042" location="1" name="32072.74c" path="1500K/Ge_072_1500K.ace" temperature="1.293e-07" zaid="32072"/>
|
||||
<ace_table alias="Ge-73.74c" awr="72.297" location="1" name="32073.74c" path="1500K/Ge_073_1500K.ace" temperature="1.293e-07" zaid="32073"/>
|
||||
<ace_table alias="Ge-74.74c" awr="73.2862" location="1" name="32074.74c" path="1500K/Ge_074_1500K.ace" temperature="1.293e-07" zaid="32074"/>
|
||||
<ace_table alias="Ge-76.74c" awr="75.2692" location="1" name="32076.74c" path="1500K/Ge_076_1500K.ace" temperature="1.293e-07" zaid="32076"/>
|
||||
<ace_table alias="As-74.74c" awr="73.2889" location="1" name="33074.74c" path="1500K/As_074_1500K.ace" temperature="1.293e-07" zaid="33074"/>
|
||||
<ace_table alias="As-75.74c" awr="74.278" location="1" name="33075.74c" path="1500K/As_075_1500K.ace" temperature="1.293e-07" zaid="33075"/>
|
||||
<ace_table alias="Se-74.74c" awr="73.2875" location="1" name="34074.74c" path="1500K/Se_074_1500K.ace" temperature="1.293e-07" zaid="34074"/>
|
||||
<ace_table alias="Se-76.74c" awr="75.267" location="1" name="34076.74c" path="1500K/Se_076_1500K.ace" temperature="1.293e-07" zaid="34076"/>
|
||||
<ace_table alias="Se-77.74c" awr="76.2591" location="1" name="34077.74c" path="1500K/Se_077_1500K.ace" temperature="1.293e-07" zaid="34077"/>
|
||||
<ace_table alias="Se-78.74c" awr="77.2479" location="1" name="34078.74c" path="1500K/Se_078_1500K.ace" temperature="1.293e-07" zaid="34078"/>
|
||||
<ace_table alias="Se-79.74c" awr="78.2405" location="1" name="34079.74c" path="1500K/Se_079_1500K.ace" temperature="1.293e-07" zaid="34079"/>
|
||||
<ace_table alias="Se-80.74c" awr="79.23" location="1" name="34080.74c" path="1500K/Se_080_1500K.ace" temperature="1.293e-07" zaid="34080"/>
|
||||
<ace_table alias="Se-82.74c" awr="81.213" location="1" name="34082.74c" path="1500K/Se_082_1500K.ace" temperature="1.293e-07" zaid="34082"/>
|
||||
<ace_table alias="Br-79.74c" awr="78.2403" location="1" name="35079.74c" path="1500K/Br_079_1500K.ace" temperature="1.293e-07" zaid="35079"/>
|
||||
<ace_table alias="Br-81.74c" awr="80.2212" location="1" name="35081.74c" path="1500K/Br_081_1500K.ace" temperature="1.293e-07" zaid="35081"/>
|
||||
<ace_table alias="Kr-78.74c" awr="77.25099" location="1" name="36078.74c" path="1500K/Kr_078_1500K.ace" temperature="1.293e-07" zaid="36078"/>
|
||||
<ace_table alias="Kr-80.74c" awr="79.2299" location="1" name="36080.74c" path="1500K/Kr_080_1500K.ace" temperature="1.293e-07" zaid="36080"/>
|
||||
<ace_table alias="Kr-82.74c" awr="81.2098" location="1" name="36082.74c" path="1500K/Kr_082_1500K.ace" temperature="1.293e-07" zaid="36082"/>
|
||||
<ace_table alias="Kr-83.74c" awr="82.202" location="1" name="36083.74c" path="1500K/Kr_083_1500K.ace" temperature="1.293e-07" zaid="36083"/>
|
||||
<ace_table alias="Kr-84.74c" awr="83.1907" location="1" name="36084.74c" path="1500K/Kr_084_1500K.ace" temperature="1.293e-07" zaid="36084"/>
|
||||
<ace_table alias="Kr-85.74c" awr="84.1831" location="1" name="36085.74c" path="1500K/Kr_085_1500K.ace" temperature="1.293e-07" zaid="36085"/>
|
||||
<ace_table alias="Kr-86.74c" awr="85.1726" location="1" name="36086.74c" path="1500K/Kr_086_1500K.ace" temperature="1.293e-07" zaid="36086"/>
|
||||
<ace_table alias="Rb-85.74c" awr="84.1824" location="1" name="37085.74c" path="1500K/Rb_085_1500K.ace" temperature="1.293e-07" zaid="37085"/>
|
||||
<ace_table alias="Rb-86.74c" awr="85.1731" location="1" name="37086.74c" path="1500K/Rb_086_1500K.ace" temperature="1.293e-07" zaid="37086"/>
|
||||
<ace_table alias="Rb-87.74c" awr="86.1626" location="1" name="37087.74c" path="1500K/Rb_087_1500K.ace" temperature="1.293e-07" zaid="37087"/>
|
||||
<ace_table alias="Sr-84.74c" awr="83.1926" location="1" name="38084.74c" path="1500K/Sr_084_1500K.ace" temperature="1.293e-07" zaid="38084"/>
|
||||
<ace_table alias="Sr-86.74c" awr="85.1713" location="1" name="38086.74c" path="1500K/Sr_086_1500K.ace" temperature="1.293e-07" zaid="38086"/>
|
||||
<ace_table alias="Sr-87.74c" awr="86.1623" location="1" name="38087.74c" path="1500K/Sr_087_1500K.ace" temperature="1.293e-07" zaid="38087"/>
|
||||
<ace_table alias="Sr-88.74c" awr="87.15" location="1" name="38088.74c" path="1500K/Sr_088_1500K.ace" temperature="1.293e-07" zaid="38088"/>
|
||||
<ace_table alias="Sr-89.74c" awr="88.144" location="1" name="38089.74c" path="1500K/Sr_089_1500K.ace" temperature="1.293e-07" zaid="38089"/>
|
||||
<ace_table alias="Sr-90.74c" awr="89.1353" location="1" name="38090.74c" path="1500K/Sr_090_1500K.ace" temperature="1.293e-07" zaid="38090"/>
|
||||
<ace_table alias="Y-89.74c" awr="88.1421" location="1" name="39089.74c" path="1500K/Y_089_1500K.ace" temperature="1.293e-07" zaid="39089"/>
|
||||
<ace_table alias="Y-90.74c" awr="89.1348" location="1" name="39090.74c" path="1500K/Y_090_1500K.ace" temperature="1.293e-07" zaid="39090"/>
|
||||
<ace_table alias="Y-91.74c" awr="90.1264" location="1" name="39091.74c" path="1500K/Y_091_1500K.ace" temperature="1.293e-07" zaid="39091"/>
|
||||
<ace_table alias="Zr-90.74c" awr="89.1324" location="1" name="40090.74c" path="1500K/Zr_090_1500K.ace" temperature="1.293e-07" zaid="40090"/>
|
||||
<ace_table alias="Zr-91.74c" awr="90.1247" location="1" name="40091.74c" path="1500K/Zr_091_1500K.ace" temperature="1.293e-07" zaid="40091"/>
|
||||
<ace_table alias="Zr-92.74c" awr="91.1155" location="1" name="40092.74c" path="1500K/Zr_092_1500K.ace" temperature="1.293e-07" zaid="40092"/>
|
||||
<ace_table alias="Zr-93.74c" awr="92.1084" location="1" name="40093.74c" path="1500K/Zr_093_1500K.ace" temperature="1.293e-07" zaid="40093"/>
|
||||
<ace_table alias="Zr-94.74c" awr="93.0996" location="1" name="40094.74c" path="1500K/Zr_094_1500K.ace" temperature="1.293e-07" zaid="40094"/>
|
||||
<ace_table alias="Zr-95.74c" awr="94.0927" location="1" name="40095.74c" path="1500K/Zr_095_1500K.ace" temperature="1.293e-07" zaid="40095"/>
|
||||
<ace_table alias="Zr-96.74c" awr="95.0844" location="1" name="40096.74c" path="1500K/Zr_096_1500K.ace" temperature="1.293e-07" zaid="40096"/>
|
||||
<ace_table alias="Nb-93.74c" awr="92.1051" location="1" name="41093.74c" path="1500K/Nb_093_1500K.ace" temperature="1.293e-07" zaid="41093"/>
|
||||
<ace_table alias="Nb-94.74c" awr="93.1006" location="1" name="41094.74c" path="1500K/Nb_094_1500K.ace" temperature="1.293e-07" zaid="41094"/>
|
||||
<ace_table alias="Nb-95.74c" awr="94.0915" location="1" name="41095.74c" path="1500K/Nb_095_1500K.ace" temperature="1.293e-07" zaid="41095"/>
|
||||
<ace_table alias="Mo-92.74c" awr="91.1173" location="1" name="42092.74c" path="1500K/Mo_092_1500K.ace" temperature="1.293e-07" zaid="42092"/>
|
||||
<ace_table alias="Mo-94.74c" awr="93.0984" location="1" name="42094.74c" path="1500K/Mo_094_1500K.ace" temperature="1.293e-07" zaid="42094"/>
|
||||
<ace_table alias="Mo-95.74c" awr="94.0906" location="1" name="42095.74c" path="1500K/Mo_095_1500K.ace" temperature="1.293e-07" zaid="42095"/>
|
||||
<ace_table alias="Mo-96.74c" awr="95.0808" location="1" name="42096.74c" path="1500K/Mo_096_1500K.ace" temperature="1.293e-07" zaid="42096"/>
|
||||
<ace_table alias="Mo-97.74c" awr="96.0735" location="1" name="42097.74c" path="1500K/Mo_097_1500K.ace" temperature="1.293e-07" zaid="42097"/>
|
||||
<ace_table alias="Mo-98.74c" awr="97.0643" location="1" name="42098.74c" path="1500K/Mo_098_1500K.ace" temperature="1.293e-07" zaid="42098"/>
|
||||
<ace_table alias="Mo-99.74c" awr="98.058" location="1" name="42099.74c" path="1500K/Mo_099_1500K.ace" temperature="1.293e-07" zaid="42099"/>
|
||||
<ace_table alias="Mo-100.74c" awr="99.049" location="1" name="42100.74c" path="1500K/Mo_100_1500K.ace" temperature="1.293e-07" zaid="42100"/>
|
||||
<ace_table alias="Tc-99.74c" awr="98.0566" location="1" name="43099.74c" path="1500K/Tc_099_1500K.ace" temperature="1.293e-07" zaid="43099"/>
|
||||
<ace_table alias="Ru-96.74c" awr="95.0837" location="1" name="44096.74c" path="1500K/Ru_096_1500K.ace" temperature="1.293e-07" zaid="44096"/>
|
||||
<ace_table alias="Ru-98.74c" awr="97.0642" location="1" name="44098.74c" path="1500K/Ru_098_1500K.ace" temperature="1.293e-07" zaid="44098"/>
|
||||
<ace_table alias="Ru-99.74c" awr="98.0562" location="1" name="44099.74c" path="1500K/Ru_099_1500K.ace" temperature="1.293e-07" zaid="44099"/>
|
||||
<ace_table alias="Ru-100.74c" awr="99.046" location="1" name="44100.74c" path="1500K/Ru_100_1500K.ace" temperature="1.293e-07" zaid="44100"/>
|
||||
<ace_table alias="Ru-101.74c" awr="100.039" location="1" name="44101.74c" path="1500K/Ru_101_1500K.ace" temperature="1.293e-07" zaid="44101"/>
|
||||
<ace_table alias="Ru-102.74c" awr="101.03" location="1" name="44102.74c" path="1500K/Ru_102_1500K.ace" temperature="1.293e-07" zaid="44102"/>
|
||||
<ace_table alias="Ru-103.74c" awr="102.02" location="1" name="44103.74c" path="1500K/Ru_103_1500K.ace" temperature="1.293e-07" zaid="44103"/>
|
||||
<ace_table alias="Ru-104.74c" awr="103.01" location="1" name="44104.74c" path="1500K/Ru_104_1500K.ace" temperature="1.293e-07" zaid="44104"/>
|
||||
<ace_table alias="Ru-105.74c" awr="104.01" location="1" name="44105.74c" path="1500K/Ru_105_1500K.ace" temperature="1.293e-07" zaid="44105"/>
|
||||
<ace_table alias="Ru-106.74c" awr="104.997" location="1" name="44106.74c" path="1500K/Ru_106_1500K.ace" temperature="1.293e-07" zaid="44106"/>
|
||||
<ace_table alias="Rh-103.74c" awr="102.021" location="1" name="45103.74c" path="1500K/Rh_103_1500K.ace" temperature="1.293e-07" zaid="45103"/>
|
||||
<ace_table alias="Rh-105.74c" awr="104.0" location="1" name="45105.74c" path="1500K/Rh_105_1500K.ace" temperature="1.293e-07" zaid="45105"/>
|
||||
<ace_table alias="Pd-102.74c" awr="101.0302" location="1" name="46102.74c" path="1500K/Pd_102_1500K.ace" temperature="1.293e-07" zaid="46102"/>
|
||||
<ace_table alias="Pd-104.74c" awr="103.0114" location="1" name="46104.74c" path="1500K/Pd_104_1500K.ace" temperature="1.293e-07" zaid="46104"/>
|
||||
<ace_table alias="Pd-105.74c" awr="104.004" location="1" name="46105.74c" path="1500K/Pd_105_1500K.ace" temperature="1.293e-07" zaid="46105"/>
|
||||
<ace_table alias="Pd-106.74c" awr="104.9937" location="1" name="46106.74c" path="1500K/Pd_106_1500K.ace" temperature="1.293e-07" zaid="46106"/>
|
||||
<ace_table alias="Pd-107.74c" awr="105.987" location="1" name="46107.74c" path="1500K/Pd_107_1500K.ace" temperature="1.293e-07" zaid="46107"/>
|
||||
<ace_table alias="Pd-108.74c" awr="106.9769" location="1" name="46108.74c" path="1500K/Pd_108_1500K.ace" temperature="1.293e-07" zaid="46108"/>
|
||||
<ace_table alias="Pd-110.74c" awr="108.961" location="1" name="46110.74c" path="1500K/Pd_110_1500K.ace" temperature="1.293e-07" zaid="46110"/>
|
||||
<ace_table alias="Ag-107.74c" awr="105.987" location="1" name="47107.74c" path="1500K/Ag_107_1500K.ace" temperature="1.293e-07" zaid="47107"/>
|
||||
<ace_table alias="Ag-109.74c" awr="107.969" location="1" name="47109.74c" path="1500K/Ag_109_1500K.ace" temperature="1.293e-07" zaid="47109"/>
|
||||
<ace_table alias="Ag-119.74c" awr="108.962" location="1" name="47119.74c" path="1500K/Ag_110m1_1500K.ace" temperature="1.293e-07" zaid="47119"/>
|
||||
<ace_table alias="Ag-111.74c" awr="109.953" location="1" name="47111.74c" path="1500K/Ag_111_1500K.ace" temperature="1.293e-07" zaid="47111"/>
|
||||
<ace_table alias="Cd-106.74c" awr="104.996" location="1" name="48106.74c" path="1500K/Cd_106_1500K.ace" temperature="1.293e-07" zaid="48106"/>
|
||||
<ace_table alias="Cd-108.74c" awr="106.977" location="1" name="48108.74c" path="1500K/Cd_108_1500K.ace" temperature="1.293e-07" zaid="48108"/>
|
||||
<ace_table alias="Cd-110.74c" awr="108.959" location="1" name="48110.74c" path="1500K/Cd_110_1500K.ace" temperature="1.293e-07" zaid="48110"/>
|
||||
<ace_table alias="Cd-111.74c" awr="109.951" location="1" name="48111.74c" path="1500K/Cd_111_1500K.ace" temperature="1.293e-07" zaid="48111"/>
|
||||
<ace_table alias="Cd-112.74c" awr="110.942" location="1" name="48112.74c" path="1500K/Cd_112_1500K.ace" temperature="1.293e-07" zaid="48112"/>
|
||||
<ace_table alias="Cd-113.74c" awr="111.93" location="1" name="48113.74c" path="1500K/Cd_113_1500K.ace" temperature="1.293e-07" zaid="48113"/>
|
||||
<ace_table alias="Cd-114.74c" awr="112.925" location="1" name="48114.74c" path="1500K/Cd_114_1500K.ace" temperature="1.293e-07" zaid="48114"/>
|
||||
<ace_table alias="Cd-119.74c" awr="113.918" location="1" name="48119.74c" path="1500K/Cd_115m1_1500K.ace" temperature="1.293e-07" zaid="48119"/>
|
||||
<ace_table alias="Cd-116.74c" awr="114.909" location="1" name="48116.74c" path="1500K/Cd_116_1500K.ace" temperature="1.293e-07" zaid="48116"/>
|
||||
<ace_table alias="In-113.74c" awr="111.934" location="1" name="49113.74c" path="1500K/In_113_1500K.ace" temperature="1.293e-07" zaid="49113"/>
|
||||
<ace_table alias="In-115.74c" awr="113.917" location="1" name="49115.74c" path="1500K/In_115_1500K.ace" temperature="1.293e-07" zaid="49115"/>
|
||||
<ace_table alias="Sn-112.74c" awr="110.944" location="1" name="50112.74c" path="1500K/Sn_112_1500K.ace" temperature="1.293e-07" zaid="50112"/>
|
||||
<ace_table alias="Sn-113.74c" awr="111.935" location="1" name="50113.74c" path="1500K/Sn_113_1500K.ace" temperature="1.293e-07" zaid="50113"/>
|
||||
<ace_table alias="Sn-114.74c" awr="112.925" location="1" name="50114.74c" path="1500K/Sn_114_1500K.ace" temperature="1.293e-07" zaid="50114"/>
|
||||
<ace_table alias="Sn-115.74c" awr="113.916" location="1" name="50115.74c" path="1500K/Sn_115_1500K.ace" temperature="1.293e-07" zaid="50115"/>
|
||||
<ace_table alias="Sn-116.74c" awr="114.906" location="1" name="50116.74c" path="1500K/Sn_116_1500K.ace" temperature="1.293e-07" zaid="50116"/>
|
||||
<ace_table alias="Sn-117.74c" awr="115.899" location="1" name="50117.74c" path="1500K/Sn_117_1500K.ace" temperature="1.293e-07" zaid="50117"/>
|
||||
<ace_table alias="Sn-118.74c" awr="116.889" location="1" name="50118.74c" path="1500K/Sn_118_1500K.ace" temperature="1.293e-07" zaid="50118"/>
|
||||
<ace_table alias="Sn-119.74c" awr="117.882" location="1" name="50119.74c" path="1500K/Sn_119_1500K.ace" temperature="1.293e-07" zaid="50119"/>
|
||||
<ace_table alias="Sn-120.74c" awr="118.872" location="1" name="50120.74c" path="1500K/Sn_120_1500K.ace" temperature="1.293e-07" zaid="50120"/>
|
||||
<ace_table alias="Sn-122.74c" awr="120.856" location="1" name="50122.74c" path="1500K/Sn_122_1500K.ace" temperature="1.293e-07" zaid="50122"/>
|
||||
<ace_table alias="Sn-123.74c" awr="121.85" location="1" name="50123.74c" path="1500K/Sn_123_1500K.ace" temperature="1.293e-07" zaid="50123"/>
|
||||
<ace_table alias="Sn-124.74c" awr="122.841" location="1" name="50124.74c" path="1500K/Sn_124_1500K.ace" temperature="1.293e-07" zaid="50124"/>
|
||||
<ace_table alias="Sn-125.74c" awr="123.835" location="1" name="50125.74c" path="1500K/Sn_125_1500K.ace" temperature="1.293e-07" zaid="50125"/>
|
||||
<ace_table alias="Sn-126.74c" awr="124.826" location="1" name="50126.74c" path="1500K/Sn_126_1500K.ace" temperature="1.293e-07" zaid="50126"/>
|
||||
<ace_table alias="Sb-121.74c" awr="119.87" location="1" name="51121.74c" path="1500K/Sb_121_1500K.ace" temperature="1.293e-07" zaid="51121"/>
|
||||
<ace_table alias="Sb-123.74c" awr="121.85" location="1" name="51123.74c" path="1500K/Sb_123_1500K.ace" temperature="1.293e-07" zaid="51123"/>
|
||||
<ace_table alias="Sb-124.74c" awr="122.842" location="1" name="51124.74c" path="1500K/Sb_124_1500K.ace" temperature="1.293e-07" zaid="51124"/>
|
||||
<ace_table alias="Sb-125.74c" awr="123.832" location="1" name="51125.74c" path="1500K/Sb_125_1500K.ace" temperature="1.293e-07" zaid="51125"/>
|
||||
<ace_table alias="Sb-126.74c" awr="124.826" location="1" name="51126.74c" path="1500K/Sb_126_1500K.ace" temperature="1.293e-07" zaid="51126"/>
|
||||
<ace_table alias="Te-120.74c" awr="118.874" location="1" name="52120.74c" path="1500K/Te_120_1500K.ace" temperature="1.293e-07" zaid="52120"/>
|
||||
<ace_table alias="Te-122.74c" awr="120.856" location="1" name="52122.74c" path="1500K/Te_122_1500K.ace" temperature="1.293e-07" zaid="52122"/>
|
||||
<ace_table alias="Te-123.74c" awr="121.848" location="1" name="52123.74c" path="1500K/Te_123_1500K.ace" temperature="1.293e-07" zaid="52123"/>
|
||||
<ace_table alias="Te-124.74c" awr="122.839" location="1" name="52124.74c" path="1500K/Te_124_1500K.ace" temperature="1.293e-07" zaid="52124"/>
|
||||
<ace_table alias="Te-125.74c" awr="123.831" location="1" name="52125.74c" path="1500K/Te_125_1500K.ace" temperature="1.293e-07" zaid="52125"/>
|
||||
<ace_table alias="Te-126.74c" awr="124.821" location="1" name="52126.74c" path="1500K/Te_126_1500K.ace" temperature="1.293e-07" zaid="52126"/>
|
||||
<ace_table alias="Te-129.74c" awr="125.815" location="1" name="52129.74c" path="1500K/Te_127m1_1500K.ace" temperature="1.293e-07" zaid="52129"/>
|
||||
<ace_table alias="Te-128.74c" awr="126.805" location="1" name="52128.74c" path="1500K/Te_128_1500K.ace" temperature="1.293e-07" zaid="52128"/>
|
||||
<ace_table alias="Te-129.74c" awr="127.8" location="1" name="52129.74c" path="1500K/Te_129m1_1500K.ace" temperature="1.293e-07" zaid="52129"/>
|
||||
<ace_table alias="Te-130.74c" awr="128.79" location="1" name="52130.74c" path="1500K/Te_130_1500K.ace" temperature="1.293e-07" zaid="52130"/>
|
||||
<ace_table alias="Te-132.74c" awr="130.775" location="1" name="52132.74c" path="1500K/Te_132_1500K.ace" temperature="1.293e-07" zaid="52132"/>
|
||||
<ace_table alias="I-127.74c" awr="125.8143" location="1" name="53127.74c" path="1500K/I_127_1500K.ace" temperature="1.293e-07" zaid="53127"/>
|
||||
<ace_table alias="I-129.74c" awr="127.798" location="1" name="53129.74c" path="1500K/I_129_1500K.ace" temperature="1.293e-07" zaid="53129"/>
|
||||
<ace_table alias="I-130.74c" awr="128.791" location="1" name="53130.74c" path="1500K/I_130_1500K.ace" temperature="1.293e-07" zaid="53130"/>
|
||||
<ace_table alias="I-131.74c" awr="129.781" location="1" name="53131.74c" path="1500K/I_131_1500K.ace" temperature="1.293e-07" zaid="53131"/>
|
||||
<ace_table alias="I-135.74c" awr="133.75" location="1" name="53135.74c" path="1500K/I_135_1500K.ace" temperature="1.293e-07" zaid="53135"/>
|
||||
<ace_table alias="Xe-123.74c" awr="121.8526" location="1" name="54123.74c" path="1500K/Xe_123_1500K.ace" temperature="1.293e-07" zaid="54123"/>
|
||||
<ace_table alias="Xe-124.74c" awr="122.8415" location="1" name="54124.74c" path="1500K/Xe_124_1500K.ace" temperature="1.293e-07" zaid="54124"/>
|
||||
<ace_table alias="Xe-126.74c" awr="124.822" location="1" name="54126.74c" path="1500K/Xe_126_1500K.ace" temperature="1.293e-07" zaid="54126"/>
|
||||
<ace_table alias="Xe-128.74c" awr="126.804" location="1" name="54128.74c" path="1500K/Xe_128_1500K.ace" temperature="1.293e-07" zaid="54128"/>
|
||||
<ace_table alias="Xe-129.74c" awr="127.798" location="1" name="54129.74c" path="1500K/Xe_129_1500K.ace" temperature="1.293e-07" zaid="54129"/>
|
||||
<ace_table alias="Xe-130.74c" awr="128.788" location="1" name="54130.74c" path="1500K/Xe_130_1500K.ace" temperature="1.293e-07" zaid="54130"/>
|
||||
<ace_table alias="Xe-131.74c" awr="129.781" location="1" name="54131.74c" path="1500K/Xe_131_1500K.ace" temperature="1.293e-07" zaid="54131"/>
|
||||
<ace_table alias="Xe-132.74c" awr="130.77" location="1" name="54132.74c" path="1500K/Xe_132_1500K.ace" temperature="1.293e-07" zaid="54132"/>
|
||||
<ace_table alias="Xe-133.74c" awr="131.764" location="1" name="54133.74c" path="1500K/Xe_133_1500K.ace" temperature="1.293e-07" zaid="54133"/>
|
||||
<ace_table alias="Xe-134.74c" awr="132.76" location="1" name="54134.74c" path="1500K/Xe_134_1500K.ace" temperature="1.293e-07" zaid="54134"/>
|
||||
<ace_table alias="Xe-135.74c" awr="133.748" location="1" name="54135.74c" path="1500K/Xe_135_1500K.ace" temperature="1.293e-07" zaid="54135"/>
|
||||
<ace_table alias="Xe-136.74c" awr="134.74" location="1" name="54136.74c" path="1500K/Xe_136_1500K.ace" temperature="1.293e-07" zaid="54136"/>
|
||||
<ace_table alias="Cs-133.74c" awr="131.764" location="1" name="55133.74c" path="1500K/Cs_133_1500K.ace" temperature="1.293e-07" zaid="55133"/>
|
||||
<ace_table alias="Cs-134.74c" awr="132.757" location="1" name="55134.74c" path="1500K/Cs_134_1500K.ace" temperature="1.293e-07" zaid="55134"/>
|
||||
<ace_table alias="Cs-135.74c" awr="133.747" location="1" name="55135.74c" path="1500K/Cs_135_1500K.ace" temperature="1.293e-07" zaid="55135"/>
|
||||
<ace_table alias="Cs-136.74c" awr="134.739" location="1" name="55136.74c" path="1500K/Cs_136_1500K.ace" temperature="1.293e-07" zaid="55136"/>
|
||||
<ace_table alias="Cs-137.74c" awr="135.731" location="1" name="55137.74c" path="1500K/Cs_137_1500K.ace" temperature="1.293e-07" zaid="55137"/>
|
||||
<ace_table alias="Ba-130.74c" awr="128.79" location="1" name="56130.74c" path="1500K/Ba_130_1500K.ace" temperature="1.293e-07" zaid="56130"/>
|
||||
<ace_table alias="Ba-132.74c" awr="130.772" location="1" name="56132.74c" path="1500K/Ba_132_1500K.ace" temperature="1.293e-07" zaid="56132"/>
|
||||
<ace_table alias="Ba-133.74c" awr="131.764" location="1" name="56133.74c" path="1500K/Ba_133_1500K.ace" temperature="1.293e-07" zaid="56133"/>
|
||||
<ace_table alias="Ba-134.74c" awr="132.754" location="1" name="56134.74c" path="1500K/Ba_134_1500K.ace" temperature="1.293e-07" zaid="56134"/>
|
||||
<ace_table alias="Ba-135.74c" awr="133.747" location="1" name="56135.74c" path="1500K/Ba_135_1500K.ace" temperature="1.293e-07" zaid="56135"/>
|
||||
<ace_table alias="Ba-136.74c" awr="134.737" location="1" name="56136.74c" path="1500K/Ba_136_1500K.ace" temperature="1.293e-07" zaid="56136"/>
|
||||
<ace_table alias="Ba-137.74c" awr="135.73" location="1" name="56137.74c" path="1500K/Ba_137_1500K.ace" temperature="1.293e-07" zaid="56137"/>
|
||||
<ace_table alias="Ba-138.74c" awr="136.72" location="1" name="56138.74c" path="1500K/Ba_138_1500K.ace" temperature="1.293e-07" zaid="56138"/>
|
||||
<ace_table alias="Ba-140.74c" awr="138.708" location="1" name="56140.74c" path="1500K/Ba_140_1500K.ace" temperature="1.293e-07" zaid="56140"/>
|
||||
<ace_table alias="La-138.74c" awr="136.722" location="1" name="57138.74c" path="1500K/La_138_1500K.ace" temperature="1.293e-07" zaid="57138"/>
|
||||
<ace_table alias="La-139.74c" awr="137.71" location="1" name="57139.74c" path="1500K/La_139_1500K.ace" temperature="1.293e-07" zaid="57139"/>
|
||||
<ace_table alias="La-140.74c" awr="138.708" location="1" name="57140.74c" path="1500K/La_140_1500K.ace" temperature="1.293e-07" zaid="57140"/>
|
||||
<ace_table alias="Ce-136.74c" awr="134.74" location="1" name="58136.74c" path="1500K/Ce_136_1500K.ace" temperature="1.293e-07" zaid="58136"/>
|
||||
<ace_table alias="Ce-138.74c" awr="136.721" location="1" name="58138.74c" path="1500K/Ce_138_1500K.ace" temperature="1.293e-07" zaid="58138"/>
|
||||
<ace_table alias="Ce-139.74c" awr="137.713" location="1" name="58139.74c" path="1500K/Ce_139_1500K.ace" temperature="1.293e-07" zaid="58139"/>
|
||||
<ace_table alias="Ce-140.74c" awr="138.704" location="1" name="58140.74c" path="1500K/Ce_140_1500K.ace" temperature="1.293e-07" zaid="58140"/>
|
||||
<ace_table alias="Ce-141.74c" awr="139.7" location="1" name="58141.74c" path="1500K/Ce_141_1500K.ace" temperature="1.293e-07" zaid="58141"/>
|
||||
<ace_table alias="Ce-142.74c" awr="140.69" location="1" name="58142.74c" path="1500K/Ce_142_1500K.ace" temperature="1.293e-07" zaid="58142"/>
|
||||
<ace_table alias="Ce-143.74c" awr="141.685" location="1" name="58143.74c" path="1500K/Ce_143_1500K.ace" temperature="1.293e-07" zaid="58143"/>
|
||||
<ace_table alias="Ce-144.74c" awr="142.678" location="1" name="58144.74c" path="1500K/Ce_144_1500K.ace" temperature="1.293e-07" zaid="58144"/>
|
||||
<ace_table alias="Pr-141.74c" awr="139.697" location="1" name="59141.74c" path="1500K/Pr_141_1500K.ace" temperature="1.293e-07" zaid="59141"/>
|
||||
<ace_table alias="Pr-142.74c" awr="140.691" location="1" name="59142.74c" path="1500K/Pr_142_1500K.ace" temperature="1.293e-07" zaid="59142"/>
|
||||
<ace_table alias="Pr-143.74c" awr="141.683" location="1" name="59143.74c" path="1500K/Pr_143_1500K.ace" temperature="1.293e-07" zaid="59143"/>
|
||||
<ace_table alias="Nd-142.74c" awr="140.689" location="1" name="60142.74c" path="1500K/Nd_142_1500K.ace" temperature="1.293e-07" zaid="60142"/>
|
||||
<ace_table alias="Nd-143.74c" awr="141.682" location="1" name="60143.74c" path="1500K/Nd_143_1500K.ace" temperature="1.293e-07" zaid="60143"/>
|
||||
<ace_table alias="Nd-144.74c" awr="142.674" location="1" name="60144.74c" path="1500K/Nd_144_1500K.ace" temperature="1.293e-07" zaid="60144"/>
|
||||
<ace_table alias="Nd-145.74c" awr="143.668" location="1" name="60145.74c" path="1500K/Nd_145_1500K.ace" temperature="1.293e-07" zaid="60145"/>
|
||||
<ace_table alias="Nd-146.74c" awr="144.66" location="1" name="60146.74c" path="1500K/Nd_146_1500K.ace" temperature="1.293e-07" zaid="60146"/>
|
||||
<ace_table alias="Nd-147.74c" awr="145.654" location="1" name="60147.74c" path="1500K/Nd_147_1500K.ace" temperature="1.293e-07" zaid="60147"/>
|
||||
<ace_table alias="Nd-148.74c" awr="146.646" location="1" name="60148.74c" path="1500K/Nd_148_1500K.ace" temperature="1.293e-07" zaid="60148"/>
|
||||
<ace_table alias="Nd-150.74c" awr="148.633" location="1" name="60150.74c" path="1500K/Nd_150_1500K.ace" temperature="1.293e-07" zaid="60150"/>
|
||||
<ace_table alias="Pm-147.74c" awr="145.653" location="1" name="61147.74c" path="1500K/Pm_147_1500K.ace" temperature="1.293e-07" zaid="61147"/>
|
||||
<ace_table alias="Pm-148.74c" awr="146.646" location="1" name="61148.74c" path="1500K/Pm_148_1500K.ace" temperature="1.293e-07" zaid="61148"/>
|
||||
<ace_table alias="Pm-149.74c" awr="146.65" location="1" name="61149.74c" path="1500K/Pm_148m1_1500K.ace" temperature="1.293e-07" zaid="61149"/>
|
||||
<ace_table alias="Pm-149.74c" awr="147.639" location="1" name="61149.74c" path="1500K/Pm_149_1500K.ace" temperature="1.293e-07" zaid="61149"/>
|
||||
<ace_table alias="Pm-151.74c" awr="149.625" location="1" name="61151.74c" path="1500K/Pm_151_1500K.ace" temperature="1.293e-07" zaid="61151"/>
|
||||
<ace_table alias="Sm-144.74c" awr="142.676" location="1" name="62144.74c" path="1500K/Sm_144_1500K.ace" temperature="1.293e-07" zaid="62144"/>
|
||||
<ace_table alias="Sm-147.74c" awr="145.653" location="1" name="62147.74c" path="1500K/Sm_147_1500K.ace" temperature="1.293e-07" zaid="62147"/>
|
||||
<ace_table alias="Sm-148.74c" awr="146.644" location="1" name="62148.74c" path="1500K/Sm_148_1500K.ace" temperature="1.293e-07" zaid="62148"/>
|
||||
<ace_table alias="Sm-149.74c" awr="147.638" location="1" name="62149.74c" path="1500K/Sm_149_1500K.ace" temperature="1.293e-07" zaid="62149"/>
|
||||
<ace_table alias="Sm-150.74c" awr="148.629" location="1" name="62150.74c" path="1500K/Sm_150_1500K.ace" temperature="1.293e-07" zaid="62150"/>
|
||||
<ace_table alias="Sm-151.74c" awr="149.623" location="1" name="62151.74c" path="1500K/Sm_151_1500K.ace" temperature="1.293e-07" zaid="62151"/>
|
||||
<ace_table alias="Sm-152.74c" awr="150.615" location="1" name="62152.74c" path="1500K/Sm_152_1500K.ace" temperature="1.293e-07" zaid="62152"/>
|
||||
<ace_table alias="Sm-153.74c" awr="151.608" location="1" name="62153.74c" path="1500K/Sm_153_1500K.ace" temperature="1.293e-07" zaid="62153"/>
|
||||
<ace_table alias="Sm-154.74c" awr="152.6" location="1" name="62154.74c" path="1500K/Sm_154_1500K.ace" temperature="1.293e-07" zaid="62154"/>
|
||||
<ace_table alias="Eu-151.74c" awr="149.62" location="1" name="63151.74c" path="1500K/Eu_151_1500K.ace" temperature="1.293e-07" zaid="63151"/>
|
||||
<ace_table alias="Eu-152.74c" awr="150.617" location="1" name="63152.74c" path="1500K/Eu_152_1500K.ace" temperature="1.293e-07" zaid="63152"/>
|
||||
<ace_table alias="Eu-153.74c" awr="151.608" location="1" name="63153.74c" path="1500K/Eu_153_1500K.ace" temperature="1.293e-07" zaid="63153"/>
|
||||
<ace_table alias="Eu-154.74c" awr="152.6" location="1" name="63154.74c" path="1500K/Eu_154_1500K.ace" temperature="1.293e-07" zaid="63154"/>
|
||||
<ace_table alias="Eu-155.74c" awr="153.59" location="1" name="63155.74c" path="1500K/Eu_155_1500K.ace" temperature="1.293e-07" zaid="63155"/>
|
||||
<ace_table alias="Eu-156.74c" awr="154.586" location="1" name="63156.74c" path="1500K/Eu_156_1500K.ace" temperature="1.293e-07" zaid="63156"/>
|
||||
<ace_table alias="Eu-157.74c" awr="155.577" location="1" name="63157.74c" path="1500K/Eu_157_1500K.ace" temperature="1.293e-07" zaid="63157"/>
|
||||
<ace_table alias="Gd-152.74c" awr="150.615" location="1" name="64152.74c" path="1500K/Gd_152_1500K.ace" temperature="1.293e-07" zaid="64152"/>
|
||||
<ace_table alias="Gd-153.74c" awr="151.608" location="1" name="64153.74c" path="1500K/Gd_153_1500K.ace" temperature="1.293e-07" zaid="64153"/>
|
||||
<ace_table alias="Gd-154.74c" awr="152.599" location="1" name="64154.74c" path="1500K/Gd_154_1500K.ace" temperature="1.293e-07" zaid="64154"/>
|
||||
<ace_table alias="Gd-155.74c" awr="153.592" location="1" name="64155.74c" path="1500K/Gd_155_1500K.ace" temperature="1.293e-07" zaid="64155"/>
|
||||
<ace_table alias="Gd-156.74c" awr="154.583" location="1" name="64156.74c" path="1500K/Gd_156_1500K.ace" temperature="1.293e-07" zaid="64156"/>
|
||||
<ace_table alias="Gd-157.74c" awr="155.576" location="1" name="64157.74c" path="1500K/Gd_157_1500K.ace" temperature="1.293e-07" zaid="64157"/>
|
||||
<ace_table alias="Gd-158.74c" awr="156.567" location="1" name="64158.74c" path="1500K/Gd_158_1500K.ace" temperature="1.293e-07" zaid="64158"/>
|
||||
<ace_table alias="Gd-160.74c" awr="158.553" location="1" name="64160.74c" path="1500K/Gd_160_1500K.ace" temperature="1.293e-07" zaid="64160"/>
|
||||
<ace_table alias="Tb-159.74c" awr="157.56" location="1" name="65159.74c" path="1500K/Tb_159_1500K.ace" temperature="1.293e-07" zaid="65159"/>
|
||||
<ace_table alias="Tb-160.74c" awr="158.553" location="1" name="65160.74c" path="1500K/Tb_160_1500K.ace" temperature="1.293e-07" zaid="65160"/>
|
||||
<ace_table alias="Dy-156.74c" awr="154.585" location="1" name="66156.74c" path="1500K/Dy_156_1500K.ace" temperature="1.293e-07" zaid="66156"/>
|
||||
<ace_table alias="Dy-158.74c" awr="156.568" location="1" name="66158.74c" path="1500K/Dy_158_1500K.ace" temperature="1.293e-07" zaid="66158"/>
|
||||
<ace_table alias="Dy-160.74c" awr="158.551" location="1" name="66160.74c" path="1500K/Dy_160_1500K.ace" temperature="1.293e-07" zaid="66160"/>
|
||||
<ace_table alias="Dy-161.74c" awr="159.544" location="1" name="66161.74c" path="1500K/Dy_161_1500K.ace" temperature="1.293e-07" zaid="66161"/>
|
||||
<ace_table alias="Dy-162.74c" awr="160.536" location="1" name="66162.74c" path="1500K/Dy_162_1500K.ace" temperature="1.293e-07" zaid="66162"/>
|
||||
<ace_table alias="Dy-163.74c" awr="161.529" location="1" name="66163.74c" path="1500K/Dy_163_1500K.ace" temperature="1.293e-07" zaid="66163"/>
|
||||
<ace_table alias="Dy-164.74c" awr="162.521" location="1" name="66164.74c" path="1500K/Dy_164_1500K.ace" temperature="1.293e-07" zaid="66164"/>
|
||||
<ace_table alias="Ho-165.74c" awr="163.513" location="1" name="67165.74c" path="1500K/Ho_165_1500K.ace" temperature="1.293e-07" zaid="67165"/>
|
||||
<ace_table alias="Ho-169.74c" awr="164.507" location="1" name="67169.74c" path="1500K/Ho_166m1_1500K.ace" temperature="1.293e-07" zaid="67169"/>
|
||||
<ace_table alias="Er-162.74c" awr="160.538" location="1" name="68162.74c" path="1500K/Er_162_1500K.ace" temperature="1.293e-07" zaid="68162"/>
|
||||
<ace_table alias="Er-164.74c" awr="162.521" location="1" name="68164.74c" path="1500K/Er_164_1500K.ace" temperature="1.293e-07" zaid="68164"/>
|
||||
<ace_table alias="Er-166.74c" awr="164.505" location="1" name="68166.74c" path="1500K/Er_166_1500K.ace" temperature="1.293e-07" zaid="68166"/>
|
||||
<ace_table alias="Er-167.74c" awr="165.498" location="1" name="68167.74c" path="1500K/Er_167_1500K.ace" temperature="1.293e-07" zaid="68167"/>
|
||||
<ace_table alias="Er-168.74c" awr="166.487" location="1" name="68168.74c" path="1500K/Er_168_1500K.ace" temperature="1.293e-07" zaid="68168"/>
|
||||
<ace_table alias="Er-170.74c" awr="168.476" location="1" name="68170.74c" path="1500K/Er_170_1500K.ace" temperature="1.293e-07" zaid="68170"/>
|
||||
<ace_table alias="Tm-168.74c" awr="166.492" location="1" name="69168.74c" path="1500K/Tm_168_1500K.ace" temperature="1.293e-07" zaid="69168"/>
|
||||
<ace_table alias="Tm-169.74c" awr="167.483" location="1" name="69169.74c" path="1500K/Tm_169_1500K.ace" temperature="1.293e-07" zaid="69169"/>
|
||||
<ace_table alias="Tm-170.74c" awr="168.476" location="1" name="69170.74c" path="1500K/Tm_170_1500K.ace" temperature="1.293e-07" zaid="69170"/>
|
||||
<ace_table alias="Lu-175.74c" awr="173.438" location="1" name="71175.74c" path="1500K/Lu_175_1500K.ace" temperature="1.293e-07" zaid="71175"/>
|
||||
<ace_table alias="Lu-176.74c" awr="174.43" location="1" name="71176.74c" path="1500K/Lu_176_1500K.ace" temperature="1.293e-07" zaid="71176"/>
|
||||
<ace_table alias="Hf-174.74c" awr="172.446" location="1" name="72174.74c" path="1500K/Hf_174_1500K.ace" temperature="1.293e-07" zaid="72174"/>
|
||||
<ace_table alias="Hf-176.74c" awr="174.429" location="1" name="72176.74c" path="1500K/Hf_176_1500K.ace" temperature="1.293e-07" zaid="72176"/>
|
||||
<ace_table alias="Hf-177.74c" awr="175.42" location="1" name="72177.74c" path="1500K/Hf_177_1500K.ace" temperature="1.293e-07" zaid="72177"/>
|
||||
<ace_table alias="Hf-178.74c" awr="176.411" location="1" name="72178.74c" path="1500K/Hf_178_1500K.ace" temperature="1.293e-07" zaid="72178"/>
|
||||
<ace_table alias="Hf-179.74c" awr="177.413" location="1" name="72179.74c" path="1500K/Hf_179_1500K.ace" temperature="1.293e-07" zaid="72179"/>
|
||||
<ace_table alias="Hf-180.74c" awr="178.404" location="1" name="72180.74c" path="1500K/Hf_180_1500K.ace" temperature="1.293e-07" zaid="72180"/>
|
||||
<ace_table alias="Ta-180.74c" awr="178.4016" location="1" name="73180.74c" path="1500K/Ta_180_1500K.ace" temperature="1.293e-07" zaid="73180"/>
|
||||
<ace_table alias="Ta-181.74c" awr="179.3936" location="1" name="73181.74c" path="1500K/Ta_181_1500K.ace" temperature="1.293e-07" zaid="73181"/>
|
||||
<ace_table alias="Ta-182.74c" awr="180.387" location="1" name="73182.74c" path="1500K/Ta_182_1500K.ace" temperature="1.293e-07" zaid="73182"/>
|
||||
<ace_table alias="W-180.74c" awr="178.401" location="1" name="74180.74c" path="1500K/W_180_1500K.ace" temperature="1.293e-07" zaid="74180"/>
|
||||
<ace_table alias="W-182.74c" awr="180.385" location="1" name="74182.74c" path="1500K/W_182_1500K.ace" temperature="1.293e-07" zaid="74182"/>
|
||||
<ace_table alias="W-183.74c" awr="181.379" location="1" name="74183.74c" path="1500K/W_183_1500K.ace" temperature="1.293e-07" zaid="74183"/>
|
||||
<ace_table alias="W-184.74c" awr="182.371" location="1" name="74184.74c" path="1500K/W_184_1500K.ace" temperature="1.293e-07" zaid="74184"/>
|
||||
<ace_table alias="W-186.74c" awr="184.357" location="1" name="74186.74c" path="1500K/W_186_1500K.ace" temperature="1.293e-07" zaid="74186"/>
|
||||
<ace_table alias="Re-185.74c" awr="183.3641" location="1" name="75185.74c" path="1500K/Re_185_1500K.ace" temperature="1.293e-07" zaid="75185"/>
|
||||
<ace_table alias="Re-187.74c" awr="185.3497" location="1" name="75187.74c" path="1500K/Re_187_1500K.ace" temperature="1.293e-07" zaid="75187"/>
|
||||
<ace_table alias="Ir-191.74c" awr="189.32" location="1" name="77191.74c" path="1500K/Ir_191_1500K.ace" temperature="1.293e-07" zaid="77191"/>
|
||||
<ace_table alias="Ir-193.74c" awr="191.305" location="1" name="77193.74c" path="1500K/Ir_193_1500K.ace" temperature="1.293e-07" zaid="77193"/>
|
||||
<ace_table alias="Au-197.74c" awr="195.274" location="1" name="79197.74c" path="1500K/Au_197_1500K.ace" temperature="1.293e-07" zaid="79197"/>
|
||||
<ace_table alias="Hg-196.74c" awr="194.282" location="1" name="80196.74c" path="1500K/Hg_196_1500K.ace" temperature="1.293e-07" zaid="80196"/>
|
||||
<ace_table alias="Hg-198.74c" awr="196.266" location="1" name="80198.74c" path="1500K/Hg_198_1500K.ace" temperature="1.293e-07" zaid="80198"/>
|
||||
<ace_table alias="Hg-199.74c" awr="197.259" location="1" name="80199.74c" path="1500K/Hg_199_1500K.ace" temperature="1.293e-07" zaid="80199"/>
|
||||
<ace_table alias="Hg-200.74c" awr="198.25" location="1" name="80200.74c" path="1500K/Hg_200_1500K.ace" temperature="1.293e-07" zaid="80200"/>
|
||||
<ace_table alias="Hg-201.74c" awr="199.244" location="1" name="80201.74c" path="1500K/Hg_201_1500K.ace" temperature="1.293e-07" zaid="80201"/>
|
||||
<ace_table alias="Hg-202.74c" awr="200.236" location="1" name="80202.74c" path="1500K/Hg_202_1500K.ace" temperature="1.293e-07" zaid="80202"/>
|
||||
<ace_table alias="Hg-204.74c" awr="202.221" location="1" name="80204.74c" path="1500K/Hg_204_1500K.ace" temperature="1.293e-07" zaid="80204"/>
|
||||
<ace_table alias="Tl-203.74c" awr="201.229" location="1" name="81203.74c" path="1500K/Tl_203_1500K.ace" temperature="1.293e-07" zaid="81203"/>
|
||||
<ace_table alias="Tl-205.74c" awr="203.214" location="1" name="81205.74c" path="1500K/Tl_205_1500K.ace" temperature="1.293e-07" zaid="81205"/>
|
||||
<ace_table alias="Pb-204.74c" awr="202.2208" location="1" name="82204.74c" path="1500K/Pb_204_1500K.ace" temperature="1.293e-07" zaid="82204"/>
|
||||
<ace_table alias="Pb-206.74c" awr="204.205" location="1" name="82206.74c" path="1500K/Pb_206_1500K.ace" temperature="1.293e-07" zaid="82206"/>
|
||||
<ace_table alias="Pb-207.74c" awr="205.1979" location="1" name="82207.74c" path="1500K/Pb_207_1500K.ace" temperature="1.293e-07" zaid="82207"/>
|
||||
<ace_table alias="Pb-208.74c" awr="206.19" location="1" name="82208.74c" path="1500K/Pb_208_1500K.ace" temperature="1.293e-07" zaid="82208"/>
|
||||
<ace_table alias="Bi-209.74c" awr="207.185" location="1" name="83209.74c" path="1500K/Bi_209_1500K.ace" temperature="1.293e-07" zaid="83209"/>
|
||||
<ace_table alias="Ra-223.74c" awr="221.103" location="1" name="88223.74c" path="1500K/Ra_223_1500K.ace" temperature="1.293e-07" zaid="88223"/>
|
||||
<ace_table alias="Ra-224.74c" awr="222.096" location="1" name="88224.74c" path="1500K/Ra_224_1500K.ace" temperature="1.293e-07" zaid="88224"/>
|
||||
<ace_table alias="Ra-225.74c" awr="223.091" location="1" name="88225.74c" path="1500K/Ra_225_1500K.ace" temperature="1.293e-07" zaid="88225"/>
|
||||
<ace_table alias="Ra-226.74c" awr="224.084" location="1" name="88226.74c" path="1500K/Ra_226_1500K.ace" temperature="1.293e-07" zaid="88226"/>
|
||||
<ace_table alias="Ac-225.74c" awr="223.09" location="1" name="89225.74c" path="1500K/Ac_225_1500K.ace" temperature="1.293e-07" zaid="89225"/>
|
||||
<ace_table alias="Ac-226.74c" awr="224.084" location="1" name="89226.74c" path="1500K/Ac_226_1500K.ace" temperature="1.293e-07" zaid="89226"/>
|
||||
<ace_table alias="Ac-227.74c" awr="225.077" location="1" name="89227.74c" path="1500K/Ac_227_1500K.ace" temperature="1.293e-07" zaid="89227"/>
|
||||
<ace_table alias="Th-227.74c" awr="225.077" location="1" name="90227.74c" path="1500K/Th_227_1500K.ace" temperature="1.293e-07" zaid="90227"/>
|
||||
<ace_table alias="Th-228.74c" awr="226.07" location="1" name="90228.74c" path="1500K/Th_228_1500K.ace" temperature="1.293e-07" zaid="90228"/>
|
||||
<ace_table alias="Th-229.74c" awr="227.064" location="1" name="90229.74c" path="1500K/Th_229_1500K.ace" temperature="1.293e-07" zaid="90229"/>
|
||||
<ace_table alias="Th-230.74c" awr="228.057" location="1" name="90230.74c" path="1500K/Th_230_1500K.ace" temperature="1.293e-07" zaid="90230"/>
|
||||
<ace_table alias="Th-231.74c" awr="229.052" location="1" name="90231.74c" path="1500K/Th_231_1500K.ace" temperature="1.293e-07" zaid="90231"/>
|
||||
<ace_table alias="Th-232.74c" awr="230.045" location="1" name="90232.74c" path="1500K/Th_232_1500K.ace" temperature="1.293e-07" zaid="90232"/>
|
||||
<ace_table alias="Th-233.74c" awr="231.04" location="1" name="90233.74c" path="1500K/Th_233_1500K.ace" temperature="1.293e-07" zaid="90233"/>
|
||||
<ace_table alias="Th-234.74c" awr="232.033" location="1" name="90234.74c" path="1500K/Th_234_1500K.ace" temperature="1.293e-07" zaid="90234"/>
|
||||
<ace_table alias="Pa-229.74c" awr="227.065" location="1" name="91229.74c" path="1500K/Pa_229_1500K.ace" temperature="1.293e-07" zaid="91229"/>
|
||||
<ace_table alias="Pa-230.74c" awr="228.058" location="1" name="91230.74c" path="1500K/Pa_230_1500K.ace" temperature="1.293e-07" zaid="91230"/>
|
||||
<ace_table alias="Pa-231.74c" awr="229.051" location="1" name="91231.74c" path="1500K/Pa_231_1500K.ace" temperature="1.293e-07" zaid="91231"/>
|
||||
<ace_table alias="Pa-232.74c" awr="230.045" location="1" name="91232.74c" path="1500K/Pa_232_1500K.ace" temperature="1.293e-07" zaid="91232"/>
|
||||
<ace_table alias="Pa-233.74c" awr="231.038" location="1" name="91233.74c" path="1500K/Pa_233_1500K.ace" temperature="1.293e-07" zaid="91233"/>
|
||||
<ace_table alias="U-230.74c" awr="228.058" location="1" name="92230.74c" path="1500K/U_230_1500K.ace" temperature="1.293e-07" zaid="92230"/>
|
||||
<ace_table alias="U-231.74c" awr="229.052" location="1" name="92231.74c" path="1500K/U_231_1500K.ace" temperature="1.293e-07" zaid="92231"/>
|
||||
<ace_table alias="U-232.74c" awr="230.044" location="1" name="92232.74c" path="1500K/U_232_1500K.ace" temperature="1.293e-07" zaid="92232"/>
|
||||
<ace_table alias="U-233.74c" awr="231.0377" location="1" name="92233.74c" path="1500K/U_233_1500K.ace" temperature="1.293e-07" zaid="92233"/>
|
||||
<ace_table alias="U-234.74c" awr="232.0304" location="1" name="92234.74c" path="1500K/U_234_1500K.ace" temperature="1.293e-07" zaid="92234"/>
|
||||
<ace_table alias="U-235.74c" awr="233.0248" location="1" name="92235.74c" path="1500K/U_235_1500K.ace" temperature="1.293e-07" zaid="92235"/>
|
||||
<ace_table alias="U-236.74c" awr="234.0178" location="1" name="92236.74c" path="1500K/U_236_1500K.ace" temperature="1.293e-07" zaid="92236"/>
|
||||
<ace_table alias="U-237.74c" awr="235.0124" location="1" name="92237.74c" path="1500K/U_237_1500K.ace" temperature="1.293e-07" zaid="92237"/>
|
||||
<ace_table alias="U-238.74c" awr="236.0058" location="1" name="92238.74c" path="1500K/U_238_1500K.ace" temperature="1.293e-07" zaid="92238"/>
|
||||
<ace_table alias="U-239.74c" awr="237.0007" location="1" name="92239.74c" path="1500K/U_239_1500K.ace" temperature="1.293e-07" zaid="92239"/>
|
||||
<ace_table alias="U-240.74c" awr="237.9944" location="1" name="92240.74c" path="1500K/U_240_1500K.ace" temperature="1.293e-07" zaid="92240"/>
|
||||
<ace_table alias="U-241.74c" awr="238.9895" location="1" name="92241.74c" path="1500K/U_241_1500K.ace" temperature="1.293e-07" zaid="92241"/>
|
||||
<ace_table alias="Np-234.74c" awr="232.032" location="1" name="93234.74c" path="1500K/Np_234_1500K.ace" temperature="1.293e-07" zaid="93234"/>
|
||||
<ace_table alias="Np-235.74c" awr="233.025" location="1" name="93235.74c" path="1500K/Np_235_1500K.ace" temperature="1.293e-07" zaid="93235"/>
|
||||
<ace_table alias="Np-236.74c" awr="234.019" location="1" name="93236.74c" path="1500K/Np_236_1500K.ace" temperature="1.293e-07" zaid="93236"/>
|
||||
<ace_table alias="Np-237.74c" awr="235.0118" location="1" name="93237.74c" path="1500K/Np_237_1500K.ace" temperature="1.293e-07" zaid="93237"/>
|
||||
<ace_table alias="Np-238.74c" awr="236.006" location="1" name="93238.74c" path="1500K/Np_238_1500K.ace" temperature="1.293e-07" zaid="93238"/>
|
||||
<ace_table alias="Np-239.74c" awr="236.999" location="1" name="93239.74c" path="1500K/Np_239_1500K.ace" temperature="1.293e-07" zaid="93239"/>
|
||||
<ace_table alias="Pu-236.74c" awr="234.018" location="1" name="94236.74c" path="1500K/Pu_236_1500K.ace" temperature="1.293e-07" zaid="94236"/>
|
||||
<ace_table alias="Pu-237.74c" awr="235.012" location="1" name="94237.74c" path="1500K/Pu_237_1500K.ace" temperature="1.293e-07" zaid="94237"/>
|
||||
<ace_table alias="Pu-238.74c" awr="236.0046" location="1" name="94238.74c" path="1500K/Pu_238_1500K.ace" temperature="1.293e-07" zaid="94238"/>
|
||||
<ace_table alias="Pu-239.74c" awr="236.9986" location="1" name="94239.74c" path="1500K/Pu_239_1500K.ace" temperature="1.293e-07" zaid="94239"/>
|
||||
<ace_table alias="Pu-240.74c" awr="237.9916" location="1" name="94240.74c" path="1500K/Pu_240_1500K.ace" temperature="1.293e-07" zaid="94240"/>
|
||||
<ace_table alias="Pu-241.74c" awr="238.978" location="1" name="94241.74c" path="1500K/Pu_241_1500K.ace" temperature="1.293e-07" zaid="94241"/>
|
||||
<ace_table alias="Pu-242.74c" awr="239.979" location="1" name="94242.74c" path="1500K/Pu_242_1500K.ace" temperature="1.293e-07" zaid="94242"/>
|
||||
<ace_table alias="Pu-243.74c" awr="240.974" location="1" name="94243.74c" path="1500K/Pu_243_1500K.ace" temperature="1.293e-07" zaid="94243"/>
|
||||
<ace_table alias="Pu-244.74c" awr="241.967" location="1" name="94244.74c" path="1500K/Pu_244_1500K.ace" temperature="1.293e-07" zaid="94244"/>
|
||||
<ace_table alias="Pu-246.74c" awr="243.956" location="1" name="94246.74c" path="1500K/Pu_246_1500K.ace" temperature="1.293e-07" zaid="94246"/>
|
||||
<ace_table alias="Am-240.74c" awr="237.993" location="1" name="95240.74c" path="1500K/Am_240_1500K.ace" temperature="1.293e-07" zaid="95240"/>
|
||||
<ace_table alias="Am-241.74c" awr="238.986" location="1" name="95241.74c" path="1500K/Am_241_1500K.ace" temperature="1.293e-07" zaid="95241"/>
|
||||
<ace_table alias="Am-242m.74c" awr="239.9801" location="1" metastable="1" name="95242.74c" path="1500K/Am_242_1500K.ace" temperature="1.293e-07" zaid="95242"/>
|
||||
<ace_table alias="Am-249.74c" awr="239.9801" location="1" name="95249.74c" path="1500K/Am_242m1_1500K.ace" temperature="1.293e-07" zaid="95249"/>
|
||||
<ace_table alias="Am-243.74c" awr="240.9734" location="1" name="95243.74c" path="1500K/Am_243_1500K.ace" temperature="1.293e-07" zaid="95243"/>
|
||||
<ace_table alias="Am-244.74c" awr="241.968" location="1" name="95244.74c" path="1500K/Am_244_1500K.ace" temperature="1.293e-07" zaid="95244"/>
|
||||
<ace_table alias="Am-249.74c" awr="241.968" location="1" name="95249.74c" path="1500K/Am_244m1_1500K.ace" temperature="1.293e-07" zaid="95249"/>
|
||||
<ace_table alias="Cm-240.74c" awr="237.993" location="1" name="96240.74c" path="1500K/Cm_240_1500K.ace" temperature="1.293e-07" zaid="96240"/>
|
||||
<ace_table alias="Cm-241.74c" awr="238.987" location="1" name="96241.74c" path="1500K/Cm_241_1500K.ace" temperature="1.293e-07" zaid="96241"/>
|
||||
<ace_table alias="Cm-242.74c" awr="239.979" location="1" name="96242.74c" path="1500K/Cm_242_1500K.ace" temperature="1.293e-07" zaid="96242"/>
|
||||
<ace_table alias="Cm-243.74c" awr="240.973" location="1" name="96243.74c" path="1500K/Cm_243_1500K.ace" temperature="1.293e-07" zaid="96243"/>
|
||||
<ace_table alias="Cm-244.74c" awr="241.966" location="1" name="96244.74c" path="1500K/Cm_244_1500K.ace" temperature="1.293e-07" zaid="96244"/>
|
||||
<ace_table alias="Cm-245.74c" awr="242.96" location="1" name="96245.74c" path="1500K/Cm_245_1500K.ace" temperature="1.293e-07" zaid="96245"/>
|
||||
<ace_table alias="Cm-246.74c" awr="243.953" location="1" name="96246.74c" path="1500K/Cm_246_1500K.ace" temperature="1.293e-07" zaid="96246"/>
|
||||
<ace_table alias="Cm-247.74c" awr="244.948" location="1" name="96247.74c" path="1500K/Cm_247_1500K.ace" temperature="1.293e-07" zaid="96247"/>
|
||||
<ace_table alias="Cm-248.74c" awr="245.941" location="1" name="96248.74c" path="1500K/Cm_248_1500K.ace" temperature="1.293e-07" zaid="96248"/>
|
||||
<ace_table alias="Cm-249.74c" awr="246.936" location="1" name="96249.74c" path="1500K/Cm_249_1500K.ace" temperature="1.293e-07" zaid="96249"/>
|
||||
<ace_table alias="Cm-250.74c" awr="247.93" location="1" name="96250.74c" path="1500K/Cm_250_1500K.ace" temperature="1.293e-07" zaid="96250"/>
|
||||
<ace_table alias="Bk-245.74c" awr="242.961" location="1" name="97245.74c" path="1500K/Bk_245_1500K.ace" temperature="1.293e-07" zaid="97245"/>
|
||||
<ace_table alias="Bk-246.74c" awr="243.955" location="1" name="97246.74c" path="1500K/Bk_246_1500K.ace" temperature="1.293e-07" zaid="97246"/>
|
||||
<ace_table alias="Bk-247.74c" awr="244.948" location="1" name="97247.74c" path="1500K/Bk_247_1500K.ace" temperature="1.293e-07" zaid="97247"/>
|
||||
<ace_table alias="Bk-248.74c" awr="245.942" location="1" name="97248.74c" path="1500K/Bk_248_1500K.ace" temperature="1.293e-07" zaid="97248"/>
|
||||
<ace_table alias="Bk-249.74c" awr="246.935" location="1" name="97249.74c" path="1500K/Bk_249_1500K.ace" temperature="1.293e-07" zaid="97249"/>
|
||||
<ace_table alias="Bk-250.74c" awr="247.93" location="1" name="97250.74c" path="1500K/Bk_250_1500K.ace" temperature="1.293e-07" zaid="97250"/>
|
||||
<ace_table alias="Cf-246.74c" awr="243.955" location="1" name="98246.74c" path="1500K/Cf_246_1500K.ace" temperature="1.293e-07" zaid="98246"/>
|
||||
<ace_table alias="Cf-248.74c" awr="245.941" location="1" name="98248.74c" path="1500K/Cf_248_1500K.ace" temperature="1.293e-07" zaid="98248"/>
|
||||
<ace_table alias="Cf-249.74c" awr="246.935" location="1" name="98249.74c" path="1500K/Cf_249_1500K.ace" temperature="1.293e-07" zaid="98249"/>
|
||||
<ace_table alias="Cf-250.74c" awr="247.928" location="1" name="98250.74c" path="1500K/Cf_250_1500K.ace" temperature="1.293e-07" zaid="98250"/>
|
||||
<ace_table alias="Cf-251.74c" awr="248.923" location="1" name="98251.74c" path="1500K/Cf_251_1500K.ace" temperature="1.293e-07" zaid="98251"/>
|
||||
<ace_table alias="Cf-252.74c" awr="249.916" location="1" name="98252.74c" path="1500K/Cf_252_1500K.ace" temperature="1.293e-07" zaid="98252"/>
|
||||
<ace_table alias="Cf-253.74c" awr="250.911" location="1" name="98253.74c" path="1500K/Cf_253_1500K.ace" temperature="1.293e-07" zaid="98253"/>
|
||||
<ace_table alias="Cf-254.74c" awr="251.905" location="1" name="98254.74c" path="1500K/Cf_254_1500K.ace" temperature="1.293e-07" zaid="98254"/>
|
||||
<ace_table alias="Es-251.74c" awr="248.923" location="1" name="99251.74c" path="1500K/Es_251_1500K.ace" temperature="1.293e-07" zaid="99251"/>
|
||||
<ace_table alias="Es-252.74c" awr="249.917" location="1" name="99252.74c" path="1500K/Es_252_1500K.ace" temperature="1.293e-07" zaid="99252"/>
|
||||
<ace_table alias="Es-253.74c" awr="250.911" location="1" name="99253.74c" path="1500K/Es_253_1500K.ace" temperature="1.293e-07" zaid="99253"/>
|
||||
<ace_table alias="Es-254.74c" awr="251.905" location="1" name="99254.74c" path="1500K/Es_254_1500K.ace" temperature="1.293e-07" zaid="99254"/>
|
||||
<ace_table alias="Es-259.74c" awr="251.905" location="1" name="99259.74c" path="1500K/Es_254m1_1500K.ace" temperature="1.293e-07" zaid="99259"/>
|
||||
<ace_table alias="Es-255.74c" awr="252.899" location="1" name="99255.74c" path="1500K/Es_255_1500K.ace" temperature="1.293e-07" zaid="99255"/>
|
||||
<ace_table alias="Fm-255.74c" awr="252.899" location="1" name="100255.74c" path="1500K/Fm_255_1500K.ace" temperature="1.293e-07" zaid="100255"/>
|
||||
<ace_table awr="26.74975" location="1" name="Al.71t" path="tsl/al.acer" temperature="2.53e-08" zaid="0"/>
|
||||
<ace_table awr="8.93478" location="1" name="BeBeO.71t" path="tsl/bebeo.acer" temperature="2.53e-08" zaid="0"/>
|
||||
<ace_table awr="8.93478" location="1" name="Be.71t" path="tsl/be.acer" temperature="2.551e-08" zaid="0"/>
|
||||
|
|
|
|||
|
|
@ -453,12 +453,12 @@
|
|||
<ace_table alias="Co-59.12c" awr="58.426899" location="1" name="27059.12c" path="27059ENDF7.ace" temperature="1.034e-07" zaid="27059"/>
|
||||
<ace_table alias="Co-59.15c" awr="58.426899" location="47907" name="27059.15c" path="27059ENDF7.ace" temperature="1.293e-07" zaid="27059"/>
|
||||
<ace_table alias="Co-59.18c" awr="58.426899" location="95695" name="27059.18c" path="27059ENDF7.ace" temperature="1.551e-07" zaid="27059"/>
|
||||
<ace_table alias="Co-158m.03c" awr="57.438099" location="9465" metastable="1" name="27358.03c" path="27358ENDF7.ace" temperature="2.585e-08" zaid="27358"/>
|
||||
<ace_table alias="Co-158m.06c" awr="57.438099" location="12631" metastable="1" name="27358.06c" path="27358ENDF7.ace" temperature="5.17e-08" zaid="27358"/>
|
||||
<ace_table alias="Co-158m.09c" awr="57.438099" location="15789" metastable="1" name="27358.09c" path="27358ENDF7.ace" temperature="7.756e-08" zaid="27358"/>
|
||||
<ace_table alias="Co-158m.12c" awr="57.438099" location="1" metastable="1" name="27358.12c" path="27358ENDF7.ace" temperature="1.034e-07" zaid="27358"/>
|
||||
<ace_table alias="Co-158m.15c" awr="57.438099" location="3152" metastable="1" name="27358.15c" path="27358ENDF7.ace" temperature="1.293e-07" zaid="27358"/>
|
||||
<ace_table alias="Co-158m.18c" awr="57.438099" location="6305" metastable="1" name="27358.18c" path="27358ENDF7.ace" temperature="1.551e-07" zaid="27358"/>
|
||||
<ace_table alias="Co-58m.03c" awr="57.438099" location="9465" metastable="1" name="27358.03c" path="27358ENDF7.ace" temperature="2.585e-08" zaid="27358"/>
|
||||
<ace_table alias="Co-58m.06c" awr="57.438099" location="12631" metastable="1" name="27358.06c" path="27358ENDF7.ace" temperature="5.17e-08" zaid="27358"/>
|
||||
<ace_table alias="Co-58m.09c" awr="57.438099" location="15789" metastable="1" name="27358.09c" path="27358ENDF7.ace" temperature="7.756e-08" zaid="27358"/>
|
||||
<ace_table alias="Co-58m.12c" awr="57.438099" location="1" metastable="1" name="27358.12c" path="27358ENDF7.ace" temperature="1.034e-07" zaid="27358"/>
|
||||
<ace_table alias="Co-58m.15c" awr="57.438099" location="3152" metastable="1" name="27358.15c" path="27358ENDF7.ace" temperature="1.293e-07" zaid="27358"/>
|
||||
<ace_table alias="Co-58m.18c" awr="57.438099" location="6305" metastable="1" name="27358.18c" path="27358ENDF7.ace" temperature="1.551e-07" zaid="27358"/>
|
||||
<ace_table alias="Ni-Nat.03c" awr="58.1838" location="309404" name="28000.03c" path="28000JNDL32.ace" temperature="2.585e-08" zaid="28000"/>
|
||||
<ace_table alias="Ni-Nat.06c" awr="58.1838" location="413232" name="28000.06c" path="28000JNDL32.ace" temperature="5.17e-08" zaid="28000"/>
|
||||
<ace_table alias="Ni-Nat.09c" awr="58.1838" location="516809" name="28000.09c" path="28000JNDL32.ace" temperature="7.756e-08" zaid="28000"/>
|
||||
|
|
@ -2422,12 +2422,12 @@
|
|||
<ace_table alias="Am-241.12c" awr="238.985992" location="1" name="95241.12c" path="95241ENDF7.ace" temperature="1.034e-07" zaid="95241"/>
|
||||
<ace_table alias="Am-241.15c" awr="238.985992" location="31077" name="95241.15c" path="95241ENDF7.ace" temperature="1.293e-07" zaid="95241"/>
|
||||
<ace_table alias="Am-241.18c" awr="238.985992" location="61491" name="95241.18c" path="95241ENDF7.ace" temperature="1.551e-07" zaid="95241"/>
|
||||
<ace_table alias="Am-242.03c" awr="239.980103" location="94457" metastable="1" name="95242.03c" path="95242ENDF7.ace" temperature="2.585e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-242.06c" awr="239.980103" location="126665" metastable="1" name="95242.06c" path="95242ENDF7.ace" temperature="5.17e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-242.09c" awr="239.980103" location="158587" metastable="1" name="95242.09c" path="95242ENDF7.ace" temperature="7.756e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-242.12c" awr="239.980103" location="1" metastable="1" name="95242.12c" path="95242ENDF7.ace" temperature="1.034e-07" zaid="95242"/>
|
||||
<ace_table alias="Am-242.15c" awr="239.980103" location="31580" metastable="1" name="95242.15c" path="95242ENDF7.ace" temperature="1.293e-07" zaid="95242"/>
|
||||
<ace_table alias="Am-242.18c" awr="239.980103" location="63058" metastable="1" name="95242.18c" path="95242ENDF7.ace" temperature="1.551e-07" zaid="95242"/>
|
||||
<ace_table alias="Am-242.03c" awr="239.980103" location="94457" name="95242.03c" path="95242ENDF7.ace" temperature="2.585e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-242.06c" awr="239.980103" location="126665" name="95242.06c" path="95242ENDF7.ace" temperature="5.17e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-242.09c" awr="239.980103" location="158587" name="95242.09c" path="95242ENDF7.ace" temperature="7.756e-08" zaid="95242"/>
|
||||
<ace_table alias="Am-242.12c" awr="239.980103" location="1" name="95242.12c" path="95242ENDF7.ace" temperature="1.034e-07" zaid="95242"/>
|
||||
<ace_table alias="Am-242.15c" awr="239.980103" location="31580" name="95242.15c" path="95242ENDF7.ace" temperature="1.293e-07" zaid="95242"/>
|
||||
<ace_table alias="Am-242.18c" awr="239.980103" location="63058" name="95242.18c" path="95242ENDF7.ace" temperature="1.551e-07" zaid="95242"/>
|
||||
<ace_table alias="Am-243.03c" awr="240.973404" location="101763" name="95243.03c" path="95243ENDF7.ace" temperature="2.585e-08" zaid="95243"/>
|
||||
<ace_table alias="Am-243.06c" awr="240.973404" location="142713" name="95243.06c" path="95243ENDF7.ace" temperature="5.17e-08" zaid="95243"/>
|
||||
<ace_table alias="Am-243.09c" awr="240.973404" location="180357" name="95243.09c" path="95243ENDF7.ace" temperature="7.756e-08" zaid="95243"/>
|
||||
|
|
|
|||
|
|
@ -6,17 +6,19 @@ import shutil
|
|||
import subprocess
|
||||
import sys
|
||||
import tarfile
|
||||
import glob
|
||||
|
||||
try:
|
||||
from urllib.request import urlopen
|
||||
except ImportError:
|
||||
from urllib2 import urlopen
|
||||
|
||||
cwd = os.getcwd()
|
||||
sys.path.append(os.path.join(cwd, '..', 'src', 'utils'))
|
||||
from convert_binary import ascii_to_binary
|
||||
|
||||
baseUrl = 'http://www.nndc.bnl.gov/endf/b7.1/aceFiles/'
|
||||
files = ['ENDF-B-VII.1-neutron-293.6K.tar.gz',
|
||||
'ENDF-B-VII.1-neutron-300K.tar.gz',
|
||||
'ENDF-B-VII.1-neutron-900K.tar.gz',
|
||||
'ENDF-B-VII.1-neutron-1500K.tar.gz',
|
||||
'ENDF-B-VII.1-tsl.tar.gz']
|
||||
block_size = 16384
|
||||
|
||||
|
|
@ -30,7 +32,10 @@ for f in files:
|
|||
req = urlopen(url)
|
||||
|
||||
# Get file size from header
|
||||
file_size = int(req.info().getheaders('Content-Length')[0])
|
||||
if sys.version_info[0] < 3:
|
||||
file_size = int(req.info().getheaders('Content-Length')[0])
|
||||
else:
|
||||
file_size = req.length
|
||||
downloaded = 0
|
||||
|
||||
# Check if file already downloaded
|
||||
|
|
@ -73,6 +78,17 @@ for f in files:
|
|||
print('Extracting {0}...'.format(f))
|
||||
tgz.extractall(path='nndc/' + suffix)
|
||||
|
||||
#===============================================================================
|
||||
# EDIT GRAPHITE ZAID (6012 to 6000)
|
||||
|
||||
print('Changing graphite ZAID from 6012 to 6000')
|
||||
graphite = os.path.join('nndc', 'tsl', 'graphite.acer')
|
||||
with open(graphite) as fh:
|
||||
text = fh.read()
|
||||
text = text.replace('6012', '6000', 1)
|
||||
with open(graphite, 'w') as fh:
|
||||
fh.write(text)
|
||||
|
||||
# ==============================================================================
|
||||
# COPY CROSS_SECTIONS.XML
|
||||
|
||||
|
|
@ -94,3 +110,43 @@ if not response or response.lower().startswith('y'):
|
|||
if os.path.exists(f):
|
||||
print('Removing {0}...'.format(f))
|
||||
os.remove(f)
|
||||
|
||||
# ==============================================================================
|
||||
# PROMPT USER TO CONVERT ASCII TO BINARY
|
||||
|
||||
# Ask user to convert
|
||||
if sys.version_info[0] < 3:
|
||||
response = raw_input('Convert ACE files to binary? ([y]/n) ')
|
||||
else:
|
||||
response = input('Convert ACE files to binary? ([y]/n) ')
|
||||
|
||||
# Convert files if requested
|
||||
if not response or response.lower().startswith('y'):
|
||||
|
||||
# get a list of directories
|
||||
ace_dirs = glob.glob(os.path.join('nndc', '*K'))
|
||||
ace_dirs += glob.glob(os.path.join('nndc', 'tsl'))
|
||||
|
||||
# loop around ace directories
|
||||
for d in ace_dirs:
|
||||
print('Converting {0}...'.format(d))
|
||||
|
||||
# get a list of files to convert
|
||||
ace_files = glob.glob(os.path.join(d, '*.ace*'))
|
||||
|
||||
# convert files
|
||||
for f in ace_files:
|
||||
print(' Converting {0}...'.format(os.path.split(f)[1]))
|
||||
ascii_to_binary(f, f)
|
||||
|
||||
# Change cross_sections.xml file
|
||||
xs_file = os.path.join('nndc', 'cross_sections.xml')
|
||||
asc_str = "<filetype>ascii</filetype>"
|
||||
bin_str = "<filetype> binary </filetype>\n "
|
||||
bin_str += "<record_length> 4096 </record_length>\n "
|
||||
bin_str += "<entries> 512 </entries>"
|
||||
with open(xs_file) as fh:
|
||||
text = fh.read()
|
||||
text = text.replace(asc_str, bin_str)
|
||||
with open(xs_file, 'w') as fh:
|
||||
fh.write(text)
|
||||
|
|
|
|||
|
|
@ -46,9 +46,9 @@ copyright = u'2011-2014, Massachusetts Institute of Technology'
|
|||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = "0.5"
|
||||
version = "0.6"
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = "0.5.3"
|
||||
release = "0.6.0"
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ as debugging.
|
|||
|
||||
.. toctree::
|
||||
:numbered:
|
||||
:maxdepth: 2
|
||||
:maxdepth: 3
|
||||
|
||||
structures
|
||||
styleguide
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ following criteria must be satisfied for all proposed changes:
|
|||
|
||||
- Changes have a clear purpose and are useful.
|
||||
- Compiles under all conditions (MPI, OpenMP, HDF5, etc.). This is checked as
|
||||
part of the test suite (see `test_compile.py`_).
|
||||
part of the test suite.
|
||||
- Passes the regression suite.
|
||||
- If appropriate, test cases are added to regression suite.
|
||||
- No memory leaks (checked with valgrind_).
|
||||
|
|
@ -91,6 +91,133 @@ features and bug fixes. The general steps for contributing are as follows:
|
|||
6. After the pull request has been thoroughly vetted, it is merged back into the
|
||||
*develop* branch of mit-crpg/openmc.
|
||||
|
||||
.. _test suite:
|
||||
|
||||
OpenMC Test Suite
|
||||
-----------------
|
||||
|
||||
The purpose of this test suite is to ensure that OpenMC compiles using various
|
||||
combinations of compiler flags and options, and that all user input options can
|
||||
be used successfully without breaking the code. The test suite is comprised of
|
||||
regression tests where different types of input files are configured and the
|
||||
full OpenMC code is executed. Results from simulations are compared with
|
||||
expected results. The test suite is comprised of many build configurations
|
||||
(e.g. debug, mpi, hdf5) and the actual tests which reside in sub-directories
|
||||
in the tests directory. We recommend to developers to test their branches
|
||||
before submitting a formal pull request using gfortran and intel compilers
|
||||
if available.
|
||||
|
||||
The test suite is designed to integrate with cmake using ctest_.
|
||||
It is configured to run with cross sections from NNDC_. To
|
||||
download these cross sections please do the following:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
cd ../data
|
||||
python get_nndc.py
|
||||
export CROSS_SECTIONS=<path_to_data_folder>/nndc/cross_sections.xml
|
||||
|
||||
The test suite can be run on an already existing build using:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
cd build
|
||||
make test
|
||||
|
||||
or
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
cd build
|
||||
ctest
|
||||
|
||||
There are numerous ctest_ command line options that can be set to have
|
||||
more control over which tests are executed.
|
||||
|
||||
Before running the test suite python script, the following environmental
|
||||
variables should be set if the default paths are incorrect:
|
||||
|
||||
* **FC** - The command of the Fortran compiler (e.g. gfotran, ifort).
|
||||
|
||||
* Default - *gfortran*
|
||||
|
||||
* **MPI_DIR** - The path to the MPI directory.
|
||||
|
||||
* Default - */opt/mpich/3.1-gnu*
|
||||
|
||||
* **HDF5_DIR** - The path to the HDF5 directory.
|
||||
|
||||
* Default - */opt/hdf5/1.8.12-gnu*
|
||||
|
||||
* **PHDF5_DIR** - The path to the parallel HDF5 directory.
|
||||
|
||||
* Default - */opt/phdf5/1.8.12-gnu*
|
||||
|
||||
* **PETSC_DIR** - The path to the PETSc directory.
|
||||
|
||||
* Default - */opt/petsc/3.4.4-gnu*
|
||||
|
||||
To run the full test suite, the following command can be executed in the
|
||||
tests directory:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
python run_tests.py
|
||||
|
||||
A subset of build configurations and/or tests can be run. To see how to use
|
||||
the script run:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
python run_tests.py --help
|
||||
|
||||
As an example, say we want to run all tests with debug flags only on tests
|
||||
that have cone and plot in their name. Also, we would like to run this on
|
||||
4 processors. We can run:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
python run_tests.py -j 4 -C debug -R "cone|plot"
|
||||
|
||||
Note that standard regular expression syntax is used for selecting build
|
||||
configurations and tests. To print out a list of build configurations, we
|
||||
can run:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
python run_tests.py -p
|
||||
|
||||
Adding tests to test suite
|
||||
++++++++++++++++++++++++++
|
||||
|
||||
To add a new test to the test suite, create a sub-directory in the tests
|
||||
directory that conforms to the regular expression *test_*. To configure
|
||||
a test you need to add the following files to your new test directory,
|
||||
*test_name* for example:
|
||||
|
||||
* OpenMC input XML files
|
||||
* **test_name.py** - python test driver script, please refer to other
|
||||
tests to see how to construct. Any output files that are generated
|
||||
during testing must be removed at the end of this script.
|
||||
* **results.py** - python script that extracts results from statepoint
|
||||
output files. By default it should look for a binary file, but can
|
||||
take an argument to overwrite which statepoint file is processed,
|
||||
whether it is at a different batch or with an HDF5 extension. This
|
||||
script must output a results file that is named *results_test.dat*.
|
||||
It is recommended that any real numbers reported use *12.6E* format.
|
||||
* **results_true.dat** - ASCII file that contains the expected results
|
||||
from the test. The file *results_test.dat* is compared to this file
|
||||
during the execution of the python test driver script. When the
|
||||
above files have been created, generate a *results_test.dat* file and
|
||||
copy it to this name and commit. It should be noted that this file
|
||||
should be generated with basic compiler options during openmc
|
||||
configuration and build (e.g., no MPI/HDF5, no debug/optimization).
|
||||
|
||||
In addition to this description, please see the various types of tests that
|
||||
are already included in the test suite to see how to create them. If all is
|
||||
implemented correctly, the new test directory will automatically be added
|
||||
to the CTest framework.
|
||||
|
||||
Private Development
|
||||
-------------------
|
||||
|
||||
|
|
@ -108,10 +235,11 @@ from your private repository into a public fork.
|
|||
.. _git: http://git-scm.com/
|
||||
.. _GitHub: https://github.com/
|
||||
.. _git flow: http://nvie.com/git-model
|
||||
.. _test_compile.py: https://github.com/mit-crpg/openmc/blob/develop/tests/test_compile/test_compile.py
|
||||
.. _valgrind: http://valgrind.org/
|
||||
.. _style guide: http://mit-crpg.github.io/openmc/devguide/styleguide.html
|
||||
.. _pull request: https://help.github.com/articles/using-pull-requests
|
||||
.. _mit-crpg/openmc: https://github.com/mit-crpg/openmc
|
||||
.. _paid plan: https://github.com/plans
|
||||
.. _Bitbucket: https://bitbucket.org
|
||||
.. _ctest: http://www.cmake.org/cmake/help/v2.8.12/ctest.html
|
||||
.. _NNDC: http://http://www.nndc.bnl.gov/endf/b7.1/acefiles.html
|
||||
|
|
|
|||
|
|
@ -13,13 +13,13 @@ With the FoX library, extending the user input files to include new tags is
|
|||
fairly straightforward. The steps for modifying/adding input are as follows:
|
||||
|
||||
1. Add appropriate calls to procedures from the `xml_interface module`_, such as
|
||||
``check_for_node``, ``get_node_value``, and ``get_node_array``. All input
|
||||
reading is performed in the `input_xml module`_.
|
||||
``check_for_node``, ``get_node_value``, and ``get_node_array``. All input
|
||||
reading is performed in the `input_xml module`_.
|
||||
|
||||
2. Make sure that your input can be categorized as one of the datatypes from
|
||||
`XML Schema Part 2`_ and that parsing of the data appropriately reflects
|
||||
this. For example, for a boolean_ value, true can be represented either by "true"
|
||||
or by "1".
|
||||
`XML Schema Part 2`_ and that parsing of the data appropriately reflects
|
||||
this. For example, for a boolean_ value, true can be represented either by
|
||||
"true" or by "1".
|
||||
|
||||
3. Add code to check the variable for any possible errors.
|
||||
|
||||
|
|
@ -29,10 +29,90 @@ schema for the file you changed (e.g. src/relaxng/geometry.rnc) so that
|
|||
those who use Emacs can confirm whether their input is valid before they
|
||||
run. You will need to be familiar with RELAX NG `compact syntax`_.
|
||||
|
||||
.. _FoX: https://github.com/andreww/fox
|
||||
Working with the FoX Submodule
|
||||
==============================
|
||||
|
||||
The FoX_ library is included as a submodule_ in OpenMC. This means that for a
|
||||
given commit in OpenMC, there is an associated commit id that links to FoX.
|
||||
The actual FoX source code is maintained at mit-crpg/fox, branch openmc. When
|
||||
cloning the OpenMC repo for the first time, you will notice that the directory
|
||||
*src/xml/fox* is empty. To fetch the submodule source code, you can manually
|
||||
enter the following from the root directory of OpenMC:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
git submodule init
|
||||
git submodule update
|
||||
|
||||
It should be noted that if the submodule is not initialized and updated, *cmake*
|
||||
will automatically perform these commands if it cannot file the FoX source code.
|
||||
|
||||
If you navigate into the FoX source code in OpenMC, src/xml/fox, and check git
|
||||
information, you will notice that you are in a completely different repo. Actually,
|
||||
you are in a clone of mit-crpg/fox. If you have write access to this repo, you can
|
||||
make changes to the FoX source code, commit and push just like any other repo.
|
||||
Just because you make changes to the FoX source code in OpenMC or in a standalone
|
||||
repo, this does not mean that OpenMC will automatically fetch these changes. The
|
||||
way submodules work is that they are just stored as a commit id. To save FoX xml
|
||||
source changes to your OpenMC branch, do the following:
|
||||
|
||||
1. Go into src/xml/fox and check out the appropriate source code state
|
||||
|
||||
2. Navigate back out of fox subdirectory and type:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
git status
|
||||
|
||||
3. Make sure you see that git recognized that the state of FoX changed:
|
||||
|
||||
::
|
||||
|
||||
# On branch fox_submodule
|
||||
# Changes not staged for commit:
|
||||
# (use "git add <file>..." to update what will be committed)
|
||||
# (use "git checkout -- <file>..." to discard changes in working directory)
|
||||
#
|
||||
# modified: fox (new commits)
|
||||
|
||||
4. Commit and push this change
|
||||
|
||||
Editing FoX on Personal Fork
|
||||
============================
|
||||
|
||||
If you don't have write access to mit-crpg/fox and thus can't make a branch off of the openmc
|
||||
branch there, you will need to fork mit-crpg/fox to your personal account. You need to then
|
||||
link your branch in your OpenMC repo, to the *openmc* branch on your own personal FoX fork.
|
||||
To do this, edit the *.gitmodules* file in the root folder of the repo. It contains the
|
||||
following information:
|
||||
|
||||
::
|
||||
|
||||
[submodule "src/xml/fox"]
|
||||
path = src/xml/fox
|
||||
url = git@github.com:mit-crpg/fox
|
||||
|
||||
Change the url remote to your own fork. The commit id should stay constant until you start
|
||||
making modification to FoX yourself. Once you have made changes to your FoX fork and linked
|
||||
the new commit id to your OpenMC branch, you can pull request your changes in by peforming
|
||||
the following steps:
|
||||
|
||||
1. Create a pull request from your fork of FoX to mit-crpg/fox and wait until it
|
||||
is merged into the openmc branch.
|
||||
|
||||
2. In your OpenMC repo, change your *.gitmodules* file back to point at mit-crpg/fox.
|
||||
|
||||
3. Submit a pull request to mit-crpg/openmc
|
||||
|
||||
.. warning:: If you make changes to your FoX submodule inside of an OpenMC repo and do not
|
||||
commit, do **not** run *git submodule update*. This may throw away any changes that
|
||||
were not committed.
|
||||
|
||||
.. _FoX: https://github.com/mit-crpg/fox
|
||||
.. _xml_interface module: https://github.com/mit-crpg/openmc/blob/develop/src/xml_interface.F90
|
||||
.. _input_xml module: https://github.com/mit-crpg/openmc/blob/develop/src/input_xml.F90
|
||||
.. _XML Schema Part 2: http://www.w3.org/TR/xmlschema-2/
|
||||
.. _boolean: http://www.w3.org/TR/xmlschema-2/#boolean
|
||||
.. _RELAX NG: http://relaxng.org/
|
||||
.. _compact syntax: http://relaxng.org/compact-tutorial-20030326.html
|
||||
.. _submodule: http://git-scm.com/book/en/Git-Tools-Submodules
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ Publications
|
|||
|
||||
- Andrew Siegel, Kord Smith, Kyle Felker, Paul Romano, Benoit Forget, and Peter
|
||||
Beckman, "Improved cache performance in Monte Carlo transport calculations
|
||||
using energy banding," *Comput. Phys. Commun.*
|
||||
(2013). `<http://dx.doi.org/10.1016/j.cpc.2013.10.008>`_
|
||||
using energy banding," *Comput. Phys. Commun.*, **185** (4), 1195--1199
|
||||
(2014). `<http://dx.doi.org/10.1016/j.cpc.2013.10.008>`_
|
||||
|
||||
- Jonathan A. Walsh, Benoit Forget, and Kord S. Smith, "Validation of OpenMC
|
||||
Reactor Physics Simulations with the B&W 1810 Series Benchmarks,"
|
||||
|
|
@ -28,23 +28,25 @@ Publications
|
|||
- Paul K. Romano, Benoit Forget, Kord Smith, and Andrew Siegel, "On the use of
|
||||
tally servers in Monte Carlo simulations of light-water reactors,"
|
||||
*Proc. Joint International Conference on Supercomputing in Nuclear
|
||||
Applications and Monte Carlo*, Paris, France, Oct. 27--31 (2013).
|
||||
Applications and Monte Carlo*, Paris, France, Oct. 27--31
|
||||
(2013). `<http://dx.doi.org/10.1051/snamc/201404301>`_
|
||||
|
||||
- Paul K. Romano, Nicholas E. Horelik, Bryan R. Herman, Adam G. Nelson, Benoit
|
||||
Forget, and Kord Smith, "OpenMC: A State-of-the-Art Monte Carlo Code for
|
||||
Research and Development," *Proc. Joint International Conference on
|
||||
Supercomputing in Nuclear Applications and Monte Carlo*, Paris, France,
|
||||
Oct. 27--31 (2013).
|
||||
Oct. 27--31 (2013). `<http://dx.doi.org/10.1051/snamc/201406016>`_
|
||||
|
||||
- Kyle G. Felker, Andrew R. Siegel, Kord S. Smith, Paul K. Romano, and Benoit
|
||||
Forget, "The energy band memory server algorithm for parallel Monte Carlo
|
||||
calculations," *Proc. Joint International Conference on Supercomputing in
|
||||
Nuclear Applications and Monte Carlo*, Paris, France, Oct. 27--31 (2013).
|
||||
Nuclear Applications and Monte Carlo*, Paris, France, Oct. 27--31
|
||||
(2013). `<http://dx.doi.org/10.1051/snamc/201404207>`_
|
||||
|
||||
- John R. Tramm and Andrew R. Siegel, "Memory Bottlenecks and Memory Contention
|
||||
in Multi-Core Monte Carlo Transport Codes," *Proc. Joint International
|
||||
Conference on Supercomputing in Nuclear Applications and Monte Carlo*, Paris,
|
||||
France, Oct. 27--31 (2013).
|
||||
France, Oct. 27--31 (2013). `<http://dx.doi.org/10.1051/snamc/201404208>`_
|
||||
|
||||
- Andrew R. Siegel, Kord Smith, Paul K. Romano, Benoit Forget, and Kyle Felker,
|
||||
"Multi-core performance studies of a Monte Carlo neutron transport code,"
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ following commands in a terminal:
|
|||
|
||||
git clone git://github.com/mit-crpg/openmc.git
|
||||
cd openmc/src
|
||||
git checkout master
|
||||
git checkout -b master origin/master
|
||||
make
|
||||
sudo make install
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ bugs fixed, and known issues for each successive release.
|
|||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
notes_0.6.0
|
||||
notes_0.5.4
|
||||
notes_0.5.3
|
||||
notes_0.5.2
|
||||
|
|
|
|||
59
docs/source/releasenotes/notes_0.6.0.rst
Normal file
59
docs/source/releasenotes/notes_0.6.0.rst
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
.. _notes_0.6.0:
|
||||
|
||||
==============================
|
||||
Release Notes for OpenMC 0.6.0
|
||||
==============================
|
||||
|
||||
-------------------
|
||||
System Requirements
|
||||
-------------------
|
||||
|
||||
There are no special requirements for running the OpenMC code. As of this
|
||||
release, OpenMC has been tested on a variety of Linux distributions, Mac OS X,
|
||||
and Microsoft Windows 7. Memory requirements will vary depending on the size of
|
||||
the problem at hand (mostly on the number of nuclides in the problem).
|
||||
|
||||
------------
|
||||
New Features
|
||||
------------
|
||||
|
||||
- Legendre and spherical harmonic expansion tally scores
|
||||
- CMake is now default build system
|
||||
- Regression test suite based on CTests and NNDC cross sections
|
||||
- FoX is now a git submodule
|
||||
- Support for older cross sections (e.g. MCNP 66c)
|
||||
- Progress bar for plots
|
||||
- Expanded support for natural elements via <natural_elements> in settings.xml
|
||||
|
||||
---------
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
- 41f7ca_: Fixed erroneous results from survival biasing
|
||||
- 038736_: Fix tallies over void materials
|
||||
- 46f9e8_: Check for negative values in probability tables
|
||||
- d1ca35_: Fixed sampling of angular distribution
|
||||
- 0291c0_: Fixed indexing error in plotting
|
||||
- d7a7d0_: Fix bug with <element> specifying xs attribute
|
||||
- 85b3cb_: Fix out-of-bounds error with OpenMP threading
|
||||
|
||||
.. _41f7ca: https://github.com/mit-crpg/openmc/commit/41f7ca
|
||||
.. _038736: https://github.com/mit-crpg/openmc/commit/038736
|
||||
.. _46f9e8: https://github.com/mit-crpg/openmc/commit/46f9e8
|
||||
.. _d1ca35: https://github.com/mit-crpg/openmc/commit/d1ca35
|
||||
.. _0291c0: https://github.com/mit-crpg/openmc/commit/0291c0
|
||||
.. _d7a7d0: https://github.com/mit-crpg/openmc/commit/d7a7d0
|
||||
.. _85b3cb: https://github.com/mit-crpg/openmc/commit/85b3cb
|
||||
|
||||
------------
|
||||
Contributors
|
||||
------------
|
||||
|
||||
This release contains new contributions from the following people:
|
||||
|
||||
- `Sterling Harper <smharper@mit.edu>`_
|
||||
- `Bryan Herman <bherman@mit.edu>`_
|
||||
- `Nick Horelik <nhorelik@mit.edu>`_
|
||||
- `Adam Nelson <nelsonag@umich.edu>`_
|
||||
- `Paul Romano <paul.k.romano@gmail.com>`_
|
||||
- `Jon Walsh <walshjon@mit.edu>`_
|
||||
|
|
@ -41,7 +41,7 @@ for the geometry, materials, and settings. Additionally, there are three optiona
|
|||
input files. The first is a tallies XML file that specifies physical quantities
|
||||
to be tallied. The second is a plots XML file that specifies regions of geometry
|
||||
which should be plotted. The third is a CMFD XML file that specifies coarse mesh
|
||||
acceleration geometry and execution parameters. OpenMC expects that these
|
||||
acceleration geometry and execution parameters. OpenMC expects that these
|
||||
files are called:
|
||||
|
||||
* ``geometry.xml``
|
||||
|
|
@ -105,7 +105,7 @@ default. This element has the following attributes/sub-elements:
|
|||
The ``<eigenvalue>`` element indicates that a :math:`k`-eigenvalue calculation
|
||||
should be performed. It has the following attributes/sub-elements:
|
||||
|
||||
:batches:
|
||||
:batches:
|
||||
The total number of batches, where each batch corresponds to multiple
|
||||
fission source iterations. Batching is done to eliminate correlation between
|
||||
realizations of random variables.
|
||||
|
|
@ -171,7 +171,7 @@ problem. It has the following attributes/sub-elements:
|
|||
The ``<fixed_source>`` element indicates that a fixed source calculation should be
|
||||
performed. It has the following attributes/sub-elements:
|
||||
|
||||
:batches:
|
||||
:batches:
|
||||
The total number of batches. For fixed source calculations, each batch
|
||||
represents a realization of random variables for tallies.
|
||||
|
||||
|
|
@ -182,6 +182,29 @@ performed. It has the following attributes/sub-elements:
|
|||
|
||||
*Default*: None
|
||||
|
||||
.. _natural_elements:
|
||||
|
||||
``<natural_elements>`` Element
|
||||
------------------------------
|
||||
|
||||
The ``<natural_elements>`` element indicates to OpenMC what nuclides are
|
||||
available in the cross section library when expanding an ``<element>`` into
|
||||
separate isotopes (see :ref:`material`). The accepted values are:
|
||||
|
||||
- ENDF/B-VII.0
|
||||
- ENDF/B-VII.1
|
||||
- JEFF-3.1.1
|
||||
- JEFF-3.1.2
|
||||
- JEFF-3.2
|
||||
- JENDL-3.2
|
||||
- JENDL-3.3
|
||||
- JENDL-4.0
|
||||
|
||||
Note that the value is case-insensitive, so "ENDF/B-VII.1" is equivalent to
|
||||
"endf/b-vii.1".
|
||||
|
||||
*Default*: ENDF/B-VII.1
|
||||
|
||||
``<no_reduce>`` Element
|
||||
-----------------------
|
||||
|
||||
|
|
@ -206,7 +229,7 @@ out the file and "false" will not.
|
|||
|
||||
*Default*: false
|
||||
|
||||
:summary:
|
||||
:summary:
|
||||
Writes out an ASCII summary file describing all of the user input files that
|
||||
were read in.
|
||||
|
||||
|
|
@ -274,7 +297,7 @@ attributes/sub-elements:
|
|||
An element specifying the spatial distribution of source sites. This element
|
||||
has the following attributes:
|
||||
|
||||
:type:
|
||||
:type:
|
||||
The type of spatial distribution. Valid options are "box" and "point". A
|
||||
"box" spatial distribution has coordinates sampled uniformly in a
|
||||
parallelepiped. A "point" spatial distribution has coordinates specified
|
||||
|
|
@ -298,7 +321,7 @@ attributes/sub-elements:
|
|||
An element specifying the angular distribution of source sites. This element
|
||||
has the following attributes:
|
||||
|
||||
:type:
|
||||
:type:
|
||||
The type of angular distribution. Valid options are "isotropic" and
|
||||
"monodirectional". The angle of the particle emitted from a source site is
|
||||
isotropic if the "isotropic" option is given. The angle of the particle
|
||||
|
|
@ -321,7 +344,7 @@ attributes/sub-elements:
|
|||
An element specifying the energy distribution of source sites. This element
|
||||
has the following attributes:
|
||||
|
||||
:type:
|
||||
:type:
|
||||
|
||||
The type of energy distribution. Valid options are "monoenergetic",
|
||||
"watt", and "maxwell". The "monoenergetic" option produces source sites at
|
||||
|
|
@ -350,8 +373,8 @@ attributes/sub-elements:
|
|||
|
||||
The ``<state_point>`` element indicates at what batches a state point file
|
||||
should be written. A state point file can be used to restart a run or to get
|
||||
tally results at any batch. The default behavior when using this tag is to
|
||||
write out the source bank in the state_point file. This behavior can be
|
||||
tally results at any batch. The default behavior when using this tag is to
|
||||
write out the source bank in the state_point file. This behavior can be
|
||||
customized by using the ``<source_point>`` element. This element has the
|
||||
following attributes/sub-elements:
|
||||
|
||||
|
|
@ -371,28 +394,29 @@ following attributes/sub-elements:
|
|||
``<source_point>`` Element
|
||||
--------------------------
|
||||
|
||||
The ``<source_point>`` element indicates at what batches the source bank
|
||||
should be written. The source bank can be either written out within a state
|
||||
The ``<source_point>`` element indicates at what batches the source bank
|
||||
should be written. The source bank can be either written out within a state
|
||||
point file or separately in a source point file. This element has the following
|
||||
attributes/sub-elements:
|
||||
|
||||
:batches:
|
||||
A list of integers separated by spaces indicating at what batches a state
|
||||
point file should be written. It should be noted that if source_separate
|
||||
tag is not set to "true", this list must be a subset of state point batches.
|
||||
point file should be written. It should be noted that if the ``separate``
|
||||
attribute is not set to "true", this list must be a subset of state point
|
||||
batches.
|
||||
|
||||
*Default*: Last batch only
|
||||
|
||||
:interval:
|
||||
A single integer :math:`n` indicating that a state point should be written
|
||||
every :math:`n` batches. This option can be given in lieu of listing
|
||||
batches explicitly. It should be noted that if source_separate tag is not
|
||||
set to "true", this value should produce a list of batches that is a subset
|
||||
of state point batches.
|
||||
every :math:`n` batches. This option can be given in lieu of listing batches
|
||||
explicitly. It should be noted that if the ``separate`` attribute is not set
|
||||
to "true", this value should produce a list of batches that is a subset of
|
||||
state point batches.
|
||||
|
||||
*Default*: None
|
||||
|
||||
:source_separate:
|
||||
:separate:
|
||||
If this element is set to "true", a separate binary source point file will be
|
||||
written. Otherwise, the source sites will be written in the state point
|
||||
directly.
|
||||
|
|
@ -401,17 +425,17 @@ attributes/sub-elements:
|
|||
|
||||
:source_write:
|
||||
If this element is set to "false", source sites are not written
|
||||
to the state point or source point file. This can substantially reduce the
|
||||
to the state point or source point file. This can substantially reduce the
|
||||
size of state points if large numbers of particles per batch are used.
|
||||
|
||||
*Default*: true
|
||||
|
||||
:overwrite_latest:
|
||||
If this element is set to "true", a source point file containing
|
||||
the source bank will be written out to a separate file named
|
||||
``source.binary`` or ``source.h5`` depending on if HDF5 is enabled.
|
||||
the source bank will be written out to a separate file named
|
||||
``source.binary`` or ``source.h5`` depending on if HDF5 is enabled.
|
||||
This file will be overwritten at every single batch so that the latest
|
||||
source bank will be available. It should be noted that a user can set both
|
||||
source bank will be available. It should be noted that a user can set both
|
||||
this element to "true" and specify batches to write a permanent source bank.
|
||||
|
||||
*Default*: false
|
||||
|
|
@ -741,6 +765,8 @@ sub-elements:
|
|||
Materials Specification -- materials.xml
|
||||
----------------------------------------
|
||||
|
||||
.. _material:
|
||||
|
||||
``<material>`` Element
|
||||
----------------------
|
||||
|
||||
|
|
@ -780,12 +806,13 @@ Each ``material`` element can have the following attributes or sub-elements:
|
|||
:element:
|
||||
|
||||
Specifies that a natural element is present in the material. The natural
|
||||
element is split up into individual isotopes based on IUPAC Isotopic
|
||||
Compositions of the Elements 1997. This element has attributes/sub-elements
|
||||
called ``name``, ``xs``, and ``ao``. The ``name`` attribute is the atomic
|
||||
symbol of the element while the ``xs`` attribute is the cross-section
|
||||
identifier. Finally, the ``ao`` attribute specifies the atom percent of the
|
||||
element within the material, respectively. One example would be as follows:
|
||||
element is split up into individual isotopes based on `IUPAC Isotopic
|
||||
Compositions of the Elements 2009`_. This element has
|
||||
attributes/sub-elements called ``name``, ``xs``, and ``ao``. The ``name``
|
||||
attribute is the atomic symbol of the element while the ``xs`` attribute is
|
||||
the cross-section identifier. Finally, the ``ao`` attribute specifies the
|
||||
atom percent of the element within the material, respectively. One example
|
||||
would be as follows:
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
|
|
@ -794,6 +821,10 @@ Each ``material`` element can have the following attributes or sub-elements:
|
|||
<element name="Mn" ao="2.7426e-05" />
|
||||
<element name="Cu" ao="1.6993e-04" />
|
||||
|
||||
In some cross section libraries, certain naturally occurring isotopes do not
|
||||
have cross sections. The :ref:`natural_elements` option determines how a
|
||||
natural element is split into isotopes in these cases.
|
||||
|
||||
*Default*: None
|
||||
|
||||
|
||||
|
|
@ -805,6 +836,9 @@ Each ``material`` element can have the following attributes or sub-elements:
|
|||
|
||||
*Default*: None
|
||||
|
||||
.. _IUPAC Isotopic Compositions of the Elements 2009:
|
||||
http://pac.iupac.org/publications/pac/pdf/2011/pdf/8302x0397.pdf
|
||||
|
||||
``<default_xs>`` Element
|
||||
------------------------
|
||||
|
||||
|
|
@ -845,7 +879,7 @@ The ``<tally>`` element accepts the following sub-elements:
|
|||
|
||||
:label:
|
||||
This is an optional sub-element specifying the name of this tally to be used
|
||||
for output purposes. This string is limited to 52 characters for formatting
|
||||
for output purposes. This string is limited to 52 characters for formatting
|
||||
purposes.
|
||||
|
||||
:filter:
|
||||
|
|
@ -915,10 +949,11 @@ The ``<tally>`` element accepts the following sub-elements:
|
|||
|
||||
:scores:
|
||||
A space-separated list of the desired responses to be accumulated. Accepted
|
||||
options are "flux", "total", "scatter", "nu-scatter", "scatter-N",
|
||||
"scatter-PN", "absorption", "fission", "nu-fission", "kappa-fission",
|
||||
"current", and "events". These corresponding to the following physical
|
||||
quantities.
|
||||
options are "flux", "total", "scatter", "absorption", "fission",
|
||||
"nu-fission", "kappa-fission", "nu-scatter", "scatter-N", "scatter-PN",
|
||||
"scatter-YN", "nu-scatter-N", "nu-scatter-PN", "nu-scatter-YN", "flux-YN",
|
||||
"total-YN", "current", and "events". These corresponding to the following
|
||||
physical quantities:
|
||||
|
||||
:flux:
|
||||
Total flux
|
||||
|
|
@ -930,24 +965,6 @@ The ``<tally>`` element accepts the following sub-elements:
|
|||
Total scattering rate. Can also be identified with the ``scatter-0``
|
||||
response type.
|
||||
|
||||
:nu-scatter:
|
||||
Total production of neutrons due to scattering. This accounts for
|
||||
multiplicity from (n,2n), (n,3n), and (n,4n) reactions and should be
|
||||
slightly higher than the scattering rate.
|
||||
|
||||
:scatter-N:
|
||||
Tally the N\ :sup:`th` \ scattering moment, where N is the Legendre
|
||||
expansion order. N must be between 0 and 10. As an example, tallying the
|
||||
2\ :sup:`nd` \ scattering moment would be specified as ``<scores>
|
||||
scatter-2 </scores>``.
|
||||
|
||||
:scatter-PN:
|
||||
Tally all of the scattering moments from order 0 to N, where N is the
|
||||
Legendre expansion order. That is, ``scatter-P1`` is equivalent to
|
||||
requesting tallies of ``scatter-0`` and ``scatter-1``. N must be between
|
||||
0 and 10. As an example, tallying up to the 2\ :sup:`nd` \ scattering
|
||||
moment would be specified as ``<scores> scatter-P2 </scores>``.
|
||||
|
||||
:absorption:
|
||||
Total absorption rate. This accounts for all reactions which do not
|
||||
produce secondary neutrons.
|
||||
|
|
@ -957,7 +974,7 @@ The ``<tally>`` element accepts the following sub-elements:
|
|||
|
||||
:nu-fission:
|
||||
Total production of neutrons due to fission
|
||||
|
||||
|
||||
:kappa-fission:
|
||||
The recoverable energy production rate due to fission. The recoverable
|
||||
energy is defined as the fission product kinetic energy, prompt and
|
||||
|
|
@ -967,6 +984,47 @@ The ``<tally>`` element accepts the following sub-elements:
|
|||
prompt and delayed :math:`\gamma`-rays are assumed to deposit their energy
|
||||
locally.
|
||||
|
||||
:scatter-N:
|
||||
Tally the N\ :sup:`th` \ scattering moment, where N is the Legendre
|
||||
expansion order of the change in particle angle :math:`\left(\mu\right)`.
|
||||
N must be between 0 and 10. As an example, tallying the
|
||||
2\ :sup:`nd` \ scattering moment would be specified as
|
||||
``<scores> scatter-2 </scores>``.
|
||||
|
||||
:scatter-PN:
|
||||
Tally all of the scattering moments from order 0 to N, where N is the
|
||||
Legendre expansion order of the change in particle angle :math:`\left(\mu\right)`.
|
||||
That is, ``scatter-P1`` is equivalent to requesting tallies of
|
||||
``scatter-0`` and ``scatter-1``. Like for ``scatter-N``,
|
||||
N must be between 0 and 10. As an example, tallying up to the
|
||||
2\ :sup:`nd` \ scattering moment would be specified as
|
||||
``<scores> scatter-P2 </scores>``.
|
||||
|
||||
:scatter-YN:
|
||||
``scatter-YN`` is similar to ``scatter-PN`` except an additional
|
||||
expansion is performed for the incoming particle direction
|
||||
:math:`\left(\Omega\right)` using the real spherical harmonics. This is useful
|
||||
for performing angular flux moment weighting of the scattering moments.
|
||||
Like ``scatter-PN``, ``scatter-YN`` will tally all of the moments from
|
||||
order 0 to N; N again must be between 0 and 10.
|
||||
|
||||
:nu-scatter, nu-scatter-N, nu-scatter-PN, nu-scatter-YN:
|
||||
These scores are similar in functionality to their ``scatter*``
|
||||
equivalents except the total production of neutrons due to
|
||||
scattering is scored vice simply the scattering rate. This accounts for
|
||||
multiplicity from (n,2n), (n,3n), and (n,4n) reactions.
|
||||
|
||||
:flux-YN:
|
||||
Spherical harmonic expansion of the direction of motion
|
||||
:math:`\left(\Omega\right)` of the total flux. This score will tally
|
||||
all of the harmonic moments of order 0 to N. N must be between 0 and 10.
|
||||
|
||||
:total-YN:
|
||||
Spherical harmonic expansion of the incoming particle's direction of
|
||||
motion :math:`\left(\Omega\right)` of the total flux. This score will
|
||||
tally all of the harmonic moments of order 0 to N. N must be between 0
|
||||
and 10.
|
||||
|
||||
:current:
|
||||
Partial currents on the boundaries of each cell in a mesh.
|
||||
|
||||
|
|
@ -1137,7 +1195,7 @@ attributes or sub-elements. These are not used in "voxel" plots:
|
|||
Any number of this optional tag may be included in each ``<plot>`` element,
|
||||
which can override the default random colors for cells or materials. Each
|
||||
``col_spec`` element must contain ``id`` and ``rgb`` sub-elements.
|
||||
|
||||
|
||||
:id:
|
||||
Specifies the cell or material unique id for the color specification.
|
||||
|
||||
|
|
@ -1174,20 +1232,20 @@ attributes or sub-elements. These are not used in "voxel" plots:
|
|||
------------------------------
|
||||
CMFD Specification -- cmfd.xml
|
||||
------------------------------
|
||||
|
||||
|
||||
Coarse mesh finite difference acceleration method has been implemented in OpenMC.
|
||||
Currently, it allows users to accelerate fission source convergence during
|
||||
inactive neutron batches. To run CMFD, the ``<run_cmfd>`` element in
|
||||
Currently, it allows users to accelerate fission source convergence during
|
||||
inactive neutron batches. To run CMFD, the ``<run_cmfd>`` element in
|
||||
``settings.xml`` should be set to "true".
|
||||
|
||||
``<active_flush>`` Element
|
||||
--------------------------
|
||||
|
||||
The ``<active_flush>`` element controls the batch where CMFD tallies should be
|
||||
reset. CMFD tallies should be reset before active batches so they are accumulated
|
||||
reset. CMFD tallies should be reset before active batches so they are accumulated
|
||||
without bias.
|
||||
|
||||
*Default*: 0
|
||||
*Default*: 0
|
||||
|
||||
``<begin>`` Element
|
||||
-------------------
|
||||
|
|
@ -1224,9 +1282,9 @@ It can be turned on with "true" and off with "false".
|
|||
``<inactive>`` Element
|
||||
----------------------
|
||||
|
||||
The ``<inactive>`` element controls if cmfd tallies should be accumulated
|
||||
during inactive batches. For some applications, CMFD tallies may not be
|
||||
needed until the start of active batches. This option can be turned on
|
||||
The ``<inactive>`` element controls if cmfd tallies should be accumulated
|
||||
during inactive batches. For some applications, CMFD tallies may not be
|
||||
needed until the start of active batches. This option can be turned on
|
||||
with "true" and off with "false"
|
||||
|
||||
*Default*: true
|
||||
|
|
@ -1243,12 +1301,12 @@ occurs. The amout of resets is controlled with the ``<num_flushes>`` element.
|
|||
``<ksp_monitor>`` Element
|
||||
-------------------------
|
||||
|
||||
The ``<ksp_monitor>`` element is used to view the convergence of linear GMRES
|
||||
iterations in PETSc. This option can be turned on with "true" and turned off
|
||||
The ``<ksp_monitor>`` element is used to view the convergence of linear GMRES
|
||||
iterations in PETSc. This option can be turned on with "true" and turned off
|
||||
with "false".
|
||||
|
||||
|
||||
*Default*: false
|
||||
*Default*: false
|
||||
|
||||
``<mesh>`` Element
|
||||
------------------
|
||||
|
|
@ -1261,7 +1319,7 @@ attributes/sub-elements:
|
|||
given, it is assumed that the mesh is an x-y mesh.
|
||||
|
||||
:upper_right:
|
||||
The upper-right corner of the structrued mesh. If only two coordinate are
|
||||
The upper-right corner of the structrued mesh. If only two coordinate are
|
||||
given, it is assumed that the mesh is an x-y mesh.
|
||||
|
||||
:dimension:
|
||||
|
|
@ -1272,8 +1330,8 @@ attributes/sub-elements:
|
|||
|
||||
:energy:
|
||||
Energy bins [in MeV], listed in ascending order (e.g. 0.0 0.625e-7 20.0)
|
||||
for CMFD tallies and acceleration. If no energy bins are listed, OpenMC
|
||||
automatically assumes a one energy group calculation over the entire
|
||||
for CMFD tallies and acceleration. If no energy bins are listed, OpenMC
|
||||
automatically assumes a one energy group calculation over the entire
|
||||
energy range.
|
||||
|
||||
:albedo:
|
||||
|
|
@ -1283,10 +1341,10 @@ attributes/sub-elements:
|
|||
*Default*: 1.0 1.0 1.0 1.0 1.0 1.0
|
||||
|
||||
:map:
|
||||
An optional acceleration map can be specified to overlay on the coarse
|
||||
mesh spatial grid. If this option is used a ``1`` is used for a
|
||||
An optional acceleration map can be specified to overlay on the coarse
|
||||
mesh spatial grid. If this option is used a ``1`` is used for a
|
||||
non-accelerated region and a ``2`` is used for an accelerated region.
|
||||
For a simple 4x4 coarse mesh with a 2x2 fuel lattice surrounded by
|
||||
For a simple 4x4 coarse mesh with a 2x2 fuel lattice surrounded by
|
||||
reflector, the map is:
|
||||
|
||||
``1 1 1 1``
|
||||
|
|
@ -1297,24 +1355,24 @@ attributes/sub-elements:
|
|||
|
||||
``1 1 1 1``
|
||||
|
||||
Therefore a 2x2 system of equations is solved rather than a 4x4. This
|
||||
is extremely important to use in reflectors as neutrons will not
|
||||
Therefore a 2x2 system of equations is solved rather than a 4x4. This
|
||||
is extremely important to use in reflectors as neutrons will not
|
||||
contribute to any tallies far away from fission source neutron regions.
|
||||
A ``2`` must be used to identify any fission source region.
|
||||
|
||||
.. note:: Only two of the following three sub-elements are needed:
|
||||
``lower_left``, ``upper_right`` and ``width``. Any combination
|
||||
.. note:: Only two of the following three sub-elements are needed:
|
||||
``lower_left``, ``upper_right`` and ``width``. Any combination
|
||||
of two of these will yield the third.
|
||||
|
||||
``<norm>`` Element
|
||||
------------------
|
||||
|
||||
The ``<norm>`` element is used to normalize the CMFD fission source distribution
|
||||
to a particular value. For example, if a fission source is calculated for a
|
||||
17 x 17 lattice of pins, the fission source may be normalized to the number of
|
||||
fission source regions, in this case 289. This is useful when visualizing this
|
||||
distribution as the average peaking factor will be unity. This parameter will
|
||||
not impact the calculation.
|
||||
The ``<norm>`` element is used to normalize the CMFD fission source distribution
|
||||
to a particular value. For example, if a fission source is calculated for a
|
||||
17 x 17 lattice of pins, the fission source may be normalized to the number of
|
||||
fission source regions, in this case 289. This is useful when visualizing this
|
||||
distribution as the average peaking factor will be unity. This parameter will
|
||||
not impact the calculation.
|
||||
|
||||
*Default*: 1.0
|
||||
|
||||
|
|
@ -1329,7 +1387,7 @@ occur during inactive CMFD batches.
|
|||
``<power_monitor>`` Element
|
||||
---------------------------
|
||||
|
||||
The ``<power_monitor>`` element is used to view the convergence of power iteration.
|
||||
The ``<power_monitor>`` element is used to view the convergence of power iteration.
|
||||
This option can be turned on with "true" and turned off with "false".
|
||||
|
||||
*Default*: false
|
||||
|
|
@ -1355,7 +1413,7 @@ function in PETSc. This option can be turned on with "true" and turned off with
|
|||
--------------------
|
||||
|
||||
The ``<solver>`` element controls whether the CMFD eigenproblem is solved with
|
||||
standard power iteration or nonlinear Jacobian-free Newton Krylov (JFNK).
|
||||
standard power iteration or nonlinear Jacobian-free Newton Krylov (JFNK).
|
||||
By setting "power", power iteration is used and by setting "jfnk", JFNK is used.
|
||||
|
||||
*Default*: power
|
||||
|
|
|
|||
|
|
@ -322,6 +322,31 @@ This will build an executable named ``openmc``.
|
|||
.. _MinGW: http://www.mingw.org
|
||||
.. _SourceForge: http://sourceforge.net/projects/mingw
|
||||
|
||||
Testing Build
|
||||
-------------
|
||||
|
||||
If you have ENDF/B-VII.1 cross sections from NNDC_ you can test your build.
|
||||
Make sure the **CROSS_SECTIONS** environmental variable is set to the
|
||||
*cross_sections.xml* file in the *data/nndc* directory.
|
||||
There are two ways to run tests. The first is to use the Makefile present in
|
||||
the source directory and run the following:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
cd src
|
||||
make test
|
||||
|
||||
If you want more options for testing you can use ctest_ command. For example,
|
||||
if we wanted to run only the plot tests with 4 processors, we run:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
cd src/build
|
||||
ctest -j 4 -R plot
|
||||
|
||||
If you want to run the full test suite with different build options please
|
||||
refer to our :ref:`test suite` documentation.
|
||||
|
||||
---------------------------
|
||||
Cross Section Configuration
|
||||
---------------------------
|
||||
|
|
@ -347,7 +372,8 @@ extract, and set up a confiuration file:
|
|||
python get_nndc_data.py
|
||||
|
||||
At this point, you should set the :envvar:`CROSS_SECTIONS` environment variable
|
||||
to the absolute path of the file ``openmc/data/nndc/cross_sections.xml``.
|
||||
to the absolute path of the file ``openmc/data/nndc/cross_sections.xml``. This
|
||||
cross section set is used by the test suite.
|
||||
|
||||
Using JEFF Cross Sections from OECD/NEA
|
||||
---------------------------------------
|
||||
|
|
@ -467,3 +493,4 @@ schemas.xml file in your own OpenMC source directory.
|
|||
.. _GNU Emacs: http://www.gnu.org/software/emacs/
|
||||
.. _validation: http://en.wikipedia.org/wiki/XML_validation
|
||||
.. _RELAX NG: http://relaxng.org/
|
||||
.. _ctest: http://www.cmake.org/cmake/help/v2.8.12/ctest.html
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ for your Python installation to contain:
|
|||
* [3]_ `Matplotlib <http://matplotlib.org/>`_
|
||||
* [3]_ `Silomesh <https://github.com/nhorelik/silomesh>`_
|
||||
* [3]_ `VTK <http://www.vtk.org/>`_
|
||||
* [4]_ `PyQt <http://www.riverbankcomputing.com/software/pyqt>`_
|
||||
|
||||
Most of these are easily obtainable in Ubuntu through the package manager, or
|
||||
are easily installed with distutils.
|
||||
|
|
@ -25,7 +24,6 @@ are easily installed with distutils.
|
|||
.. [1] Required for tally data extraction from statepoints with statepoint.py
|
||||
.. [2] Required only if reading HDF5 statepoint files.
|
||||
.. [3] Optional for plotting utilities
|
||||
.. [4] Optional for interactive GUIs
|
||||
|
||||
----------------------
|
||||
Geometry Visualization
|
||||
|
|
@ -94,9 +92,9 @@ After running OpenMC to obtain PPM files, images should be saved to another
|
|||
format before using them elsewhere. This cuts down the size of the file by
|
||||
orders of magnitude. Most image viewers and editors that can view PPM images
|
||||
can also save to other formats (e.g. `Gimp <http://www.gimp.org/>`_, `IrfanView
|
||||
<http://www.irfanview.com/>`_, etc.). However, more likey the user will want to
|
||||
<http://www.irfanview.com/>`_, etc.). However, more likely the user will want to
|
||||
convert to another format on the command line. This is easily accomplished with
|
||||
the ``convert`` command available on most linux distributions as part of the
|
||||
the ``convert`` command available on most Linux distributions as part of the
|
||||
`ImageMagick <http://www.imagemagick.org/script/convert.php>`_ package. (On
|
||||
Ubuntu: ``sudo apt-get install imagemagick``). Images are then converted like:
|
||||
|
||||
|
|
@ -172,7 +170,7 @@ doing this will depend on the 3D viewer, but should be straightforward.
|
|||
:height: 200px
|
||||
|
||||
.. note:: 3D voxel plotting can be very computer intensive for the viewing
|
||||
program (Visit, Paraview, etc.) if the number of voxels is large (>10
|
||||
program (Visit, ParaView, etc.) if the number of voxels is large (>10
|
||||
million or so). Thus if you want an accurate picture that renders
|
||||
smoothly, consider using only one voxel in a certain direction. For
|
||||
instance, the 3D pin lattice figure at the beginning of this section
|
||||
|
|
@ -235,13 +233,13 @@ combination:
|
|||
filters = [('mesh', (1, 1, 5)), ('energyin', 0)]
|
||||
value, error = sp.get_value(tallyid, filters, score)
|
||||
|
||||
In the future more documentaion may become available here for statepoint.py and
|
||||
In the future more documentation may become available here for statepoint.py and
|
||||
the data extraction functions of StatePoint objects. However, for now it is up
|
||||
to the user to explore the classes in statepoint.py to discover what data is
|
||||
available in StatePoint objects (we highly recommend interactively exploring
|
||||
with `IPython <http://ipython.org/>`_). Many exmaples can be found by looking
|
||||
through the other utilies that use statepoint.py, and a few common visualization
|
||||
tasks will be described here in the following sections.
|
||||
with `IPython <http://ipython.org/>`_). Many examples can be found by looking
|
||||
through the other utilities that use statepoint.py, and a few common
|
||||
visualization tasks will be described here in the following sections.
|
||||
|
||||
Plotting in 2D
|
||||
--------------
|
||||
|
|
@ -251,8 +249,7 @@ Plotting in 2D
|
|||
|
||||
For simple viewing of 2D slices of a mesh plot, the utility plot_mesh_tally.py
|
||||
is provided. This utility provides an interactive GUI to explore and plot
|
||||
mesh tallies for any scores and filter bins. It requires statepoint.py, as well
|
||||
as `PyQt <http://www.riverbankcomputing.com/software/pyqt>`_.
|
||||
mesh tallies for any scores and filter bins. It requires statepoint.py.
|
||||
|
||||
.. image:: ../_images/fluxplot.png
|
||||
:height: 200px
|
||||
|
|
@ -446,14 +443,14 @@ Particle Track Visualization
|
|||
|
||||
OpenMC can dump particle tracks—the position of particles as they are
|
||||
transported through the geometry. There are two ways to make OpenMC output
|
||||
tracks: all particle tracks through a commandline argument or specific particle
|
||||
tracks: all particle tracks through a command line argument or specific particle
|
||||
tracks through settings.xml.
|
||||
|
||||
Running OpenMC with the argument "-t", "-track", or "--track" will cause a track
|
||||
file to be created for every particle transported in the code.
|
||||
|
||||
The settings.xml file can dictate that specific particle tracks are output.
|
||||
These particles are specified withen a ''track'' element. The ''track'' element
|
||||
These particles are specified within a ''track'' element. The ''track'' element
|
||||
should contain triplets of integers specifying the batch, generation, and
|
||||
particle numbers, respectively. For example, to output the tracks for particles
|
||||
3 and 4 of batch 1 and generation 2 the settings.xml file should contain:
|
||||
|
|
@ -474,7 +471,7 @@ describing track files. The default output name is "track.pvtp". A common
|
|||
usage of track.py is "track.py track*.binary" which will use the data from all
|
||||
binary track files in the directory to write a "track.pvtp" VTK output file.
|
||||
The .pvtp file can then be read and plotted by 3d visualization programs such as
|
||||
Paraview.
|
||||
ParaView.
|
||||
|
||||
----------------------
|
||||
Source Site Processing
|
||||
|
|
|
|||
|
|
@ -79,14 +79,6 @@ with the :envvar:`CROSS_SECTIONS` environment variable. It is recommended to add
|
|||
a line in your ``.profile`` or ``.bash_profile`` setting the
|
||||
:envvar:`CROSS_SECTIONS` environment variable.
|
||||
|
||||
ERROR: Invalid usage of L(I) in ACE data; Consider using more recent data set.
|
||||
******************************************************************************
|
||||
|
||||
The cross-sections requested in ``materials.xml`` do not conform to the current
|
||||
standard format. This typically happens with fissionable nuclides in a ``.6*c``
|
||||
library as distributed with MCNP. Please try a newer library such as any from
|
||||
the ``.7*c`` set.
|
||||
|
||||
Geometry Debugging
|
||||
******************
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0"?>
|
||||
<materials>
|
||||
|
||||
<default_xs>70c</default_xs>
|
||||
<default_xs>71c</default_xs>
|
||||
|
||||
<material id="40">
|
||||
<density value="4.5" units="g/cc" />
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
<density value="1.0" units="g/cc" />
|
||||
<nuclide name="H-1" ao="2.0" />
|
||||
<nuclide name="O-16" ao="1.0" />
|
||||
<sab name="lwtr" xs="10t" />
|
||||
<sab name="HH2O" xs="71t" />
|
||||
</material>
|
||||
|
||||
</materials>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0"?>
|
||||
<materials>
|
||||
|
||||
<default_xs>70c</default_xs>
|
||||
<default_xs>71c</default_xs>
|
||||
|
||||
<!-- Definition of materials -->
|
||||
<material id="1">
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
<density value="1.0" units="g/cc" />
|
||||
<nuclide name="H-1" ao="2.0" />
|
||||
<nuclide name="O-16" ao="1.0" />
|
||||
<sab name="lwtr" xs="10t" />
|
||||
<sab name="HH2O" xs="71t" />
|
||||
</material>
|
||||
|
||||
</materials>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0"?>
|
||||
<materials>
|
||||
|
||||
<default_xs>70c</default_xs>
|
||||
<default_xs>71c</default_xs>
|
||||
|
||||
<!-- Definition of materials -->
|
||||
<material id="1">
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
<density value="1.0" units="g/cc" />
|
||||
<nuclide name="H-1" ao="2.0" />
|
||||
<nuclide name="O-16" ao="1.0" />
|
||||
<sab name="lwtr" xs="10t" />
|
||||
<sab name="HH2O" xs="71t" />
|
||||
</material>
|
||||
|
||||
</materials>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0"?>
|
||||
<materials>
|
||||
|
||||
<!-- By default, use 600K cross sections -->
|
||||
<!-- By default, use 300K cross sections -->
|
||||
<default_xs>71c</default_xs>
|
||||
|
||||
<!--
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
<nuclide name="H-2" ao="7.4196e-06" />
|
||||
<nuclide name="O-16" ao="2.4672e-02" />
|
||||
<nuclide name="O-17" ao="6.0099e-05" />
|
||||
<sab name="lwtr" xs="15t" />
|
||||
<sab name="HH2O" xs="71t" />
|
||||
</material>
|
||||
|
||||
</materials>
|
||||
</materials>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0"?>
|
||||
<materials>
|
||||
|
||||
<default_xs>70c</default_xs>
|
||||
<default_xs>71c</default_xs>
|
||||
|
||||
<material id="1">
|
||||
<density value="4.5" units="g/cc" />
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ Write tracks for all particles.
|
|||
.B "\-v\fR, \fP\-\-version"
|
||||
Show version information.
|
||||
.TP
|
||||
.B "\-?\fR, \fP\-\-help"
|
||||
.B "\-h\fR, \fP\-\-help"
|
||||
Show help message.
|
||||
.SH ENVIRONMENT VARIABLES
|
||||
The behavior of
|
||||
|
|
|
|||
|
|
@ -7,6 +7,14 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include)
|
||||
|
||||
#===============================================================================
|
||||
# Architecture specific definitions
|
||||
#===============================================================================
|
||||
|
||||
if (${UNIX})
|
||||
add_definitions(-DUNIX)
|
||||
endif()
|
||||
|
||||
#===============================================================================
|
||||
# Command line options
|
||||
#===============================================================================
|
||||
|
|
@ -17,6 +25,7 @@ option(petsc "Enable PETSC for use in CMFD acceleration" OFF)
|
|||
option(debug "Compile with debug flags" OFF)
|
||||
option(optimize "Turn on all compiler optimization flags" OFF)
|
||||
option(verbose "Create verbose Makefiles" OFF)
|
||||
option(coverage "Compile with flags" OFF)
|
||||
|
||||
if (verbose)
|
||||
set(CMAKE_VERBOSE_MAKEFILE on)
|
||||
|
|
@ -26,15 +35,21 @@ endif()
|
|||
# MPI for distributed-memory parallelism / HDF5 for binary output
|
||||
#===============================================================================
|
||||
|
||||
set(MPI_ENABLED FALSE)
|
||||
set(HDF5_ENABLED FALSE)
|
||||
if($ENV{FC} MATCHES "mpi.*")
|
||||
message("-- Detected MPI wrapper: $ENV{FC}")
|
||||
add_definitions(-DMPI)
|
||||
set(MPI_ENABLED TRUE)
|
||||
elseif($ENV{FC} MATCHES "h5fc$")
|
||||
message("-- Detected HDF5 wrapper: $ENV{FC}")
|
||||
add_definitions(-DHDF5)
|
||||
set(HDF5_ENABLED TRUE)
|
||||
elseif($ENV{FC} MATCHES "h5pfc$")
|
||||
message("-- Detected parallel HDF5 wrapper: $ENV{FC}")
|
||||
add_definitions(-DMPI -DHDF5)
|
||||
set(MPI_ENABLED TRUE)
|
||||
set(HDF5_ENABLED TRUE)
|
||||
endif()
|
||||
|
||||
#===============================================================================
|
||||
|
|
@ -59,6 +74,10 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
|
|||
set(f90flags "-fopenmp ${f90flags}")
|
||||
set(ldflags "-fopenmp ${ldflags}")
|
||||
endif()
|
||||
if(coverage)
|
||||
set(f90flags "-coverage ${f90flags}")
|
||||
set(ldflags "-coverage ${ldflags}")
|
||||
endif()
|
||||
|
||||
elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
|
||||
# Intel Fortran compiler options
|
||||
|
|
@ -128,7 +147,9 @@ endif()
|
|||
# PETSc for CMFD functionality
|
||||
#===============================================================================
|
||||
|
||||
set (PETSC_ENABLED FALSE)
|
||||
if(petsc)
|
||||
set(PETSC_ENABLED TRUE)
|
||||
find_package(PETSc REQUIRED HINTS $ENV{PETSC_DIR}/conf)
|
||||
find_library(libpetsc petsc $ENV{PETSC_DIR}/lib)
|
||||
|
||||
|
|
@ -146,6 +167,34 @@ if(petsc)
|
|||
list(INSERT PETSC_PACKAGE_LIBS 0 ${PETSC_FLAPACK_LIB})
|
||||
endif()
|
||||
|
||||
# If libdl wasn't found, search /usr/lib64
|
||||
if(PETSC_DL_LIB STREQUAL "PETSC_DL_LIB-NOTFOUND")
|
||||
find_library(PETSC_DL_LIB libdl.so /usr/lib64)
|
||||
list(REMOVE_ITEM PETSC_PACKAGE_LIBS PETSC_DL_LIB-NOTFOUND)
|
||||
list(INSERT PETSC_PACKAGE_LIBS 0 ${PETSC_DL_LIB})
|
||||
endif()
|
||||
|
||||
# If libm wasn't found, search /usr/lib64
|
||||
if(PETSC_M_LIB STREQUAL "PETSC_M_LIB-NOTFOUND")
|
||||
find_library(PETSC_M_LIB libm.so /usr/lib64)
|
||||
list(REMOVE_ITEM PETSC_PACKAGE_LIBS PETSC_M_LIB-NOTFOUND)
|
||||
list(INSERT PETSC_PACKAGE_LIBS 0 ${PETSC_M_LIB})
|
||||
endif()
|
||||
|
||||
# If libpthread wasn't found, search /usr/lib64
|
||||
if(PETSC_PTHREAD_LIB STREQUAL "PETSC_PTHREAD_LIB-NOTFOUND")
|
||||
find_library(PETSC_PTHREAD_LIB libpthread.so /usr/lib64)
|
||||
list(REMOVE_ITEM PETSC_PACKAGE_LIBS PETSC_PTHREAD_LIB-NOTFOUND)
|
||||
list(INSERT PETSC_PACKAGE_LIBS 0 ${PETSC_PTHREAD_LIB})
|
||||
endif()
|
||||
|
||||
# If librt wasn't found, search /usr/lib64
|
||||
if(PETSC_RT_LIB STREQUAL "PETSC_RT_LIB-NOTFOUND")
|
||||
find_library(PETSC_RT_LIB librt.so /usr/lib64)
|
||||
list(REMOVE_ITEM PETSC_PACKAGE_LIBS PETSC_RT_LIB-NOTFOUND)
|
||||
list(INSERT PETSC_PACKAGE_LIBS 0 ${PETSC_RT_LIB})
|
||||
endif()
|
||||
|
||||
message("-- Using PETSC: ${libpetsc}")
|
||||
add_definitions(-DPETSC)
|
||||
include_directories($ENV{PETSC_DIR}/include)
|
||||
|
|
@ -156,7 +205,7 @@ endif()
|
|||
# git SHA1 hash
|
||||
#===============================================================================
|
||||
|
||||
execute_process(COMMAND git rev-parse -q HEAD
|
||||
execute_process(COMMAND git rev-parse HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
RESULT_VARIABLE GIT_SHA1_SUCCESS
|
||||
OUTPUT_VARIABLE GIT_SHA1
|
||||
|
|
@ -164,22 +213,30 @@ execute_process(COMMAND git rev-parse -q HEAD
|
|||
if(GIT_SHA1_SUCCESS EQUAL 0)
|
||||
add_definitions(-DGIT_SHA1="${GIT_SHA1}")
|
||||
endif()
|
||||
|
||||
|
||||
#===============================================================================
|
||||
# FoX Fortran XML Library
|
||||
#===============================================================================
|
||||
|
||||
file(GLOB_RECURSE source_fox xml/*.F90)
|
||||
add_library(fox STATIC ${source_fox})
|
||||
# Only initialize git submodules if it is not there. User is responsible
|
||||
# for future updates of fox xml submodule.
|
||||
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/xml/fox/.git)
|
||||
message("-- Initializing/Updating FoX XML submodule...")
|
||||
execute_process(COMMAND git submodule init
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/..)
|
||||
execute_process(COMMAND git submodule update
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/..)
|
||||
endif()
|
||||
add_subdirectory(xml/fox)
|
||||
|
||||
#===============================================================================
|
||||
# Build OpenMC executable
|
||||
#===============================================================================
|
||||
|
||||
set(program "openmc")
|
||||
file(GLOB source *.F90)
|
||||
file(GLOB source *.F90 xml/openmc_fox.F90)
|
||||
add_executable(${program} ${source})
|
||||
target_link_libraries(${program} ${libraries} fox)
|
||||
target_link_libraries(${program} ${libraries} fox_dom)
|
||||
set_target_properties(${program} PROPERTIES
|
||||
COMPILE_FLAGS "${f90flags}"
|
||||
LINK_FLAGS "${ldflags}")
|
||||
|
|
@ -206,4 +263,137 @@ if(PYTHONINTERP_FOUND)
|
|||
install(CODE "execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} setup.py install --user
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/utils)")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
#===============================================================================
|
||||
# Regression tests
|
||||
#===============================================================================
|
||||
|
||||
# This allows for dashboard configuration
|
||||
include(CTest)
|
||||
|
||||
# Get a list of all the tests to run
|
||||
file(GLOB_RECURSE TESTS ${CMAKE_CURRENT_SOURCE_DIR}/../tests/test_*.py)
|
||||
|
||||
# Check to see if PETSC is compiled for CMFD tests
|
||||
if (NOT ${PETSC_ENABLED})
|
||||
file(GLOB_RECURSE CMFD_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/../tests/test_cmfd*.py)
|
||||
foreach(cmfd_test in ${CMFD_TESTS})
|
||||
list(REMOVE_ITEM TESTS ${cmfd_test})
|
||||
endforeach(cmfd_test)
|
||||
endif(NOT ${PETSC_ENABLED})
|
||||
|
||||
# Check for MEM_CHECK and COVERAGE variables
|
||||
if (DEFINED ENV{MEM_CHECK})
|
||||
set(MEM_CHECK $ENV{MEM_CHECK})
|
||||
else(DEFINED ENV{MEM_CHECK})
|
||||
set(MEM_CHECK FALSE)
|
||||
endif(DEFINED ENV{MEM_CHECK})
|
||||
if (DEFINED ENV{COVERAGE})
|
||||
set(COVERAGE $ENV{COVERAGE})
|
||||
else(DEFINED ENV{COVERAGE})
|
||||
set(COVERAGE FALSE)
|
||||
endif(DEFINED ENV{COVERAGE})
|
||||
|
||||
# Loop through all the tests
|
||||
foreach(test ${TESTS})
|
||||
|
||||
# Get test information
|
||||
get_filename_component(TEST_NAME ${test} NAME)
|
||||
get_filename_component(TEST_PATH ${test} PATH)
|
||||
|
||||
# Check for running standard tests (no valgrind, no gcov)
|
||||
if(NOT ${MEM_CHECK} AND NOT ${COVERAGE})
|
||||
|
||||
# Check serial/parallel
|
||||
if (${MPI_ENABLED})
|
||||
|
||||
# Preform a parallel test
|
||||
add_test(NAME ${TEST_NAME}
|
||||
WORKING_DIRECTORY ${TEST_PATH}
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $<TARGET_FILE:openmc>
|
||||
--mpi_exec $ENV{MPI_DIR}/bin/mpiexec)
|
||||
|
||||
else(${MPI_ENABLED})
|
||||
|
||||
# Perform a serial test
|
||||
add_test(NAME ${TEST_NAME}
|
||||
WORKING_DIRECTORY ${TEST_PATH}
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $<TARGET_FILE:openmc>)
|
||||
|
||||
endif(${MPI_ENABLED})
|
||||
|
||||
# Handle special case for valgrind and gcov (run openmc directly, no python)
|
||||
else(NOT ${MEM_CHECK} AND NOT ${COVERAGE})
|
||||
|
||||
# If a plot test is encountered, run with "-p"
|
||||
if (${test} MATCHES "test_plot")
|
||||
|
||||
# Perform serial valgrind and coverage test with plot flag
|
||||
add_test(NAME ${TEST_NAME}
|
||||
WORKING_DIRECTORY ${TEST_PATH}
|
||||
COMMAND $<TARGET_FILE:openmc> -p ${TEST_PATH})
|
||||
|
||||
# If a restart test is encounted, need to run with -r and restart file(s)
|
||||
elseif(${test} MATCHES "restart")
|
||||
|
||||
# Set restart file names
|
||||
if (${HDF5_ENABLED})
|
||||
|
||||
# Handle restart tests separately
|
||||
if(${test} MATCHES "test_statepoint_restart")
|
||||
set(RESTART_FILE statepoint.07.h5)
|
||||
elseif(${test} MATCHES "test_sourcepoint_restart")
|
||||
set(RESTART_FILE statepoint.07.h5 source.07.h5)
|
||||
elseif(${test} MATCHES "test_particle_restart_eigval")
|
||||
set(RESTART_FILE particle_12_842.h5)
|
||||
elseif(${test} MATCHES "test_particle_restart_fixed")
|
||||
set(RESTART_FILE particle_7_6144.h5)
|
||||
else(${test} MATCHES "test_statepoint_restart")
|
||||
message(FATAL_ERROR "Restart test ${test} not recognized")
|
||||
endif(${test} MATCHES "test_statepoint_restart")
|
||||
|
||||
else(${HDF5_ENABLED})
|
||||
|
||||
# Handle restart tests separately
|
||||
if(${test} MATCHES "test_statepoint_restart")
|
||||
set(RESTART_FILE statepoint.07.binary)
|
||||
elseif(${test} MATCHES "test_sourcepoint_restart")
|
||||
set(RESTART_FILE statepoint.07.binary source.07.binary)
|
||||
elseif(${test} MATCHES "test_particle_restart_eigval")
|
||||
set(RESTART_FILE particle_12_842.binary)
|
||||
elseif(${test} MATCHES "test_particle_restart_fixed")
|
||||
set(RESTART_FILE particle_7_6144.binary)
|
||||
else(${test} MATCHES "test_statepoint_restart")
|
||||
message(FATAL_ERROR "Restart test ${test} not recognized")
|
||||
endif(${test} MATCHES "test_statepoint_restart")
|
||||
|
||||
endif(${HDF5_ENABLED})
|
||||
|
||||
# Perform serial valgrind and coverage test
|
||||
add_test(NAME ${TEST_NAME}
|
||||
WORKING_DIRECTORY ${TEST_PATH}
|
||||
COMMAND $<TARGET_FILE:openmc> ${TEST_PATH})
|
||||
|
||||
# Perform serial valgrind and coverage restart test
|
||||
add_test(NAME ${TEST_NAME}_restart
|
||||
WORKING_DIRECTORY ${TEST_PATH}
|
||||
COMMAND $<TARGET_FILE:openmc> -r ${RESTART_FILE} ${TEST_PATH})
|
||||
|
||||
# Set test dependency
|
||||
set_tests_properties(${TEST_NAME}_restart PROPERTIES DEPENDS ${TEST_NAME})
|
||||
|
||||
|
||||
# Handle standard tests for valgrind and gcov
|
||||
else(${test} MATCHES "test_plot")
|
||||
|
||||
# Perform serial valgrind and coverage test
|
||||
add_test(NAME ${TEST_NAME}
|
||||
WORKING_DIRECTORY ${TEST_PATH}
|
||||
COMMAND $<TARGET_FILE:openmc> ${TEST_PATH})
|
||||
|
||||
endif(${test} MATCHES "test_plot")
|
||||
|
||||
endif(NOT ${MEM_CHECK} AND NOT ${COVERAGE})
|
||||
|
||||
endforeach(test)
|
||||
|
|
|
|||
25
src/CTestConfig.cmake
Normal file
25
src/CTestConfig.cmake
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
## This file should be placed in the root directory of your project.
|
||||
## Then modify the CMakeLists.txt file in the root directory of your
|
||||
## project to incorporate the testing dashboard.
|
||||
## # The following are required to uses Dart and the Cdash dashboard
|
||||
## ENABLE_TESTING()
|
||||
## INCLUDE(CTest)
|
||||
|
||||
# Generic information about CDASH site
|
||||
set(CTEST_PROJECT_NAME "OpenMC")
|
||||
set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")
|
||||
set(CTEST_DROP_METHOD "http")
|
||||
set(CTEST_DROP_SITE "openmc.mit.edu")
|
||||
set(CTEST_DROP_LOCATION "/cdash/submit.php?project=OpenMC")
|
||||
set(CTEST_DROP_SITE_CDASH TRUE)
|
||||
|
||||
# Set file size larger to see more output
|
||||
set(CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE "20000")
|
||||
set(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE "20000")
|
||||
|
||||
# User/password to CDASH site
|
||||
# Please contact Nick Horelik <nhorelik@mit.edu> or
|
||||
# Bryan Herman <bherman@mit.edu> if you want to push
|
||||
# test suite information to our CDASH site.
|
||||
set(CTEST_DROP_SITE_USER "")
|
||||
set(CTEST_DROP_SITE_PASSWORD "")
|
||||
|
|
@ -6,7 +6,9 @@ clean:
|
|||
make -s -C build clean
|
||||
distclean:
|
||||
rm -fr build
|
||||
test:
|
||||
make -s -C build test
|
||||
install:
|
||||
make -s -C build install
|
||||
|
||||
.PHONY: all clean distclean install
|
||||
.PHONY: all clean distclean test install
|
||||
|
|
|
|||
190
src/ace.F90
190
src/ace.F90
|
|
@ -3,10 +3,11 @@ module ace
|
|||
use ace_header, only: Nuclide, Reaction, SAlphaBeta, XsListing, &
|
||||
DistEnergy
|
||||
use constants
|
||||
use endf, only: reaction_name
|
||||
use endf, only: reaction_name, is_fission, is_disappearance
|
||||
use error, only: fatal_error, warning
|
||||
use fission, only: nu_total
|
||||
use global
|
||||
use list_header, only: ListElemInt, ListInt
|
||||
use material_header, only: Material
|
||||
use output, only: write_message
|
||||
use set_header, only: SetChar
|
||||
|
|
@ -609,6 +610,7 @@ contains
|
|||
integer :: IE ! reaction's starting index on energy grid
|
||||
integer :: NE ! number of energies for reaction
|
||||
type(Reaction), pointer :: rxn => null()
|
||||
type(ListInt) :: MTs
|
||||
|
||||
LMT = JXS(3)
|
||||
JXS4 = JXS(4)
|
||||
|
|
@ -657,6 +659,20 @@ contains
|
|||
rxn % multiplicity = abs(nint(XSS(JXS5 + i - 1)))
|
||||
rxn % scatter_in_cm = (nint(XSS(JXS5 + i - 1)) < 0)
|
||||
|
||||
! If multiplicity is energy-dependent (absolute value > 100), set it based
|
||||
! on the MT value
|
||||
if (rxn % multiplicity > 100) then
|
||||
if (any(rxn%MT == [11, 16, 24, 30, 41])) then
|
||||
rxn % multiplicity = 2
|
||||
elseif (any(rxn%MT == [17, 25, 42])) then
|
||||
rxn % multiplicity = 3
|
||||
elseif (rxn%MT == 37) then
|
||||
rxn % multiplicity = 4
|
||||
else
|
||||
rxn % multiplicity = 1
|
||||
end if
|
||||
end if
|
||||
|
||||
! read starting energy index
|
||||
LOCA = int(XSS(LXS + i - 1))
|
||||
IE = int(XSS(JXS7 + LOCA - 1))
|
||||
|
|
@ -667,17 +683,37 @@ contains
|
|||
allocate(rxn % sigma(NE))
|
||||
XSS_index = JXS7 + LOCA + 1
|
||||
rxn % sigma = get_real(NE)
|
||||
end do
|
||||
|
||||
! Skip redundant reactions -- this includes total inelastic level
|
||||
! scattering, gas production cross sections (MT=200+), and (n,p), (n,d),
|
||||
! etc. reactions leaving the nucleus in an excited state
|
||||
if (rxn % MT == N_LEVEL .or. rxn % MT > N_DA) cycle
|
||||
! Create set of MT values
|
||||
do i = 1, size(nuc % reactions)
|
||||
call MTs % append(nuc % reactions(i) % MT)
|
||||
end do
|
||||
|
||||
! Create total, absorption, and fission cross sections
|
||||
do i = 2, size(nuc % reactions)
|
||||
rxn => nuc % reactions(i)
|
||||
IE = rxn % threshold
|
||||
NE = size(rxn % sigma)
|
||||
|
||||
! Skip total inelastic level scattering, gas production cross sections
|
||||
! (MT=200+), etc.
|
||||
if (rxn % MT == N_LEVEL) cycle
|
||||
if (rxn % MT > N_5N2P .and. rxn % MT < N_P0) cycle
|
||||
|
||||
! Skip level cross sections if total is available
|
||||
if (rxn % MT >= N_P0 .and. rxn % MT <= N_PC .and. MTs % contains(N_P)) cycle
|
||||
if (rxn % MT >= N_D0 .and. rxn % MT <= N_DC .and. MTs % contains(N_D)) cycle
|
||||
if (rxn % MT >= N_T0 .and. rxn % MT <= N_TC .and. MTs % contains(N_T)) cycle
|
||||
if (rxn % MT >= N_3HE0 .and. rxn % MT <= N_3HEC .and. MTs % contains(N_3HE)) cycle
|
||||
if (rxn % MT >= N_A0 .and. rxn % MT <= N_AC .and. MTs % contains(N_A)) cycle
|
||||
if (rxn % MT >= N_2N0 .and. rxn % MT <= N_2NC .and. MTs % contains(N_2N)) cycle
|
||||
|
||||
! Add contribution to total cross section
|
||||
nuc % total(IE:IE+NE-1) = nuc % total(IE:IE+NE-1) + rxn % sigma
|
||||
|
||||
! Add contribution to absorption cross section
|
||||
if (rxn % MT >= N_GAMMA .and. rxn % MT <= N_DA) then
|
||||
if (is_disappearance(rxn % MT)) then
|
||||
nuc % absorption(IE:IE+NE-1) = nuc % absorption(IE:IE+NE-1) + rxn % sigma
|
||||
end if
|
||||
|
||||
|
|
@ -690,8 +726,7 @@ contains
|
|||
end if
|
||||
|
||||
! Add contribution to fission cross section
|
||||
if (rxn % MT == N_FISSION .or. rxn % MT == N_F .or. rxn % MT == N_NF &
|
||||
.or. rxn % MT == N_2NF .or. rxn % MT == N_3NF) then
|
||||
if (is_fission(rxn % MT)) then
|
||||
nuc % fissionable = .true.
|
||||
nuc % fission(IE:IE+NE-1) = nuc % fission(IE:IE+NE-1) + rxn % sigma
|
||||
|
||||
|
|
@ -704,11 +739,14 @@ contains
|
|||
|
||||
! Keep track of this reaction for easy searching later
|
||||
i_fission = i_fission + 1
|
||||
nuc % index_fission(i_fission) = i + 1
|
||||
nuc % index_fission(i_fission) = i
|
||||
nuc % n_fission = nuc % n_fission + 1
|
||||
end if
|
||||
end do
|
||||
|
||||
! Clear MTs set
|
||||
call MTs % clear()
|
||||
|
||||
end subroutine read_reactions
|
||||
|
||||
!===============================================================================
|
||||
|
|
@ -789,14 +827,19 @@ contains
|
|||
! read angular distribution -- currently this does not actually parse the
|
||||
! angular distribution tables for each incoming energy, that must be done
|
||||
! on-the-fly
|
||||
LC = rxn % adist % location(1)
|
||||
XSS_index = JXS9 + abs(LC) - 1
|
||||
XSS_index = JXS9 + LOCB + 2 * NE
|
||||
rxn % adist % data = get_real(length)
|
||||
|
||||
! change location pointers since they are currently relative to JXS(9)
|
||||
LC = abs(rxn % adist % location(1))
|
||||
rxn % adist % location = abs(rxn % adist % location) - LC
|
||||
|
||||
LC = LOCB + 2 * NE + 1
|
||||
do j = 1, NE
|
||||
! For consistency, leave location as 0 if type is isotropic.
|
||||
! This is not necessary for current correctness, but can avoid
|
||||
! future issues
|
||||
if (rxn % adist % location(j) /= 0) then
|
||||
rxn % adist % location(j) = abs(rxn % adist % location(j)) - LC
|
||||
end if
|
||||
end do
|
||||
end do
|
||||
|
||||
end subroutine read_angular_dist
|
||||
|
|
@ -967,24 +1010,23 @@ contains
|
|||
! Continuous tabular distribution
|
||||
NR = int(XSS(lc + 1))
|
||||
NE = int(XSS(lc + 2 + 2*NR))
|
||||
! Before progressing, check to see if data set uses L(I) values
|
||||
! in a way inconsistent with the current form of the ACE Format Guide
|
||||
! (MCNP5 Manual, Vol 3)
|
||||
allocate(L(NE))
|
||||
L = int(XSS(lc + 3 + 2*NR + NE: lc + 3 + 2*NR + 2*NE - 1))
|
||||
do i = 1,NE
|
||||
! Now check to see if L(i) is equal to any other entries
|
||||
! If so, then we must exit
|
||||
if (count(L == L(i)) > 1) then
|
||||
message = "Invalid usage of L(I) in ACE data; &
|
||||
&Consider using more recent data set."
|
||||
call fatal_error()
|
||||
end if
|
||||
end do
|
||||
deallocate(L)
|
||||
|
||||
! Continue with finding data length
|
||||
length = length + 2 + 2*NR + 2*NE
|
||||
do i = 1,NE
|
||||
! Some older data sets use the same LDAT for multiple Ein tables.
|
||||
! If this is the case, we should skip incrementing length when it is
|
||||
! not needed.
|
||||
if (i < NE) then
|
||||
if (any(L(i) == L(i + 1: NE))) then
|
||||
! adjust location for this block
|
||||
j = lc + 2 + 2*NR + NE + i
|
||||
XSS(j) = XSS(j) - LOCC - lid
|
||||
cycle
|
||||
end if
|
||||
end if
|
||||
! determine length
|
||||
NP = int(XSS(lc + length + 2))
|
||||
length = length + 2 + 3*NP
|
||||
|
|
@ -993,6 +1035,7 @@ contains
|
|||
j = lc + 2 + 2*NR + NE + i
|
||||
XSS(j) = XSS(j) - LOCC - lid
|
||||
end do
|
||||
deallocate(L)
|
||||
|
||||
case (5)
|
||||
! General evaporation spectrum
|
||||
|
|
@ -1025,24 +1068,23 @@ contains
|
|||
! Kalbach-Mann correlated scattering
|
||||
NR = int(XSS(lc + 1))
|
||||
NE = int(XSS(lc + 2 + 2*NR))
|
||||
! Before progressing, check to see if data set uses L(I) values
|
||||
! in a way inconsistent with the current form of the ACE Format Guide
|
||||
! (MCNP5 Manual, Vol 3)
|
||||
allocate(L(NE))
|
||||
L = int(XSS(lc + 3 + 2*NR + NE: lc + 3 + 2*NR + 2*NE - 1))
|
||||
do i = 1,NE
|
||||
! Now check to see if L(i) is equal to any other entries
|
||||
! If so, then we must exit
|
||||
if (count(L == L(i)) > 1) then
|
||||
message = "Invalid usage of L(I) in ACE data; &
|
||||
&Consider using more recent data set."
|
||||
call fatal_error()
|
||||
end if
|
||||
end do
|
||||
deallocate(L)
|
||||
|
||||
! Continue with finding data length
|
||||
length = length + 2 + 2*NR + 2*NE
|
||||
do i = 1,NE
|
||||
! Some older data sets use the same LDAT for multiple Ein tables.
|
||||
! If this is the case, we should skip incrementing length when it is
|
||||
! not needed.
|
||||
if (i < NE) then
|
||||
if (any(L(i) == L(i + 1: NE))) then
|
||||
! adjust location for this block
|
||||
j = lc + 2 + 2*NR + NE + i
|
||||
XSS(j) = XSS(j) - LOCC - lid
|
||||
cycle
|
||||
end if
|
||||
end if
|
||||
NP = int(XSS(lc + length + 2))
|
||||
length = length + 2 + 5*NP
|
||||
|
||||
|
|
@ -1050,29 +1092,30 @@ contains
|
|||
j = lc + 2 + 2*NR + NE + i
|
||||
XSS(j) = XSS(j) - LOCC - lid
|
||||
end do
|
||||
deallocate(L)
|
||||
|
||||
case (61)
|
||||
! Correlated energy and angle distribution
|
||||
NR = int(XSS(lc + 1))
|
||||
NE = int(XSS(lc + 2 + 2*NR))
|
||||
! Before progressing, check to see if data set uses L(I) values
|
||||
! in a way inconsistent with the current form of the ACE Format Guide
|
||||
! (MCNP5 Manual, Vol 3)
|
||||
allocate(L(NE))
|
||||
L = int(XSS(lc + 3 + 2*NR + NE: lc + 3 + 2*NR + 2*NE - 1))
|
||||
do i = 1,NE
|
||||
! Now check to see if L(i) is equal to any other entries
|
||||
! If so, then we must exit
|
||||
if (count(L == L(i)) > 1) then
|
||||
message = "Invalid usage of L(I) in ACE data; &
|
||||
&Consider using more recent data set."
|
||||
call fatal_error()
|
||||
end if
|
||||
end do
|
||||
deallocate(L)
|
||||
|
||||
! Continue with finding data length
|
||||
length = length + 2 + 2*NR + 2*NE
|
||||
do i = 1,NE
|
||||
! Some older data sets use the same LDAT for multiple Ein tables.
|
||||
! If this is the case, we should skip incrementing length when it is
|
||||
! not needed.
|
||||
if (i < NE) then
|
||||
if (any(L(i) == L(i + 1: NE))) then
|
||||
! adjust locators for energy distribution
|
||||
j = lc + 2 + 2*NR + NE + i
|
||||
XSS(j) = XSS(j) - LOCC - lid
|
||||
cycle
|
||||
end if
|
||||
end if
|
||||
|
||||
! outgoing energy distribution
|
||||
NP = int(XSS(lc + length + 2))
|
||||
|
||||
|
|
@ -1094,7 +1137,7 @@ contains
|
|||
j = lc + 2 + 2*NR + NE + i
|
||||
XSS(j) = XSS(j) - LOCC - lid
|
||||
end do
|
||||
|
||||
deallocate(L)
|
||||
case (66)
|
||||
! N-body phase space distribution
|
||||
length = 2
|
||||
|
|
@ -1108,15 +1151,7 @@ contains
|
|||
! (MCNP5 Manual, Vol 3)
|
||||
allocate(L(NE))
|
||||
L = int(XSS(lc + 3 + 2*NR + NE: lc + 3 + 2*NR + 2*NE - 1))
|
||||
do i = 1,NE
|
||||
! Now check to see if L(i) is equal to any other entries
|
||||
! If so, then we must exit
|
||||
if (count(L == L(i)) > 1) then
|
||||
message = "Invalid usage of L(I) in ACE data; &
|
||||
&Consider using more recent data set."
|
||||
call fatal_error()
|
||||
end if
|
||||
end do
|
||||
! Don't currently do anything with L
|
||||
deallocate(L)
|
||||
! Continue with finding data length
|
||||
NMU = int(XSS(lc + 4 + 2*NR + 2*NE))
|
||||
|
|
@ -1330,7 +1365,7 @@ contains
|
|||
|
||||
! Now we can fill the inelastic_data(i) attributes
|
||||
do i = 1, NE_in
|
||||
XSS_index = LOCC(i)
|
||||
XSS_index = int(LOCC(i))
|
||||
NE_out = table % inelastic_data(i) % n_e_out
|
||||
do j = 1, NE_out
|
||||
table % inelastic_data(i) % e_out(j) = XSS(XSS_index + 1)
|
||||
|
|
@ -1417,4 +1452,31 @@ contains
|
|||
|
||||
end function get_real
|
||||
|
||||
!===============================================================================
|
||||
! SAME_NUCLIDE_LIST creates a linked list for each nuclide containing the
|
||||
! indices in the nuclides array of all other instances of that nuclide. For
|
||||
! example, the same nuclide may exist at multiple temperatures resulting
|
||||
! in multiple entries in the nuclides array for a single zaid number.
|
||||
!===============================================================================
|
||||
|
||||
subroutine same_nuclide_list()
|
||||
|
||||
integer :: i ! index in nuclides array
|
||||
integer :: j ! index in nuclides array
|
||||
type(ListElemInt), pointer :: nuc_list => null() ! pointer to nuclide list
|
||||
|
||||
do i = 1, n_nuclides_total
|
||||
allocate(nuclides(i) % nuc_list)
|
||||
nuc_list => nuclides(i) % nuc_list
|
||||
do j = 1, n_nuclides_total
|
||||
if (nuclides(i) % zaid == nuclides(j) % zaid) then
|
||||
nuc_list % data = j
|
||||
allocate(nuc_list % next)
|
||||
nuc_list => nuc_list % next
|
||||
end if
|
||||
end do
|
||||
end do
|
||||
|
||||
end subroutine same_nuclide_list
|
||||
|
||||
end module ace
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ module ace_header
|
|||
|
||||
use constants, only: MAX_FILE_LEN
|
||||
use endf_header, only: Tab1
|
||||
use list_header, only: ListElemInt
|
||||
|
||||
implicit none
|
||||
|
||||
|
|
@ -95,6 +96,9 @@ module ace_header
|
|||
real(8) :: awr ! weight of nucleus in neutron masses
|
||||
real(8) :: kT ! temperature in MeV (k*T)
|
||||
|
||||
! Linked list of indices in nuclides array of instances of this same nuclide
|
||||
type(ListElemInt), pointer :: nuc_list => null()
|
||||
|
||||
! Energy grid information
|
||||
integer :: n_grid ! # of nuclide grid points
|
||||
integer, allocatable :: grid_index(:) ! pointers to union grid
|
||||
|
|
@ -241,6 +245,7 @@ module ace_header
|
|||
|
||||
! Information for URR probability table use
|
||||
logical :: use_ptable ! in URR range with probability tables?
|
||||
real(8) :: last_prn
|
||||
end type NuclideMicroXS
|
||||
|
||||
!===============================================================================
|
||||
|
|
@ -337,26 +342,18 @@ module ace_header
|
|||
|
||||
integer :: i ! Loop counter
|
||||
|
||||
if (allocated(this % grid_index)) &
|
||||
deallocate(this % grid_index)
|
||||
if (allocated(this % grid_index)) deallocate(this % grid_index)
|
||||
|
||||
if (allocated(this % energy)) &
|
||||
deallocate(this % total, this % elastic, this % fission, &
|
||||
this % nu_fission, this % absorption)
|
||||
if (allocated(this % heating)) &
|
||||
deallocate(this % heating)
|
||||
deallocate(this % energy, this % total, this % elastic, &
|
||||
this % fission, this % nu_fission, this % absorption)
|
||||
if (allocated(this % heating)) deallocate(this % heating)
|
||||
|
||||
if (allocated(this % index_fission)) &
|
||||
deallocate(this % index_fission)
|
||||
if (allocated(this % index_fission)) deallocate(this % index_fission)
|
||||
|
||||
if (allocated(this % nu_t_data)) &
|
||||
deallocate(this % nu_t_data)
|
||||
|
||||
if (allocated(this % nu_p_data)) &
|
||||
deallocate(this % nu_p_data)
|
||||
|
||||
if (allocated(this % nu_d_data)) &
|
||||
deallocate(this % nu_d_data)
|
||||
if (allocated(this % nu_t_data)) deallocate(this % nu_t_data)
|
||||
if (allocated(this % nu_p_data)) deallocate(this % nu_p_data)
|
||||
if (allocated(this % nu_d_data)) deallocate(this % nu_d_data)
|
||||
|
||||
if (allocated(this % nu_d_precursor_data)) &
|
||||
deallocate(this % nu_d_precursor_data)
|
||||
|
|
|
|||
|
|
@ -800,7 +800,7 @@ contains
|
|||
!===============================================================================
|
||||
! FIX_NEUTRON_BALANCE is a method to adjust parameters to have perfect balance
|
||||
!===============================================================================
|
||||
|
||||
#ifdef DEVELOPMENTAL
|
||||
subroutine fix_neutron_balance()
|
||||
|
||||
use constants, only: ONE, ZERO, CMFD_NOACCEL
|
||||
|
|
@ -926,6 +926,7 @@ contains
|
|||
end do ZLOOP
|
||||
|
||||
end subroutine fix_neutron_balance
|
||||
#endif
|
||||
|
||||
!===============================================================================
|
||||
! COMPUTE_EFFECTIVE_DOWNSCATTER changes downscatter rate for zero upscatter
|
||||
|
|
|
|||
|
|
@ -194,6 +194,7 @@ contains
|
|||
if (allocated(this % dom)) deallocate(this % dom)
|
||||
if (allocated(this % k_cmfd)) deallocate(this % k_cmfd)
|
||||
if (allocated(this % entropy)) deallocate(this % entropy)
|
||||
if (allocated(this % resnb)) deallocate(this % resnb)
|
||||
|
||||
end subroutine deallocate_cmfd
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ module cmfd_input
|
|||
|
||||
implicit none
|
||||
private
|
||||
public :: configure_cmfd
|
||||
public :: configure_cmfd
|
||||
|
||||
contains
|
||||
|
||||
|
|
@ -20,9 +20,6 @@ contains
|
|||
|
||||
use cmfd_header, only: allocate_cmfd
|
||||
|
||||
#ifdef PETSC
|
||||
integer :: new_comm ! new mpi communicator
|
||||
#endif
|
||||
integer :: color ! color group of processor
|
||||
|
||||
! Read in cmfd input file
|
||||
|
|
@ -37,12 +34,10 @@ contains
|
|||
|
||||
! Split up procs
|
||||
#ifdef PETSC
|
||||
call MPI_COMM_SPLIT(MPI_COMM_WORLD, color, 0, new_comm, mpi_err)
|
||||
#endif
|
||||
call MPI_COMM_SPLIT(MPI_COMM_WORLD, color, 0, cmfd_comm, mpi_err)
|
||||
|
||||
! assign to PETSc
|
||||
#ifdef PETSC
|
||||
PETSC_COMM_WORLD = new_comm
|
||||
PETSC_COMM_WORLD = cmfd_comm
|
||||
|
||||
! Initialize PETSc on all procs
|
||||
call PetscInitialize(PETSC_NULL_CHARACTER, mpi_err)
|
||||
|
|
@ -124,7 +119,7 @@ contains
|
|||
cmfd % egrid = (/0.0_8,20.0_8/)
|
||||
cmfd % indices(4) = 1 ! one energy group
|
||||
end if
|
||||
|
||||
|
||||
! Set global albedo
|
||||
if (check_for_node(node_mesh, "albedo")) then
|
||||
call get_node_array(node_mesh, "albedo", cmfd % albedo)
|
||||
|
|
@ -139,7 +134,7 @@ contains
|
|||
if (get_arraysize_integer(node_mesh, "map") /= &
|
||||
product(cmfd % indices(1:3))) then
|
||||
message = 'FATAL==>CMFD coremap not to correct dimensions'
|
||||
call fatal_error()
|
||||
call fatal_error()
|
||||
end if
|
||||
allocate(iarray(get_arraysize_integer(node_mesh, "map")))
|
||||
call get_node_array(node_mesh, "map", iarray)
|
||||
|
|
@ -211,7 +206,7 @@ contains
|
|||
|
||||
! Batch to begin cmfd
|
||||
if (check_for_node(doc, "begin")) &
|
||||
call get_node_value(doc, "begin", cmfd_begin)
|
||||
call get_node_value(doc, "begin", cmfd_begin)
|
||||
|
||||
! Tally during inactive batches
|
||||
if (check_for_node(doc, "inactive")) then
|
||||
|
|
@ -307,7 +302,7 @@ contains
|
|||
m => meshes(n_user_meshes+1)
|
||||
|
||||
! Set mesh id
|
||||
m % id = n_user_meshes + 1
|
||||
m % id = n_user_meshes + 1
|
||||
|
||||
! Set mesh type to rectangular
|
||||
m % type = LATTICE_RECT
|
||||
|
|
@ -441,7 +436,7 @@ contains
|
|||
if (check_for_node(node_mesh, "energy")) then
|
||||
n_filters = n_filters + 1
|
||||
filters(n_filters) % type = FILTER_ENERGYIN
|
||||
ng = get_arraysize_double(node_mesh, "energy")
|
||||
ng = get_arraysize_double(node_mesh, "energy")
|
||||
filters(n_filters) % n_bins = ng - 1
|
||||
allocate(filters(n_filters) % real_bins(ng))
|
||||
call get_node_array(node_mesh, "energy", &
|
||||
|
|
@ -473,20 +468,20 @@ contains
|
|||
allocate(t % filters(n_filters))
|
||||
t % filters = filters(1:n_filters)
|
||||
|
||||
! Allocate scoring bins
|
||||
! Allocate scoring bins
|
||||
allocate(t % score_bins(3))
|
||||
t % n_score_bins = 3
|
||||
t % n_user_score_bins = 3
|
||||
|
||||
! Allocate scattering order data
|
||||
allocate(t % scatt_order(3))
|
||||
t % scatt_order = 0
|
||||
|
||||
allocate(t % moment_order(3))
|
||||
t % moment_order = 0
|
||||
|
||||
! Set macro_bins
|
||||
t % score_bins(1) = SCORE_FLUX
|
||||
t % score_bins(2) = SCORE_TOTAL
|
||||
t % score_bins(3) = SCORE_SCATTER_N
|
||||
t % scatt_order(3) = 1
|
||||
t % moment_order(3) = 1
|
||||
|
||||
else if (i == 2) then
|
||||
|
||||
|
|
@ -526,8 +521,8 @@ contains
|
|||
t % n_user_score_bins = 2
|
||||
|
||||
! Allocate scattering order data
|
||||
allocate(t % scatt_order(2))
|
||||
t % scatt_order = 0
|
||||
allocate(t % moment_order(2))
|
||||
t % moment_order = 0
|
||||
|
||||
! Set macro_bins
|
||||
t % score_bins(1) = SCORE_NU_SCATTER
|
||||
|
|
@ -569,8 +564,8 @@ contains
|
|||
t % n_user_score_bins = 1
|
||||
|
||||
! Allocate scattering order data
|
||||
allocate(t % scatt_order(1))
|
||||
t % scatt_order = 0
|
||||
allocate(t % moment_order(1))
|
||||
t % moment_order = 0
|
||||
|
||||
! Set macro bins
|
||||
t % score_bins(1) = SCORE_CURRENT
|
||||
|
|
|
|||
|
|
@ -16,7 +16,9 @@ module cmfd_jfnk_solver
|
|||
type(Matrix) :: jac_prec ! Jacobian preconditioner object
|
||||
type(Matrix) :: loss ! CMFD loss matrix
|
||||
type(Matrix) :: prod ! CMFD production matrix
|
||||
#ifdef PETSC
|
||||
type(JFNKSolver) :: jfnk ! JFNK solver object
|
||||
#endif
|
||||
type(Vector) :: resvec ! JFNK residual vector
|
||||
type(Vector) :: xvec ! JFNK solution vector
|
||||
|
||||
|
|
@ -51,9 +53,9 @@ contains
|
|||
#endif
|
||||
|
||||
! Set up residual and jacobian routines
|
||||
#ifdef PETSC
|
||||
jfnk_data % res_proc_ptr => compute_nonlinear_residual
|
||||
jfnk_data % jac_proc_ptr => build_jacobian_matrix
|
||||
#ifdef PETSC
|
||||
call jfnk % set_functions(jfnk_data, resvec, jac_prec)
|
||||
#endif
|
||||
|
||||
|
|
@ -104,8 +106,10 @@ contains
|
|||
! Assemble matrices and use PETSc
|
||||
call loss % assemble()
|
||||
call prod % assemble()
|
||||
#ifdef PETSC
|
||||
call loss % setup_petsc()
|
||||
call prod % setup_petsc()
|
||||
#endif
|
||||
|
||||
! Check for mathematical adjoint
|
||||
if (adjoint_calc .and. trim(cmfd_adjoint_type) == 'math') &
|
||||
|
|
@ -133,14 +137,18 @@ contains
|
|||
end if
|
||||
|
||||
! Set up vectors for PETSc
|
||||
#ifdef PETSC
|
||||
call resvec % setup_petsc()
|
||||
call xvec % setup_petsc()
|
||||
#endif
|
||||
|
||||
! Build jacobian from initial guess
|
||||
call build_jacobian_matrix(xvec)
|
||||
|
||||
! Set up Jacobian for PETSc
|
||||
#ifdef PETSC
|
||||
call jac_prec % setup_petsc()
|
||||
#endif
|
||||
|
||||
! Set dominance ratio to 0
|
||||
cmfd % dom(current_batch) = ZERO
|
||||
|
|
@ -262,7 +270,7 @@ contains
|
|||
!===============================================================================
|
||||
! COMPUTE_NONLINEAR_RESIDUAL computes the residual of the nonlinear equations
|
||||
!===============================================================================
|
||||
|
||||
#ifdef PETSC
|
||||
subroutine compute_nonlinear_residual(x, res)
|
||||
|
||||
use global, only: cmfd_write_matrices
|
||||
|
|
@ -310,7 +318,9 @@ contains
|
|||
else
|
||||
filename = 'res.bin'
|
||||
end if
|
||||
#ifdef PETSC
|
||||
call res % write_petsc_binary(filename)
|
||||
#endif
|
||||
|
||||
! Write out solution vector
|
||||
if (adjoint_calc) then
|
||||
|
|
@ -318,11 +328,14 @@ contains
|
|||
else
|
||||
filename = 'x.bin'
|
||||
end if
|
||||
#ifdef PETSC
|
||||
call x % write_petsc_binary(filename)
|
||||
#endif
|
||||
|
||||
end if
|
||||
|
||||
end subroutine compute_nonlinear_residual
|
||||
#endif
|
||||
|
||||
!===============================================================================
|
||||
! COMPUTE_ADJOINT calculates mathematical adjoint by taking transposes
|
||||
|
|
@ -333,13 +346,17 @@ contains
|
|||
use global, only: cmfd_write_matrices
|
||||
|
||||
! Transpose matrices
|
||||
#ifdef PETSC
|
||||
call loss % transpose()
|
||||
call prod % transpose()
|
||||
#endif
|
||||
|
||||
! Write out matrix in binary file (debugging)
|
||||
if (cmfd_write_matrices) then
|
||||
#ifdef PETSC
|
||||
call loss % write_petsc_binary('adj_lossmat.bin')
|
||||
call loss % write_petsc_binary('adj_prodmat.bin')
|
||||
#endif
|
||||
end if
|
||||
|
||||
end subroutine compute_adjoint
|
||||
|
|
|
|||
|
|
@ -29,7 +29,9 @@ module cmfd_power_solver
|
|||
type(Vector) :: s_n ! new source vector
|
||||
type(Vector) :: s_o ! old flux vector
|
||||
type(Vector) :: serr_v ! error in source
|
||||
#ifdef PETSC
|
||||
type(GMRESSolver) :: gmres ! gmres solver
|
||||
#endif
|
||||
|
||||
contains
|
||||
|
||||
|
|
@ -169,13 +171,17 @@ contains
|
|||
use global, only: cmfd_write_matrices
|
||||
|
||||
! Transpose matrices
|
||||
#ifdef PETSC
|
||||
call loss % transpose()
|
||||
call prod % transpose()
|
||||
#endif
|
||||
|
||||
! Write out matrix in binary file (debugging)
|
||||
if (cmfd_write_matrices) then
|
||||
#ifdef PETSC
|
||||
call loss % write_petsc_binary('adj_lossmat.bin')
|
||||
call prod % write_petsc_binary('adj_prodmat.bin')
|
||||
#endif
|
||||
end if
|
||||
|
||||
end subroutine compute_adjoint
|
||||
|
|
@ -320,7 +326,9 @@ contains
|
|||
else
|
||||
filename = 'fluxvec.bin'
|
||||
end if
|
||||
#ifdef PETSC
|
||||
call phi_n % write_petsc_binary(filename)
|
||||
#endif
|
||||
end if
|
||||
|
||||
end subroutine extract_results
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@ module constants
|
|||
|
||||
! OpenMC major, minor, and release numbers
|
||||
integer, parameter :: VERSION_MAJOR = 0
|
||||
integer, parameter :: VERSION_MINOR = 5
|
||||
integer, parameter :: VERSION_RELEASE = 4
|
||||
integer, parameter :: VERSION_MINOR = 6
|
||||
integer, parameter :: VERSION_RELEASE = 0
|
||||
|
||||
! Revision numbers for binary files
|
||||
integer, parameter :: REVISION_STATEPOINT = 11
|
||||
integer, parameter :: REVISION_STATEPOINT = 12
|
||||
integer, parameter :: REVISION_PARTICLE_RESTART = 1
|
||||
|
||||
! Binary file types
|
||||
|
|
@ -166,54 +166,28 @@ module constants
|
|||
|
||||
! Reaction types
|
||||
integer, parameter :: &
|
||||
TOTAL_XS = 1, &
|
||||
ELASTIC = 2, &
|
||||
N_LEVEL = 4, &
|
||||
MISC = 5, &
|
||||
N_2ND = 11, &
|
||||
N_2N = 16, &
|
||||
N_3N = 17, &
|
||||
N_FISSION = 18, &
|
||||
N_F = 19, &
|
||||
N_NF = 20, &
|
||||
N_2NF = 21, &
|
||||
N_NA = 22, &
|
||||
N_N3A = 23, &
|
||||
N_2NA = 24, &
|
||||
N_3NA = 25, &
|
||||
N_NP = 28, &
|
||||
N_N2A = 29, &
|
||||
N_2N2A = 30, &
|
||||
N_ND = 32, &
|
||||
N_NT = 33, &
|
||||
N_N3HE = 34, &
|
||||
N_ND2A = 35, &
|
||||
N_NT2A = 36, &
|
||||
N_4N = 37, &
|
||||
N_3NF = 38, &
|
||||
N_2NP = 41, &
|
||||
N_3NP = 42, &
|
||||
N_N2P = 44, &
|
||||
N_NPA = 45, &
|
||||
N_N1 = 51, &
|
||||
N_N40 = 90, &
|
||||
N_NC = 91, &
|
||||
N_DISAPPEAR = 101, &
|
||||
N_GAMMA = 102, &
|
||||
N_P = 103, &
|
||||
N_D = 104, &
|
||||
N_T = 105, &
|
||||
N_3HE = 106, &
|
||||
N_A = 107, &
|
||||
N_2A = 108, &
|
||||
N_3A = 109, &
|
||||
N_2P = 111, &
|
||||
N_PA = 112, &
|
||||
N_T2A = 113, &
|
||||
N_D2A = 114, &
|
||||
N_PD = 115, &
|
||||
N_PT = 116, &
|
||||
N_DA = 117
|
||||
TOTAL_XS = 1, ELASTIC = 2, N_LEVEL = 4, MISC = 5, N_2ND = 11, &
|
||||
N_2N = 16, N_3N = 17, N_FISSION = 18, N_F = 19, N_NF = 20, &
|
||||
N_2NF = 21, N_NA = 22, N_N3A = 23, N_2NA = 24, N_3NA = 25, &
|
||||
N_NP = 28, N_N2A = 29, N_2N2A = 30, N_ND = 32, N_NT = 33, &
|
||||
N_N3HE = 34, N_ND2A = 35, N_NT2A = 36, N_4N = 37, N_3NF = 38, &
|
||||
N_2NP = 41, N_3NP = 42, N_N2P = 44, N_NPA = 45, N_N1 = 51, &
|
||||
N_N40 = 90, N_NC = 91, N_DISAPPEAR = 101, N_GAMMA = 102, N_P = 103, &
|
||||
N_D = 104, N_T = 105, N_3HE = 106, N_A = 107, N_2A = 108, &
|
||||
N_3A = 109, N_2P = 111, N_PA = 112, N_T2A = 113, N_D2A = 114, &
|
||||
N_PD = 115, N_PT = 116, N_DA = 117, N_5N = 152, N_6N = 153, &
|
||||
N_2NT = 154, N_TA = 155, N_4NP = 156, N_3ND = 157, N_NDA = 158, &
|
||||
N_2NPA = 159, N_7N = 160, N_8N = 161, N_5NP = 162, N_6NP = 163, &
|
||||
N_7NP = 164, N_4NA = 165, N_5NA = 166, N_6NA = 167, N_7NA = 168, &
|
||||
N_4ND = 169, N_5ND = 170, N_6ND = 171, N_3NT = 172, N_4NT = 173, &
|
||||
N_5NT = 174, N_6NT = 175, N_2N3HE = 176, N_3N3HE = 177, N_4N3HE = 178, &
|
||||
N_3N2P = 179, N_3N3A = 180, N_3NPA = 181, N_DT = 182, N_NPD = 183, &
|
||||
N_NPT = 184, N_NDT = 185, N_NP3HE = 186, N_ND3HE = 187, N_NT3HE = 188, &
|
||||
N_NTA = 189, N_2N2P = 190, N_P3HE = 191, N_D3HE = 192, N_3HEA = 193, &
|
||||
N_4N2P = 194, N_4N2A = 195, N_4NPA = 196, N_3P = 197, N_N3P = 198, &
|
||||
N_3N2PA = 199, N_5N2P = 200, N_P0 = 600, N_PC = 649, N_D0 = 650, &
|
||||
N_DC = 699, N_T0 = 700, N_TC = 749, N_3HE0 = 750, N_3HEC = 799, &
|
||||
N_A0 = 800, N_AC = 849, N_2N0 = 875, N_2NC = 891
|
||||
|
||||
! ACE table types
|
||||
integer, parameter :: &
|
||||
|
|
@ -244,6 +218,17 @@ module constants
|
|||
! Maximum number of partial fission reactions
|
||||
integer, parameter :: PARTIAL_FISSION_MAX = 4
|
||||
|
||||
! Major cross section libraries
|
||||
integer, parameter :: &
|
||||
ENDF_BVII0 = 1, &
|
||||
ENDF_BVII1 = 2, &
|
||||
JEFF_311 = 3, &
|
||||
JEFF_312 = 4, &
|
||||
JEFF_32 = 5, &
|
||||
JENDL_32 = 6, &
|
||||
JENDL_33 = 7, &
|
||||
JENDL_40 = 8
|
||||
|
||||
! ============================================================================
|
||||
! TALLY-RELATED CONSTANTS
|
||||
|
||||
|
|
@ -265,7 +250,7 @@ module constants
|
|||
EVENT_ABSORB = 2
|
||||
|
||||
! Tally score type
|
||||
integer, parameter :: N_SCORE_TYPES = 14
|
||||
integer, parameter :: N_SCORE_TYPES = 20
|
||||
integer, parameter :: &
|
||||
SCORE_FLUX = -1, & ! flux
|
||||
SCORE_TOTAL = -2, & ! total reaction rate
|
||||
|
|
@ -273,18 +258,37 @@ module constants
|
|||
SCORE_NU_SCATTER = -4, & ! scattering production rate
|
||||
SCORE_SCATTER_N = -5, & ! arbitrary scattering moment
|
||||
SCORE_SCATTER_PN = -6, & ! system for scoring 0th through nth moment
|
||||
SCORE_TRANSPORT = -7, & ! transport reaction rate
|
||||
SCORE_N_1N = -8, & ! (n,1n) rate
|
||||
SCORE_ABSORPTION = -9, & ! absorption rate
|
||||
SCORE_FISSION = -10, & ! fission rate
|
||||
SCORE_NU_FISSION = -11, & ! neutron production rate
|
||||
SCORE_KAPPA_FISSION = -12, & ! fission energy production rate
|
||||
SCORE_CURRENT = -13, & ! partial current
|
||||
SCORE_EVENTS = -14 ! number of events
|
||||
SCORE_NU_SCATTER_N = -7, & ! arbitrary nu-scattering moment
|
||||
SCORE_NU_SCATTER_PN = -8, & ! system for scoring 0th through nth nu-scatter moment
|
||||
SCORE_TRANSPORT = -9, & ! transport reaction rate
|
||||
SCORE_N_1N = -10, & ! (n,1n) rate
|
||||
SCORE_ABSORPTION = -11, & ! absorption rate
|
||||
SCORE_FISSION = -12, & ! fission rate
|
||||
SCORE_NU_FISSION = -13, & ! neutron production rate
|
||||
SCORE_KAPPA_FISSION = -14, & ! fission energy production rate
|
||||
SCORE_CURRENT = -15, & ! partial current
|
||||
SCORE_FLUX_YN = -16, & ! angular moment of flux
|
||||
SCORE_TOTAL_YN = -17, & ! angular moment of total reaction rate
|
||||
SCORE_SCATTER_YN = -18, & ! angular flux-weighted scattering moment (0:N)
|
||||
SCORE_NU_SCATTER_YN = -19, & ! angular flux-weighted nu-scattering moment (0:N)
|
||||
SCORE_EVENTS = -20 ! number of events
|
||||
|
||||
! Maximum scattering order supported
|
||||
integer, parameter :: SCATT_ORDER_MAX = 10
|
||||
character(len=*), parameter :: SCATT_ORDER_MAX_PNSTR = "scatter-p10"
|
||||
integer, parameter :: MAX_ANG_ORDER = 10
|
||||
|
||||
! Names of *-PN & *-YN scores (MOMENT_STRS) and *-N moment scores
|
||||
character(*), parameter :: &
|
||||
MOMENT_STRS(6) = (/ "scatter-p ", &
|
||||
"nu-scatter-p", &
|
||||
"flux-y ", &
|
||||
"total-y ", &
|
||||
"scatter-y ", &
|
||||
"nu-scatter-y"/), &
|
||||
MOMENT_N_STRS(2) = (/ "scatter- ", &
|
||||
"nu-scatter- "/)
|
||||
|
||||
! Location in MOMENT_STRS where the YN data begins
|
||||
integer, parameter :: YN_LOC = 3
|
||||
|
||||
! Tally map bin finding
|
||||
integer, parameter :: NO_BIN_FOUND = -1
|
||||
|
|
@ -318,6 +322,14 @@ module constants
|
|||
K_TRACKLENGTH = 3, &
|
||||
LEAKAGE = 4
|
||||
|
||||
! ============================================================================
|
||||
! RANDOM NUMBER STREAM CONSTANTS
|
||||
|
||||
integer, parameter :: N_STREAMS = 3
|
||||
integer, parameter :: STREAM_TRACKING = 1
|
||||
integer, parameter :: STREAM_TALLIES = 2
|
||||
integer, parameter :: STREAM_SOURCE = 3
|
||||
|
||||
! ============================================================================
|
||||
! EXTERNAL SOURCE PARAMETERS
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ module cross_section
|
|||
use error, only: fatal_error
|
||||
use fission, only: nu_total
|
||||
use global
|
||||
use list_header, only: ListElemInt
|
||||
use material_header, only: Material
|
||||
use particle_header, only: Particle
|
||||
use random_lcg, only: prn
|
||||
|
|
@ -184,6 +185,8 @@ contains
|
|||
! Initialize sab treatment to false
|
||||
micro_xs(i_nuclide) % index_sab = NONE
|
||||
micro_xs(i_nuclide) % elastic_sab = ZERO
|
||||
|
||||
! Initialize URR probability table treatment to false
|
||||
micro_xs(i_nuclide) % use_ptable = .false.
|
||||
|
||||
! Initialize nuclide cross-sections to zero
|
||||
|
|
@ -340,17 +343,20 @@ contains
|
|||
real(8), intent(in) :: E ! energy
|
||||
|
||||
integer :: i_energy ! index for energy
|
||||
integer :: i_table ! index for table
|
||||
integer :: i_low ! band index at lower bounding energy
|
||||
integer :: i_up ! band index at upper bounding energy
|
||||
real(8) :: f ! interpolation factor
|
||||
real(8) :: r ! pseudo-random number
|
||||
real(8) :: elastic ! elastic cross section
|
||||
real(8) :: capture ! (n,gamma) cross section
|
||||
real(8) :: fission ! fission cross section
|
||||
real(8) :: inelastic ! inelastic cross section
|
||||
type(UrrData), pointer, save :: urr => null()
|
||||
type(Nuclide), pointer, save :: nuc => null()
|
||||
type(Reaction), pointer, save :: rxn => null()
|
||||
!$omp threadprivate(urr, nuc, rxn)
|
||||
logical :: same_nuc ! do we know the xs for this nuclide at this energy?
|
||||
type(UrrData), pointer, save :: urr => null()
|
||||
type(Nuclide), pointer, save :: nuc => null()
|
||||
type(Reaction), pointer, save :: rxn => null()
|
||||
type(ListElemInt), pointer :: nuc_list => null()
|
||||
!$omp threadprivate(urr, nuc, rxn, nuc_list)
|
||||
|
||||
micro_xs(i_nuclide) % use_ptable = .true.
|
||||
|
||||
|
|
@ -370,22 +376,48 @@ contains
|
|||
(urr % energy(i_energy + 1) - urr % energy(i_energy))
|
||||
|
||||
! sample probability table using the cumulative distribution
|
||||
r = prn()
|
||||
i_table = 1
|
||||
|
||||
! if we're dealing with a nuclide that we've previously encountered at
|
||||
! this energy but a different temperature, use the original random number to
|
||||
! preserve correlation of temperature in probability tables
|
||||
same_nuc = .false.
|
||||
nuc_list => nuc % nuc_list
|
||||
do
|
||||
if (urr % prob(i_energy, URR_CUM_PROB, i_table) > r) exit
|
||||
i_table = i_table + 1
|
||||
if (E /= ZERO .and. E == micro_xs(nuc_list % data) % last_E) then
|
||||
same_nuc = .true.
|
||||
exit
|
||||
end if
|
||||
nuc_list => nuc_list % next
|
||||
if (.not. associated(nuc_list % next)) exit
|
||||
end do
|
||||
|
||||
if (same_nuc) then
|
||||
r = micro_xs(nuc_list % data) % last_prn
|
||||
else
|
||||
r = prn()
|
||||
micro_xs(i_nuclide) % last_prn = r
|
||||
end if
|
||||
|
||||
i_low = 1
|
||||
do
|
||||
if (urr % prob(i_energy, URR_CUM_PROB, i_low) > r) exit
|
||||
i_low = i_low + 1
|
||||
end do
|
||||
i_up = 1
|
||||
do
|
||||
if (urr % prob(i_energy + 1, URR_CUM_PROB, i_up) > r) exit
|
||||
i_up = i_up + 1
|
||||
end do
|
||||
|
||||
! determine elastic, fission, and capture cross sections from probability
|
||||
! table
|
||||
if (urr % interp == LINEAR_LINEAR) then
|
||||
elastic = (ONE - f) * urr % prob(i_energy, URR_ELASTIC, i_table) + &
|
||||
f * urr % prob(i_energy + 1, URR_ELASTIC, i_table)
|
||||
fission = (ONE - f) * urr % prob(i_energy, URR_FISSION, i_table) + &
|
||||
f * urr % prob(i_energy + 1, URR_FISSION, i_table)
|
||||
capture = (ONE - f) * urr % prob(i_energy, URR_N_GAMMA, i_table) + &
|
||||
f * urr % prob(i_energy + 1, URR_N_GAMMA, i_table)
|
||||
elastic = (ONE - f) * urr % prob(i_energy, URR_ELASTIC, i_low) + &
|
||||
f * urr % prob(i_energy + 1, URR_ELASTIC, i_up)
|
||||
fission = (ONE - f) * urr % prob(i_energy, URR_FISSION, i_low) + &
|
||||
f * urr % prob(i_energy + 1, URR_FISSION, i_up)
|
||||
capture = (ONE - f) * urr % prob(i_energy, URR_N_GAMMA, i_low) + &
|
||||
f * urr % prob(i_energy + 1, URR_N_GAMMA, i_up)
|
||||
elseif (urr % interp == LOG_LOG) then
|
||||
! Get logarithmic interpolation factor
|
||||
f = log(E / urr % energy(i_energy)) / &
|
||||
|
|
@ -393,26 +425,29 @@ contains
|
|||
|
||||
! Calculate elastic cross section/factor
|
||||
elastic = ZERO
|
||||
if (urr % prob(i_energy, URR_ELASTIC, i_table) > ZERO) then
|
||||
if (urr % prob(i_energy, URR_ELASTIC, i_low) > ZERO .and. &
|
||||
urr % prob(i_energy + 1, URR_ELASTIC, i_up) > ZERO) then
|
||||
elastic = exp((ONE - f) * log(urr % prob(i_energy, URR_ELASTIC, &
|
||||
i_table)) + f * log(urr % prob(i_energy + 1, URR_ELASTIC, &
|
||||
i_table)))
|
||||
i_low)) + f * log(urr % prob(i_energy + 1, URR_ELASTIC, &
|
||||
i_up)))
|
||||
end if
|
||||
|
||||
! Calculate fission cross section/factor
|
||||
fission = ZERO
|
||||
if (urr % prob(i_energy, URR_FISSION, i_table) > ZERO) then
|
||||
if (urr % prob(i_energy, URR_FISSION, i_low) > ZERO .and. &
|
||||
urr % prob(i_energy + 1, URR_FISSION, i_up) > ZERO) then
|
||||
fission = exp((ONE - f) * log(urr % prob(i_energy, URR_FISSION, &
|
||||
i_table)) + f * log(urr % prob(i_energy + 1, URR_FISSION, &
|
||||
i_table)))
|
||||
i_low)) + f * log(urr % prob(i_energy + 1, URR_FISSION, &
|
||||
i_up)))
|
||||
end if
|
||||
|
||||
! Calculate capture cross section/factor
|
||||
capture = ZERO
|
||||
if (urr % prob(i_energy, URR_N_GAMMA, i_table) > ZERO) then
|
||||
if (urr % prob(i_energy, URR_N_GAMMA, i_low) > ZERO .and. &
|
||||
urr % prob(i_energy + 1, URR_N_GAMMA, i_up) > ZERO) then
|
||||
capture = exp((ONE - f) * log(urr % prob(i_energy, URR_N_GAMMA, &
|
||||
i_table)) + f * log(urr % prob(i_energy + 1, URR_N_GAMMA, &
|
||||
i_table)))
|
||||
i_low)) + f * log(urr % prob(i_energy + 1, URR_N_GAMMA, &
|
||||
i_up)))
|
||||
end if
|
||||
end if
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ contains
|
|||
subroutine run_eigenvalue()
|
||||
|
||||
type(Particle) :: p
|
||||
integer :: i_work
|
||||
integer(8) :: i_work
|
||||
|
||||
if (master) call header("K EIGENVALUE SIMULATION", level=1)
|
||||
|
||||
|
|
@ -256,7 +256,7 @@ contains
|
|||
& temp_sites(:) ! local array of extra sites on each node
|
||||
|
||||
#ifdef MPI
|
||||
integer :: n ! number of sites to send/recv
|
||||
integer(8) :: n ! number of sites to send/recv
|
||||
integer :: neighbor ! processor to send/recv data from
|
||||
integer :: request(20) ! communication request for send/recving sites
|
||||
integer :: n_request ! number of communication requests
|
||||
|
|
@ -834,8 +834,8 @@ contains
|
|||
|
||||
subroutine join_bank_from_threads()
|
||||
|
||||
integer :: total ! total number of fission bank sites
|
||||
integer :: i ! loop index for threads
|
||||
integer(8) :: total ! total number of fission bank sites
|
||||
integer :: i ! loop index for threads
|
||||
|
||||
! Initialize the total number of fission bank sites
|
||||
total = 0
|
||||
|
|
|
|||
26
src/endf.F90
26
src/endf.F90
|
|
@ -159,7 +159,7 @@ contains
|
|||
integer, intent(in) :: MT
|
||||
logical :: fission_event
|
||||
|
||||
if (MT == N_FISSION .or. MT == N_F .or. MT == N_NF .or. MT == N_2NF &
|
||||
if (MT == N_FISSION .or. MT == N_F .or. MT == N_NF .or. MT == N_2NF &
|
||||
.or. MT == N_3NF) then
|
||||
fission_event = .true.
|
||||
else
|
||||
|
|
@ -168,6 +168,28 @@ contains
|
|||
|
||||
end function is_fission
|
||||
|
||||
!===============================================================================
|
||||
! IS_DISAPPEARANCE determines if a given MT number is that of a disappearance
|
||||
! reaction, i.e. a reaction with no neutron in the exit channel
|
||||
!===============================================================================
|
||||
|
||||
function is_disappearance(MT) result(dis)
|
||||
|
||||
integer, intent(in) :: MT
|
||||
logical :: dis
|
||||
|
||||
if (MT >= N_GAMMA .and. MT <= N_DA) then
|
||||
dis = .true.
|
||||
elseif (MT >= N_P0 .and. MT <= N_AC) then
|
||||
dis = .true.
|
||||
elseif (any(MT == [N_TA, N_DT, N_P3HE, N_D3HE, N_3HEA, N_3P])) then
|
||||
dis = .true.
|
||||
else
|
||||
dis = .false.
|
||||
end if
|
||||
|
||||
end function is_disappearance
|
||||
|
||||
!===============================================================================
|
||||
! IS_SCATTER determines if a given MT number is that of a scattering event
|
||||
!===============================================================================
|
||||
|
|
@ -178,7 +200,7 @@ contains
|
|||
logical :: scatter_event
|
||||
|
||||
if (MT < 100) then
|
||||
if (MT == N_FISSION .or. MT == N_F .or. MT == N_NF .or. MT == N_2NF &
|
||||
if (MT == N_FISSION .or. MT == N_F .or. MT == N_NF .or. MT == N_2NF &
|
||||
.or. MT == N_3NF) then
|
||||
scatter_event = .false.
|
||||
else
|
||||
|
|
|
|||
|
|
@ -40,7 +40,10 @@ contains
|
|||
|
||||
#ifdef PETSC
|
||||
! Finalize PETSc
|
||||
if (cmfd_run) call PetscFinalize(mpi_err)
|
||||
if (cmfd_run) then
|
||||
call PetscFinalize(mpi_err)
|
||||
call MPI_COMM_FREE(cmfd_comm, mpi_err)
|
||||
end if
|
||||
#endif
|
||||
|
||||
! Stop timers and show timing statistics
|
||||
|
|
|
|||
|
|
@ -11,9 +11,6 @@ module fixed_source
|
|||
use tally, only: synchronize_tallies, setup_active_usertallies
|
||||
use tracking, only: transport
|
||||
|
||||
type(Bank), pointer :: source_site => null()
|
||||
!$omp threadprivate(source_site)
|
||||
|
||||
contains
|
||||
|
||||
subroutine run_fixedsource()
|
||||
|
|
|
|||
|
|
@ -892,7 +892,7 @@ contains
|
|||
if (on_surface .or. tmp == ZERO) then
|
||||
d = INFINITY
|
||||
else
|
||||
d = -(A*x + B*y + C*w - D)/tmp
|
||||
d = -(A*x + B*y + C*z - D)/tmp
|
||||
if (d < ZERO) d = INFINITY
|
||||
end if
|
||||
|
||||
|
|
|
|||
|
|
@ -88,6 +88,9 @@ module global
|
|||
! Default xs identifier (e.g. 70c)
|
||||
character(3):: default_xs
|
||||
|
||||
! What to assume for expanding natural elements
|
||||
integer :: default_expand = ENDF_BVII1
|
||||
|
||||
! ============================================================================
|
||||
! TALLY-RELATED VARIABLES
|
||||
|
||||
|
|
@ -253,6 +256,10 @@ module global
|
|||
! Mode to run in (fixed source, eigenvalue, plotting, etc)
|
||||
integer :: run_mode = NONE
|
||||
|
||||
! Fixed source particle bank
|
||||
type(Bank), pointer :: source_site => null()
|
||||
!$omp threadprivate(source_site)
|
||||
|
||||
! Restart run
|
||||
logical :: restart_run = .false.
|
||||
integer :: restart_batch
|
||||
|
|
@ -266,7 +273,7 @@ module global
|
|||
character(MAX_FILE_LEN) :: path_output = '' ! Path to output directory
|
||||
|
||||
! Message used in message/warning/fatal_error
|
||||
character(MAX_LINE_LEN) :: message
|
||||
character(2*MAX_LINE_LEN) :: message
|
||||
|
||||
! Random number seed
|
||||
integer(8) :: seed = 1_8
|
||||
|
|
@ -300,6 +307,9 @@ module global
|
|||
|
||||
! Is CMFD active
|
||||
logical :: cmfd_run = .false.
|
||||
|
||||
! CMFD communicator
|
||||
integer :: cmfd_comm
|
||||
|
||||
! Timing objects
|
||||
type(Timer) :: time_cmfd ! timer for whole cmfd calculation
|
||||
|
|
@ -486,8 +496,29 @@ contains
|
|||
call sab_dict % clear()
|
||||
call xs_listing_dict % clear()
|
||||
|
||||
! Clear statepoint batch set
|
||||
! Clear statepoint and sourcepoint batch set
|
||||
call statepoint_batch % clear()
|
||||
call sourcepoint_batch % clear()
|
||||
|
||||
! Deallocate entropy mesh
|
||||
if (associated(entropy_mesh)) then
|
||||
if (allocated(entropy_mesh % lower_left)) &
|
||||
deallocate(entropy_mesh % lower_left)
|
||||
if (allocated(entropy_mesh % upper_right)) &
|
||||
deallocate(entropy_mesh % upper_right)
|
||||
if (allocated(entropy_mesh % width)) deallocate(entropy_mesh % width)
|
||||
deallocate(entropy_mesh)
|
||||
end if
|
||||
|
||||
! Deallocate ufs
|
||||
if (allocated(source_frac)) deallocate(source_frac)
|
||||
if (associated(ufs_mesh)) then
|
||||
if (allocated(ufs_mesh % lower_left)) deallocate(ufs_mesh % lower_left)
|
||||
if (allocated(ufs_mesh % upper_right)) &
|
||||
deallocate(ufs_mesh % upper_right)
|
||||
if (allocated(ufs_mesh % width)) deallocate(ufs_mesh % width)
|
||||
deallocate(ufs_mesh)
|
||||
end if
|
||||
|
||||
end subroutine free_memory
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
module initialize
|
||||
|
||||
use ace, only: read_xs
|
||||
use ace, only: read_xs, same_nuclide_list
|
||||
use bank_header, only: Bank
|
||||
use constants
|
||||
use dict_header, only: DictIntInt, ElemKeyValueII
|
||||
|
|
@ -104,6 +104,9 @@ contains
|
|||
call read_xs()
|
||||
call time_read_xs % stop()
|
||||
|
||||
! Create linked lists for multiple instances of the same nuclide
|
||||
call same_nuclide_list()
|
||||
|
||||
! Construct unionized energy grid from cross-sections
|
||||
if (grid_method == GRID_UNION) then
|
||||
call time_unionize % start()
|
||||
|
|
@ -211,13 +214,13 @@ contains
|
|||
call MPI_GET_ADDRESS(b % uvw, bank_disp(3), mpi_err)
|
||||
call MPI_GET_ADDRESS(b % E, bank_disp(4), mpi_err)
|
||||
|
||||
! Adjust displacements
|
||||
! Adjust displacements
|
||||
bank_disp = bank_disp - bank_disp(1)
|
||||
|
||||
! Define MPI_BANK for fission sites
|
||||
bank_blocks = (/ 1, 3, 3, 1 /)
|
||||
bank_types = (/ MPI_REAL8, MPI_REAL8, MPI_REAL8, MPI_REAL8 /)
|
||||
call MPI_TYPE_CREATE_STRUCT(4, bank_blocks, bank_disp, &
|
||||
call MPI_TYPE_CREATE_STRUCT(4, bank_blocks, bank_disp, &
|
||||
bank_types, MPI_BANK, mpi_err)
|
||||
call MPI_TYPE_COMMIT(MPI_BANK, mpi_err)
|
||||
|
||||
|
|
@ -308,13 +311,9 @@ contains
|
|||
integer :: argc ! number of command line arguments
|
||||
integer :: last_flag ! index of last flag
|
||||
integer :: filetype
|
||||
character(MAX_FILE_LEN) :: pwd ! present working directory
|
||||
character(MAX_WORD_LEN), allocatable :: argv(:) ! command line arguments
|
||||
type(BinaryOutput) :: sp
|
||||
|
||||
! Get working directory
|
||||
call GET_ENVIRONMENT_VARIABLE("PWD", pwd)
|
||||
|
||||
! Check number of command line arguments and allocate argv
|
||||
argc = COMMAND_ARGUMENT_COUNT()
|
||||
|
||||
|
|
@ -414,9 +413,9 @@ contains
|
|||
! Read number of threads
|
||||
i = i + 1
|
||||
|
||||
#ifdef _OPENMP
|
||||
#ifdef _OPENMP
|
||||
! Read and set number of OpenMP threads
|
||||
n_threads = str_to_int(argv(i))
|
||||
n_threads = int(str_to_int(argv(i)), 4)
|
||||
if (n_threads < 1) then
|
||||
message = "Invalid number of threads specified on command line."
|
||||
call fatal_error()
|
||||
|
|
@ -427,7 +426,7 @@ contains
|
|||
call warning()
|
||||
#endif
|
||||
|
||||
case ('-?', '-help', '--help')
|
||||
case ('-?', '-h', '-help', '--help')
|
||||
call print_usage()
|
||||
stop
|
||||
case ('-v', '-version', '--version')
|
||||
|
|
@ -454,16 +453,12 @@ contains
|
|||
! Determine directory where XML input files are
|
||||
if (argc > 0 .and. last_flag < argc) then
|
||||
path_input = argv(last_flag + 1)
|
||||
! Need to add working directory if the given path is a relative path
|
||||
if (.not. starts_with(path_input, "/")) then
|
||||
path_input = trim(pwd) // "/" // trim(path_input)
|
||||
end if
|
||||
else
|
||||
path_input = pwd
|
||||
path_input = ''
|
||||
end if
|
||||
|
||||
! Add slash at end of directory if it isn't there
|
||||
if (.not. ends_with(path_input, "/")) then
|
||||
if (.not. ends_with(path_input, "/") .and. len_trim(path_input) > 0) then
|
||||
path_input = trim(path_input) // "/"
|
||||
end if
|
||||
|
||||
|
|
@ -563,7 +558,7 @@ contains
|
|||
integer :: m ! loop index for lattices
|
||||
integer :: mid, lid ! material and lattice IDs
|
||||
integer :: n_x, n_y, n_z ! size of lattice
|
||||
integer :: i_array ! index in surfaces/materials array
|
||||
integer :: i_array ! index in surfaces/materials array
|
||||
integer :: id ! user-specified id
|
||||
type(Cell), pointer :: c => null()
|
||||
type(Lattice), pointer :: lat => null()
|
||||
|
|
@ -634,7 +629,7 @@ contains
|
|||
" specified on lattice " // trim(to_str(lid))
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
|
||||
else
|
||||
message = "Specified fill " // trim(to_str(id)) // " on cell " // &
|
||||
trim(to_str(c % id)) // " is neither a universe nor a lattice."
|
||||
|
|
@ -805,7 +800,7 @@ contains
|
|||
sum_percent = sum_percent + x*awr
|
||||
end do
|
||||
sum_percent = ONE / sum_percent
|
||||
mat % density = -mat % density * N_AVOGADRO &
|
||||
mat % density = -mat % density * N_AVOGADRO &
|
||||
/ MASS_NEUTRON * sum_percent
|
||||
end if
|
||||
|
||||
|
|
@ -866,7 +861,7 @@ contains
|
|||
! Allocate source bank
|
||||
allocate(source_bank(work), STAT=alloc_err)
|
||||
|
||||
! Check for allocation errors
|
||||
! Check for allocation errors
|
||||
if (alloc_err /= 0) then
|
||||
message = "Failed to allocate source bank."
|
||||
call fatal_error()
|
||||
|
|
@ -894,7 +889,7 @@ contains
|
|||
allocate(fission_bank(3*work), STAT=alloc_err)
|
||||
#endif
|
||||
|
||||
! Check for allocation errors
|
||||
! Check for allocation errors
|
||||
if (alloc_err /= 0) then
|
||||
message = "Failed to allocate fission bank."
|
||||
call fatal_error()
|
||||
|
|
|
|||
|
|
@ -33,10 +33,10 @@ contains
|
|||
subroutine read_input_xml()
|
||||
|
||||
call read_settings_xml()
|
||||
if ((run_mode /= MODE_PLOTTING)) call read_cross_sections_xml()
|
||||
if (run_mode /= MODE_PLOTTING) call read_cross_sections_xml()
|
||||
call read_geometry_xml()
|
||||
call read_materials_xml()
|
||||
call read_tallies_xml()
|
||||
if (run_mode /= MODE_PLOTTING) call read_tallies_xml()
|
||||
if (cmfd_run) call configure_cmfd()
|
||||
|
||||
end subroutine read_input_xml
|
||||
|
|
@ -80,7 +80,11 @@ contains
|
|||
filename = trim(path_input) // "settings.xml"
|
||||
inquire(FILE=filename, EXIST=file_exists)
|
||||
if (.not. file_exists) then
|
||||
message = "Settings XML file '" // trim(filename) // "' does not exist!"
|
||||
message = "Settings XML file '" // trim(filename) // "' does not exist! &
|
||||
&In order to run OpenMC, you first need a set of input files; at a &
|
||||
&minimum, this includes settings.xml, geometry.xml, and &
|
||||
&materials.xml. Please consult the user's guide at &
|
||||
&http://mit-crpg.github.io/openmc for further information."
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
|
|
@ -98,7 +102,11 @@ contains
|
|||
call get_environment_variable("CROSS_SECTIONS", env_variable)
|
||||
if (len_trim(env_variable) == 0) then
|
||||
message = "No cross_sections.xml file was specified in settings.xml &
|
||||
&or in the CROSS_SECTIONS environment variable."
|
||||
&or in the CROSS_SECTIONS environment variable. OpenMC needs a &
|
||||
&cross_sections.xml file to identify where to find ACE cross &
|
||||
§ion libraries. Please consult the user's guide at &
|
||||
&http://mit-crpg.github.io/openmc for information on how to set &
|
||||
&up ACE cross section libraries."
|
||||
call fatal_error()
|
||||
else
|
||||
path_cross_sections = trim(env_variable)
|
||||
|
|
@ -177,7 +185,7 @@ contains
|
|||
|
||||
! If the number of particles was specified as a command-line argument, we
|
||||
! don't set it here
|
||||
if (n_particles == 0) n_particles = temp_long
|
||||
if (n_particles == 0) n_particles = temp_long
|
||||
|
||||
! Copy batch information
|
||||
call get_node_value(node_mode, "batches", n_batches)
|
||||
|
|
@ -270,10 +278,10 @@ contains
|
|||
else
|
||||
|
||||
! Spatial distribution for external source
|
||||
if (check_for_node(node_source, "space")) then
|
||||
if (check_for_node(node_source, "space")) then
|
||||
|
||||
! Get pointer to spatial distribution
|
||||
call get_node_ptr(node_source, "space", node_dist)
|
||||
call get_node_ptr(node_source, "space", node_dist)
|
||||
|
||||
! Check for type of spatial distribution
|
||||
type = ''
|
||||
|
|
@ -616,7 +624,7 @@ contains
|
|||
elseif (check_for_node(node_sp, "interval")) then
|
||||
! User gave an interval for writing state points
|
||||
call get_node_value(node_sp, "interval", temp_int)
|
||||
n_state_points = n_batches / temp_int
|
||||
n_state_points = n_batches / temp_int
|
||||
do i = 1, n_state_points
|
||||
call statepoint_batch % add(temp_int * i)
|
||||
end do
|
||||
|
|
@ -640,7 +648,7 @@ contains
|
|||
|
||||
! Determine number of batches at which to store source points
|
||||
if (check_for_node(node_sp, "batches")) then
|
||||
n_source_points = get_arraysize_integer(node_sp, "batches")
|
||||
n_source_points = get_arraysize_integer(node_sp, "batches")
|
||||
else
|
||||
n_source_points = 0
|
||||
end if
|
||||
|
|
@ -692,7 +700,7 @@ contains
|
|||
end if
|
||||
else
|
||||
! If no <source_point> tag was present, by default we keep source bank in
|
||||
! statepoint file and write it out at statepoints intervals
|
||||
! statepoint file and write it out at statepoints intervals
|
||||
source_separate = .false.
|
||||
n_source_points = n_state_points
|
||||
do i = 1, n_state_points
|
||||
|
|
@ -778,6 +786,33 @@ contains
|
|||
end if
|
||||
end if
|
||||
|
||||
! Natural element expansion option
|
||||
if (check_for_node(doc, "natural_elements")) then
|
||||
call get_node_value(doc, "natural_elements", temp_str)
|
||||
call lower_case(temp_str)
|
||||
select case (temp_str)
|
||||
case ('endf/b-vii.0')
|
||||
default_expand = ENDF_BVII0
|
||||
case ('endf/b-vii.1')
|
||||
default_expand = ENDF_BVII1
|
||||
case ('jeff-3.1.1')
|
||||
default_expand = JEFF_311
|
||||
case ('jeff-3.1.2')
|
||||
default_expand = JEFF_312
|
||||
case ('jeff-3.2')
|
||||
default_expand = JEFF_32
|
||||
case ('jendl-3.2')
|
||||
default_expand = JENDL_32
|
||||
case ('jendl-3.3')
|
||||
default_expand = JENDL_33
|
||||
case ('jendl-4.0')
|
||||
default_expand = JENDL_40
|
||||
case default
|
||||
message = "Unknown natural element expansion option: " // trim(temp_str)
|
||||
call fatal_error()
|
||||
end select
|
||||
end if
|
||||
|
||||
! Close settings XML file
|
||||
call close_xmldoc(doc)
|
||||
|
||||
|
|
@ -909,7 +944,7 @@ contains
|
|||
|
||||
! Check to make sure that either material or fill was specified
|
||||
if (c % material == NONE .and. c % fill == NONE) then
|
||||
message = "Neither material nor fill was specified for cell " // &
|
||||
message = "Neither material nor fill was specified for cell " // &
|
||||
trim(to_str(c % id))
|
||||
call fatal_error()
|
||||
end if
|
||||
|
|
@ -1104,7 +1139,7 @@ contains
|
|||
|
||||
n = get_arraysize_double(node_surf, "coeffs")
|
||||
if (n < coeffs_reqd) then
|
||||
message = "Not enough coefficients specified for surface: " // &
|
||||
message = "Not enough coefficients specified for surface: " // &
|
||||
trim(to_str(s % id))
|
||||
call fatal_error()
|
||||
elseif (n > coeffs_reqd) then
|
||||
|
|
@ -1520,7 +1555,9 @@ contains
|
|||
call get_node_value(node_ele, "name", name)
|
||||
|
||||
! Check for cross section
|
||||
if (.not.check_for_node(node_ele, "xs")) then
|
||||
if (check_for_node(node_ele, "xs")) then
|
||||
call get_node_value(node_ele, "xs", temp_str)
|
||||
else
|
||||
if (default_xs == '') then
|
||||
message = "No cross section specified for nuclide in material " &
|
||||
// trim(to_str(mat % id))
|
||||
|
|
@ -1578,7 +1615,7 @@ contains
|
|||
! Check to make sure cross-section is continuous energy neutron table
|
||||
n = len_trim(name)
|
||||
if (name(n:n) /= 'c') then
|
||||
message = "Cross-section table " // trim(name) // &
|
||||
message = "Cross-section table " // trim(name) // &
|
||||
" is not a continuous-energy neutron table."
|
||||
call fatal_error()
|
||||
end if
|
||||
|
|
@ -1607,8 +1644,8 @@ contains
|
|||
|
||||
! Check to make sure either all atom percents or all weight percents are
|
||||
! given
|
||||
if (.not. (all(mat % atom_density > ZERO) .or. &
|
||||
all(mat % atom_density < ZERO))) then
|
||||
if (.not. (all(mat % atom_density >= ZERO) .or. &
|
||||
all(mat % atom_density <= ZERO))) then
|
||||
message = "Cannot mix atom and weight percents in material " // &
|
||||
to_str(mat % id)
|
||||
call fatal_error()
|
||||
|
|
@ -1708,12 +1745,14 @@ contains
|
|||
integer :: n ! size of arrays in mesh specification
|
||||
integer :: n_words ! number of words read
|
||||
integer :: n_filters ! number of filters
|
||||
integer :: n_new ! number of new scores to add based on Pn tally
|
||||
integer :: n_scores ! number of tot scores after adjusting for Pn tally
|
||||
integer :: n_order ! Scattering order requested
|
||||
integer :: n_new ! number of new scores to add based on Yn/Pn tally
|
||||
integer :: n_scores ! number of tot scores after adjusting for Yn/Pn tally
|
||||
integer :: n_bins ! Total new bins for this score
|
||||
integer :: n_order ! Moment order requested
|
||||
integer :: n_order_pos ! Position of Scattering order in score name string
|
||||
integer :: MT ! user-specified MT for score
|
||||
integer :: iarray3(3) ! temporary integer array
|
||||
integer :: imomstr ! Index of MOMENT_STRS & MOMENT_N_STRS
|
||||
logical :: file_exists ! does tallies.xml file exist?
|
||||
real(8) :: rarray3(3) ! temporary double prec. array
|
||||
character(MAX_LINE_LEN) :: filename
|
||||
|
|
@ -2131,7 +2170,7 @@ contains
|
|||
|
||||
case default
|
||||
! Specified tally filter is invalid, raise error
|
||||
message = "Unknown filter type '" // &
|
||||
message = "Unknown filter type '" // &
|
||||
trim(temp_str) // "' on tally " // &
|
||||
trim(to_str(t % id)) // "."
|
||||
call fatal_error()
|
||||
|
|
@ -2183,7 +2222,7 @@ contains
|
|||
t % all_nuclides = .true.
|
||||
else
|
||||
! Any other case, e.g. <nuclides>U-235 Pu-239</nuclides>
|
||||
n_words = get_arraysize_string(node_tal, "nuclides")
|
||||
n_words = get_arraysize_string(node_tal, "nuclides")
|
||||
allocate(t % nuclide_bins(n_words))
|
||||
do j = 1, n_words
|
||||
! Check if total material was specified
|
||||
|
|
@ -2205,7 +2244,7 @@ contains
|
|||
word = pair_list % key(1:150)
|
||||
exit
|
||||
end if
|
||||
|
||||
|
||||
! Advance to next
|
||||
pair_list => pair_list % next
|
||||
end do
|
||||
|
|
@ -2254,79 +2293,110 @@ contains
|
|||
! READ DATA FOR SCORES
|
||||
|
||||
if (check_for_node(node_tal, "scores")) then
|
||||
! Loop through scores and determine if a scatter-p# input was used
|
||||
! to allow for proper pre-allocating of t % score_bins
|
||||
! This scheme allows multiple scatter-p# to be requested by the user
|
||||
! if so desired
|
||||
n_words = get_arraysize_string(node_tal, "scores")
|
||||
allocate(sarray(n_words))
|
||||
call get_node_array(node_tal, "scores", sarray)
|
||||
|
||||
! Before we can allocate storage for scores, we must determine the
|
||||
! number of additional scores required due to the moment scores
|
||||
! (i.e., scatter-p#, flux-y#)
|
||||
n_new = 0
|
||||
do j = 1, n_words
|
||||
call lower_case(sarray(j))
|
||||
! Find if scores(j) is of the form 'scatter-p'
|
||||
! If so, get the number and do a select case on that.
|
||||
! Find if scores(j) is of the form 'moment-p' or 'moment-y' present in
|
||||
! MOMENT_STRS(:)
|
||||
! If so, check the order, store if OK, then reset the number to 'n'
|
||||
score_name = trim(sarray(j))
|
||||
if (starts_with(score_name,'scatter-p')) then
|
||||
n_order_pos = scan(score_name,'0123456789')
|
||||
n_order = int(str_to_int( &
|
||||
score_name(n_order_pos:(len_trim(score_name)))),4)
|
||||
if (n_order > SCATT_ORDER_MAX) then
|
||||
! Throw a warning. Set to the maximum number.
|
||||
! The above scheme will essentially take the absolute value
|
||||
message = "Invalid scattering order of " // trim(to_str(n_order)) // &
|
||||
" requested. Setting to the maximum permissible value, " // &
|
||||
trim(to_str(SCATT_ORDER_MAX))
|
||||
call warning()
|
||||
n_order = SCATT_ORDER_MAX
|
||||
sarray(j) = SCATT_ORDER_MAX_PNSTR
|
||||
do imomstr = 1, size(MOMENT_STRS)
|
||||
if (starts_with(score_name,trim(MOMENT_STRS(imomstr)))) then
|
||||
n_order_pos = scan(score_name,'0123456789')
|
||||
n_order = int(str_to_int( &
|
||||
score_name(n_order_pos:(len_trim(score_name)))),4)
|
||||
if (n_order > MAX_ANG_ORDER) then
|
||||
! User requested too many orders; throw a warning and set to the
|
||||
! maximum order.
|
||||
! The above scheme will essentially take the absolute value
|
||||
message = "Invalid scattering order of " // trim(to_str(n_order)) // &
|
||||
" requested. Setting to the maximum permissible value, " // &
|
||||
trim(to_str(MAX_ANG_ORDER))
|
||||
call warning()
|
||||
n_order = MAX_ANG_ORDER
|
||||
sarray(j) = trim(MOMENT_STRS(imomstr)) // &
|
||||
trim(to_str(MAX_ANG_ORDER))
|
||||
end if
|
||||
! Find total number of bins for this case
|
||||
if (imomstr >= YN_LOC) then
|
||||
n_bins = (n_order + 1)**2
|
||||
else
|
||||
n_bins = n_order + 1
|
||||
end if
|
||||
! We subtract one since n_words already included
|
||||
n_new = n_new + n_bins - 1
|
||||
exit
|
||||
end if
|
||||
n_new = n_new + n_order
|
||||
end if
|
||||
end do
|
||||
end do
|
||||
n_scores = n_words + n_new
|
||||
|
||||
! Allocate accordingly
|
||||
|
||||
! Allocate score storage accordingly
|
||||
allocate(t % score_bins(n_scores))
|
||||
allocate(t % scatt_order(n_scores))
|
||||
t % scatt_order = 0
|
||||
allocate(t % moment_order(n_scores))
|
||||
t % moment_order = 0
|
||||
j = 0
|
||||
do l = 1, n_words
|
||||
j = j + 1
|
||||
! Get the input string in scores(l) but if scatter-n or scatter-pn
|
||||
! then strip off the n, and store it as an integer to be used later
|
||||
! Peform the select case on this modified (number removed) string
|
||||
! Get the input string in scores(l) but if score is one of the moment
|
||||
! scores then strip off the n and store it as an integer to be used
|
||||
! later. Then perform the select case on this modified (number removed) string
|
||||
score_name = sarray(l)
|
||||
if (starts_with(score_name,'scatter-p')) then
|
||||
n_order_pos = scan(score_name,'0123456789')
|
||||
n_order = int(str_to_int( &
|
||||
score_name(n_order_pos:(len_trim(score_name)))),4)
|
||||
if (n_order > SCATT_ORDER_MAX) then
|
||||
! Throw a warning. Set to the maximum number.
|
||||
! The above scheme will essentially take the absolute value
|
||||
message = "Invalid scattering order of " // trim(to_str(n_order)) // &
|
||||
" requested. Setting to the maximum permissible value, " // &
|
||||
trim(to_str(SCATT_ORDER_MAX))
|
||||
call warning()
|
||||
n_order = SCATT_ORDER_MAX
|
||||
do imomstr = 1, size(MOMENT_STRS)
|
||||
if (starts_with(score_name,trim(MOMENT_STRS(imomstr)))) then
|
||||
n_order_pos = scan(score_name,'0123456789')
|
||||
n_order = int(str_to_int( &
|
||||
score_name(n_order_pos:(len_trim(score_name)))),4)
|
||||
if (n_order > MAX_ANG_ORDER) then
|
||||
! User requested too many orders; throw a warning and set to the
|
||||
! maximum order.
|
||||
! The above scheme will essentially take the absolute value
|
||||
message = "Invalid scattering order of " // trim(to_str(n_order)) // &
|
||||
" requested. Setting to the maximum permissible value, " // &
|
||||
trim(to_str(MAX_ANG_ORDER))
|
||||
call warning()
|
||||
n_order = MAX_ANG_ORDER
|
||||
end if
|
||||
score_name = trim(MOMENT_STRS(imomstr)) // "n"
|
||||
! Find total number of bins for this case
|
||||
if (imomstr >= YN_LOC) then
|
||||
n_bins = (n_order + 1)**2
|
||||
else
|
||||
n_bins = n_order + 1
|
||||
end if
|
||||
exit
|
||||
end if
|
||||
score_name = "scatter-pn"
|
||||
else if (starts_with(score_name,'scatter-')) then
|
||||
n_order_pos = scan(score_name,'0123456789')
|
||||
n_order = int(str_to_int( &
|
||||
score_name(n_order_pos:(len_trim(score_name)))),4)
|
||||
if (n_order > SCATT_ORDER_MAX) then
|
||||
! Throw a warning. Set to the maximum number.
|
||||
! The above scheme will essentially take the absolute value
|
||||
message = "Invalid scattering order of " // trim(to_str(n_order)) // &
|
||||
" requested. Setting to the maximum permissible value, " // &
|
||||
trim(to_str(SCATT_ORDER_MAX))
|
||||
call warning()
|
||||
n_order = SCATT_ORDER_MAX
|
||||
end if
|
||||
score_name = "scatter-n"
|
||||
end do
|
||||
! Now check the Moment_N_Strs, but only if we werent successful above
|
||||
if (imomstr > size(MOMENT_STRS)) then
|
||||
do imomstr = 1, size(MOMENT_N_STRS)
|
||||
if (starts_with(score_name,trim(MOMENT_N_STRS(imomstr)))) then
|
||||
n_order_pos = scan(score_name,'0123456789')
|
||||
n_order = int(str_to_int( &
|
||||
score_name(n_order_pos:(len_trim(score_name)))),4)
|
||||
if (n_order > MAX_ANG_ORDER) then
|
||||
! User requested too many orders; throw a warning and set to the
|
||||
! maximum order.
|
||||
! The above scheme will essentially take the absolute value
|
||||
message = "Invalid scattering order of " // trim(to_str(n_order)) // &
|
||||
" requested. Setting to the maximum permissible value, " // &
|
||||
trim(to_str(MAX_ANG_ORDER))
|
||||
call warning()
|
||||
n_order = MAX_ANG_ORDER
|
||||
end if
|
||||
score_name = trim(MOMENT_N_STRS(imomstr)) // "n"
|
||||
exit
|
||||
end if
|
||||
end do
|
||||
end if
|
||||
|
||||
|
||||
select case (trim(score_name))
|
||||
case ('flux')
|
||||
! Prohibit user from tallying flux for an individual nuclide
|
||||
|
|
@ -2341,6 +2411,23 @@ contains
|
|||
message = "Cannot tally flux with an outgoing energy filter."
|
||||
call fatal_error()
|
||||
end if
|
||||
case ('flux-yn')
|
||||
! Prohibit user from tallying flux for an individual nuclide
|
||||
if (.not. (t % n_nuclide_bins == 1 .and. &
|
||||
t % nuclide_bins(1) == -1)) then
|
||||
message = "Cannot tally flux for an individual nuclide."
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
if (t % find_filter(FILTER_ENERGYOUT) > 0) then
|
||||
message = "Cannot tally flux with an outgoing energy filter."
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
t % score_bins(j : j + n_bins - 1) = SCORE_FLUX_YN
|
||||
t % moment_order(j : j + n_bins - 1) = n_order
|
||||
j = j + n_bins - 1
|
||||
|
||||
case ('total')
|
||||
t % score_bins(j) = SCORE_TOTAL
|
||||
if (t % find_filter(FILTER_ENERGYOUT) > 0) then
|
||||
|
|
@ -2348,9 +2435,21 @@ contains
|
|||
&outgoing energy filter."
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
case ('total-yn')
|
||||
if (t % find_filter(FILTER_ENERGYOUT) > 0) then
|
||||
message = "Cannot tally total reaction rate with an &
|
||||
&outgoing energy filter."
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
t % score_bins(j : j + n_bins - 1) = SCORE_TOTAL_YN
|
||||
t % moment_order(j : j + n_bins - 1) = n_order
|
||||
j = j + n_bins - 1
|
||||
|
||||
case ('scatter')
|
||||
t % score_bins(j) = SCORE_SCATTER
|
||||
|
||||
|
||||
case ('nu-scatter')
|
||||
t % score_bins(j) = SCORE_NU_SCATTER
|
||||
|
||||
|
|
@ -2364,22 +2463,53 @@ contains
|
|||
! Set tally estimator to analog
|
||||
t % estimator = ESTIMATOR_ANALOG
|
||||
end if
|
||||
t % scatt_order(j) = n_order
|
||||
|
||||
t % moment_order(j) = n_order
|
||||
|
||||
case ('nu-scatter-n')
|
||||
! Set tally estimator to analog
|
||||
t % estimator = ESTIMATOR_ANALOG
|
||||
if (n_order == 0) then
|
||||
t % score_bins(j) = SCORE_NU_SCATTER
|
||||
else
|
||||
t % score_bins(j) = SCORE_NU_SCATTER_N
|
||||
end if
|
||||
t % moment_order(j) = n_order
|
||||
|
||||
case ('scatter-pn')
|
||||
t % estimator = ESTIMATOR_ANALOG
|
||||
! Setup P0:Pn
|
||||
t % score_bins(j : j + n_order) = SCORE_SCATTER_PN
|
||||
t % scatt_order(j : j + n_order) = n_order
|
||||
j = j + n_order
|
||||
|
||||
t % score_bins(j : j + n_bins - 1) = SCORE_SCATTER_PN
|
||||
t % moment_order(j : j + n_bins - 1) = n_order
|
||||
j = j + n_bins - 1
|
||||
|
||||
case ('nu-scatter-pn')
|
||||
t % estimator = ESTIMATOR_ANALOG
|
||||
! Setup P0:Pn
|
||||
t % score_bins(j : j + n_bins - 1) = SCORE_NU_SCATTER_PN
|
||||
t % moment_order(j : j + n_bins - 1) = n_order
|
||||
j = j + n_bins - 1
|
||||
|
||||
case ('scatter-yn')
|
||||
t % estimator = ESTIMATOR_ANALOG
|
||||
! Setup P0:Pn
|
||||
t % score_bins(j : j + n_bins - 1) = SCORE_SCATTER_YN
|
||||
t % moment_order(j : j + n_bins - 1) = n_order
|
||||
j = j + n_bins - 1
|
||||
|
||||
case ('nu-scatter-yn')
|
||||
t % estimator = ESTIMATOR_ANALOG
|
||||
! Setup P0:Pn
|
||||
t % score_bins(j : j + n_bins - 1) = SCORE_NU_SCATTER_YN
|
||||
t % moment_order(j : j + n_bins - 1) = n_order
|
||||
j = j + n_bins - 1
|
||||
|
||||
case('transport')
|
||||
t % score_bins(j) = SCORE_TRANSPORT
|
||||
|
||||
! Set tally estimator to analog
|
||||
t % estimator = ESTIMATOR_ANALOG
|
||||
case ('diffusion')
|
||||
message = "Diffusion score no longer supported for tallies, &
|
||||
message = "Diffusion score no longer supported for tallies, &
|
||||
&please remove"
|
||||
call fatal_error()
|
||||
case ('n1n')
|
||||
|
|
@ -2482,14 +2612,14 @@ contains
|
|||
t % score_bins(j) = MT
|
||||
else
|
||||
message = "Invalid MT on <scores>: " // &
|
||||
trim(sarray(j))
|
||||
trim(sarray(l))
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
else
|
||||
! Specified score was not an integer
|
||||
message = "Unknown scoring function: " // &
|
||||
trim(sarray(j))
|
||||
trim(sarray(l))
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
|
|
@ -2638,7 +2768,7 @@ contains
|
|||
pl % path_plot = trim(path_input) // trim(to_str(pl % id)) // &
|
||||
"_" // trim(filename) // ".voxel"
|
||||
end select
|
||||
|
||||
|
||||
! Copy plot pixel size
|
||||
if (pl % type == PLOT_TYPE_SLICE) then
|
||||
if (get_arraysize_integer(node_plot, "pixels") == 2) then
|
||||
|
|
@ -2661,7 +2791,7 @@ contains
|
|||
! Copy plot background color
|
||||
if (check_for_node(node_plot, "background")) then
|
||||
if (pl % type == PLOT_TYPE_VOXEL) then
|
||||
message = "Background color ignored in voxel plot " // &
|
||||
message = "Background color ignored in voxel plot " // &
|
||||
trim(to_str(pl % id))
|
||||
call warning()
|
||||
end if
|
||||
|
|
@ -2675,7 +2805,7 @@ contains
|
|||
else
|
||||
pl % not_found % rgb = (/ 255, 255, 255 /)
|
||||
end if
|
||||
|
||||
|
||||
! Copy plot basis
|
||||
if (pl % type == PLOT_TYPE_SLICE) then
|
||||
temp_str = 'xy'
|
||||
|
|
@ -2690,12 +2820,12 @@ contains
|
|||
case ("yz")
|
||||
pl % basis = PLOT_BASIS_YZ
|
||||
case default
|
||||
message = "Unsupported plot basis '" // trim(temp_str) &
|
||||
message = "Unsupported plot basis '" // trim(temp_str) &
|
||||
// "' in plot " // trim(to_str(pl % id))
|
||||
call fatal_error()
|
||||
end select
|
||||
end if
|
||||
|
||||
|
||||
! Copy plotting origin
|
||||
if (get_arraysize_double(node_plot, "origin") == 3) then
|
||||
call get_node_array(node_plot, "origin", pl % origin)
|
||||
|
|
@ -2762,13 +2892,13 @@ contains
|
|||
|
||||
! Copy user specified colors
|
||||
if (n_cols /= 0) then
|
||||
|
||||
|
||||
if (pl % type == PLOT_TYPE_VOXEL) then
|
||||
message = "Color specifications ignored in voxel plot " // &
|
||||
message = "Color specifications ignored in voxel plot " // &
|
||||
trim(to_str(pl % id))
|
||||
call warning()
|
||||
end if
|
||||
|
||||
|
||||
do j = 1, n_cols
|
||||
|
||||
! Get pointer to color spec XML node
|
||||
|
|
@ -2778,7 +2908,7 @@ contains
|
|||
if (get_arraysize_double(node_col, "rgb") /= 3) then
|
||||
message = "Bad RGB " &
|
||||
// "in plot " // trim(to_str(pl % id))
|
||||
call fatal_error()
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
! Ensure that there is an id for this color specification
|
||||
|
|
@ -2821,13 +2951,13 @@ contains
|
|||
call get_node_list(node_plot, "mask", node_mask_list)
|
||||
n_masks = get_list_size(node_mask_list)
|
||||
if (n_masks /= 0) then
|
||||
|
||||
|
||||
if (pl % type == PLOT_TYPE_VOXEL) then
|
||||
message = "Mask ignored in voxel plot " // &
|
||||
message = "Mask ignored in voxel plot " // &
|
||||
trim(to_str(pl % id))
|
||||
call warning()
|
||||
end if
|
||||
|
||||
|
||||
select case(n_masks)
|
||||
case default
|
||||
message = "Mutliple masks" // &
|
||||
|
|
@ -2848,14 +2978,14 @@ contains
|
|||
end if
|
||||
allocate(iarray(n_comp))
|
||||
call get_node_array(node_mask, "components", iarray)
|
||||
|
||||
|
||||
! First we need to change the user-specified identifiers to indices
|
||||
! in the cell and material arrays
|
||||
do j=1, n_comp
|
||||
col_id = iarray(j)
|
||||
|
||||
|
||||
if (pl % color_by == PLOT_COLOR_CELLS) then
|
||||
|
||||
|
||||
if (cell_dict % has_key(col_id)) then
|
||||
iarray(j) = cell_dict % get_key(col_id)
|
||||
else
|
||||
|
|
@ -2863,9 +2993,9 @@ contains
|
|||
" specified in the mask in plot " // trim(to_str(pl % id))
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
|
||||
else if (pl % color_by == PLOT_COLOR_MATS) then
|
||||
|
||||
|
||||
if (material_dict % has_key(col_id)) then
|
||||
iarray(j) = material_dict % get_key(col_id)
|
||||
else
|
||||
|
|
@ -2873,10 +3003,10 @@ contains
|
|||
" specified in the mask in plot " // trim(to_str(pl % id))
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
end do
|
||||
|
||||
|
||||
! Alter colors based on mask information
|
||||
do j=1,size(pl % colors)
|
||||
if (.not. any(j .eq. iarray)) then
|
||||
|
|
@ -2891,9 +3021,9 @@ contains
|
|||
end do
|
||||
|
||||
deallocate(iarray)
|
||||
|
||||
|
||||
end select
|
||||
|
||||
|
||||
end if
|
||||
|
||||
! Add plot to dictionary
|
||||
|
|
@ -2933,7 +3063,7 @@ contains
|
|||
"' does not exist!"
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
|
||||
message = "Reading cross sections XML file..."
|
||||
call write_message(5)
|
||||
|
||||
|
|
@ -3114,8 +3244,7 @@ contains
|
|||
call list_density % append(density * 0.801_8)
|
||||
|
||||
case ('c')
|
||||
! The evaluation of Carbon in ENDF/B-VII.1 and JEFF 3.1.2 is a natural
|
||||
! element, i.e. it's not possible to split into C-12 and C-13.
|
||||
! No evaluations split up Carbon into isotopes yet
|
||||
call list_names % append('6000.' // xs)
|
||||
call list_density % append(density)
|
||||
|
||||
|
|
@ -3126,12 +3255,22 @@ contains
|
|||
call list_density % append(density * 0.00364_8)
|
||||
|
||||
case ('o')
|
||||
! O-18 does not exist in ENDF/B-VII.1 or JEFF 3.1.2 so its 0.205% has been
|
||||
! added to O-16. The isotopic abundance for O-16 is ordinarily 99.757%.
|
||||
call list_names % append('8016.' // xs)
|
||||
call list_density % append(density * 0.99962_8)
|
||||
call list_names % append('8017.' // xs)
|
||||
call list_density % append(density * 0.00038_8)
|
||||
if (default_expand == JEFF_32) then
|
||||
call list_names % append('8016.' // xs)
|
||||
call list_density % append(density * 0.99757_8)
|
||||
call list_names % append('8017.' // xs)
|
||||
call list_density % append(density * 0.00038_8)
|
||||
call list_names % append('8018.' // xs)
|
||||
call list_density % append(density * 0.00205_8)
|
||||
elseif (default_expand >= JENDL_32 .and. default_expand <= JENDL_40) then
|
||||
call list_names % append('8016.' // xs)
|
||||
call list_density % append(density)
|
||||
else
|
||||
call list_names % append('8016.' // xs)
|
||||
call list_density % append(density * 0.99962_8)
|
||||
call list_names % append('8017.' // xs)
|
||||
call list_density % append(density * 0.00038_8)
|
||||
end if
|
||||
|
||||
case ('f')
|
||||
call list_names % append('9019.' // xs)
|
||||
|
|
@ -3236,13 +3375,17 @@ contains
|
|||
call list_density % append(density * 0.0518_8)
|
||||
|
||||
case ('v')
|
||||
! The evaluation of Vanadium in ENDF/B-VII.1 and JEFF 3.1.2 is a natural
|
||||
! element. The IUPAC isotopic composition specifies the following
|
||||
! breakdown which is not used:
|
||||
! V-50 = 0.250%
|
||||
! V-51 = 99.750%
|
||||
call list_names % append('23000.' // xs)
|
||||
call list_density % append(density)
|
||||
if (default_expand == ENDF_BVII0 .or. default_expand == JEFF_311 &
|
||||
.or. default_expand == JEFF_32 .or. &
|
||||
(default_expand >= JENDL_32 .and. default_expand <= JENDL_33)) then
|
||||
call list_names % append('23000.' // xs)
|
||||
call list_density % append(density)
|
||||
else
|
||||
call list_names % append('23050.' // xs)
|
||||
call list_density % append(density * 0.0025_8)
|
||||
call list_names % append('23051.' // xs)
|
||||
call list_density % append(density * 0.9975_8)
|
||||
end if
|
||||
|
||||
case ('cr')
|
||||
call list_names % append('24050.' // xs)
|
||||
|
|
@ -3291,24 +3434,33 @@ contains
|
|||
call list_density % append(density * 0.3085_8)
|
||||
|
||||
case ('zn')
|
||||
! The evaluation of Zinc in ENDF/B-VII.1 is a natural element. The IUPAC
|
||||
! isotopic composition specifies the following breakdown which is not used
|
||||
! here:
|
||||
! Zn-64 = 48.63%
|
||||
! Zn-66 = 27.90%
|
||||
! Zn-67 = 4.10%
|
||||
! Zn-68 = 18.75%
|
||||
! Zn-70 = 0.62%
|
||||
call list_names % append('30000.' // xs)
|
||||
call list_density % append(density)
|
||||
if (default_expand == ENDF_BVII0 .or. default_expand == &
|
||||
JEFF_311 .or. default_expand == JEFF_312) then
|
||||
call list_names % append('30000.' // xs)
|
||||
call list_density % append(density)
|
||||
else
|
||||
call list_names % append('30064.' // xs)
|
||||
call list_density % append(density * 0.4917_8)
|
||||
call list_names % append('30066.' // xs)
|
||||
call list_density % append(density * 0.2773_8)
|
||||
call list_names % append('30067.' // xs)
|
||||
call list_density % append(density * 0.0404_8)
|
||||
call list_names % append('30068.' // xs)
|
||||
call list_density % append(density * 0.1845_8)
|
||||
call list_names % append('30070.' // xs)
|
||||
call list_density % append(density * 0.0061_8)
|
||||
end if
|
||||
|
||||
case ('ga')
|
||||
! JEFF 3.1.2 does not have evaluations for Ga-69 and Ga-71, only for
|
||||
! natural Gallium, so this may cause problems.
|
||||
call list_names % append('31069.' // xs)
|
||||
call list_density % append(density * 0.60108_8)
|
||||
call list_names % append('31071.' // xs)
|
||||
call list_density % append(density * 0.39892_8)
|
||||
if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then
|
||||
call list_names % append('31000.' // xs)
|
||||
call list_density % append(density)
|
||||
else
|
||||
call list_names % append('31069.' // xs)
|
||||
call list_density % append(density * 0.60108_8)
|
||||
call list_names % append('31071.' // xs)
|
||||
call list_density % append(density * 0.39892_8)
|
||||
end if
|
||||
|
||||
case ('ge')
|
||||
call list_names % append('32070.' // xs)
|
||||
|
|
@ -3719,24 +3871,43 @@ contains
|
|||
call list_density % append(density * 0.3508_8)
|
||||
|
||||
case ('ta')
|
||||
call list_names % append('73180.' // xs)
|
||||
call list_density % append(density * 0.0001201_8)
|
||||
call list_names % append('73181.' // xs)
|
||||
call list_density % append(density * 0.9998799_8)
|
||||
if (default_expand == ENDF_BVII0 .or. &
|
||||
(default_expand >= JEFF_311 .and. default_expand <= JEFF_312) .or. &
|
||||
(default_expand >= JENDL_32 .and. default_expand <= JENDL_40)) then
|
||||
call list_names % append('73181.' // xs)
|
||||
call list_density % append(density)
|
||||
else
|
||||
call list_names % append('73180.' // xs)
|
||||
call list_density % append(density * 0.0001201_8)
|
||||
call list_names % append('73181.' // xs)
|
||||
call list_density % append(density * 0.9998799_8)
|
||||
end if
|
||||
|
||||
case ('w')
|
||||
! ENDF/B-VII.0 does not have W-180 so this may cause problems. However, it
|
||||
! has been added as of ENDF/B-VII.1
|
||||
call list_names % append('74180.' // xs)
|
||||
call list_density % append(density * 0.0012_8)
|
||||
call list_names % append('74182.' // xs)
|
||||
call list_density % append(density * 0.2650_8)
|
||||
call list_names % append('74183.' // xs)
|
||||
call list_density % append(density * 0.1431_8)
|
||||
call list_names % append('74184.' // xs)
|
||||
call list_density % append(density * 0.3064_8)
|
||||
call list_names % append('74186.' // xs)
|
||||
call list_density % append(density * 0.2843_8)
|
||||
if (default_expand == ENDF_BVII0 .or. default_expand == JEFF_311 &
|
||||
.or. default_expand == JEFF_312 .or. &
|
||||
(default_expand >= JENDL_32 .and. default_expand <= JENDL_33)) then
|
||||
! Combine W-180 with W-182
|
||||
call list_names % append('74182.' // xs)
|
||||
call list_density % append(density * 0.2662_8)
|
||||
call list_names % append('74183.' // xs)
|
||||
call list_density % append(density * 0.1431_8)
|
||||
call list_names % append('74184.' // xs)
|
||||
call list_density % append(density * 0.3064_8)
|
||||
call list_names % append('74186.' // xs)
|
||||
call list_density % append(density * 0.2843_8)
|
||||
else
|
||||
call list_names % append('74180.' // xs)
|
||||
call list_density % append(density * 0.0012_8)
|
||||
call list_names % append('74182.' // xs)
|
||||
call list_density % append(density * 0.2650_8)
|
||||
call list_names % append('74183.' // xs)
|
||||
call list_density % append(density * 0.1431_8)
|
||||
call list_names % append('74184.' // xs)
|
||||
call list_density % append(density * 0.3064_8)
|
||||
call list_names % append('74186.' // xs)
|
||||
call list_density % append(density * 0.2843_8)
|
||||
end if
|
||||
|
||||
case ('re')
|
||||
call list_names % append('75185.' // xs)
|
||||
|
|
@ -3745,20 +3916,25 @@ contains
|
|||
call list_density % append(density * 0.6260_8)
|
||||
|
||||
case ('os')
|
||||
call list_names % append('76184.' // xs)
|
||||
call list_density % append(density * 0.0002_8)
|
||||
call list_names % append('76186.' // xs)
|
||||
call list_density % append(density * 0.0159_8)
|
||||
call list_names % append('76187.' // xs)
|
||||
call list_density % append(density * 0.0196_8)
|
||||
call list_names % append('76188.' // xs)
|
||||
call list_density % append(density * 0.1324_8)
|
||||
call list_names % append('76189.' // xs)
|
||||
call list_density % append(density * 0.1615_8)
|
||||
call list_names % append('76190.' // xs)
|
||||
call list_density % append(density * 0.2626_8)
|
||||
call list_names % append('76192.' // xs)
|
||||
call list_density % append(density * 0.4078_8)
|
||||
if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then
|
||||
call list_names % append('76000.' // xs)
|
||||
call list_density % append(density)
|
||||
else
|
||||
call list_names % append('76184.' // xs)
|
||||
call list_density % append(density * 0.0002_8)
|
||||
call list_names % append('76186.' // xs)
|
||||
call list_density % append(density * 0.0159_8)
|
||||
call list_names % append('76187.' // xs)
|
||||
call list_density % append(density * 0.0196_8)
|
||||
call list_names % append('76188.' // xs)
|
||||
call list_density % append(density * 0.1324_8)
|
||||
call list_names % append('76189.' // xs)
|
||||
call list_density % append(density * 0.1615_8)
|
||||
call list_names % append('76190.' // xs)
|
||||
call list_density % append(density * 0.2626_8)
|
||||
call list_names % append('76192.' // xs)
|
||||
call list_density % append(density * 0.4078_8)
|
||||
end if
|
||||
|
||||
case ('ir')
|
||||
call list_names % append('77191.' // xs)
|
||||
|
|
@ -3767,18 +3943,23 @@ contains
|
|||
call list_density % append(density * 0.627_8)
|
||||
|
||||
case ('pt')
|
||||
call list_names % append('78190.' // xs)
|
||||
call list_density % append(density * 0.00012_8)
|
||||
call list_names % append('78192.' // xs)
|
||||
call list_density % append(density * 0.00782_8)
|
||||
call list_names % append('78194.' // xs)
|
||||
call list_density % append(density * 0.3286_8)
|
||||
call list_names % append('78195.' // xs)
|
||||
call list_density % append(density * 0.3378_8)
|
||||
call list_names % append('78196.' // xs)
|
||||
call list_density % append(density * 0.2521_8)
|
||||
call list_names % append('78198.' // xs)
|
||||
call list_density % append(density * 0.07356_8)
|
||||
if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then
|
||||
call list_names % append('78000.' // xs)
|
||||
call list_density % append(density)
|
||||
else
|
||||
call list_names % append('78190.' // xs)
|
||||
call list_density % append(density * 0.00012_8)
|
||||
call list_names % append('78192.' // xs)
|
||||
call list_density % append(density * 0.00782_8)
|
||||
call list_names % append('78194.' // xs)
|
||||
call list_density % append(density * 0.3286_8)
|
||||
call list_names % append('78195.' // xs)
|
||||
call list_density % append(density * 0.3378_8)
|
||||
call list_names % append('78196.' // xs)
|
||||
call list_density % append(density * 0.2521_8)
|
||||
call list_names % append('78198.' // xs)
|
||||
call list_density % append(density * 0.07356_8)
|
||||
end if
|
||||
|
||||
case ('au')
|
||||
call list_names % append('79197.' // xs)
|
||||
|
|
@ -3801,10 +3982,15 @@ contains
|
|||
call list_density % append(density * 0.0687_8)
|
||||
|
||||
case ('tl')
|
||||
call list_names % append('81203.' // xs)
|
||||
call list_density % append(density * 0.2952_8)
|
||||
call list_names % append('81205.' // xs)
|
||||
call list_density % append(density * 0.7048_8)
|
||||
if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then
|
||||
call list_names % append('81000.' // xs)
|
||||
call list_density % append(density)
|
||||
else
|
||||
call list_names % append('81203.' // xs)
|
||||
call list_density % append(density * 0.2952_8)
|
||||
call list_names % append('81205.' // xs)
|
||||
call list_density % append(density * 0.7048_8)
|
||||
end if
|
||||
|
||||
case ('pb')
|
||||
call list_names % append('82204.' // xs)
|
||||
|
|
|
|||
400
src/math.F90
400
src/math.F90
|
|
@ -1,6 +1,6 @@
|
|||
module math
|
||||
|
||||
use constants, only: PI, ONE, TWO
|
||||
use constants, only: PI, ONE, TWO, ZERO
|
||||
use random_lcg, only: prn
|
||||
|
||||
implicit none
|
||||
|
|
@ -116,20 +116,20 @@ contains
|
|||
!===============================================================================
|
||||
! CALC_PN calculates the n-th order Legendre polynomial at the value of x.
|
||||
! Since this function is called repeatedly during the neutron transport process,
|
||||
! neither n or x is checked to see if they are in the applicable range.
|
||||
! neither n or x is checked to see if they are in the applicable range.
|
||||
! This is left to the client developer to use where applicable. x is to be in
|
||||
! the domain of [-1,1], and 0<=n<=5. If x is outside of the range, the return
|
||||
! value will be outside the expected range; if n is outside the stated range,
|
||||
! value will be outside the expected range; if n is outside the stated range,
|
||||
! the return value will be 1.0.
|
||||
!===============================================================================
|
||||
|
||||
|
||||
pure function calc_pn(n,x) result(pnx)
|
||||
|
||||
integer, intent(in) :: n ! Legendre order requested
|
||||
real(8), intent(in) :: x ! Independent variable the Legendre is to be
|
||||
real(8), intent(in) :: x ! Independent variable the Legendre is to be
|
||||
! evaluated at; x must be in the domain [-1,1]
|
||||
real(8) :: pnx ! The Legendre poly of order n evaluated at x
|
||||
|
||||
|
||||
select case(n)
|
||||
case(1)
|
||||
pnx = x
|
||||
|
|
@ -144,7 +144,7 @@ contains
|
|||
case(6)
|
||||
pnx = 14.4375_8 * (x ** 6) - 19.6875_8 * (x ** 4) + &
|
||||
6.5625_8 * x * x - 0.3125_8
|
||||
case(7)
|
||||
case(7)
|
||||
pnx = 26.8125_8 * (x ** 7) - 43.3125_8 * (x ** 5) + &
|
||||
19.6875_8 * x * x * x - 2.1875_8 * x
|
||||
case(8)
|
||||
|
|
@ -160,9 +160,393 @@ contains
|
|||
case default
|
||||
pnx = ONE ! correct for case(0), incorrect for the rest
|
||||
end select
|
||||
|
||||
|
||||
end function calc_pn
|
||||
|
||||
!===============================================================================
|
||||
! CALC_RN calculates the n-th order spherical harmonics for a given angle
|
||||
! (in terms of (u,v,w)). All Rn,m values are provided (where -n<=m<=n)
|
||||
!===============================================================================
|
||||
|
||||
pure function calc_rn(n,uvw) result(rn)
|
||||
|
||||
integer, intent(in) :: n ! Order requested
|
||||
real(8), intent(in) :: uvw(3) ! Direction of travel, assumed to be on unit sphere
|
||||
real(8) :: rn(2*n + 1) ! The resultant R_n(uvw)
|
||||
|
||||
real(8) :: phi, w ! Azimuthal and Cosine of Polar angles (from uvw)
|
||||
real(8) :: w2m1 ! (w^2 - 1), frequently used in these
|
||||
|
||||
w = uvw(3) ! z = cos(polar)
|
||||
if (uvw(1) == ZERO) then
|
||||
phi = ZERO
|
||||
else
|
||||
! phi = atan(uvw(2) / uvw(1))
|
||||
phi = atan2(uvw(2), uvw(1))
|
||||
end if
|
||||
|
||||
w2m1 = (ONE - w**2)
|
||||
select case(n)
|
||||
case (0)
|
||||
! l = 0, m = 0
|
||||
rn(1) = ONE
|
||||
case (1)
|
||||
! l = 1, m = -1
|
||||
rn(1) = ONE*sqrt(w2m1) * sin(phi)
|
||||
! l = 1, m = 0
|
||||
rn(2) = ONE * w
|
||||
! l = 1, m = 1
|
||||
rn(3) = ONE*sqrt(w2m1) * cos(phi)
|
||||
case (2)
|
||||
! l = 2, m = -2
|
||||
rn(1) = 0.288675134594813_8 * (-3.0_8 * w**2 + 3.0_8) * sin(TWO*phi)
|
||||
! l = 2, m = -1
|
||||
rn(2) = 1.73205080756888_8 * w*sqrt(w2m1) * sin(phi)
|
||||
! l = 2, m = 0
|
||||
rn(3) = 1.5_8 * w**2 - 0.5_8
|
||||
! l = 2, m = 1
|
||||
rn(4) = 1.73205080756888_8 * w*sqrt(w2m1) * cos(phi)
|
||||
! l = 2, m = 2
|
||||
rn(5) = 0.288675134594813_8 * (-3.0_8 * w**2 + 3.0_8) * cos(TWO*phi)
|
||||
case (3)
|
||||
! l = 3, m = -3
|
||||
rn(1) = 0.790569415042095_8 * (w2m1)**(3.0_8/TWO) * sin(3.0_8 * phi)
|
||||
! l = 3, m = -2
|
||||
rn(2) = 1.93649167310371_8 * w*(w2m1) * sin(TWO*phi)
|
||||
! l = 3, m = -1
|
||||
rn(3) = 0.408248290463863_8*sqrt(w2m1)*((15.0_8/TWO)*w**2 - 3.0_8/TWO) * &
|
||||
sin(phi)
|
||||
! l = 3, m = 0
|
||||
rn(4) = 2.5_8 * w**3 - 1.5_8 * w
|
||||
! l = 3, m = 1
|
||||
rn(5) = 0.408248290463863_8*sqrt(w2m1)*((15.0_8/TWO)*w**2 - 3.0_8/TWO) * &
|
||||
cos(phi)
|
||||
! l = 3, m = 2
|
||||
rn(6) = 1.93649167310371_8 * w*(w2m1) * cos(TWO*phi)
|
||||
! l = 3, m = 3
|
||||
rn(7) = 0.790569415042095_8 * (w2m1)**(3.0_8/TWO) * cos(3.0_8* phi)
|
||||
case (4)
|
||||
! l = 4, m = -4
|
||||
rn(1) = 0.739509972887452_8 * (w2m1)**2 * sin(4.0_8*phi)
|
||||
! l = 4, m = -3
|
||||
rn(2) = 2.09165006633519_8 * w*(w2m1)**(3.0_8/TWO) * sin(3.0_8* phi)
|
||||
! l = 4, m = -2
|
||||
rn(3) = 0.074535599249993_8 * (w2m1)*((105.0_8/TWO)*w**2 - 15.0_8/TWO) * &
|
||||
sin(TWO*phi)
|
||||
! l = 4, m = -1
|
||||
rn(4) = 0.316227766016838_8*sqrt(w2m1)*((35.0_8/TWO)*w**3 - 15.0_8/TWO*w) * &
|
||||
sin(phi)
|
||||
! l = 4, m = 0
|
||||
rn(5) = 4.375_8 * w**4 - 3.75_8 * w**2 + 0.375_8
|
||||
! l = 4, m = 1
|
||||
rn(6) = 0.316227766016838_8*sqrt(w2m1)*((35.0_8/TWO)*w**3 - 15.0_8/TWO*w) * &
|
||||
cos(phi)
|
||||
! l = 4, m = 2
|
||||
rn(7) = 0.074535599249993_8 * (w2m1)*((105.0_8/TWO)*w**2 - 15.0_8/TWO) * &
|
||||
cos(TWO*phi)
|
||||
! l = 4, m = 3
|
||||
rn(8) = 2.09165006633519_8 * w*(w2m1)**(3.0_8/TWO) * cos(3.0_8* phi)
|
||||
! l = 4, m = 4
|
||||
rn(9) = 0.739509972887452_8 * (w2m1)**2 * cos(4.0_8*phi)
|
||||
case (5)
|
||||
! l = 5, m = -5
|
||||
rn(1) = 0.701560760020114_8 * (w2m1)**(5.0_8/TWO) * sin(5.0_8*phi)
|
||||
! l = 5, m = -4
|
||||
rn(2) = 2.21852991866236_8 * w*(w2m1)**2 * sin(4.0_8*phi)
|
||||
! l = 5, m = -3
|
||||
rn(3) = 0.00996023841111995_8 * (w2m1)**(3.0_8/TWO)* &
|
||||
((945.0_8 /TWO)*w**2 - 105.0_8/TWO) * sin(3.0_8*phi)
|
||||
! l = 5, m = -2
|
||||
rn(4) = 0.0487950036474267_8 * (w2m1)*((315.0_8/TWO)*w**3 - 105.0_8/TWO*w) * &
|
||||
sin(TWO*phi)
|
||||
! l = 5, m = -1
|
||||
rn(5) = 0.258198889747161_8*sqrt(w2m1)* &
|
||||
((315.0_8/8.0_8)*w**4 - 105.0_8/4.0_8 * w**2 + 15.0_8/8.0_8) * sin(phi)
|
||||
! l = 5, m = 0
|
||||
rn(6) = 7.875_8 * w**5 - 8.75_8 * w**3 + 1.875_8 * w
|
||||
! l = 5, m = 1
|
||||
rn(7) = 0.258198889747161_8*sqrt(w2m1)* &
|
||||
((315.0_8/8.0_8)*w**4 - 105.0_8/4.0_8 * w**2 + 15.0_8/8.0_8) * cos(phi)
|
||||
! l = 5, m = 2
|
||||
rn(8) = 0.0487950036474267_8 * (w2m1)* &
|
||||
((315.0_8/TWO)*w**3 - 105.0_8/TWO*w) * cos(TWO*phi)
|
||||
! l = 5, m = 3
|
||||
rn(9) = 0.00996023841111995_8 * (w2m1)**(3.0_8/TWO)* &
|
||||
((945.0_8 /TWO)*w**2 - 105.0_8/TWO) * cos(3.0_8*phi)
|
||||
! l = 5, m = 4
|
||||
rn(10) = 2.21852991866236_8 * w*(w2m1)**2 * cos(4.0_8*phi)
|
||||
! l = 5, m = 5
|
||||
rn(11) = 0.701560760020114_8 * (w2m1)**(5.0_8/TWO) * cos(5.0_8* phi)
|
||||
case (6)
|
||||
! l = 6, m = -6
|
||||
rn(1) = 0.671693289381396_8 * (w2m1)**3 * sin(6.0_8*phi)
|
||||
! l = 6, m = -5
|
||||
rn(2) = 2.32681380862329_8 * w*(w2m1)**(5.0_8/TWO) * sin(5.0_8*phi)
|
||||
! l = 6, m = -4
|
||||
rn(3) = 0.00104990131391452_8 * (w2m1)**2 * &
|
||||
((10395.0_8/TWO)*w**2 - 945.0_8/TWO) * sin(4.0_8*phi)
|
||||
! l = 6, m = -3
|
||||
rn(4) = 0.00575054632785295_8 * (w2m1)**(3.0_8/TWO) * &
|
||||
((3465.0_8/TWO)*w**3 - 945.0_8/TWO*w) * sin(3.0_8*phi)
|
||||
! l = 6, m = -2
|
||||
rn(5) = 0.0345032779671177_8 * (w2m1) * &
|
||||
((3465.0_8/8.0_8)*w**4 - 945.0_8/4.0_8 * w**2 + 105.0_8/8.0_8) * sin(TWO*phi)
|
||||
! l = 6, m = -1
|
||||
rn(6) = 0.218217890235992_8*sqrt(w2m1) * &
|
||||
((693.0_8/8.0_8)*w**5- 315.0_8/4.0_8 * w**3 + (105.0_8/8.0_8)*w) * sin(phi)
|
||||
! l = 6, m = 0
|
||||
rn(7) = 14.4375_8 * w**6 - 19.6875_8 * w**4 + 6.5625_8 * w**2 - 0.3125_8
|
||||
! l = 6, m = 1
|
||||
rn(8) = 0.218217890235992_8*sqrt(w2m1) * &
|
||||
((693.0_8/8.0_8)*w**5- 315.0_8/4.0_8 * w**3 + (105.0_8/8.0_8)*w) * cos(phi)
|
||||
! l = 6, m = 2
|
||||
rn(9) = 0.0345032779671177_8 * (w2m1) * &
|
||||
((3465.0_8/8.0_8)*w**4 -945.0_8/4.0_8 * w**2 + 105.0_8/8.0_8) * cos(TWO*phi)
|
||||
! l = 6, m = 3
|
||||
rn(10) = 0.00575054632785295_8 * (w2m1)**(3.0_8/TWO) * &
|
||||
((3465.0_8/TWO)*w**3 - 945.0_8/TWO*w) * cos(3.0_8*phi)
|
||||
! l = 6, m = 4
|
||||
rn(11) = 0.00104990131391452_8 * (w2m1)**2 * &
|
||||
((10395.0_8/TWO)*w**2 - 945.0_8/TWO) * cos(4.0_8*phi)
|
||||
! l = 6, m = 5
|
||||
rn(12) = 2.32681380862329_8 * w*(w2m1)**(5.0_8/TWO) * cos(5.0_8*phi)
|
||||
! l = 6, m = 6
|
||||
rn(13) = 0.671693289381396_8 * (w2m1)**3 * cos(6.0_8*phi)
|
||||
case (7)
|
||||
! l = 7, m = -7
|
||||
rn(1) = 0.647259849287749_8 * (w2m1)**(7.0_8/TWO) * sin(7.0_8*phi)
|
||||
! l = 7, m = -6
|
||||
rn(2) = 2.42182459624969_8 * w*(w2m1)**3 * sin(6.0_8*phi)
|
||||
! l = 7, m = -5
|
||||
rn(3) = 9.13821798555235d-5*(w2m1)**(5.0_8/TWO)* &
|
||||
((135135.0_8/TWO)*w**2 - 10395.0_8/TWO) * sin(5.0_8*phi)
|
||||
! l = 7, m = -4
|
||||
rn(4) = 0.000548293079133141_8 * (w2m1)**2* &
|
||||
((45045.0_8/TWO)*w**3 - 10395.0_8/TWO*w) * sin(4.0_8*phi)
|
||||
! l = 7, m = -3
|
||||
rn(5) = 0.00363696483726654_8 * (w2m1)**(3.0_8/TWO)* &
|
||||
((45045.0_8/8.0_8)*w**4 - 10395.0_8/4.0_8 * w**2 + 945.0_8/8.0_8)* &
|
||||
sin(3.0_8*phi)
|
||||
! l = 7, m = -2
|
||||
rn(6) = 0.025717224993682_8 * (w2m1)* &
|
||||
((9009.0_8/8.0_8)*w**5 -3465.0_8/4.0_8 * w**3 + (945.0_8/8.0_8)*w)* &
|
||||
sin(TWO*phi)
|
||||
! l = 7, m = -1
|
||||
rn(7) = 0.188982236504614_8*sqrt(w2m1)* &
|
||||
((3003.0_8/16.0_8)*w**6 - 3465.0_8/16.0_8 * w**4 + &
|
||||
(945.0_8/16.0_8)*w**2 - 35.0_8/16.0_8) * sin(phi)
|
||||
! l = 7, m = 0
|
||||
rn(8) = 26.8125_8 * w**7 - 43.3125_8 * w**5 + 19.6875_8 * w**3 -2.1875_8 * w
|
||||
! l = 7, m = 1
|
||||
rn(9) = 0.188982236504614_8*sqrt(w2m1)* &
|
||||
((3003.0_8/16.0_8)*w**6 - 3465.0_8/16.0_8 * w**4 + &
|
||||
(945.0_8/16.0_8)*w**2 - 35.0_8/16.0_8) * cos(phi)
|
||||
! l = 7, m = 2
|
||||
rn(10) = 0.025717224993682_8 * (w2m1)* &
|
||||
((9009.0_8/8.0_8)*w**5 -3465.0_8/4.0_8 * w**3 + (945.0_8/8.0_8)*w)* &
|
||||
cos(TWO*phi)
|
||||
! l = 7, m = 3
|
||||
rn(11) = 0.00363696483726654_8 * (w2m1)**(3.0_8/TWO)* &
|
||||
((45045.0_8/8.0_8)*w**4 - 10395.0_8/4.0_8 * w**2 + 945.0_8/8.0_8)* &
|
||||
cos(3.0_8*phi)
|
||||
! l = 7, m = 4
|
||||
rn(12) = 0.000548293079133141_8 * (w2m1)**2 * &
|
||||
((45045.0_8/TWO)*w**3 - 10395.0_8/TWO*w) * cos(4.0_8*phi)
|
||||
! l = 7, m = 5
|
||||
rn(13) = 9.13821798555235d-5*(w2m1)**(5.0_8/TWO)* &
|
||||
((135135.0_8/TWO)*w**2 - 10395.0_8/TWO) * cos(5.0_8*phi)
|
||||
! l = 7, m = 6
|
||||
rn(14) = 2.42182459624969_8 * w*(w2m1)**3 * cos(6.0_8*phi)
|
||||
! l = 7, m = 7
|
||||
rn(15) = 0.647259849287749_8 * (w2m1)**(7.0_8/TWO) * cos(7.0_8*phi)
|
||||
case (8)
|
||||
! l = 8, m = -8
|
||||
rn(1) = 0.626706654240044_8 * (w2m1)**4 * sin(8.0_8*phi)
|
||||
! l = 8, m = -7
|
||||
rn(2) = 2.50682661696018_8 * w*(w2m1)**(7.0_8/TWO) * sin(7.0_8*phi)
|
||||
! l = 8, m = -6
|
||||
rn(3) = 6.77369783729086d-6*(w2m1)**3* &
|
||||
((2027025.0_8/TWO)*w**2 - 135135.0_8/TWO) * sin(6.0_8*phi)
|
||||
! l = 8, m = -5
|
||||
rn(4) = 4.38985792528482d-5*(w2m1)**(5.0_8/TWO)* &
|
||||
((675675.0_8/TWO)*w**3 - 135135.0_8/TWO*w) * sin(5.0_8*phi)
|
||||
! l = 8, m = -4
|
||||
rn(5) = 0.000316557156832328_8 * (w2m1)**2* &
|
||||
((675675.0_8/8.0_8)*w**4 - 135135.0_8/4.0_8 * w**2 + 10395.0_8/8.0_8) * sin(4.0_8*phi)
|
||||
! l = 8, m = -3
|
||||
rn(6) = 0.00245204119306875_8 * (w2m1)**(3.0_8/TWO)* &
|
||||
((135135.0_8/8.0_8)*w**5 - 45045.0_8/4.0_8 * w**3 + (10395.0_8/8.0_8)*w) * sin(3.0_8*phi)
|
||||
! l = 8, m = -2
|
||||
rn(7) = 0.0199204768222399_8 * (w2m1)* &
|
||||
((45045.0_8/16.0_8)*w**6- 45045.0_8/16.0_8 * w**4 + &
|
||||
(10395.0_8/16.0_8)*w**2 - 315.0_8/16.0_8) * sin(TWO*phi)
|
||||
! l = 8, m = -1
|
||||
rn(8) = 0.166666666666667_8*sqrt(w2m1)* &
|
||||
((6435.0_8/16.0_8)*w**7 - 9009.0_8/16.0_8 * w**5 + &
|
||||
(3465.0_8/16.0_8)*w**3 - 315.0_8/16.0_8 * w) * sin(phi)
|
||||
! l = 8, m = 0
|
||||
rn(9) = 50.2734375_8 * w**8 - 93.84375_8 * w**6 + 54.140625_8 * w**4 -&
|
||||
9.84375_8 * w**2 + 0.2734375_8
|
||||
! l = 8, m = 1
|
||||
rn(10) = 0.166666666666667_8*sqrt(w2m1)* &
|
||||
((6435.0_8/16.0_8)*w**7 - 9009.0_8/16.0_8 * w**5 + &
|
||||
(3465.0_8/16.0_8)*w**3 - 315.0_8/16.0_8 * w) * cos(phi)
|
||||
! l = 8, m = 2
|
||||
rn(11) = 0.0199204768222399_8 * (w2m1)*((45045.0_8/16.0_8)*w**6- &
|
||||
45045.0_8/16.0_8 * w**4 + (10395.0_8/16.0_8)*w**2 - &
|
||||
315.0_8/16.0_8) * cos(TWO*phi)
|
||||
! l = 8, m = 3
|
||||
rn(12) = 0.00245204119306875_8 * (w2m1)**(3.0_8/TWO)* &
|
||||
((135135.0_8/8.0_8)*w**5 - 45045.0_8/4.0_8 * w**3 + &
|
||||
(10395.0_8/8.0_8)*w) * cos(3.0_8*phi)
|
||||
! l = 8, m = 4
|
||||
rn(13) = 0.000316557156832328_8 * (w2m1)**2*((675675.0_8/8.0_8)*w**4 - &
|
||||
135135.0_8/4.0_8 * w**2 + 10395.0_8/8.0_8) * cos(4.0_8*phi)
|
||||
! l = 8, m = 5
|
||||
rn(14) = 4.38985792528482d-5*(w2m1)**(5.0_8/TWO)*((675675.0_8/TWO)*w**3 - &
|
||||
135135.0_8/TWO*w) * cos(5.0_8*phi)
|
||||
! l = 8, m = 6
|
||||
rn(15) = 6.77369783729086d-6*(w2m1)**3*((2027025.0_8/TWO)*w**2 - &
|
||||
135135.0_8/TWO) * cos(6.0_8*phi)
|
||||
! l = 8, m = 7
|
||||
rn(16) = 2.50682661696018_8 * w*(w2m1)**(7.0_8/TWO) * cos(7.0_8*phi)
|
||||
! l = 8, m = 8
|
||||
rn(17) = 0.626706654240044_8 * (w2m1)**4 * cos(8.0_8*phi)
|
||||
case (9)
|
||||
! l = 9, m = -9
|
||||
rn(1) = 0.609049392175524_8 * (w2m1)**(9.0_8/TWO) * sin(9.0_8*phi)
|
||||
! l = 9, m = -8
|
||||
rn(2) = 2.58397773170915_8 * w*(w2m1)**4 * sin(8.0_8*phi)
|
||||
! l = 9, m = -7
|
||||
rn(3) = 4.37240315267812d-7*(w2m1)**(7.0_8/TWO)* &
|
||||
((34459425.0_8/TWO)*w**2 - 2027025.0_8/TWO) * sin(7.0_8*phi)
|
||||
! l = 9, m = -6
|
||||
rn(4) = 3.02928976464514d-6*(w2m1)**3* &
|
||||
((11486475.0_8/TWO)*w**3 - 2027025.0_8/TWO*w) * sin(6.0_8*phi)
|
||||
! l = 9, m = -5
|
||||
rn(5) = 2.34647776186144d-5*(w2m1)**(5.0_8/TWO)* &
|
||||
((11486475.0_8/8.0_8)*w**4 - 2027025.0_8/4.0_8 * w**2 + &
|
||||
135135.0_8/8.0_8) * sin(5.0_8*phi)
|
||||
! l = 9, m = -4
|
||||
rn(6) = 0.000196320414650061_8 * (w2m1)**2*((2297295.0_8/8.0_8)*w**5 - &
|
||||
675675.0_8/4.0_8 * w**3 + (135135.0_8/8.0_8)*w) * sin(4.0_8*phi)
|
||||
! l = 9, m = -3
|
||||
rn(7) = 0.00173385495536766_8 * (w2m1)**(3.0_8/TWO)* &
|
||||
((765765.0_8/16.0_8)*w**6 - 675675.0_8/16.0_8 * w**4 + &
|
||||
(135135.0_8/16.0_8)*w**2 - 3465.0_8/16.0_8) * sin(3.0_8*phi)
|
||||
! l = 9, m = -2
|
||||
rn(8) = 0.0158910431540932_8 * (w2m1)*((109395.0_8/16.0_8)*w**7- &
|
||||
135135.0_8/16.0_8 * w**5 + (45045.0_8/16.0_8)*w**3 - 3465.0_8/16.0_8 * w)* &
|
||||
sin(TWO*phi)
|
||||
! l = 9, m = -1
|
||||
rn(9) = 0.149071198499986_8*sqrt(w2m1)*((109395.0_8/128.0_8)*w**8 - &
|
||||
45045.0_8/32.0_8 * w**6 + (45045.0_8/64.0_8)*w**4 - 3465.0_8/32.0_8 * w**2 + 315.0_8/128.0_8) * sin(phi)
|
||||
! l = 9, m = 0
|
||||
rn(10) = 94.9609375_8 * w**9 - 201.09375_8 * w**7 + 140.765625_8 * w**5- &
|
||||
36.09375_8 * w**3 + 2.4609375_8 * w
|
||||
! l = 9, m = 1
|
||||
rn(11) = 0.149071198499986_8*sqrt(w2m1)*((109395.0_8/128.0_8)*w**8 - &
|
||||
45045.0_8/32.0_8 * w**6 + (45045.0_8/64.0_8)*w**4 -3465.0_8/32.0_8 * w**2 + 315.0_8/128.0_8) * cos(phi)
|
||||
! l = 9, m = 2
|
||||
rn(12) = 0.0158910431540932_8 * (w2m1)*((109395.0_8/16.0_8)*w**7 - &
|
||||
135135.0_8/16.0_8 * w**5 + (45045.0_8/16.0_8)*w**3 - 3465.0_8/ 16.0_8 * w) * &
|
||||
cos(TWO*phi)
|
||||
! l = 9, m = 3
|
||||
rn(13) = 0.00173385495536766_8 * (w2m1)**(3.0_8/TWO)*((765765.0_8/16.0_8)*w**6 - &
|
||||
675675.0_8/16.0_8 * w**4 + (135135.0_8/16.0_8)*w**2 - 3465.0_8/16.0_8)* &
|
||||
cos(3.0_8*phi)
|
||||
! l = 9, m = 4
|
||||
rn(14) = 0.000196320414650061_8 * (w2m1)**2*((2297295.0_8/8.0_8)*w**5 - &
|
||||
675675.0_8/4.0_8 * w**3 + (135135.0_8/8.0_8)*w) * cos(4.0_8*phi)
|
||||
! l = 9, m = 5
|
||||
rn(15) = 2.34647776186144d-5*(w2m1)**(5.0_8/TWO)*((11486475.0_8/8.0_8)* &
|
||||
w**4 - 2027025.0_8/4.0_8 * w**2 + 135135.0_8/8.0_8) * cos(5.0_8*phi)
|
||||
! l = 9, m = 6
|
||||
rn(16) = 3.02928976464514d-6*(w2m1)**3*((11486475.0_8/TWO)*w**3 - &
|
||||
2027025.0_8/TWO*w) * cos(6.0_8*phi)
|
||||
! l = 9, m = 7
|
||||
rn(17) = 4.37240315267812d-7*(w2m1)**(7.0_8/TWO)* &
|
||||
((34459425.0_8/TWO)*w**2 - 2027025.0_8/TWO) * cos(7.0_8*phi)
|
||||
! l = 9, m = 8
|
||||
rn(18) = 2.58397773170915_8 * w*(w2m1)**4 * cos(8.0_8*phi)
|
||||
! l = 9, m = 9
|
||||
rn(19) = 0.609049392175524_8 * (w2m1)**(9.0_8/TWO) * cos(9.0_8*phi)
|
||||
case (10)
|
||||
! l = 10, m = -10
|
||||
rn(1) = 0.593627917136573_8 * (w2m1)**5 * sin(10.0_8*phi)
|
||||
! l = 10, m = -9
|
||||
rn(2) = 2.65478475211798_8 * w*(w2m1)**(9.0_8/TWO) * sin(9.0_8*phi)
|
||||
! l = 10, m = -8
|
||||
rn(3) = 2.49953651452314d-8*(w2m1)**4*((654729075.0_8/TWO)*w**2 - &
|
||||
34459425.0_8/TWO) * sin(8.0_8*phi)
|
||||
! l = 10, m = -7
|
||||
rn(4) = 1.83677671621093d-7*(w2m1)**(7.0_8/TWO)* &
|
||||
((218243025.0_8/TWO)*w**3 - 34459425.0_8/TWO*w) * sin(7.0_8*phi)
|
||||
! l = 10, m = -6
|
||||
rn(5) = 1.51464488232257d-6*(w2m1)**3*((218243025.0_8/8.0_8)*w**4 - &
|
||||
34459425.0_8/4.0_8 * w**2 + 2027025.0_8/8.0_8) * sin(6.0_8*phi)
|
||||
! l = 10, m = -5
|
||||
rn(6) = 1.35473956745817d-5*(w2m1)**(5.0_8/TWO)* &
|
||||
((43648605.0_8/8.0_8)*w**5 - 11486475.0_8/4.0_8 * w**3 + &
|
||||
(2027025.0_8/8.0_8)*w) * sin(5.0_8*phi)
|
||||
! l = 10, m = -4
|
||||
rn(7) = 0.000128521880085575_8 * (w2m1)**2*((14549535.0_8/16.0_8)*w**6 - &
|
||||
11486475.0_8/16.0_8 * w**4 + (2027025.0_8/16.0_8)*w**2 - &
|
||||
45045.0_8/16.0_8) * sin(4.0_8*phi)
|
||||
! l = 10, m = -3
|
||||
rn(8) = 0.00127230170115096_8 * (w2m1)**(3.0_8/TWO)* &
|
||||
((2078505.0_8/16.0_8)*w**7 - 2297295.0_8/16.0_8 * w**5 + &
|
||||
(675675.0_8/16.0_8)*w**3 - 45045.0_8/16.0_8 * w) * sin(3.0_8*phi)
|
||||
! l = 10, m = -2
|
||||
rn(9) = 0.012974982402692_8 * (w2m1)*((2078505.0_8/128.0_8)*w**8 - &
|
||||
765765.0_8/32.0_8 * w**6 + (675675.0_8/64.0_8)*w**4 - &
|
||||
45045.0_8/32.0_8 * w**2 + 3465.0_8/128.0_8) * sin(TWO*phi)
|
||||
! l = 10, m = -1
|
||||
rn(10) = 0.134839972492648_8*sqrt(w2m1)*((230945.0_8/128.0_8)*w**9 - &
|
||||
109395.0_8/32.0_8 * w**7 + (135135.0_8/64.0_8)*w**5 - &
|
||||
15015.0_8/32.0_8 * w**3 + (3465.0_8/128.0_8)*w) * sin(phi)
|
||||
! l = 10, m = 0
|
||||
rn(11) = 180.42578125_8 * w**10 - 427.32421875_8 * w**8 +351.9140625_8 * w**6 - &
|
||||
117.3046875_8 * w**4 + 13.53515625_8 * w**2 -0.24609375_8
|
||||
! l = 10, m = 1
|
||||
rn(12) = 0.134839972492648_8*sqrt(w2m1)*((230945.0_8/128.0_8)*w**9 - &
|
||||
109395.0_8/32.0_8 * w**7 + (135135.0_8/64.0_8)*w**5 -15015.0_8/ &
|
||||
32.0_8 * w**3 + (3465.0_8/128.0_8)*w) * cos(phi)
|
||||
! l = 10, m = 2
|
||||
rn(13) = 0.012974982402692_8 * (w2m1)*((2078505.0_8/128.0_8)*w**8 - &
|
||||
765765.0_8/32.0_8 * w**6 + (675675.0_8/64.0_8)*w**4 -&
|
||||
45045.0_8/32.0_8 * w**2 + 3465.0_8/128.0_8) * cos(TWO*phi)
|
||||
! l = 10, m = 3
|
||||
rn(14) = 0.00127230170115096_8 * (w2m1)**(3.0_8/TWO)* &
|
||||
((2078505.0_8/16.0_8)*w**7 - 2297295.0_8/16.0_8 * w**5 + &
|
||||
(675675.0_8/16.0_8)*w**3 - 45045.0_8/16.0_8 * w) * cos(3.0_8*phi)
|
||||
! l = 10, m = 4
|
||||
rn(15) = 0.000128521880085575_8 * (w2m1)**2*((14549535.0_8/16.0_8)*w**6 - &
|
||||
11486475.0_8/16.0_8 * w**4 + (2027025.0_8/16.0_8)*w**2 - &
|
||||
45045.0_8/16.0_8) * cos(4.0_8*phi)
|
||||
! l = 10, m = 5
|
||||
rn(16) = 1.35473956745817d-5*(w2m1)**(5.0_8/TWO)* &
|
||||
((43648605.0_8/8.0_8)*w**5 - 11486475.0_8/4.0_8 * w**3 + &
|
||||
(2027025.0_8/8.0_8)*w) * cos(5.0_8*phi)
|
||||
! l = 10, m = 6
|
||||
rn(17) = 1.51464488232257d-6*(w2m1)**3*((218243025.0_8/8.0_8)*w**4 - &
|
||||
34459425.0_8/4.0_8 * w**2 + 2027025.0_8/8.0_8) * cos(6.0_8*phi)
|
||||
! l = 10, m = 7
|
||||
rn(18) = 1.83677671621093d-7*(w2m1)**(7.0_8/TWO)* &
|
||||
((218243025.0_8/TWO)*w**3 - 34459425.0_8/TWO*w) * cos(7.0_8*phi)
|
||||
! l = 10, m = 8
|
||||
rn(19) = 2.49953651452314d-8*(w2m1)**4* &
|
||||
((654729075.0_8/TWO)*w**2 - 34459425.0_8/TWO) * cos(8.0_8*phi)
|
||||
! l = 10, m = 9
|
||||
rn(20) = 2.65478475211798_8 * w*(w2m1)**(9.0_8/TWO) * cos(9.0_8*phi)
|
||||
! l = 10, m = 10
|
||||
rn(21) = 0.593627917136573_8 * (w2m1)**5 * cos(10.0_8*phi)
|
||||
case default
|
||||
rn = ONE
|
||||
end select
|
||||
|
||||
end function calc_rn
|
||||
|
||||
!===============================================================================
|
||||
! MAXWELL_SPECTRUM samples an energy from the Maxwell fission distribution based
|
||||
! on a direct sampling scheme. The probability distribution function for a
|
||||
|
|
|
|||
|
|
@ -36,7 +36,9 @@ module matrix_header
|
|||
procedure :: copy => matrix_copy
|
||||
end type matrix
|
||||
|
||||
#ifdef PETSC
|
||||
integer :: petsc_err
|
||||
#endif
|
||||
|
||||
contains
|
||||
|
||||
|
|
@ -270,6 +272,7 @@ contains
|
|||
! MATRIX_SETUP_PETSC configures the row/col vectors and links to a PETSc object
|
||||
!===============================================================================
|
||||
|
||||
#ifdef PETSC
|
||||
subroutine matrix_setup_petsc(self)
|
||||
|
||||
class(Matrix), intent(inout) :: self ! matrix instance
|
||||
|
|
@ -279,50 +282,49 @@ contains
|
|||
self % col = self % col - 1
|
||||
|
||||
! Link to petsc
|
||||
#ifdef PETSC
|
||||
call MatCreateSeqAIJWithArrays(PETSC_COMM_WORLD, self % n, self % n, &
|
||||
self % row, self % col, self % val, self % petsc_mat, petsc_err)
|
||||
#endif
|
||||
|
||||
! Petsc is now active
|
||||
self % petsc_active = .true.
|
||||
|
||||
end subroutine matrix_setup_petsc
|
||||
#endif
|
||||
|
||||
!===============================================================================
|
||||
! MATRIX_WRITE_PETSC_BINARY writes a PETSc matrix binary file
|
||||
!===============================================================================
|
||||
|
||||
#ifdef PETSC
|
||||
subroutine matrix_write_petsc_binary(self, filename)
|
||||
|
||||
character(*), intent(in) :: filename ! file name to write to
|
||||
class(Matrix), intent(in) :: self ! matrix instance
|
||||
|
||||
#ifdef PETSC
|
||||
type(PetscViewer) :: viewer ! a petsc viewer instance
|
||||
|
||||
call PetscViewerBinaryOpen(PETSC_COMM_WORLD, trim(filename), &
|
||||
FILE_MODE_WRITE, viewer, petsc_err)
|
||||
call MatView(self % petsc_mat, viewer, petsc_err)
|
||||
call PetscViewerDestroy(viewer, petsc_err)
|
||||
#endif
|
||||
|
||||
end subroutine matrix_write_petsc_binary
|
||||
#endif
|
||||
|
||||
!===============================================================================
|
||||
! MATRIX_TRANSPOSE uses PETSc to transpose a matrix
|
||||
!===============================================================================
|
||||
|
||||
#ifdef PETSC
|
||||
subroutine matrix_transpose(self)
|
||||
|
||||
class(Matrix), intent(inout) :: self ! matrix instance
|
||||
|
||||
#ifdef PETSC
|
||||
call MatTranspose(self % petsc_mat, MAT_REUSE_MATRIX, self % petsc_mat, &
|
||||
petsc_err)
|
||||
#endif
|
||||
|
||||
end subroutine matrix_transpose
|
||||
#endif
|
||||
|
||||
!===============================================================================
|
||||
! MATRIX_VECTOR_MULTIPLY allow a vector to multiply the matrix
|
||||
|
|
|
|||
116
src/output.F90
116
src/output.F90
|
|
@ -184,7 +184,7 @@ contains
|
|||
write(OUTPUT_UNIT,*) ' -s, --threads Number of OpenMP threads'
|
||||
write(OUTPUT_UNIT,*) ' -t, --track Write tracks for all particles'
|
||||
write(OUTPUT_UNIT,*) ' -v, --version Show version information'
|
||||
write(OUTPUT_UNIT,*) ' -?, --help Show this message'
|
||||
write(OUTPUT_UNIT,*) ' -h, --help Show this message'
|
||||
end if
|
||||
|
||||
end subroutine print_usage
|
||||
|
|
@ -672,7 +672,7 @@ contains
|
|||
integer :: j ! index in filters array
|
||||
integer :: id ! user-specified id
|
||||
integer :: unit_ ! unit to write to
|
||||
integer :: n ! scattering order to include in name
|
||||
integer :: n ! moment order to include in name
|
||||
character(MAX_LINE_LEN) :: string
|
||||
character(MAX_WORD_LEN) :: pn_string
|
||||
type(Cell), pointer :: c => null()
|
||||
|
|
@ -825,20 +825,63 @@ contains
|
|||
select case (t % score_bins(j))
|
||||
case (SCORE_FLUX)
|
||||
string = trim(string) // ' flux'
|
||||
case (SCORE_FLUX_YN)
|
||||
pn_string = ' flux'
|
||||
string = trim(string) // pn_string
|
||||
do n = 1, t % moment_order(j)
|
||||
pn_string = ' flux-y' // trim(to_str(n))
|
||||
string = trim(string) // pn_string
|
||||
end do
|
||||
j = j + n - 1
|
||||
case (SCORE_TOTAL)
|
||||
string = trim(string) // ' total'
|
||||
case (SCORE_TOTAL_YN)
|
||||
pn_string = ' total'
|
||||
string = trim(string) // pn_string
|
||||
do n = 1, t % moment_order(j)
|
||||
pn_string = ' total-y' // trim(to_str(n))
|
||||
string = trim(string) // pn_string
|
||||
end do
|
||||
j = j + n - 1
|
||||
case (SCORE_SCATTER)
|
||||
string = trim(string) // ' scatter'
|
||||
case (SCORE_NU_SCATTER)
|
||||
string = trim(string) // ' nu-scatter'
|
||||
case (SCORE_SCATTER_N)
|
||||
pn_string = ' scatter-' // trim(to_str(t % scatt_order(j)))
|
||||
pn_string = ' scatter-' // trim(to_str(t % moment_order(j)))
|
||||
string = trim(string) // pn_string
|
||||
case (SCORE_SCATTER_PN)
|
||||
pn_string = ' scatter'
|
||||
string = trim(string) // pn_string
|
||||
do n = 1, t % scatt_order(j)
|
||||
pn_string = ' scatter-' // trim(to_str(n))
|
||||
do n = 1, t % moment_order(j)
|
||||
pn_string = ' scatter-p' // trim(to_str(n))
|
||||
string = trim(string) // pn_string
|
||||
end do
|
||||
j = j + n - 1
|
||||
case (SCORE_NU_SCATTER_N)
|
||||
pn_string = ' nu-scatter-' // trim(to_str(t % moment_order(j)))
|
||||
string = trim(string) // pn_string
|
||||
case (SCORE_NU_SCATTER_PN)
|
||||
pn_string = ' nu-scatter'
|
||||
string = trim(string) // pn_string
|
||||
do n = 1, t % moment_order(j)
|
||||
pn_string = ' nu-scatter-p' // trim(to_str(n))
|
||||
string = trim(string) // pn_string
|
||||
end do
|
||||
j = j + n - 1
|
||||
case (SCORE_SCATTER_YN)
|
||||
pn_string = ' scatter'
|
||||
string = trim(string) // pn_string
|
||||
do n = 1, t % moment_order(j)
|
||||
pn_string = ' scatter-y' // trim(to_str(n))
|
||||
string = trim(string) // pn_string
|
||||
end do
|
||||
j = j + n - 1
|
||||
case (SCORE_NU_SCATTER_YN)
|
||||
pn_string = ' nu-scatter'
|
||||
string = trim(string) // pn_string
|
||||
do n = 1, t % moment_order(j)
|
||||
pn_string = ' nu-scatter-y' // trim(to_str(n))
|
||||
string = trim(string) // pn_string
|
||||
end do
|
||||
j = j + n - 1
|
||||
|
|
@ -1614,13 +1657,14 @@ contains
|
|||
integer :: score_index ! scoring bin index
|
||||
integer :: i_nuclide ! index in nuclides array
|
||||
integer :: i_listing ! index in xs_listings array
|
||||
integer :: n_order ! loop index for scattering orders
|
||||
integer :: n_order ! loop index for moment orders
|
||||
integer :: nm_order ! loop index for Ynm moment orders
|
||||
real(8) :: t_value ! t-values for confidence intervals
|
||||
real(8) :: alpha ! significance level for CI
|
||||
character(MAX_FILE_LEN) :: filename ! name of output file
|
||||
character(15) :: filter_name(N_FILTER_TYPES) ! names of tally filters
|
||||
character(27) :: score_names(N_SCORE_TYPES) ! names of scoring function
|
||||
character(27) :: score_name ! names of scoring function
|
||||
character(36) :: score_names(N_SCORE_TYPES) ! names of scoring function
|
||||
character(36) :: score_name ! names of scoring function
|
||||
! to be applied at write-time
|
||||
type(TallyObject), pointer :: t
|
||||
|
||||
|
|
@ -1642,8 +1686,6 @@ contains
|
|||
score_names(abs(SCORE_TOTAL)) = "Total Reaction Rate"
|
||||
score_names(abs(SCORE_SCATTER)) = "Scattering Rate"
|
||||
score_names(abs(SCORE_NU_SCATTER)) = "Scattering Production Rate"
|
||||
score_names(abs(SCORE_SCATTER_N)) = ""
|
||||
score_names(abs(SCORE_SCATTER_PN)) = ""
|
||||
score_names(abs(SCORE_TRANSPORT)) = "Transport Rate"
|
||||
score_names(abs(SCORE_N_1N)) = "(n,1n) Rate"
|
||||
score_names(abs(SCORE_ABSORPTION)) = "Absorption Rate"
|
||||
|
|
@ -1651,6 +1693,14 @@ contains
|
|||
score_names(abs(SCORE_NU_FISSION)) = "Nu-Fission Rate"
|
||||
score_names(abs(SCORE_KAPPA_FISSION)) = "Kappa-Fission Rate"
|
||||
score_names(abs(SCORE_EVENTS)) = "Events"
|
||||
score_names(abs(SCORE_FLUX_YN)) = "Flux Moment"
|
||||
score_names(abs(SCORE_TOTAL_YN)) = "Total Reaction Rate Moment"
|
||||
score_names(abs(SCORE_SCATTER_N)) = "Scattering Rate Moment"
|
||||
score_names(abs(SCORE_SCATTER_PN)) = "Scattering Rate Moment"
|
||||
score_names(abs(SCORE_SCATTER_YN)) = "Scattering Rate Moment"
|
||||
score_names(abs(SCORE_NU_SCATTER_N)) = "Scattering Prod. Rate Moment"
|
||||
score_names(abs(SCORE_NU_SCATTER_PN)) = "Scattering Prod. Rate Moment"
|
||||
score_names(abs(SCORE_NU_SCATTER_YN)) = "Scattering Prod. Rate Moment"
|
||||
|
||||
! Create filename for tally output
|
||||
filename = trim(path_output) // "tallies.out"
|
||||
|
|
@ -1777,34 +1827,42 @@ contains
|
|||
do l = 1, t % n_user_score_bins
|
||||
k = k + 1
|
||||
score_index = score_index + 1
|
||||
if (t % score_bins(k) == SCORE_SCATTER_N) then
|
||||
if (t % scatt_order(k) == 0) then
|
||||
score_name = "Scattering Rate"
|
||||
else
|
||||
score_name = 'P' // trim(to_str(t % scatt_order(k))) // &
|
||||
' Scattering Moment'
|
||||
end if
|
||||
select case(t % score_bins(k))
|
||||
case (SCORE_SCATTER_N, SCORE_NU_SCATTER_N)
|
||||
score_name = 'P' // trim(to_str(t % moment_order(k))) // " " // &
|
||||
score_names(abs(t % score_bins(k)))
|
||||
write(UNIT=UNIT_TALLY, FMT='(1X,2A,1X,A,"+/- ",A)') &
|
||||
repeat(" ", indent), score_name, &
|
||||
to_str(t % results(score_index,filter_index) % sum), &
|
||||
trim(to_str(t % results(score_index,filter_index) % sum_sq))
|
||||
else if (t % score_bins(k) == SCORE_SCATTER_PN) then
|
||||
score_name = "Scattering Rate"
|
||||
write(UNIT=UNIT_TALLY, FMT='(1X,2A,1X,A,"+/- ",A)') &
|
||||
repeat(" ", indent), score_name, &
|
||||
to_str(t % results(score_index,filter_index) % sum), &
|
||||
trim(to_str(t % results(score_index,filter_index) % sum_sq))
|
||||
do n_order = 1, t % scatt_order(k)
|
||||
case (SCORE_SCATTER_PN, SCORE_NU_SCATTER_PN)
|
||||
score_index = score_index - 1
|
||||
do n_order = 0, t % moment_order(k)
|
||||
score_index = score_index + 1
|
||||
score_name = 'P' // trim(to_str(n_order)) // &
|
||||
' Scattering Moment'
|
||||
score_name = 'P' // trim(to_str(n_order)) // " " //&
|
||||
score_names(abs(t % score_bins(k)))
|
||||
write(UNIT=UNIT_TALLY, FMT='(1X,2A,1X,A,"+/- ",A)') &
|
||||
repeat(" ", indent), score_name, &
|
||||
to_str(t % results(score_index,filter_index) % sum), &
|
||||
trim(to_str(t % results(score_index,filter_index) % sum_sq))
|
||||
end do
|
||||
k = k + n_order - 1
|
||||
else
|
||||
k = k + t % moment_order(k)
|
||||
case (SCORE_SCATTER_YN, SCORE_NU_SCATTER_YN, SCORE_FLUX_YN, &
|
||||
SCORE_TOTAL_YN)
|
||||
score_index = score_index - 1
|
||||
do n_order = 0, t % moment_order(k)
|
||||
do nm_order = -n_order, n_order
|
||||
score_index = score_index + 1
|
||||
score_name = 'Y' // trim(to_str(n_order)) // ',' // &
|
||||
trim(to_str(nm_order)) // " " // score_names(abs(t % score_bins(k)))
|
||||
write(UNIT=UNIT_TALLY, FMT='(1X,2A,1X,A,"+/- ",A)') &
|
||||
repeat(" ", indent), score_name, &
|
||||
to_str(t % results(score_index,filter_index) % sum), &
|
||||
trim(to_str(t % results(score_index,filter_index) % sum_sq))
|
||||
end do
|
||||
end do
|
||||
k = k + (t % moment_order(k) + 1)**2 - 1
|
||||
case default
|
||||
if (t % score_bins(k) > 0) then
|
||||
score_name = reaction_name(t % score_bins(k))
|
||||
else
|
||||
|
|
@ -1814,7 +1872,7 @@ contains
|
|||
repeat(" ", indent), score_name, &
|
||||
to_str(t % results(score_index,filter_index) % sum), &
|
||||
trim(to_str(t % results(score_index,filter_index) % sum_sq))
|
||||
end if
|
||||
end select
|
||||
end do
|
||||
indent = indent - 2
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -30,7 +30,7 @@ module particle_header
|
|||
! Pointer to next (more local) set of coordinates
|
||||
type(LocalCoord), pointer :: next => null()
|
||||
end type LocalCoord
|
||||
|
||||
|
||||
!===============================================================================
|
||||
! PARTICLE describes the state of a particle being transported through the
|
||||
! geometry
|
||||
|
|
@ -53,6 +53,7 @@ module particle_header
|
|||
|
||||
! Pre-collision physical data
|
||||
real(8) :: last_xyz(3) ! previous coordinates
|
||||
real(8) :: last_uvw(3) ! previous direction coordinates
|
||||
real(8) :: last_wgt ! pre-collision particle weight
|
||||
real(8) :: last_E ! pre-collision energy
|
||||
real(8) :: absorb_wgt ! weight absorbed for survival biasing
|
||||
|
|
@ -96,7 +97,7 @@ contains
|
|||
|
||||
type(LocalCoord), pointer :: coord
|
||||
|
||||
if (associated(coord)) then
|
||||
if (associated(coord)) then
|
||||
! recursively deallocate lower coordinates
|
||||
if (associated(coord % next)) call deallocate_coord(coord%next)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
module particle_restart
|
||||
module particle_restart
|
||||
|
||||
use, intrinsic :: ISO_FORTRAN_ENV
|
||||
|
||||
|
|
@ -28,6 +28,7 @@ contains
|
|||
subroutine run_particle_restart()
|
||||
|
||||
integer(8) :: particle_seed
|
||||
integer :: previous_run_mode
|
||||
type(Particle) :: p
|
||||
|
||||
! Set verbosity high
|
||||
|
|
@ -37,14 +38,20 @@ contains
|
|||
call p % initialize()
|
||||
|
||||
! Read in the restart information
|
||||
call read_particle_restart(p)
|
||||
call read_particle_restart(p, previous_run_mode)
|
||||
|
||||
! Set all tallies to 0 for now (just tracking errors)
|
||||
n_tallies = 0
|
||||
|
||||
! Compute random number seed
|
||||
particle_seed = ((current_batch - 1)*gen_per_batch + &
|
||||
current_gen - 1)*n_particles + p % id
|
||||
select case (previous_run_mode)
|
||||
case (MODE_EIGENVALUE)
|
||||
particle_seed = ((current_batch - 1)*gen_per_batch + &
|
||||
current_gen - 1)*n_particles + p % id
|
||||
case (MODE_FIXEDSOURCE)
|
||||
particle_seed = p % id
|
||||
end select
|
||||
|
||||
call set_particle_seed(particle_seed)
|
||||
|
||||
! Transport neutron
|
||||
|
|
@ -59,9 +66,10 @@ contains
|
|||
! READ_PARTICLE_RESTART reads the particle restart file
|
||||
!===============================================================================
|
||||
|
||||
subroutine read_particle_restart(p)
|
||||
subroutine read_particle_restart(p, previous_run_mode)
|
||||
|
||||
integer :: int_scalar
|
||||
integer, intent(inout) :: previous_run_mode
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
! Write meessage
|
||||
|
|
@ -79,6 +87,7 @@ contains
|
|||
call pr % read_data(gen_per_batch, 'gen_per_batch')
|
||||
call pr % read_data(current_gen, 'current_gen')
|
||||
call pr % read_data(n_particles, 'n_particles')
|
||||
call pr % read_data(previous_run_mode, 'run_mode')
|
||||
call pr % read_data(p % id, 'id')
|
||||
call pr % read_data(p % wgt, 'weight')
|
||||
call pr % read_data(p % E, 'energy')
|
||||
|
|
@ -88,6 +97,7 @@ contains
|
|||
! Set particle last attributes
|
||||
p % last_wgt = p % wgt
|
||||
p % last_xyz = p % coord % xyz
|
||||
p % last_uvw = p % coord % uvw
|
||||
p % last_E = p % E
|
||||
|
||||
! Close hdf5 file
|
||||
|
|
|
|||
|
|
@ -38,11 +38,17 @@ contains
|
|||
filename = trim(filename) // '.binary'
|
||||
#endif
|
||||
|
||||
!$omp critical
|
||||
! Create file
|
||||
call pr % file_create(filename)
|
||||
|
||||
! Get information about source particle
|
||||
src => source_bank(current_work)
|
||||
select case (run_mode)
|
||||
case (MODE_EIGENVALUE)
|
||||
src => source_bank(current_work)
|
||||
case (MODE_FIXEDSOURCE)
|
||||
src => source_site
|
||||
end select
|
||||
|
||||
! Write data to file
|
||||
call pr % write_data(FILETYPE_PARTICLE_RESTART, 'filetype')
|
||||
|
|
@ -51,6 +57,7 @@ contains
|
|||
call pr % write_data(gen_per_batch, 'gen_per_batch')
|
||||
call pr % write_data(current_gen, 'current_gen')
|
||||
call pr % write_data(n_particles, 'n_particles')
|
||||
call pr % write_data(run_mode, 'run_mode')
|
||||
call pr % write_data(p % id, 'id')
|
||||
call pr % write_data(src % wgt, 'weight')
|
||||
call pr % write_data(src % E, 'energy')
|
||||
|
|
@ -59,6 +66,7 @@ contains
|
|||
|
||||
! Close file
|
||||
call pr % file_close()
|
||||
!$omp end critical
|
||||
|
||||
end subroutine write_particle_restart
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ contains
|
|||
! Store pre-collision particle properties
|
||||
p % last_wgt = p % wgt
|
||||
p % last_E = p % E
|
||||
p % last_uvw = p % coord0 % uvw
|
||||
|
||||
! Add to collision counter for particle
|
||||
p % n_collision = p % n_collision + 1
|
||||
|
|
@ -98,9 +99,17 @@ contains
|
|||
! If survival biasing is being used, the following subroutine adjusts the
|
||||
! weight of the particle. Otherwise, it checks to see if absorption occurs
|
||||
|
||||
call absorption(p, i_nuclide)
|
||||
if (micro_xs(i_nuclide) % absorption > ZERO) then
|
||||
call absorption(p, i_nuclide)
|
||||
else
|
||||
p % absorb_wgt = ZERO
|
||||
end if
|
||||
if (.not. p % alive) return
|
||||
|
||||
! Sample a scattering reaction and determine the secondary energy of the
|
||||
! exiting neutron
|
||||
call scatter(p, i_nuclide)
|
||||
|
||||
! Play russian roulette if survival biasing is turned on
|
||||
|
||||
if (survival_biasing) then
|
||||
|
|
@ -108,11 +117,6 @@ contains
|
|||
if (.not. p % alive) return
|
||||
end if
|
||||
|
||||
! Sample a scattering reaction and determine the secondary energy of the
|
||||
! exiting neutron
|
||||
|
||||
call scatter(p, i_nuclide)
|
||||
|
||||
end subroutine sample_reaction
|
||||
|
||||
!===============================================================================
|
||||
|
|
@ -293,6 +297,7 @@ contains
|
|||
p % last_wgt = p % wgt
|
||||
else
|
||||
p % wgt = ZERO
|
||||
p % last_wgt = ZERO
|
||||
p % alive = .false.
|
||||
end if
|
||||
end if
|
||||
|
|
@ -866,6 +871,14 @@ contains
|
|||
nu = int(nu_t) + 1
|
||||
end if
|
||||
|
||||
! Check for fission bank size getting hit
|
||||
if (n_bank + nu > size(fission_bank)) then
|
||||
message = "Maximum number of sites in fission bank reached. This can &
|
||||
&result in irreproducible results using different numbers of &
|
||||
&processes/threads."
|
||||
call warning()
|
||||
end if
|
||||
|
||||
! Bank source neutrons
|
||||
if (nu == 0 .or. n_bank == size(fission_bank)) return
|
||||
p % fission = .true. ! Fission neutrons will be banked
|
||||
|
|
@ -1156,7 +1169,7 @@ contains
|
|||
! calculate cosine
|
||||
mu0 = rxn % adist % data(lc + k)
|
||||
mu1 = rxn % adist % data(lc + k+1)
|
||||
mu = mu0 + (32.0_8 * xi - k) * (mu1 - mu0)
|
||||
mu = mu0 + (32.0_8 * xi - k + ONE) * (mu1 - mu0)
|
||||
|
||||
elseif (type == ANGLE_TABULAR) then
|
||||
interp = int(rxn % adist % data(lc + 1))
|
||||
|
|
|
|||
16
src/plot.F90
16
src/plot.F90
|
|
@ -10,6 +10,7 @@ module plot
|
|||
use plot_header
|
||||
use ppmlib, only: Image, init_image, allocate_image, &
|
||||
deallocate_image, set_pixel
|
||||
use progress_header, only: ProgressBar
|
||||
use string, only: to_str
|
||||
|
||||
implicit none
|
||||
|
|
@ -109,8 +110,9 @@ contains
|
|||
real(8) :: in_pixel
|
||||
real(8) :: out_pixel
|
||||
real(8) :: xyz(3)
|
||||
type(Image) :: img
|
||||
type(Particle) :: p
|
||||
type(Image) :: img
|
||||
type(Particle) :: p
|
||||
type(ProgressBar) :: progress
|
||||
|
||||
! Initialize and allocate space for image
|
||||
call init_image(img)
|
||||
|
|
@ -149,13 +151,14 @@ contains
|
|||
p % coord % universe = BASE_UNIVERSE
|
||||
|
||||
do y = 1, img % height
|
||||
call progress % set_value(dble(y)/dble(img % height)*100.)
|
||||
do x = 1, img % width
|
||||
|
||||
! get pixel color
|
||||
call position_rgb(p, pl, rgb, id)
|
||||
|
||||
! Create a pixel at (x,y) with color (r,g,b)
|
||||
call set_pixel(img, x, y, rgb(1), rgb(2), rgb(3))
|
||||
call set_pixel(img, x-1, y-1, rgb(1), rgb(2), rgb(3))
|
||||
|
||||
! Advance pixel in first direction
|
||||
p % coord0 % xyz(in_i) = p % coord0 % xyz(in_i) + in_pixel
|
||||
|
|
@ -172,6 +175,9 @@ contains
|
|||
! Free up space
|
||||
call deallocate_image(img)
|
||||
|
||||
! Clear particle
|
||||
call p % clear()
|
||||
|
||||
end subroutine create_ppm
|
||||
|
||||
!===============================================================================
|
||||
|
|
@ -228,7 +234,8 @@ contains
|
|||
integer :: id ! id of cell or material
|
||||
real(8) :: vox(3) ! x, y, and z voxel widths
|
||||
real(8) :: ll(3) ! lower left starting point for each sweep direction
|
||||
type(Particle) :: p
|
||||
type(Particle) :: p
|
||||
type(ProgressBar) :: progress
|
||||
|
||||
! compute voxel widths in each direction
|
||||
vox = pl % width/dble(pl % pixels)
|
||||
|
|
@ -253,6 +260,7 @@ contains
|
|||
ll = ll + vox / 2.0
|
||||
|
||||
do x = 1, pl % pixels(1)
|
||||
call progress % set_value(dble(x)/dble(pl % pixels(1))*100.)
|
||||
do y = 1, pl % pixels(2)
|
||||
do z = 1, pl % pixels(3)
|
||||
|
||||
|
|
|
|||
102
src/progress_header.F90
Normal file
102
src/progress_header.F90
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
module progress_header
|
||||
|
||||
use, intrinsic :: ISO_FORTRAN_ENV, only: OUTPUT_UNIT
|
||||
|
||||
implicit none
|
||||
|
||||
#ifdef UNIX
|
||||
interface
|
||||
function check_isatty(fd) bind(C, name = 'isatty')
|
||||
use, intrinsic :: ISO_C_BINDING, only: c_int
|
||||
integer(c_int) :: check_isatty
|
||||
integer(c_int), value :: fd
|
||||
end function check_isatty
|
||||
end interface
|
||||
#endif
|
||||
|
||||
!===============================================================================
|
||||
! PROGRESSBAR
|
||||
!===============================================================================
|
||||
|
||||
type ProgressBar
|
||||
private
|
||||
character(len=72) :: bar="???% | " // &
|
||||
" |"
|
||||
contains
|
||||
procedure :: set_value => bar_set_value
|
||||
end type ProgressBar
|
||||
|
||||
contains
|
||||
|
||||
!===============================================================================
|
||||
! IS_TERMINAL checks if output is currently being output to a terminal. Relies
|
||||
! on a POSIX implementation of isatty, and defaults to false if that is not
|
||||
! available
|
||||
!===============================================================================
|
||||
|
||||
function is_terminal() result(istty)
|
||||
logical :: istty
|
||||
|
||||
istty = .true.
|
||||
|
||||
#ifdef UNIX
|
||||
if (check_isatty(1) == 0) istty = .false.
|
||||
#else
|
||||
istty = .false.
|
||||
#endif
|
||||
|
||||
end function is_terminal
|
||||
|
||||
!===============================================================================
|
||||
! BAR_SET_VALUE prints the progress bar without advancing. The value is
|
||||
! specified as percent completion, from 0 to 100. If the value is ever set to
|
||||
! 100 or above, the bar is set to 100 and a newline is written.
|
||||
!===============================================================================
|
||||
|
||||
subroutine bar_set_value(self, val)
|
||||
|
||||
class(ProgressBar), intent(inout) :: self
|
||||
real(8), intent(in) :: val
|
||||
|
||||
integer :: i
|
||||
|
||||
if (.not. is_terminal()) return
|
||||
|
||||
! set the percentage
|
||||
if (val >= 100.) then
|
||||
write(self % bar(1:3), "(I3)") 100
|
||||
else if (val <= 0.) then
|
||||
write(self % bar(1:3), "(I3)") 0
|
||||
else
|
||||
write(self % bar(1:3), "(I3)") int(val)
|
||||
end if
|
||||
|
||||
! set the bar width
|
||||
if (val >= 100.) then
|
||||
do i=1,65
|
||||
write(self % bar(i+6:i+6), '(A)') '='
|
||||
end do
|
||||
else
|
||||
do i=1,int(dble(65)*val/100.)
|
||||
write(self % bar(i+6:i+6), '(A)') '='
|
||||
end do
|
||||
end if
|
||||
|
||||
write(OUTPUT_UNIT, '(A1,A1,A72)', ADVANCE='no') '+', char(13), self % bar
|
||||
flush(OUTPUT_UNIT)
|
||||
|
||||
if (val >= 100.) then
|
||||
|
||||
! make new line
|
||||
write(OUTPUT_UNIT, "(A)") ""
|
||||
flush(OUTPUT_UNIT)
|
||||
|
||||
! reset the bar in case we want to use this instance again
|
||||
self % bar = "???% | " // &
|
||||
" |"
|
||||
|
||||
end if
|
||||
|
||||
end subroutine bar_set_value
|
||||
|
||||
end module progress_header
|
||||
|
|
@ -1,15 +1,12 @@
|
|||
module random_lcg
|
||||
|
||||
use constants
|
||||
|
||||
implicit none
|
||||
|
||||
private
|
||||
save
|
||||
|
||||
! Random number streams
|
||||
integer, parameter :: N_STREAMS = 2
|
||||
integer, parameter :: STREAM_TRACKING = 1
|
||||
integer, parameter :: STREAM_TALLIES = 2
|
||||
|
||||
integer(8) :: prn_seed0 ! original seed
|
||||
integer(8) :: prn_seed(N_STREAMS) ! current seed
|
||||
integer(8) :: prn_mult ! multiplication factor, g
|
||||
|
|
@ -21,7 +18,7 @@ module random_lcg
|
|||
real(8) :: prn_norm ! 2^(-M)
|
||||
integer :: stream ! current RNG stream
|
||||
|
||||
!$omp threadprivate(prn_seed)
|
||||
!$omp threadprivate(prn_seed, stream)
|
||||
|
||||
public :: prn
|
||||
public :: initialize_prng
|
||||
|
|
@ -63,11 +60,13 @@ contains
|
|||
|
||||
integer :: i
|
||||
|
||||
stream = STREAM_TRACKING
|
||||
prn_seed0 = seed
|
||||
!$omp parallel
|
||||
do i = 1, N_STREAMS
|
||||
prn_seed(i) = prn_seed0 + i - 1
|
||||
end do
|
||||
stream = STREAM_TRACKING
|
||||
!$omp end parallel
|
||||
prn_mult = 2806196910506780709_8
|
||||
prn_add = 1_8
|
||||
prn_bits = 63
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ element settings {
|
|||
attribute upper_right { list { xsd:double+ } })
|
||||
}? &
|
||||
|
||||
element natural_elements { xsd:string { maxLength = "20" } }? &
|
||||
|
||||
element no_reduce { xsd:boolean }? &
|
||||
|
||||
element output {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ module source
|
|||
use output, only: write_message
|
||||
use output_interface, only: BinaryOutput
|
||||
use particle_header, only: Particle
|
||||
use random_lcg, only: prn, set_particle_seed
|
||||
use random_lcg, only: prn, set_particle_seed, prn_set_stream
|
||||
use string, only: to_str
|
||||
|
||||
#ifdef MPI
|
||||
|
|
@ -101,6 +101,9 @@ contains
|
|||
! Set weight to one by default
|
||||
site % wgt = ONE
|
||||
|
||||
! Set the random number generator to the source stream.
|
||||
call prn_set_stream(STREAM_SOURCE)
|
||||
|
||||
! Sample position
|
||||
select case (external_source % type_space)
|
||||
case (SRC_SPACE_BOX)
|
||||
|
|
@ -189,6 +192,9 @@ contains
|
|||
call fatal_error()
|
||||
end select
|
||||
|
||||
! Set the random number generator back to the tracking stream.
|
||||
call prn_set_stream(STREAM_TRACKING)
|
||||
|
||||
end subroutine sample_external_source
|
||||
|
||||
!===============================================================================
|
||||
|
|
@ -256,6 +262,7 @@ contains
|
|||
p % coord % xyz = src % xyz
|
||||
p % coord % uvw = src % uvw
|
||||
p % last_xyz = src % xyz
|
||||
p % last_uvw = src % uvw
|
||||
p % E = src % E
|
||||
p % last_E = src % E
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ module state_point
|
|||
use error, only: fatal_error, warning
|
||||
use global
|
||||
use output, only: write_message, time_stamp
|
||||
use string, only: to_str
|
||||
use string, only: to_str, zero_padded, count_digits
|
||||
use output_interface
|
||||
use tally_header, only: TallyObject
|
||||
|
||||
|
|
@ -44,7 +44,7 @@ contains
|
|||
|
||||
! Set filename for state point
|
||||
filename = trim(path_output) // 'statepoint.' // &
|
||||
trim(to_str(current_batch))
|
||||
& zero_padded(current_batch, count_digits(n_batches))
|
||||
|
||||
! Append appropriate extension
|
||||
#ifdef HDF5
|
||||
|
|
@ -58,7 +58,7 @@ contains
|
|||
call write_message(1)
|
||||
|
||||
if (master) then
|
||||
! Create statepoint file
|
||||
! Create statepoint file
|
||||
call sp % file_create(filename)
|
||||
|
||||
! Write file type
|
||||
|
|
@ -216,12 +216,12 @@ contains
|
|||
group="tallies/tally" // to_str(i), length=t % n_nuclide_bins)
|
||||
deallocate(temp_array)
|
||||
|
||||
! Write number of score bins, score bins, and scatt order
|
||||
! Write number of score bins, score bins, and moment order
|
||||
call sp % write_data(t % n_score_bins, "n_score_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
call sp % write_data(t % score_bins, "score_bins", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_score_bins)
|
||||
call sp % write_data(t % scatt_order, "scatt_order", &
|
||||
call sp % write_data(t % moment_order, "moment_order", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_score_bins)
|
||||
|
||||
! Write number of user score bins
|
||||
|
|
@ -305,7 +305,9 @@ contains
|
|||
if (source_separate) then
|
||||
|
||||
! Set filename
|
||||
filename = trim(path_output) // 'source.' // trim(to_str(current_batch))
|
||||
filename = trim(path_output) // 'source.' // &
|
||||
& zero_padded(current_batch, count_digits(n_batches))
|
||||
|
||||
#ifdef HDF5
|
||||
filename = trim(filename) // '.h5'
|
||||
#else
|
||||
|
|
@ -326,7 +328,7 @@ contains
|
|||
|
||||
! Set filename for state point
|
||||
filename = trim(path_output) // 'statepoint.' // &
|
||||
trim(to_str(current_batch))
|
||||
& zero_padded(current_batch, count_digits(n_batches))
|
||||
#ifdef HDF5
|
||||
filename = trim(filename) // '.h5'
|
||||
#else
|
||||
|
|
@ -409,7 +411,7 @@ contains
|
|||
! Copy global tallies into temporary array for reducing
|
||||
n_bins = 2 * N_GLOBAL_TALLIES
|
||||
global_temp(1,:) = global_tallies(:) % sum
|
||||
global_temp(2,:) = global_tallies(:) % sum_sq
|
||||
global_temp(2,:) = global_tallies(:) % sum_sq
|
||||
|
||||
if (master) then
|
||||
! The MPI_IN_PLACE specifier allows the master to copy values into a
|
||||
|
|
@ -430,7 +432,7 @@ contains
|
|||
tallyresult_temp(:,1) % sum = global_temp(1,:)
|
||||
tallyresult_temp(:,1) % sum_sq = global_temp(2,:)
|
||||
|
||||
|
||||
|
||||
! Write out global tallies sum and sum_sq
|
||||
call sp % write_tally_result(tallyresult_temp, "global_tallies", &
|
||||
n1=N_GLOBAL_TALLIES, n2=1)
|
||||
|
|
@ -484,7 +486,7 @@ contains
|
|||
allocate(tallyresult_temp(m,n))
|
||||
tallyresult_temp(:,:) % sum = tally_temp(1,:,:)
|
||||
tallyresult_temp(:,:) % sum_sq = tally_temp(2,:,:)
|
||||
|
||||
|
||||
! Write reduced tally results to file
|
||||
call sp % write_tally_result(t % results, "results", &
|
||||
group="tallies/tally" // to_str(i), n1=m, n2=n)
|
||||
|
|
@ -525,7 +527,7 @@ contains
|
|||
integer :: int_array(3)
|
||||
integer, allocatable :: temp_array(:)
|
||||
logical :: source_present
|
||||
real(8) :: real_array(3)
|
||||
real(8) :: real_array(3)
|
||||
type(TallyObject), pointer :: t => null()
|
||||
|
||||
! Write message
|
||||
|
|
@ -720,7 +722,7 @@ contains
|
|||
group="tallies/tally" // to_str(i))
|
||||
call sp % read_data(t % score_bins, "score_bins", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_score_bins)
|
||||
call sp % read_data(t % scatt_order, "scatt_order", &
|
||||
call sp % read_data(t % moment_order, "moment_order", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_score_bins)
|
||||
|
||||
! Write number of user score bins
|
||||
|
|
@ -741,7 +743,7 @@ contains
|
|||
if (path_source_point == path_state_point .and. .not. source_present) then
|
||||
message = "Source bank must be contained in statepoint restart file"
|
||||
call fatal_error()
|
||||
end if
|
||||
end if
|
||||
|
||||
! Read tallies to master
|
||||
if (master) then
|
||||
|
|
@ -779,20 +781,20 @@ contains
|
|||
end if
|
||||
end if
|
||||
|
||||
! Read source if in eigenvalue mode
|
||||
! Read source if in eigenvalue mode
|
||||
if (run_mode == MODE_EIGENVALUE) then
|
||||
|
||||
! Check if source was written out separately
|
||||
if (.not. source_present) then
|
||||
|
||||
! Close statepoint file
|
||||
! Close statepoint file
|
||||
call sp % file_close()
|
||||
|
||||
! Write message
|
||||
message = "Loading source file " // trim(path_source_point) // "..."
|
||||
call write_message(1)
|
||||
|
||||
! Open source file
|
||||
! Open source file
|
||||
call sp % file_open(path_source_point, 'r', serial = .false.)
|
||||
|
||||
! Read file type
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
module string
|
||||
|
||||
use constants, only: MAX_WORDS, MAX_LINE_LEN, ERROR_INT, ERROR_REAL
|
||||
use error, only: warning
|
||||
use error, only: fatal_error, warning
|
||||
use global, only: message
|
||||
|
||||
implicit none
|
||||
|
|
@ -184,6 +184,39 @@ contains
|
|||
|
||||
end subroutine upper_case
|
||||
|
||||
!===============================================================================
|
||||
! ZERO_PADDED returns a string of the input integer padded with zeros to the
|
||||
! desired number of digits. Do not include the sign in n_digits for negative
|
||||
! integers.
|
||||
!===============================================================================
|
||||
|
||||
function zero_padded(num, n_digits) result(str)
|
||||
integer, intent(in) :: num
|
||||
integer, intent(in) :: n_digits
|
||||
character(11) :: str
|
||||
|
||||
character(8) :: zp_form
|
||||
|
||||
! Make sure n_digits is reasonable. 10 digits is the maximum needed for the
|
||||
! largest integer(4).
|
||||
if (n_digits > 10) then
|
||||
message = 'zero_padded called with an unreasonably large n_digits (>10)'
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
! Write a format string of the form '(In.m)' where n is the max width and
|
||||
! m is the min width. If a sign is present, then n must be one greater
|
||||
! than m.
|
||||
if (num < 0) then
|
||||
write(zp_form, '("(I", I0, ".", I0, ")")') n_digits+1, n_digits
|
||||
else
|
||||
write(zp_form, '("(I", I0, ".", I0, ")")') n_digits, n_digits
|
||||
end if
|
||||
|
||||
! Format the number.
|
||||
write(str, zp_form) num
|
||||
end function zero_padded
|
||||
|
||||
!===============================================================================
|
||||
! IS_NUMBER determines whether a string of characters is all 0-9 characters
|
||||
!===============================================================================
|
||||
|
|
@ -268,6 +301,25 @@ contains
|
|||
|
||||
end function ends_with
|
||||
|
||||
!===============================================================================
|
||||
! COUNT_DIGITS returns the number of digits needed to represent the input
|
||||
! integer.
|
||||
!===============================================================================
|
||||
|
||||
function count_digits(num) result(n_digits)
|
||||
integer, intent(in) :: num
|
||||
integer :: n_digits
|
||||
|
||||
n_digits = 1
|
||||
do while (num / 10**(n_digits) /= 0 .and. abs(num / 10 **(n_digits-1)) /= 1&
|
||||
&.and. n_digits /= 10)
|
||||
! Note that 10 digits is the maximum needed to represent an integer(4) so
|
||||
! the loop automatically exits when n_digits = 10.
|
||||
n_digits = n_digits + 1
|
||||
end do
|
||||
|
||||
end function count_digits
|
||||
|
||||
!===============================================================================
|
||||
! INT4_TO_STR converts an integer(4) to a string.
|
||||
!===============================================================================
|
||||
|
|
|
|||
708
src/tally.F90
708
src/tally.F90
|
|
@ -4,7 +4,7 @@ module tally
|
|||
use constants
|
||||
use error, only: fatal_error
|
||||
use global
|
||||
use math, only: t_percentile, calc_pn
|
||||
use math, only: t_percentile, calc_pn, calc_rn
|
||||
use mesh, only: get_mesh_bin, bin_to_mesh_indices, &
|
||||
get_mesh_indices, mesh_indices_to_bin, &
|
||||
mesh_intersects_2d, mesh_intersects_3d
|
||||
|
|
@ -41,8 +41,9 @@ contains
|
|||
integer :: i_tally
|
||||
integer :: j ! loop index for scoring bins
|
||||
integer :: k ! loop index for nuclide bins
|
||||
integer :: n ! loop index for scattering order
|
||||
integer :: l ! scoring bin loop index, allowing for changing
|
||||
integer :: n ! loop index for legendre order
|
||||
integer :: num_nm ! Number of N,M orders in harmonic
|
||||
integer :: l ! scoring bin loop index, allowing for changing
|
||||
! position during the loop
|
||||
integer :: filter_index ! single index for single bin
|
||||
integer :: score_bin ! scoring bin, e.g. SCORE_FLUX
|
||||
|
|
@ -139,7 +140,51 @@ contains
|
|||
! estimator since there is no way to count 'events' exactly for
|
||||
! the flux
|
||||
|
||||
score = last_wgt / material_xs % total
|
||||
if (survival_biasing) then
|
||||
! We need to account for the fact that some weight was already
|
||||
! absorbed
|
||||
score = last_wgt + p % absorb_wgt
|
||||
else
|
||||
score = last_wgt
|
||||
end if
|
||||
|
||||
score = score / material_xs % total
|
||||
case (SCORE_FLUX_YN)
|
||||
! All events score to a flux bin. We actually use a collision
|
||||
! estimator since there is no way to count 'events' exactly for
|
||||
! the flux
|
||||
|
||||
score_index = score_index - 1
|
||||
|
||||
! get the score
|
||||
if (survival_biasing) then
|
||||
! We need to account for the fact that some weight was already
|
||||
! absorbed
|
||||
score = last_wgt + p % absorb_wgt
|
||||
else
|
||||
score = last_wgt
|
||||
end if
|
||||
|
||||
score = score / material_xs % total
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % last_uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_TOTAL)
|
||||
! All events will score to the total reaction rate. We can just
|
||||
|
|
@ -154,6 +199,41 @@ contains
|
|||
score = last_wgt
|
||||
end if
|
||||
|
||||
case (SCORE_TOTAL_YN)
|
||||
! All events will score to the total reaction rate. We can just
|
||||
! use the weight of the particle entering the collision as the
|
||||
! score
|
||||
|
||||
score_index = score_index - 1
|
||||
|
||||
! get the score
|
||||
if (survival_biasing) then
|
||||
! We need to account for the fact that some weight was already
|
||||
! absorbed
|
||||
score = last_wgt + p % absorb_wgt
|
||||
else
|
||||
score = last_wgt
|
||||
end if
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % last_uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_SCATTER)
|
||||
! Skip any event where the particle didn't scatter
|
||||
if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP
|
||||
|
|
@ -164,7 +244,7 @@ contains
|
|||
|
||||
score = last_wgt
|
||||
|
||||
case (SCORE_NU_SCATTER)
|
||||
case (SCORE_NU_SCATTER)
|
||||
! Skip any event where the particle didn't scatter
|
||||
if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP
|
||||
|
||||
|
|
@ -173,7 +253,7 @@ contains
|
|||
! reaction with neutrons in the exit channel
|
||||
|
||||
score = wgt
|
||||
|
||||
|
||||
case (SCORE_SCATTER_N)
|
||||
! Skip any event where the particle didn't scatter
|
||||
if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP
|
||||
|
|
@ -181,33 +261,129 @@ contains
|
|||
! Find the scattering order for a singly requested moment, and
|
||||
! store its moment contribution.
|
||||
|
||||
if (t % scatt_order(j) == 1) then
|
||||
if (t % moment_order(j) == 1) then
|
||||
score = last_wgt * mu ! avoid function call overhead
|
||||
else
|
||||
score = last_wgt * calc_pn(t % scatt_order(j), mu)
|
||||
score = last_wgt * calc_pn(t % moment_order(j), mu)
|
||||
endif
|
||||
|
||||
case (SCORE_SCATTER_PN)
|
||||
! Skip any event where the particle didn't scatter
|
||||
if (p % event /= EVENT_SCATTER) then
|
||||
j = j + t % scatt_order(j)
|
||||
j = j + t % moment_order(j)
|
||||
cycle SCORE_LOOP
|
||||
end if
|
||||
score_index = score_index - 1
|
||||
! Find the scattering order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % scatt_order(j)
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + 1
|
||||
! get the score and tally it
|
||||
score = last_wgt * calc_pn(n, mu)
|
||||
|
||||
|
||||
!$omp critical
|
||||
t % results(score_index, filter_index) % value = &
|
||||
t % results(score_index, filter_index) % value + score
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + t % scatt_order(j)
|
||||
j = j + t % moment_order(j)
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_SCATTER_YN)
|
||||
! Skip any event where the particle didn't scatter
|
||||
if (p % event /= EVENT_SCATTER) then
|
||||
j = j + t % moment_order(j)
|
||||
cycle SCORE_LOOP
|
||||
end if
|
||||
score_index = score_index - 1
|
||||
|
||||
! Calculate the number of moments from t % moment_order
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
! get the score of the scattering moment
|
||||
score = last_wgt * calc_pn(n, mu)
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % last_uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_NU_SCATTER_N)
|
||||
! Skip any event where the particle didn't scatter
|
||||
if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP
|
||||
|
||||
! Find the scattering order for a singly requested moment, and
|
||||
! store its moment contribution.
|
||||
|
||||
if (t % moment_order(j) == 1) then
|
||||
score = wgt * mu ! avoid function call overhead
|
||||
else
|
||||
score = wgt * calc_pn(t % moment_order(j), mu)
|
||||
endif
|
||||
|
||||
case (SCORE_NU_SCATTER_PN)
|
||||
! Skip any event where the particle didn't scatter
|
||||
if (p % event /= EVENT_SCATTER) then
|
||||
j = j + t % moment_order(j)
|
||||
cycle SCORE_LOOP
|
||||
end if
|
||||
score_index = score_index - 1
|
||||
! Find the scattering order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + 1
|
||||
! get the score and tally it
|
||||
score = wgt * calc_pn(n, mu)
|
||||
|
||||
!$omp critical
|
||||
t % results(score_index, filter_index) % value = &
|
||||
t % results(score_index, filter_index) % value + score
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + t % moment_order(j)
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_NU_SCATTER_YN)
|
||||
! Skip any event where the particle didn't scatter
|
||||
if (p % event /= EVENT_SCATTER) then
|
||||
j = j + t % moment_order(j)
|
||||
cycle SCORE_LOOP
|
||||
end if
|
||||
score_index = score_index - 1
|
||||
|
||||
! Calculate the number of moments from t % moment_order
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
! get the score of the scattering moment
|
||||
score = wgt * calc_pn(n, mu)
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % last_uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_TRANSPORT)
|
||||
|
|
@ -220,7 +396,7 @@ contains
|
|||
|
||||
! Score total rate - p1 scatter rate Note estimator needs to be
|
||||
! adjusted since tallying is only occuring when a scatter has
|
||||
! happend. Effectively this means multiplying the estimator by
|
||||
! happened. Effectively this means multiplying the estimator by
|
||||
! total/scatter macro
|
||||
score = (macro_total - mu*macro_scatt)*(ONE/macro_scatt)
|
||||
|
||||
|
|
@ -257,18 +433,23 @@ contains
|
|||
! calculate fraction of absorptions that would have resulted in
|
||||
! fission
|
||||
|
||||
score = p % absorb_wgt * micro_xs(p % event_nuclide) % fission / &
|
||||
micro_xs(p % event_nuclide) % absorption
|
||||
if (micro_xs(p % event_nuclide) % absorption > ZERO) then
|
||||
score = p % absorb_wgt * micro_xs(p % event_nuclide) % fission / &
|
||||
micro_xs(p % event_nuclide) % absorption
|
||||
else
|
||||
score = ZERO
|
||||
end if
|
||||
|
||||
else
|
||||
! Skip any non-fission events
|
||||
if (.not. p % fission) cycle SCORE_LOOP
|
||||
! Skip any non-absorption events
|
||||
if (p % event == EVENT_SCATTER) cycle SCORE_LOOP
|
||||
|
||||
! All fission events will contribute, so again we can use
|
||||
! particle's weight entering the collision as the estimate for the
|
||||
! fission reaction rate
|
||||
|
||||
score = last_wgt
|
||||
score = last_wgt * micro_xs(p % event_nuclide) % fission / &
|
||||
micro_xs(p % event_nuclide) % absorption
|
||||
end if
|
||||
|
||||
case (SCORE_NU_FISSION)
|
||||
|
|
@ -277,8 +458,25 @@ contains
|
|||
! calculate fraction of absorptions that would have resulted in
|
||||
! nu-fission
|
||||
|
||||
score = p % absorb_wgt * micro_xs(p % event_nuclide) % &
|
||||
nu_fission / micro_xs(p % event_nuclide) % absorption
|
||||
if (t % find_filter(FILTER_ENERGYOUT) > 0) then
|
||||
! Normally, we only need to make contributions to one scoring
|
||||
! bin. However, in the case of fission, since multiple fission
|
||||
! neutrons were emitted with different energies, multiple
|
||||
! outgoing energy bins may have been scored to. The following
|
||||
! logic treats this special case and results to multiple bins
|
||||
|
||||
call score_fission_eout(p, t, score_index)
|
||||
cycle SCORE_LOOP
|
||||
|
||||
else
|
||||
|
||||
if (micro_xs(p % event_nuclide) % absorption > ZERO) then
|
||||
score = p % absorb_wgt * micro_xs(p % event_nuclide) % &
|
||||
nu_fission / micro_xs(p % event_nuclide) % absorption
|
||||
else
|
||||
score = ZERO
|
||||
end if
|
||||
end if
|
||||
|
||||
else
|
||||
! Skip any non-fission events
|
||||
|
|
@ -305,28 +503,31 @@ contains
|
|||
|
||||
end if
|
||||
end if
|
||||
|
||||
|
||||
case (SCORE_KAPPA_FISSION)
|
||||
if (survival_biasing) then
|
||||
! No fission events occur if survival biasing is on -- need to
|
||||
! calculate fraction of absorptions that would have resulted in
|
||||
! fission and multiply by Q
|
||||
! fission scale by kappa-fission
|
||||
|
||||
if (micro_xs(p % event_nuclide) % absorption > ZERO) then
|
||||
score = p % absorb_wgt * &
|
||||
micro_xs(p % event_nuclide) % kappa_fission / &
|
||||
micro_xs(p % event_nuclide) % absorption
|
||||
else
|
||||
score = ZERO
|
||||
end if
|
||||
|
||||
score = p % absorb_wgt * &
|
||||
micro_xs(p % event_nuclide) % kappa_fission / &
|
||||
micro_xs(p % event_nuclide) % absorption
|
||||
|
||||
else
|
||||
! Skip any non-fission events
|
||||
if (.not. p % fission) cycle SCORE_LOOP
|
||||
! Skip any non-absorption events
|
||||
if (p % event == EVENT_SCATTER) cycle SCORE_LOOP
|
||||
|
||||
! All fission events will contribute, so again we can use
|
||||
! particle's weight entering the collision as the estimate for
|
||||
! the fission energy production rate
|
||||
|
||||
n = nuclides(p % event_nuclide) % index_fission(1)
|
||||
score = last_wgt * &
|
||||
nuclides(p % event_nuclide) % reactions(n) % Q_value
|
||||
micro_xs(p % event_nuclide) % kappa_fission / &
|
||||
micro_xs(p % event_nuclide) % absorption
|
||||
end if
|
||||
case (SCORE_EVENTS)
|
||||
! Simply count number of scoring events
|
||||
|
|
@ -383,7 +584,7 @@ contains
|
|||
integer :: k ! loop index for bank sites
|
||||
integer :: bin_energyout ! original outgoing energy bin
|
||||
integer :: i_filter ! index for matching filter bin combination
|
||||
real(8) :: score ! actualy score
|
||||
real(8) :: score ! actual score
|
||||
real(8) :: E_out ! energy of fission bank site
|
||||
|
||||
! save original outgoing energy bin and score index
|
||||
|
|
@ -446,6 +647,9 @@ contains
|
|||
integer :: k ! loop index for nuclide bins
|
||||
integer :: l ! loop index for nuclides in material
|
||||
integer :: m ! loop index for reactions
|
||||
integer :: n ! loop index for legendre order
|
||||
integer :: num_nm ! Number of N,M orders in harmonic
|
||||
integer :: q ! loop index for scoring bins
|
||||
integer :: filter_index ! single index for single bin
|
||||
integer :: i_nuclide ! index in nuclides array (from bins)
|
||||
integer :: i_nuc ! index in nuclides array (from material)
|
||||
|
|
@ -498,7 +702,9 @@ contains
|
|||
filter_index = sum((matching_bins(1:t%n_filters) - 1) * t % stride) + 1
|
||||
|
||||
if (t % all_nuclides) then
|
||||
call score_all_nuclides(p, i_tally, flux, filter_index)
|
||||
if (p % material /= MATERIAL_VOID) then
|
||||
call score_all_nuclides(p, i_tally, flux, filter_index)
|
||||
end if
|
||||
else
|
||||
|
||||
NUCLIDE_BIN_LOOP: do k = 1, t % n_nuclide_bins
|
||||
|
|
@ -506,30 +712,39 @@ contains
|
|||
i_nuclide = t % nuclide_bins(k)
|
||||
|
||||
if (i_nuclide > 0) then
|
||||
! Get pointer to current material
|
||||
mat => materials(p % material)
|
||||
if (p % material /= MATERIAL_VOID) then
|
||||
! Get pointer to current material
|
||||
mat => materials(p % material)
|
||||
|
||||
! Determine if nuclide is actually in material
|
||||
NUCLIDE_MAT_LOOP: do j = 1, mat % n_nuclides
|
||||
! If index of nuclide matches the j-th nuclide listed in the
|
||||
! material, break out of the loop
|
||||
if (i_nuclide == mat % nuclide(j)) exit
|
||||
! Determine if nuclide is actually in material
|
||||
NUCLIDE_MAT_LOOP: do j = 1, mat % n_nuclides
|
||||
! If index of nuclide matches the j-th nuclide listed in the
|
||||
! material, break out of the loop
|
||||
if (i_nuclide == mat % nuclide(j)) exit
|
||||
|
||||
! If we've reached the last nuclide in the material, it means
|
||||
! the specified nuclide to be tallied is not in this material
|
||||
if (j == mat % n_nuclides) then
|
||||
cycle NUCLIDE_BIN_LOOP
|
||||
end if
|
||||
end do NUCLIDE_MAT_LOOP
|
||||
! If we've reached the last nuclide in the material, it means
|
||||
! the specified nuclide to be tallied is not in this material
|
||||
if (j == mat % n_nuclides) then
|
||||
cycle NUCLIDE_BIN_LOOP
|
||||
end if
|
||||
end do NUCLIDE_MAT_LOOP
|
||||
|
||||
atom_density = mat % atom_density(j)
|
||||
atom_density = mat % atom_density(j)
|
||||
else
|
||||
atom_density = ZERO
|
||||
end if
|
||||
end if
|
||||
|
||||
! Determine score for each bin
|
||||
SCORE_LOOP: do j = 1, t % n_score_bins
|
||||
j = 0
|
||||
SCORE_LOOP: do q = 1, t % n_user_score_bins
|
||||
j = j + 1
|
||||
! determine what type of score bin
|
||||
score_bin = t % score_bins(j)
|
||||
|
||||
! determine scoring bin index
|
||||
score_index = (k - 1)*t % n_score_bins + j
|
||||
|
||||
if (i_nuclide > 0) then
|
||||
! ================================================================
|
||||
! DETERMINE NUCLIDE CROSS SECTION
|
||||
|
|
@ -539,11 +754,58 @@ contains
|
|||
! For flux, we need no cross section
|
||||
score = flux
|
||||
|
||||
case (SCORE_FLUX_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
! For flux, we need no cross section
|
||||
score = flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_TOTAL)
|
||||
! Total cross section is pre-calculated
|
||||
score = micro_xs(i_nuclide) % total * &
|
||||
atom_density * flux
|
||||
|
||||
case (SCORE_TOTAL_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_SCATTER)
|
||||
! Scattering cross section is pre-calculated
|
||||
score = (micro_xs(i_nuclide) % total - &
|
||||
|
|
@ -623,10 +885,60 @@ contains
|
|||
! For flux, we need no cross section
|
||||
score = flux
|
||||
|
||||
case (SCORE_FLUX_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
! For flux, we need no cross section
|
||||
score = flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_TOTAL)
|
||||
! Total cross section is pre-calculated
|
||||
score = material_xs % total * flux
|
||||
|
||||
case (SCORE_TOTAL_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
! Total cross section is pre-calculated
|
||||
score = material_xs % total * flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_SCATTER)
|
||||
! Scattering cross section is pre-calculated
|
||||
score = (material_xs % total - material_xs % absorption) * flux
|
||||
|
|
@ -665,7 +977,7 @@ contains
|
|||
do l = 1, mat % n_nuclides
|
||||
! Get atom density
|
||||
atom_density = mat % atom_density(l)
|
||||
|
||||
|
||||
! Get index in nuclides array
|
||||
i_nuc = mat % nuclide(l)
|
||||
|
||||
|
|
@ -703,9 +1015,6 @@ contains
|
|||
end select
|
||||
end if
|
||||
|
||||
! Determine scoring bin index
|
||||
score_index = (k - 1)*t % n_score_bins + j
|
||||
|
||||
! Add score to tally
|
||||
!$omp critical
|
||||
t % results(score_index, filter_index) % value = &
|
||||
|
|
@ -746,6 +1055,9 @@ contains
|
|||
integer :: i ! loop index for nuclides in material
|
||||
integer :: j ! loop index for scoring bin types
|
||||
integer :: m ! loop index for reactions in nuclide
|
||||
integer :: n ! loop index for legendre order
|
||||
integer :: num_nm ! Number of N,M orders in harmonic
|
||||
integer :: q ! loop index for scoring bins
|
||||
integer :: i_nuclide ! index in nuclides array
|
||||
integer :: score_bin ! type of score, e.g. SCORE_FLUX
|
||||
integer :: score_index ! scoring bin index
|
||||
|
|
@ -776,18 +1088,73 @@ contains
|
|||
atom_density = mat % atom_density(i)
|
||||
|
||||
! Loop over score types for each bin
|
||||
SCORE_LOOP: do j = 1, t % n_score_bins
|
||||
j = 0
|
||||
SCORE_LOOP: do q = 1, t % n_user_score_bins
|
||||
j = j + 1
|
||||
! determine what type of score bin
|
||||
score_bin = t % score_bins(j)
|
||||
|
||||
! Determine macroscopic nuclide cross section
|
||||
! Determine scoring bin index based on what the index of the nuclide
|
||||
! is in the nuclides array
|
||||
score_index = (i_nuclide - 1)*t % n_score_bins + j
|
||||
|
||||
! Determine macroscopic nuclide cross section
|
||||
select case(score_bin)
|
||||
case (SCORE_FLUX)
|
||||
score = flux
|
||||
|
||||
case (SCORE_FLUX_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
! For flux, we need no cross section
|
||||
score = flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_TOTAL)
|
||||
score = micro_xs(i_nuclide) % total * atom_density * flux
|
||||
|
||||
case (SCORE_TOTAL_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
score = micro_xs(i_nuclide) % total * atom_density * flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_SCATTER)
|
||||
score = (micro_xs(i_nuclide) % total - &
|
||||
micro_xs(i_nuclide) % absorption) * atom_density * flux
|
||||
|
|
@ -812,7 +1179,7 @@ contains
|
|||
! sections that are used often (e.g. n2n, ngamma, etc. for depletion),
|
||||
! it might make sense to optimize this section or pre-calculate cross
|
||||
! sections
|
||||
|
||||
|
||||
if (score_bin > 1) then
|
||||
! Set default score
|
||||
score = ZERO
|
||||
|
|
@ -847,10 +1214,6 @@ contains
|
|||
end if
|
||||
end select
|
||||
|
||||
! Determine scoring bin index based on what the index of the nuclide
|
||||
! is in the nuclides array
|
||||
score_index = (i_nuclide - 1)*t % n_score_bins + j
|
||||
|
||||
! Add score to tally
|
||||
!$omp critical
|
||||
t % results(score_index, filter_index) % value = &
|
||||
|
|
@ -865,18 +1228,74 @@ contains
|
|||
! SCORE TOTAL MATERIAL REACTION RATES
|
||||
|
||||
! Loop over score types for each bin
|
||||
MATERIAL_SCORE_LOOP: do j = 1, t % n_score_bins
|
||||
j = 0
|
||||
MATERIAL_SCORE_LOOP: do q = 1, t % n_user_score_bins
|
||||
j = j + 1
|
||||
! determine what type of score bin
|
||||
score_bin = t % score_bins(j)
|
||||
|
||||
! Determine macroscopic material cross section
|
||||
! Determine scoring bin index based on what the index of the nuclide
|
||||
! is in the nuclides array
|
||||
score_index = n_nuclides_total*t % n_score_bins + j
|
||||
|
||||
! Determine macroscopic material cross section
|
||||
select case(score_bin)
|
||||
case (SCORE_FLUX)
|
||||
score = flux
|
||||
|
||||
case (SCORE_FLUX_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
! For flux, we need no cross section
|
||||
score = flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle MATERIAL_SCORE_LOOP
|
||||
|
||||
case (SCORE_TOTAL)
|
||||
score = material_xs % total * flux
|
||||
|
||||
case (SCORE_TOTAL_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
! Total cross section is pre-calculated
|
||||
score = material_xs % total * flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle MATERIAL_SCORE_LOOP
|
||||
|
||||
case (SCORE_SCATTER)
|
||||
score = (material_xs % total - material_xs % absorption) * flux
|
||||
|
||||
|
|
@ -899,7 +1318,7 @@ contains
|
|||
! Any other cross section has to be calculated on-the-fly. This is
|
||||
! somewhat costly since it requires a loop over each nuclide in a
|
||||
! material and each reaction in the nuclide
|
||||
|
||||
|
||||
if (score_bin > 1) then
|
||||
! Set default score
|
||||
score = ZERO
|
||||
|
|
@ -947,10 +1366,6 @@ contains
|
|||
end if
|
||||
end select
|
||||
|
||||
! Determine scoring bin index based on what the index of the nuclide
|
||||
! is in the nuclides array
|
||||
score_index = n_nuclides_total*t % n_score_bins + j
|
||||
|
||||
! Add score to tally
|
||||
!$omp critical
|
||||
t % results(score_index, filter_index) % value = &
|
||||
|
|
@ -977,6 +1392,9 @@ contains
|
|||
integer :: j ! loop index for direction
|
||||
integer :: k ! loop index for mesh cell crossings
|
||||
integer :: b ! loop index for nuclide bins
|
||||
integer :: n ! loop index for legendre order
|
||||
integer :: num_nm ! Number of N,M orders in harmonic
|
||||
integer :: q ! loop index for scoring bins
|
||||
integer :: ijk0(3) ! indices of starting coordinates
|
||||
integer :: ijk1(3) ! indices of ending coordinates
|
||||
integer :: ijk_cross(3) ! indices of mesh cell crossed
|
||||
|
|
@ -1167,48 +1585,110 @@ contains
|
|||
filter_index = sum((matching_bins(1:t%n_filters) - 1) * t % stride) + 1
|
||||
|
||||
if (t % all_nuclides) then
|
||||
! Score reaction rates for each nuclide in material
|
||||
call score_all_nuclides(p, i_tally, flux, filter_index)
|
||||
|
||||
if (p % material /= MATERIAL_VOID) then
|
||||
! Score reaction rates for each nuclide in material
|
||||
call score_all_nuclides(p, i_tally, flux, filter_index)
|
||||
end if
|
||||
else
|
||||
NUCLIDE_BIN_LOOP: do b = 1, t % n_nuclide_bins
|
||||
! Get index of nuclide in nuclides array
|
||||
i_nuclide = t % nuclide_bins(b)
|
||||
|
||||
if (i_nuclide > 0) then
|
||||
! Get pointer to current material
|
||||
mat => materials(p % material)
|
||||
if (p % material /= MATERIAL_VOID) then
|
||||
! Get pointer to current material
|
||||
mat => materials(p % material)
|
||||
|
||||
! Determine if nuclide is actually in material
|
||||
NUCLIDE_MAT_LOOP: do j = 1, mat % n_nuclides
|
||||
! If index of nuclide matches the j-th nuclide listed in
|
||||
! the material, break out of the loop
|
||||
if (i_nuclide == mat % nuclide(j)) exit
|
||||
! Determine if nuclide is actually in material
|
||||
NUCLIDE_MAT_LOOP: do j = 1, mat % n_nuclides
|
||||
! If index of nuclide matches the j-th nuclide listed in
|
||||
! the material, break out of the loop
|
||||
if (i_nuclide == mat % nuclide(j)) exit
|
||||
|
||||
! If we've reached the last nuclide in the material, it
|
||||
! means the specified nuclide to be tallied is not in this
|
||||
! material
|
||||
if (j == mat % n_nuclides) then
|
||||
cycle NUCLIDE_BIN_LOOP
|
||||
end if
|
||||
end do NUCLIDE_MAT_LOOP
|
||||
! If we've reached the last nuclide in the material, it
|
||||
! means the specified nuclide to be tallied is not in this
|
||||
! material
|
||||
if (j == mat % n_nuclides) then
|
||||
cycle NUCLIDE_BIN_LOOP
|
||||
end if
|
||||
end do NUCLIDE_MAT_LOOP
|
||||
|
||||
atom_density = mat % atom_density(j)
|
||||
atom_density = mat % atom_density(j)
|
||||
else
|
||||
atom_density = ZERO
|
||||
end if
|
||||
end if
|
||||
|
||||
! Determine score for each bin
|
||||
SCORE_LOOP: do j = 1, t % n_score_bins
|
||||
j = 0
|
||||
SCORE_LOOP: do q = 1, t % n_user_score_bins
|
||||
j = j + 1
|
||||
! determine what type of score bin
|
||||
score_bin = t % score_bins(j)
|
||||
|
||||
! Determine scoring bin index
|
||||
score_index = (b - 1)*t % n_score_bins + j
|
||||
|
||||
if (i_nuclide > 0) then
|
||||
! Determine macroscopic nuclide cross section
|
||||
! Determine macroscopic nuclide cross section
|
||||
select case(score_bin)
|
||||
case (SCORE_FLUX)
|
||||
score = flux
|
||||
|
||||
case (SCORE_FLUX_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
score = flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_TOTAL)
|
||||
score = micro_xs(i_nuclide) % total * &
|
||||
atom_density * flux
|
||||
|
||||
case (SCORE_TOTAL_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
! Total cross section is pre-calculated
|
||||
score = micro_xs(i_nuclide) % total * &
|
||||
atom_density * flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_SCATTER)
|
||||
score = (micro_xs(i_nuclide) % total - &
|
||||
micro_xs(i_nuclide) % absorption) * &
|
||||
|
|
@ -1233,12 +1713,63 @@ contains
|
|||
end select
|
||||
|
||||
else
|
||||
! Determine macroscopic material cross section
|
||||
! Determine macroscopic material cross section
|
||||
select case(score_bin)
|
||||
case (SCORE_FLUX)
|
||||
score = flux
|
||||
|
||||
case (SCORE_FLUX_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
score = flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_TOTAL)
|
||||
score = material_xs % total * flux
|
||||
|
||||
case (SCORE_TOTAL_YN)
|
||||
score_index = score_index - 1
|
||||
|
||||
! Total cross section is pre-calculated
|
||||
score = material_xs % total * flux
|
||||
|
||||
num_nm = 1
|
||||
! Find the order for a collection of requested moments
|
||||
! and store the moment contribution of each
|
||||
do n = 0, t % moment_order(j)
|
||||
! determine scoring bin index
|
||||
score_index = score_index + num_nm
|
||||
! Update number of total n,m bins for this n (m = [-n: n])
|
||||
num_nm = 2 * n + 1
|
||||
|
||||
! multiply score by the angular flux moments and store
|
||||
!$omp critical
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value = &
|
||||
t % results(score_index: score_index + num_nm - 1, filter_index) % value + &
|
||||
score * calc_rn(n, p % coord0 % uvw)
|
||||
!$omp end critical
|
||||
end do
|
||||
j = j + (t % moment_order(j) + 1)**2 - 1
|
||||
cycle SCORE_LOOP
|
||||
|
||||
case (SCORE_SCATTER)
|
||||
score = (material_xs % total - material_xs % absorption) * flux
|
||||
case (SCORE_ABSORPTION)
|
||||
|
|
@ -1258,9 +1789,6 @@ contains
|
|||
end select
|
||||
end if
|
||||
|
||||
! Determine scoring bin index
|
||||
score_index = (b - 1)*t % n_score_bins + j
|
||||
|
||||
! Add score to tally
|
||||
!$omp critical
|
||||
t % results(score_index, filter_index) % value = &
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ module tally_header
|
|||
!===============================================================================
|
||||
! TALLYFILTER describes a filter that limits what events score to a tally. For
|
||||
! example, a cell filter indicates that only particles in a specified cell
|
||||
! should score to the tally.
|
||||
! should score to the tally.
|
||||
!===============================================================================
|
||||
|
||||
type TallyFilter
|
||||
|
|
@ -55,7 +55,7 @@ module tally_header
|
|||
integer :: n_bins = 0
|
||||
integer, allocatable :: int_bins(:)
|
||||
real(8), allocatable :: real_bins(:) ! Only used for energy filters
|
||||
|
||||
|
||||
! Type-Bound procedures
|
||||
contains
|
||||
procedure :: clear => tallyfilter_clear ! Deallocates TallyFilter
|
||||
|
|
@ -105,7 +105,7 @@ module tally_header
|
|||
! scattering response.
|
||||
integer :: n_score_bins = 0
|
||||
integer, allocatable :: score_bins(:)
|
||||
integer, allocatable :: scatt_order(:)
|
||||
integer, allocatable :: moment_order(:)
|
||||
integer :: n_user_score_bins = 0
|
||||
|
||||
! Results for each bin -- the first dimension of the array is for scores
|
||||
|
|
@ -122,14 +122,14 @@ module tally_header
|
|||
|
||||
! Number of realizations of tally random variables
|
||||
integer :: n_realizations = 0
|
||||
|
||||
|
||||
! Type-Bound procedures
|
||||
contains
|
||||
procedure :: clear => tallyobject_clear ! Deallocates TallyObject
|
||||
end type TallyObject
|
||||
|
||||
|
||||
contains
|
||||
|
||||
|
||||
!===============================================================================
|
||||
! TALLYFILTER_CLEAR deallocates a TallyFilter element and sets it to its as
|
||||
! initialized state.
|
||||
|
|
@ -137,16 +137,16 @@ module tally_header
|
|||
|
||||
subroutine tallyfilter_clear(this)
|
||||
class(TallyFilter), intent(inout) :: this ! The TallyFilter to be cleared
|
||||
|
||||
|
||||
this % type = NONE
|
||||
this % n_bins = 0
|
||||
if (allocated(this % int_bins)) &
|
||||
deallocate(this % int_bins)
|
||||
if (allocated(this % real_bins)) &
|
||||
deallocate(this % real_bins)
|
||||
|
||||
|
||||
end subroutine tallyfilter_clear
|
||||
|
||||
|
||||
!===============================================================================
|
||||
! TALLYOBJECT_CLEAR deallocates a TallyObject element and sets it to its as
|
||||
! initialized state.
|
||||
|
|
@ -154,44 +154,44 @@ module tally_header
|
|||
|
||||
subroutine tallyobject_clear(this)
|
||||
class(TallyObject), intent(inout) :: this ! The TallyObject to be cleared
|
||||
|
||||
|
||||
integer :: i ! Loop Index
|
||||
|
||||
|
||||
! This routine will go through each item in TallyObject and set the value
|
||||
! to its default, as-initialized values, including deallocations.
|
||||
this % label = ""
|
||||
|
||||
|
||||
if (allocated(this % filters)) then
|
||||
do i = 1, size(this % filters)
|
||||
call this % filters(i) % clear()
|
||||
end do
|
||||
deallocate(this % filters)
|
||||
end if
|
||||
|
||||
|
||||
if (allocated(this % stride)) &
|
||||
deallocate(this % stride)
|
||||
|
||||
|
||||
this % find_filter = 0
|
||||
|
||||
|
||||
this % n_nuclide_bins = 0
|
||||
if (allocated(this % nuclide_bins)) &
|
||||
deallocate(this % nuclide_bins)
|
||||
this % all_nuclides = .false.
|
||||
|
||||
|
||||
this % n_score_bins = 0
|
||||
if (allocated(this % score_bins)) &
|
||||
deallocate(this % score_bins)
|
||||
if (allocated(this % scatt_order)) &
|
||||
deallocate(this % scatt_order)
|
||||
if (allocated(this % moment_order)) &
|
||||
deallocate(this % moment_order)
|
||||
this % n_user_score_bins = 0
|
||||
|
||||
|
||||
if (allocated(this % results)) &
|
||||
deallocate(this % results)
|
||||
|
||||
|
||||
this % reset = .false.
|
||||
|
||||
|
||||
this % n_realizations = 0
|
||||
|
||||
|
||||
end subroutine tallyobject_clear
|
||||
|
||||
end module tally_header
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ contains
|
|||
total_weight = total_weight + p % wgt
|
||||
!$omp end critical
|
||||
|
||||
! Force calculation of cross-sections by setting last energy to zero
|
||||
! Force calculation of cross-sections by setting last energy to zero
|
||||
micro_xs % last_E = ZERO
|
||||
|
||||
! Prepare to write out particle track.
|
||||
|
|
|
|||
|
|
@ -1,291 +0,0 @@
|
|||
# IUPAC Isotopic Compositions of the Element 2009
|
||||
# Pure. Appl. Chem., Vol 83, No. 2, pp. 397-410 (2011)
|
||||
# doi:10.1351/PAC-REP-10-06-02
|
||||
1 H 1 0.999885
|
||||
1 H 2 0.000115
|
||||
2 He 3 1.34e-06
|
||||
2 He 4 0.99999866
|
||||
3 Li 6 0.0759
|
||||
3 Li 7 0.9241
|
||||
4 Be 9 1.0
|
||||
5 B 10 0.199
|
||||
5 B 11 0.801
|
||||
6 C 12 0.9893
|
||||
6 C 13 0.0107
|
||||
7 N 14 0.99636
|
||||
7 N 15 0.00364
|
||||
8 O 16 0.99757
|
||||
8 O 17 0.00038
|
||||
8 O 18 0.00205
|
||||
9 F 19 1.0
|
||||
10 Ne 20 0.9048
|
||||
10 Ne 21 0.0027
|
||||
10 Ne 22 0.0925
|
||||
11 Na 23 1.0
|
||||
12 Mg 24 0.7899
|
||||
12 Mg 25 0.1
|
||||
12 Mg 26 0.1101
|
||||
13 Al 27 1.0
|
||||
14 Si 28 0.92223
|
||||
14 Si 29 0.04685
|
||||
14 Si 30 0.03092
|
||||
15 P 31 1.0
|
||||
16 S 32 0.9499
|
||||
16 S 33 0.0075
|
||||
16 S 34 0.0425
|
||||
16 S 36 0.0001
|
||||
17 Cl 35 0.7576
|
||||
17 Cl 37 0.2424
|
||||
18 Ar 36 0.003336
|
||||
18 Ar 38 0.000629
|
||||
18 Ar 40 0.996035
|
||||
19 K 39 0.932581
|
||||
19 K 40 0.000117
|
||||
19 K 41 0.067302
|
||||
20 Ca 40 0.96941
|
||||
20 Ca 42 0.00647
|
||||
20 Ca 43 0.00135
|
||||
20 Ca 44 0.02086
|
||||
20 Ca 46 4e-05
|
||||
20 Ca 48 0.00187
|
||||
21 Sc 45 1.0
|
||||
22 Ti 46 0.0825
|
||||
22 Ti 47 0.0744
|
||||
22 Ti 48 0.7372
|
||||
22 Ti 49 0.0541
|
||||
22 Ti 50 0.0518
|
||||
23 V 50 0.0025
|
||||
23 V 51 0.9975
|
||||
24 Cr 50 0.04345
|
||||
24 Cr 52 0.83789
|
||||
24 Cr 53 0.09501
|
||||
24 Cr 54 0.02365
|
||||
25 Mn 55 1.0
|
||||
26 Fe 54 0.05845
|
||||
26 Fe 56 0.91754
|
||||
26 Fe 57 0.02119
|
||||
26 Fe 58 0.00282
|
||||
27 Co 59 1.0
|
||||
28 Ni 58 0.68077
|
||||
28 Ni 60 0.26223
|
||||
28 Ni 61 0.011399
|
||||
28 Ni 62 0.036346
|
||||
28 Ni 64 0.009255
|
||||
29 Cu 63 0.6915
|
||||
29 Cu 65 0.3085
|
||||
30 Zn 64 0.4917
|
||||
30 Zn 66 0.2773
|
||||
30 Zn 67 0.0404
|
||||
30 Zn 68 0.1845
|
||||
30 Zn 70 0.0061
|
||||
31 Ga 69 0.60108
|
||||
31 Ga 71 0.39892
|
||||
32 Ge 70 0.2057
|
||||
32 Ge 72 0.2745
|
||||
32 Ge 73 0.0775
|
||||
32 Ge 74 0.3650
|
||||
32 Ge 76 0.0773
|
||||
33 As 75 1.0
|
||||
34 Se 74 0.0089
|
||||
34 Se 76 0.0937
|
||||
34 Se 77 0.0763
|
||||
34 Se 78 0.2377
|
||||
34 Se 80 0.4961
|
||||
34 Se 82 0.0873
|
||||
35 Br 79 0.5069
|
||||
35 Br 81 0.4931
|
||||
36 Kr 78 0.00355
|
||||
36 Kr 80 0.02286
|
||||
36 Kr 82 0.11593
|
||||
36 Kr 83 0.11500
|
||||
36 Kr 84 0.56987
|
||||
36 Kr 86 0.17279
|
||||
37 Rb 85 0.7217
|
||||
37 Rb 87 0.2783
|
||||
38 Sr 84 0.0056
|
||||
38 Sr 86 0.0986
|
||||
38 Sr 87 0.07
|
||||
38 Sr 88 0.8258
|
||||
39 Y 89 1.0
|
||||
40 Zr 90 0.5145
|
||||
40 Zr 91 0.1122
|
||||
40 Zr 92 0.1715
|
||||
40 Zr 94 0.1738
|
||||
40 Zr 96 0.028
|
||||
41 Nb 93 1.0
|
||||
42 Mo 92 0.1453
|
||||
42 Mo 94 0.0915
|
||||
42 Mo 95 0.1584
|
||||
42 Mo 96 0.1667
|
||||
42 Mo 97 0.0960
|
||||
42 Mo 98 0.2439
|
||||
42 Mo 100 0.0982
|
||||
44 Ru 96 0.0554
|
||||
44 Ru 98 0.0187
|
||||
44 Ru 99 0.1276
|
||||
44 Ru 100 0.126
|
||||
44 Ru 101 0.1706
|
||||
44 Ru 102 0.3155
|
||||
44 Ru 104 0.1862
|
||||
45 Rh 103 1.0
|
||||
46 Pd 102 0.0102
|
||||
46 Pd 104 0.1114
|
||||
46 Pd 105 0.2233
|
||||
46 Pd 106 0.2733
|
||||
46 Pd 108 0.2646
|
||||
46 Pd 110 0.1172
|
||||
47 Ag 107 0.51839
|
||||
47 Ag 109 0.48161
|
||||
48 Cd 106 0.0125
|
||||
48 Cd 108 0.0089
|
||||
48 Cd 110 0.1249
|
||||
48 Cd 111 0.128
|
||||
48 Cd 112 0.2413
|
||||
48 Cd 113 0.1222
|
||||
48 Cd 114 0.2873
|
||||
48 Cd 116 0.0749
|
||||
49 In 113 0.0429
|
||||
49 In 115 0.9571
|
||||
50 Sn 112 0.0097
|
||||
50 Sn 114 0.0066
|
||||
50 Sn 115 0.0034
|
||||
50 Sn 116 0.1454
|
||||
50 Sn 117 0.0768
|
||||
50 Sn 118 0.2422
|
||||
50 Sn 119 0.0859
|
||||
50 Sn 120 0.3258
|
||||
50 Sn 122 0.0463
|
||||
50 Sn 124 0.0579
|
||||
51 Sb 121 0.5721
|
||||
51 Sb 123 0.4279
|
||||
52 Te 120 0.0009
|
||||
52 Te 122 0.0255
|
||||
52 Te 123 0.0089
|
||||
52 Te 124 0.0474
|
||||
52 Te 125 0.0707
|
||||
52 Te 126 0.1884
|
||||
52 Te 128 0.3174
|
||||
52 Te 130 0.3408
|
||||
53 I 127 1.0
|
||||
54 Xe 124 0.000952
|
||||
54 Xe 126 0.000890
|
||||
54 Xe 128 0.019102
|
||||
54 Xe 129 0.264006
|
||||
54 Xe 130 0.040710
|
||||
54 Xe 131 0.212324
|
||||
54 Xe 132 0.269086
|
||||
54 Xe 134 0.104357
|
||||
54 Xe 136 0.088573
|
||||
55 Cs 133 1.0
|
||||
56 Ba 130 0.00106
|
||||
56 Ba 132 0.00101
|
||||
56 Ba 134 0.02417
|
||||
56 Ba 135 0.06592
|
||||
56 Ba 136 0.07854
|
||||
56 Ba 137 0.11232
|
||||
56 Ba 138 0.71698
|
||||
57 La 138 0.0008881
|
||||
57 La 139 0.9991119
|
||||
58 Ce 136 0.00185
|
||||
58 Ce 138 0.00251
|
||||
58 Ce 140 0.8845
|
||||
58 Ce 142 0.11114
|
||||
59 Pr 141 1.0
|
||||
60 Nd 142 0.27152
|
||||
60 Nd 143 0.12174
|
||||
60 Nd 144 0.23798
|
||||
60 Nd 145 0.08293
|
||||
60 Nd 146 0.17189
|
||||
60 Nd 148 0.05756
|
||||
60 Nd 150 0.05638
|
||||
62 Sm 144 0.0307
|
||||
62 Sm 147 0.1499
|
||||
62 Sm 148 0.1124
|
||||
62 Sm 149 0.1382
|
||||
62 Sm 150 0.0738
|
||||
62 Sm 152 0.2675
|
||||
62 Sm 154 0.2275
|
||||
63 Eu 151 0.4781
|
||||
63 Eu 153 0.5219
|
||||
64 Gd 152 0.002
|
||||
64 Gd 154 0.0218
|
||||
64 Gd 155 0.148
|
||||
64 Gd 156 0.2047
|
||||
64 Gd 157 0.1565
|
||||
64 Gd 158 0.2484
|
||||
64 Gd 160 0.2186
|
||||
65 Tb 159 1.0
|
||||
66 Dy 156 0.00056
|
||||
66 Dy 158 0.00095
|
||||
66 Dy 160 0.02329
|
||||
66 Dy 161 0.18889
|
||||
66 Dy 162 0.25475
|
||||
66 Dy 163 0.24896
|
||||
66 Dy 164 0.28260
|
||||
67 Ho 165 1.0
|
||||
68 Er 162 0.00139
|
||||
68 Er 164 0.01601
|
||||
68 Er 166 0.33503
|
||||
68 Er 167 0.22869
|
||||
68 Er 168 0.26978
|
||||
68 Er 170 0.14910
|
||||
69 Tm 169 1.0
|
||||
70 Yb 168 0.00123
|
||||
70 Yb 170 0.02982
|
||||
70 Yb 171 0.1409
|
||||
70 Yb 172 0.2168
|
||||
70 Yb 173 0.16103
|
||||
70 Yb 174 0.32026
|
||||
70 Yb 176 0.12996
|
||||
71 Lu 175 0.97401
|
||||
71 Lu 176 0.02599
|
||||
72 Hf 174 0.0016
|
||||
72 Hf 176 0.0526
|
||||
72 Hf 177 0.186
|
||||
72 Hf 178 0.2728
|
||||
72 Hf 179 0.1362
|
||||
72 Hf 180 0.3508
|
||||
73 Ta 180 0.0001201
|
||||
73 Ta 181 0.9998799
|
||||
74 W 180 0.0012
|
||||
74 W 182 0.265
|
||||
74 W 183 0.1431
|
||||
74 W 184 0.3064
|
||||
74 W 186 0.2843
|
||||
75 Re 185 0.374
|
||||
75 Re 187 0.626
|
||||
76 Os 184 0.0002
|
||||
76 Os 186 0.0159
|
||||
76 Os 187 0.0196
|
||||
76 Os 188 0.1324
|
||||
76 Os 189 0.1615
|
||||
76 Os 190 0.2626
|
||||
76 Os 192 0.4078
|
||||
77 Ir 191 0.373
|
||||
77 Ir 193 0.627
|
||||
78 Pt 190 0.00012
|
||||
78 Pt 192 0.00782
|
||||
78 Pt 194 0.3286
|
||||
78 Pt 195 0.3378
|
||||
78 Pt 196 0.2521
|
||||
78 Pt 198 0.07356
|
||||
79 Au 197 1.0
|
||||
80 Hg 196 0.0015
|
||||
80 Hg 198 0.0997
|
||||
80 Hg 199 0.1687
|
||||
80 Hg 200 0.231
|
||||
80 Hg 201 0.1318
|
||||
80 Hg 202 0.2986
|
||||
80 Hg 204 0.0687
|
||||
81 Tl 203 0.2952
|
||||
81 Tl 205 0.7048
|
||||
82 Pb 204 0.014
|
||||
82 Pb 206 0.241
|
||||
82 Pb 207 0.221
|
||||
82 Pb 208 0.524
|
||||
83 Bi 209 1.0
|
||||
90 Th 232 1.0
|
||||
91 Pa 231 1.0
|
||||
92 U 234 5.4e-05
|
||||
92 U 235 0.007204
|
||||
92 U 238 0.992742
|
||||
|
|
@ -1,286 +0,0 @@
|
|||
# IUPAC Isotopic Compositions of the Element 2009
|
||||
# Pure. Appl. Chem., Vol 83, No. 2, pp. 397-410 (2011)
|
||||
# doi:10.1351/PAC-REP-10-06-02
|
||||
# Modified to use only nuclides which exist in ENDF/B-VII.1
|
||||
1 H 1 0.999885
|
||||
1 H 2 0.000115
|
||||
2 He 3 1.34e-06
|
||||
2 He 4 0.99999866
|
||||
3 Li 6 0.0759
|
||||
3 Li 7 0.9241
|
||||
4 Be 9 1.0
|
||||
5 B 10 0.199
|
||||
5 B 11 0.801
|
||||
6 C Nat 1.0
|
||||
7 N 14 0.99636
|
||||
7 N 15 0.00364
|
||||
8 O 16 0.99757
|
||||
8 O 17 0.00038
|
||||
8 O 18 0.00205
|
||||
9 F 19 1.0
|
||||
10 Ne 20 0.9048
|
||||
10 Ne 21 0.0027
|
||||
10 Ne 22 0.0925
|
||||
11 Na 23 1.0
|
||||
12 Mg 24 0.7899
|
||||
12 Mg 25 0.1
|
||||
12 Mg 26 0.1101
|
||||
13 Al 27 1.0
|
||||
14 Si 28 0.92223
|
||||
14 Si 29 0.04685
|
||||
14 Si 30 0.03092
|
||||
15 P 31 1.0
|
||||
16 S 32 0.9499
|
||||
16 S 33 0.0075
|
||||
16 S 34 0.0425
|
||||
16 S 36 0.0001
|
||||
17 Cl 35 0.7576
|
||||
17 Cl 37 0.2424
|
||||
18 Ar 36 0.003336
|
||||
18 Ar 38 0.000629
|
||||
18 Ar 40 0.996035
|
||||
19 K 39 0.932581
|
||||
19 K 40 0.000117
|
||||
19 K 41 0.067302
|
||||
20 Ca 40 0.96941
|
||||
20 Ca 42 0.00647
|
||||
20 Ca 43 0.00135
|
||||
20 Ca 44 0.02086
|
||||
20 Ca 46 4e-05
|
||||
20 Ca 48 0.00187
|
||||
21 Sc 45 1.0
|
||||
22 Ti 46 0.0825
|
||||
22 Ti 47 0.0744
|
||||
22 Ti 48 0.7372
|
||||
22 Ti 49 0.0541
|
||||
22 Ti 50 0.0518
|
||||
23 V Nat 1.0
|
||||
24 Cr 50 0.04345
|
||||
24 Cr 52 0.83789
|
||||
24 Cr 53 0.09501
|
||||
24 Cr 54 0.02365
|
||||
25 Mn 55 1.0
|
||||
26 Fe 54 0.05845
|
||||
26 Fe 56 0.91754
|
||||
26 Fe 57 0.02119
|
||||
26 Fe 58 0.00282
|
||||
27 Co 59 1.0
|
||||
28 Ni 58 0.68077
|
||||
28 Ni 60 0.26223
|
||||
28 Ni 61 0.011399
|
||||
28 Ni 62 0.036346
|
||||
28 Ni 64 0.009255
|
||||
29 Cu 63 0.6915
|
||||
29 Cu 65 0.3085
|
||||
30 Zn Nat 1.0
|
||||
31 Ga 69 0.60108
|
||||
31 Ga 71 0.39892
|
||||
32 Ge 70 0.2057
|
||||
32 Ge 72 0.2745
|
||||
32 Ge 73 0.0775
|
||||
32 Ge 74 0.3650
|
||||
32 Ge 76 0.0773
|
||||
33 As 75 1.0
|
||||
34 Se 74 0.0089
|
||||
34 Se 76 0.0937
|
||||
34 Se 77 0.0763
|
||||
34 Se 78 0.2377
|
||||
34 Se 80 0.4961
|
||||
34 Se 82 0.0873
|
||||
35 Br 79 0.5069
|
||||
35 Br 81 0.4931
|
||||
36 Kr 78 0.00355
|
||||
36 Kr 80 0.02286
|
||||
36 Kr 82 0.11593
|
||||
36 Kr 83 0.11500
|
||||
36 Kr 84 0.56987
|
||||
36 Kr 86 0.17279
|
||||
37 Rb 85 0.7217
|
||||
37 Rb 87 0.2783
|
||||
38 Sr 84 0.0056
|
||||
38 Sr 86 0.0986
|
||||
38 Sr 87 0.07
|
||||
38 Sr 88 0.8258
|
||||
39 Y 89 1.0
|
||||
40 Zr 90 0.5145
|
||||
40 Zr 91 0.1122
|
||||
40 Zr 92 0.1715
|
||||
40 Zr 94 0.1738
|
||||
40 Zr 96 0.028
|
||||
41 Nb 93 1.0
|
||||
42 Mo 92 0.1453
|
||||
42 Mo 94 0.0915
|
||||
42 Mo 95 0.1584
|
||||
42 Mo 96 0.1667
|
||||
42 Mo 97 0.0960
|
||||
42 Mo 98 0.2439
|
||||
42 Mo 100 0.0982
|
||||
44 Ru 96 0.0554
|
||||
44 Ru 98 0.0187
|
||||
44 Ru 99 0.1276
|
||||
44 Ru 100 0.126
|
||||
44 Ru 101 0.1706
|
||||
44 Ru 102 0.3155
|
||||
44 Ru 104 0.1862
|
||||
45 Rh 103 1.0
|
||||
46 Pd 102 0.0102
|
||||
46 Pd 104 0.1114
|
||||
46 Pd 105 0.2233
|
||||
46 Pd 106 0.2733
|
||||
46 Pd 108 0.2646
|
||||
46 Pd 110 0.1172
|
||||
47 Ag 107 0.51839
|
||||
47 Ag 109 0.48161
|
||||
48 Cd 106 0.0125
|
||||
48 Cd 108 0.0089
|
||||
48 Cd 110 0.1249
|
||||
48 Cd 111 0.128
|
||||
48 Cd 112 0.2413
|
||||
48 Cd 113 0.1222
|
||||
48 Cd 114 0.2873
|
||||
48 Cd 116 0.0749
|
||||
49 In 113 0.0429
|
||||
49 In 115 0.9571
|
||||
50 Sn 112 0.0097
|
||||
50 Sn 114 0.0066
|
||||
50 Sn 115 0.0034
|
||||
50 Sn 116 0.1454
|
||||
50 Sn 117 0.0768
|
||||
50 Sn 118 0.2422
|
||||
50 Sn 119 0.0859
|
||||
50 Sn 120 0.3258
|
||||
50 Sn 122 0.0463
|
||||
50 Sn 124 0.0579
|
||||
51 Sb 121 0.5721
|
||||
51 Sb 123 0.4279
|
||||
52 Te 120 0.0009
|
||||
52 Te 122 0.0255
|
||||
52 Te 123 0.0089
|
||||
52 Te 124 0.0474
|
||||
52 Te 125 0.0707
|
||||
52 Te 126 0.1884
|
||||
52 Te 128 0.3174
|
||||
52 Te 130 0.3408
|
||||
53 I 127 1.0
|
||||
54 Xe 124 0.000952
|
||||
54 Xe 126 0.000890
|
||||
54 Xe 128 0.019102
|
||||
54 Xe 129 0.264006
|
||||
54 Xe 130 0.040710
|
||||
54 Xe 131 0.212324
|
||||
54 Xe 132 0.269086
|
||||
54 Xe 134 0.104357
|
||||
54 Xe 136 0.088573
|
||||
55 Cs 133 1.0
|
||||
56 Ba 130 0.00106
|
||||
56 Ba 132 0.00101
|
||||
56 Ba 134 0.02417
|
||||
56 Ba 135 0.06592
|
||||
56 Ba 136 0.07854
|
||||
56 Ba 137 0.11232
|
||||
56 Ba 138 0.71698
|
||||
57 La 138 0.0008881
|
||||
57 La 139 0.9991119
|
||||
58 Ce 136 0.00185
|
||||
58 Ce 138 0.00251
|
||||
58 Ce 140 0.8845
|
||||
58 Ce 142 0.11114
|
||||
59 Pr 141 1.0
|
||||
60 Nd 142 0.27152
|
||||
60 Nd 143 0.12174
|
||||
60 Nd 144 0.23798
|
||||
60 Nd 145 0.08293
|
||||
60 Nd 146 0.17189
|
||||
60 Nd 148 0.05756
|
||||
60 Nd 150 0.05638
|
||||
62 Sm 144 0.0307
|
||||
62 Sm 147 0.1499
|
||||
62 Sm 148 0.1124
|
||||
62 Sm 149 0.1382
|
||||
62 Sm 150 0.0738
|
||||
62 Sm 152 0.2675
|
||||
62 Sm 154 0.2275
|
||||
63 Eu 151 0.4781
|
||||
63 Eu 153 0.5219
|
||||
64 Gd 152 0.002
|
||||
64 Gd 154 0.0218
|
||||
64 Gd 155 0.148
|
||||
64 Gd 156 0.2047
|
||||
64 Gd 157 0.1565
|
||||
64 Gd 158 0.2484
|
||||
64 Gd 160 0.2186
|
||||
65 Tb 159 1.0
|
||||
66 Dy 156 0.00056
|
||||
66 Dy 158 0.00095
|
||||
66 Dy 160 0.02329
|
||||
66 Dy 161 0.18889
|
||||
66 Dy 162 0.25475
|
||||
66 Dy 163 0.24896
|
||||
66 Dy 164 0.28260
|
||||
67 Ho 165 1.0
|
||||
68 Er 162 0.00139
|
||||
68 Er 164 0.01601
|
||||
68 Er 166 0.33503
|
||||
68 Er 167 0.22869
|
||||
68 Er 168 0.26978
|
||||
68 Er 170 0.14910
|
||||
69 Tm 169 1.0
|
||||
70 Yb 168 0.00123
|
||||
70 Yb 170 0.02982
|
||||
70 Yb 171 0.1409
|
||||
70 Yb 172 0.2168
|
||||
70 Yb 173 0.16103
|
||||
70 Yb 174 0.32026
|
||||
70 Yb 176 0.12996
|
||||
71 Lu 175 0.97401
|
||||
71 Lu 176 0.02599
|
||||
72 Hf 174 0.0016
|
||||
72 Hf 176 0.0526
|
||||
72 Hf 177 0.186
|
||||
72 Hf 178 0.2728
|
||||
72 Hf 179 0.1362
|
||||
72 Hf 180 0.3508
|
||||
73 Ta 180 0.0001201
|
||||
73 Ta 181 0.9998799
|
||||
74 W 180 0.0012
|
||||
74 W 182 0.265
|
||||
74 W 183 0.1431
|
||||
74 W 184 0.3064
|
||||
74 W 186 0.2843
|
||||
75 Re 185 0.374
|
||||
75 Re 187 0.626
|
||||
76 Os 184 0.0002
|
||||
76 Os 186 0.0159
|
||||
76 Os 187 0.0196
|
||||
76 Os 188 0.1324
|
||||
76 Os 189 0.1615
|
||||
76 Os 190 0.2626
|
||||
76 Os 192 0.4078
|
||||
77 Ir 191 0.373
|
||||
77 Ir 193 0.627
|
||||
78 Pt 190 0.00012
|
||||
78 Pt 192 0.00782
|
||||
78 Pt 194 0.3286
|
||||
78 Pt 195 0.3378
|
||||
78 Pt 196 0.2521
|
||||
78 Pt 198 0.07356
|
||||
79 Au 197 1.0
|
||||
80 Hg 196 0.0015
|
||||
80 Hg 198 0.0997
|
||||
80 Hg 199 0.1687
|
||||
80 Hg 200 0.231
|
||||
80 Hg 201 0.1318
|
||||
80 Hg 202 0.2986
|
||||
80 Hg 204 0.0687
|
||||
81 Tl 203 0.2952
|
||||
81 Tl 205 0.7048
|
||||
82 Pb 204 0.014
|
||||
82 Pb 206 0.241
|
||||
82 Pb 207 0.221
|
||||
82 Pb 208 0.524
|
||||
83 Bi 209 1.0
|
||||
90 Th 232 1.0
|
||||
91 Pa 231 1.0
|
||||
92 U 234 5.4e-05
|
||||
92 U 235 0.007204
|
||||
92 U 238 0.992742
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
#!/usr/bin/env python2
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Add color for posix systems
|
||||
if os.name == 'posix':
|
||||
colorOn = '\x1b[34m'
|
||||
colorOff = '\x1b[0m'
|
||||
else:
|
||||
colorOn = ''
|
||||
colorOff = ''
|
||||
|
||||
if len(sys.argv) <= 1:
|
||||
print("Usage:")
|
||||
sys.exit()
|
||||
|
||||
source = sys.argv[1:]
|
||||
source.sort()
|
||||
|
||||
totalCode = 0
|
||||
totalComment = 0
|
||||
totalSpace = 0
|
||||
|
||||
for sourceFile in source:
|
||||
code = 0
|
||||
comment = 0
|
||||
space = 0
|
||||
|
||||
ending = sourceFile[sourceFile.rindex('.') + 1:]
|
||||
if ending == 'c':
|
||||
commentChar = '/*'
|
||||
elif ending == 'f':
|
||||
commentChar = '!'
|
||||
elif ending == 'f90':
|
||||
commentChar = '!'
|
||||
elif ending == 'F90':
|
||||
commentChar = '!'
|
||||
|
||||
for line in open(sourceFile, 'r'):
|
||||
line = line.strip()
|
||||
if line.startswith(commentChar):
|
||||
comment += 1
|
||||
elif line == '':
|
||||
space += 1
|
||||
else:
|
||||
code += 1
|
||||
|
||||
total = comment + space + code
|
||||
totalCode += code
|
||||
totalComment += comment
|
||||
totalSpace += space
|
||||
|
||||
print(colorOn + sourceFile + colorOff)
|
||||
print("Code: {0} ({1:4.1f}%)".format(code, 100.0*float(code)/total))
|
||||
print("Comments: {0} ({1:4.1f}%)".format(comment, 100.0*float(comment)/total))
|
||||
print("Spaces: {0} ({1:4.1f}%)\n".format(space, 100.0*float(space)/total))
|
||||
|
||||
total = totalCode + totalComment + totalSpace
|
||||
|
||||
print(colorOn + "TOTAL COUNT" + colorOff)
|
||||
print("Code: {0} ({1:4.1f}%)".format(totalCode, 100.0*float(totalCode)/total))
|
||||
print("Comments: {0} ({1:4.1f}%)".format(totalComment, 100.0*float(totalComment)/total))
|
||||
print("Spaces: {0} ({1:4.1f}%)".format(totalSpace, 100.0*float(totalSpace)/total))
|
||||
print("Total: {0}\n".format(total))
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
#!/usr/bin/env python2
|
||||
|
||||
import glob
|
||||
import re
|
||||
|
||||
dependencies = {}
|
||||
|
||||
for src in glob.iglob('*.F90'):
|
||||
module = src.strip('.F90')
|
||||
deps = set()
|
||||
d = re.findall(r'\n\s*use\s+(\w+)',
|
||||
open(src, 'r').read())
|
||||
for name in d:
|
||||
if name in ['mpi', 'hdf5', 'h5lt', 'petscsys', 'petscmat', 'petscksp',
|
||||
'petscsnes', 'petscvec', 'omp_lib', 'fox_dom']:
|
||||
continue
|
||||
deps.add(name)
|
||||
if deps:
|
||||
dependencies[module] = sorted(list(deps))
|
||||
|
||||
|
||||
for module in sorted(dependencies.keys()):
|
||||
for dep in dependencies[module]:
|
||||
print("{0}.o: {1}.o".format(module, dep))
|
||||
print('')
|
||||
77
src/utils/convert_binary.py
Executable file
77
src/utils/convert_binary.py
Executable file
|
|
@ -0,0 +1,77 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import division
|
||||
|
||||
from struct import pack
|
||||
import sys
|
||||
|
||||
|
||||
def ascii_to_binary(ascii_file, binary_file):
|
||||
"""Convert an ACE file in ASCII format (type 1) to binary format (type 2).
|
||||
|
||||
Parameters
|
||||
----------
|
||||
ascii_file : str
|
||||
Filename of ASCII ACE file
|
||||
binary_file : str
|
||||
Filename of binary ACE file to be written
|
||||
|
||||
"""
|
||||
|
||||
# Open ASCII file
|
||||
ascii = open(ascii_file, 'r')
|
||||
|
||||
# Set default record length
|
||||
record_length = 4096
|
||||
|
||||
# Read data from ASCII file
|
||||
lines = ascii.readlines()
|
||||
ascii.close()
|
||||
|
||||
# Open binary file
|
||||
binary = open(binary_file, 'wb')
|
||||
|
||||
idx = 0
|
||||
while idx < len(lines):
|
||||
# Read/write header block
|
||||
hz = lines[idx][:10].encode('UTF-8')
|
||||
aw0 = float(lines[idx][10:22])
|
||||
tz = float(lines[idx][22:34])
|
||||
hd = lines[idx][35:45].encode('UTF-8')
|
||||
hk = lines[idx + 1][:70].encode('UTF-8')
|
||||
hm = lines[idx + 1][70:80].encode('UTF-8')
|
||||
binary.write(pack('=10sdd10s70s10s', hz, aw0, tz, hd, hk, hm))
|
||||
|
||||
# Read/write IZ/AW pairs
|
||||
data = ' '.join(lines[idx + 2:idx + 6]).split()
|
||||
iz = list(map(int, data[::2]))
|
||||
aw = list(map(float, data[1::2]))
|
||||
izaw = [item for sublist in zip(iz, aw) for item in sublist]
|
||||
binary.write(pack('=' + 16*'id', *izaw))
|
||||
|
||||
# Read/write NXS and JXS arrays. Null bytes are added at the end so
|
||||
# that XSS will start at the second record
|
||||
nxs = list(map(int, ' '.join(lines[idx + 6:idx + 8]).split()))
|
||||
jxs = list(map(int, ' '.join(lines[idx + 8:idx + 12]).split()))
|
||||
binary.write(pack('=16i32i{0}x'.format(record_length - 500), *(nxs + jxs)))
|
||||
|
||||
# Read/write XSS array. Null bytes are added to form a complete record
|
||||
# at the end of the file
|
||||
n_lines = (nxs[0] + 3)//4
|
||||
xss = list(map(float, ' '.join(lines[idx + 12:idx + 12 + n_lines]).split()))
|
||||
extra_bytes = record_length - ((len(xss)*8 - 1) % record_length + 1)
|
||||
binary.write(pack('={0}d{1}x'.format(nxs[0], extra_bytes), *xss))
|
||||
|
||||
# Advance to next table in file
|
||||
idx += 12 + n_lines
|
||||
|
||||
# Close binary file
|
||||
binary.close()
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Check for proper number of arguments
|
||||
if len(sys.argv) < 3:
|
||||
sys.exit('Usage: {0} ascii_file binary_file'.format(sys.argv[0]))
|
||||
|
||||
# Convert ASCII file
|
||||
ascii_to_binary(sys.argv[1], sys.argv[2])
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python2
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python2
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
|
|
|||
|
|
@ -1,160 +0,0 @@
|
|||
#!/usr/bin/python2
|
||||
# Filename: eigenfunction_rms.py
|
||||
|
||||
# import packages
|
||||
import statepoint
|
||||
import numpy as np
|
||||
import os
|
||||
import sys
|
||||
|
||||
def main(tally_id, score_id, batch_start, batch_end, name):
|
||||
|
||||
# read in statepoint header data
|
||||
sp = statepoint.StatePoint('statepoint.ref.binary')
|
||||
|
||||
# read in results
|
||||
sp.read_results()
|
||||
|
||||
# extract reference mean
|
||||
mean_ref = extract_mean(sp, tally_id, score_id)
|
||||
|
||||
# write gnuplot file
|
||||
write_src_gnuplot('testsrc_pin','Pin mesh',mean_ref,np.size(mean_ref,0))
|
||||
|
||||
# preallocate arrays
|
||||
hists = np.zeros(batch_end - batch_start + 1)
|
||||
norms = np.zeros(batch_end - batch_start + 1)
|
||||
|
||||
i = batch_start
|
||||
while i <= batch_end:
|
||||
|
||||
# process statepoint
|
||||
sp = statepoint.StatePoint('statepoint.'+str(i)+'.binary')
|
||||
sp.read_results()
|
||||
|
||||
# extract mean
|
||||
mean = extract_mean(sp, tally_id, score_id)
|
||||
|
||||
# calculate L2 norm
|
||||
norm = np.linalg.norm(mean - mean_ref)
|
||||
|
||||
# get history information
|
||||
n_inactive = sp.n_inactive
|
||||
current_batch = sp.current_batch
|
||||
n_particles = sp.n_particles
|
||||
gen_per_batch = sp.gen_per_batch
|
||||
n_histories = (current_batch - n_inactive)*n_particles*gen_per_batch
|
||||
|
||||
# batch in vectors
|
||||
hists[i - batch_start] = n_histories
|
||||
norms[i - batch_start] = norm
|
||||
|
||||
# print
|
||||
print 'Batch: '+str(i)+' Histories: '+str(n_histories)+' Norm: '+str(norm)
|
||||
|
||||
i += 1
|
||||
|
||||
# write out gnuplot file
|
||||
write_norm_gnuplot(name,hists,norms,np.size(hists))
|
||||
|
||||
def extract_mean(sp, tally_id,score_id):
|
||||
|
||||
# extract results
|
||||
results = sp.extract_results(tally_id,score_id)
|
||||
|
||||
# extract means and copy
|
||||
mean = results['mean'].copy()
|
||||
|
||||
# reshape and integrate over energy
|
||||
mean = mean.reshape(results['bin_max'],order='F')
|
||||
mean = np.sum(mean,0)
|
||||
mean = np.sum(mean,0)
|
||||
mean = mean/mean.sum()*(mean > 1.e-8).sum()
|
||||
|
||||
return mean
|
||||
|
||||
def write_norm_gnuplot(path,xdat,ydat,size):
|
||||
|
||||
# Header String for GNUPLOT
|
||||
headerstr = """#!/usr/bin/env gnuplot
|
||||
|
||||
set terminal pdf enhanced
|
||||
set output '{output}'
|
||||
set ylabel 'L-2 norm'
|
||||
set xlabel 'Histories'
|
||||
set log x
|
||||
set log y
|
||||
""".format(output=path+'.pdf')
|
||||
|
||||
# Write out the plot string
|
||||
pltstr = "plot '-' using 1:2 with lines"
|
||||
|
||||
# Write out the data string
|
||||
i = 0
|
||||
datastr = ''
|
||||
while i < size:
|
||||
datastr = datastr + '{0} {1}\n'.format(xdat[i],ydat[i])
|
||||
i += 1
|
||||
|
||||
# Concatenate all
|
||||
outstr = headerstr + '\n' + pltstr + '\n' + datastr
|
||||
|
||||
# Write File
|
||||
with open(path+".plot",'w') as f:
|
||||
f.write(outstr)
|
||||
|
||||
# Run GNUPLOT
|
||||
os.system('gnuplot ' + path+".plot")
|
||||
|
||||
def write_src_gnuplot(path,name,src,size):
|
||||
|
||||
# Header String for GNUPLOT
|
||||
headerstr = """#!/usr/bin/env gnuplot
|
||||
|
||||
set terminal pdf enhanced
|
||||
set output '{output}'
|
||||
set palette defined (0 '#000090', 1 '#000fff', 2 '#0090ff', 3 '#0fffee', 4 '#90ff70', 5 '#ffee00', 6 '#ff7000', 7 '#ee0000', 8 '#7f0000')
|
||||
set view map
|
||||
set size ratio -1
|
||||
set lmargin at screen 0.10
|
||||
set rmargin at screen 0.90
|
||||
set bmargin at screen 0.15
|
||||
set tmargin at screen 0.90
|
||||
unset xtics
|
||||
unset ytics
|
||||
set title '{title}'""".format(output=path+'.pdf',title=name)
|
||||
|
||||
# Write out the plot string
|
||||
pltstr = "splot '-' matrix with image "
|
||||
|
||||
# Write out the data string
|
||||
i = 0
|
||||
datastr = ''
|
||||
while i < size:
|
||||
j = 0
|
||||
while j < size:
|
||||
datastr = datastr + '{0} '.format(src[i,j][0])
|
||||
j += 1
|
||||
datastr = datastr + '\n'
|
||||
i += 1
|
||||
|
||||
# replace all nan with zero
|
||||
datastr = datastr.replace('nan','0.0')
|
||||
|
||||
# Concatenate all
|
||||
outstr = headerstr + '\n' + pltstr + '\n' + datastr
|
||||
|
||||
# Write File
|
||||
with open(path+".plot",'w') as f:
|
||||
f.write(outstr)
|
||||
|
||||
# Run GNUPLOT
|
||||
os.system('gnuplot ' + path+".plot")
|
||||
|
||||
if __name__ == "__main__":
|
||||
tally_id = int(sys.argv[1])
|
||||
score_id = sys.argv[2]
|
||||
batch_start = int(sys.argv[3])
|
||||
batch_end = int(sys.argv[4])
|
||||
name = sys.argv[5]
|
||||
main(tally_id, score_id, batch_start, batch_end, name)
|
||||
|
|
@ -1,7 +1,12 @@
|
|||
#!/usr/bin/env python2
|
||||
#!/usr/bin/env python
|
||||
|
||||
# This script reads a cross_sections.out file, adds up the memory usage for
|
||||
# each nuclide and S(a,b) table, and displays the total memory usage
|
||||
"""
|
||||
This script reads a cross_sections.out file, adds up the memory usage for each
|
||||
nuclide and S(a,b) table, and displays the total memory usage.
|
||||
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python2
|
||||
#!/usr/bin/env python
|
||||
|
||||
import struct
|
||||
|
||||
|
|
@ -30,6 +30,7 @@ class Particle(object):
|
|||
self.gen_per_batch = self._get_int(path='gen_per_batch')[0]
|
||||
self.current_gen = self._get_int(path='current_gen')[0]
|
||||
self.n_particles = self._get_long(path='n_particles')[0]
|
||||
self.run_mode = self._get_int(path='run_mode')[0]
|
||||
|
||||
# Read particle properties
|
||||
self.id = self._get_long(path='id')[0]
|
||||
|
|
@ -50,9 +51,9 @@ class Particle(object):
|
|||
|
||||
def _get_long(self, n=1, path=None):
|
||||
if self._hdf5:
|
||||
return [long(v) for v in self._f[path].value]
|
||||
return [int(v) for v in self._f[path].value]
|
||||
else:
|
||||
return [long(v) for v in self._get_data(n, 'q', 8)]
|
||||
return [int(v) for v in self._get_data(n, 'q', 8)]
|
||||
|
||||
def _get_float(self, n=1, path=None):
|
||||
if self._hdf5:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python2
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""Python script to plot tally data generated by OpenMC."""
|
||||
|
||||
|
|
@ -15,12 +15,16 @@ from statepoint import *
|
|||
|
||||
if sys.version_info[0] < 3:
|
||||
import Tkinter as tk
|
||||
import tkFileDialog as filedialog
|
||||
import tkFont as font
|
||||
import tkMessageBox as messagebox
|
||||
import ttk as ttk
|
||||
else:
|
||||
import tkinter as tk
|
||||
import tkFileDialog
|
||||
import tkFont
|
||||
import tkMessageBox
|
||||
import ttk
|
||||
import tkinter.filedialog as filedialog
|
||||
import tkinter.font as font
|
||||
import tkinter.messagebox as messagebox
|
||||
import tkinter.ttk as ttk
|
||||
|
||||
|
||||
class MeshPlotter(tk.Frame):
|
||||
|
|
@ -111,8 +115,9 @@ class MeshPlotter(tk.Frame):
|
|||
self.scoreBox.bind('<<ComboboxSelected>>', self.redraw)
|
||||
|
||||
# Filter label
|
||||
font = tkFont.Font(weight='bold')
|
||||
labelFilters = tk.Label(self.selectFrame, text='Filters:', font=font)
|
||||
boldfont = font.Font(weight='bold')
|
||||
labelFilters = tk.Label(self.selectFrame, text='Filters:',
|
||||
font=boldfont)
|
||||
labelFilters.grid(row=5, column=0, sticky=tk.W)
|
||||
|
||||
def update(self, event=None):
|
||||
|
|
@ -296,8 +301,8 @@ class MeshPlotter(tk.Frame):
|
|||
self.meshTallies.append(itally)
|
||||
|
||||
if not self.meshTallies:
|
||||
tkMessageBox.showerror("Invalid StatePoint File",
|
||||
"File does not contain mesh tallies!")
|
||||
messagebox.showerror("Invalid StatePoint File",
|
||||
"File does not contain mesh tallies!")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
|
|
@ -308,16 +313,16 @@ if __name__ == '__main__':
|
|||
|
||||
# If no filename given as command-line argument, open file dialog
|
||||
if len(sys.argv) < 2:
|
||||
filename = tkFileDialog.askopenfilename(title='Select statepoint file',
|
||||
initialdir='.')
|
||||
filename = filedialog.askopenfilename(title='Select statepoint file',
|
||||
initialdir='.')
|
||||
else:
|
||||
filename = sys.argv[1]
|
||||
|
||||
if filename:
|
||||
# Check to make sure file exists
|
||||
if not os.path.isfile(filename):
|
||||
tkMessageBox.showerror("File not found",
|
||||
"Could not find regular file: " + filename)
|
||||
messagebox.showerror("File not found",
|
||||
"Could not find regular file: " + filename)
|
||||
sys.exit(1)
|
||||
|
||||
app = MeshPlotter(root, filename)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
from distutils.core import setup
|
||||
|
||||
setup(name='statepoint',
|
||||
version='0.5.4',
|
||||
version='0.6.0',
|
||||
description='OpenMC StatePoint',
|
||||
author='Paul Romano',
|
||||
author_email='paul.k.romano@gmail.com',
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
#!/usr/bin/env python2
|
||||
|
||||
import sys
|
||||
|
||||
if len(sys.argv) != 3:
|
||||
print("Must supply element and atom/b-cm")
|
||||
sys.exit(1)
|
||||
|
||||
element = sys.argv[1]
|
||||
ao = float(sys.argv[2])
|
||||
|
||||
for line in open('abundances_modified.txt', 'r'):
|
||||
words = line.split()
|
||||
if words[1] == element:
|
||||
print('<nuclide name="{0}-{1}" ao="{2:10.4e}" />'.format(
|
||||
element, words[2], float(words[3])*ao))
|
||||
|
|
@ -6,81 +6,89 @@ from collections import OrderedDict
|
|||
import numpy as np
|
||||
import scipy.stats
|
||||
|
||||
REVISION_STATEPOINT = 12
|
||||
|
||||
filter_types = {1: 'universe', 2: 'material', 3: 'cell', 4: 'cellborn',
|
||||
5: 'surface', 6: 'mesh', 7: 'energyin', 8: 'energyout'}
|
||||
|
||||
score_types = {-1: 'flux',
|
||||
-2: 'total',
|
||||
-3: 'scatter',
|
||||
-4: 'nu-scatter',
|
||||
-5: 'scatter-n',
|
||||
-6: 'scatter-pn',
|
||||
-7: 'transport',
|
||||
-8: 'n1n',
|
||||
-9: 'absorption',
|
||||
-10: 'fission',
|
||||
-11: 'nu-fission',
|
||||
-12: 'kappa-fission',
|
||||
-13: 'current',
|
||||
-14: 'events',
|
||||
1: '(n,total)',
|
||||
2: '(n,elastic)',
|
||||
4: '(n,level)',
|
||||
11: '(n,2nd)',
|
||||
16: '(n,2n)',
|
||||
17: '(n,3n)',
|
||||
18: '(n,fission)',
|
||||
19: '(n,f)',
|
||||
20: '(n,nf)',
|
||||
21: '(n,2nf)',
|
||||
22: '(n,na)',
|
||||
23: '(n,n3a)',
|
||||
24: '(n,2na)',
|
||||
25: '(n,3na)',
|
||||
28: '(n,np)',
|
||||
29: '(n,n2a)',
|
||||
30: '(n,2n2a)',
|
||||
32: '(n,nd)',
|
||||
33: '(n,nt)',
|
||||
34: '(n,nHe-3)',
|
||||
35: '(n,nd2a)',
|
||||
36: '(n,nt2a)',
|
||||
37: '(n,4n)',
|
||||
38: '(n,3nf)',
|
||||
41: '(n,2np)',
|
||||
42: '(n,3np)',
|
||||
44: '(n,n2p)',
|
||||
45: '(n,npa)',
|
||||
91: '(n,nc)',
|
||||
101: '(n,disappear)',
|
||||
102: '(n,gamma)',
|
||||
103: '(n,p)',
|
||||
104: '(n,d)',
|
||||
105: '(n,t)',
|
||||
106: '(n,3He)',
|
||||
107: '(n,a)',
|
||||
108: '(n,2a)',
|
||||
109: '(n,3a)',
|
||||
111: '(n,2p)',
|
||||
112: '(n,pa)',
|
||||
113: '(n,t2a)',
|
||||
114: '(n,d2a)',
|
||||
115: '(n,pd)',
|
||||
116: '(n,pt)',
|
||||
117: '(n,da)',
|
||||
201: '(n,Xn)',
|
||||
202: '(n,Xgamma)',
|
||||
203: '(n,Xp)',
|
||||
204: '(n,Xd)',
|
||||
205: '(n,Xt)',
|
||||
206: '(n,X3He)',
|
||||
207: '(n,Xa)',
|
||||
444: '(damage)',
|
||||
649: '(n,pc)',
|
||||
699: '(n,dc)',
|
||||
749: '(n,tc)',
|
||||
799: '(n,3Hec)',
|
||||
849: '(n,tc)'}
|
||||
-2: 'total',
|
||||
-3: 'scatter',
|
||||
-4: 'nu-scatter',
|
||||
-5: 'scatter-n',
|
||||
-6: 'scatter-pn',
|
||||
-7: 'nu-scatter-n',
|
||||
-8: 'nu-scatter-pn',
|
||||
-9: 'transport',
|
||||
-10: 'n1n',
|
||||
-11: 'absorption',
|
||||
-12: 'fission',
|
||||
-13: 'nu-fission',
|
||||
-14: 'kappa-fission',
|
||||
-15: 'current',
|
||||
-16: 'flux-yn',
|
||||
-17: 'total-yn',
|
||||
-18: 'scatter-yn',
|
||||
-19: 'nu-scatter-yn',
|
||||
-20: 'events',
|
||||
1: '(n,total)',
|
||||
2: '(n,elastic)',
|
||||
4: '(n,level)',
|
||||
11: '(n,2nd)',
|
||||
16: '(n,2n)',
|
||||
17: '(n,3n)',
|
||||
18: '(n,fission)',
|
||||
19: '(n,f)',
|
||||
20: '(n,nf)',
|
||||
21: '(n,2nf)',
|
||||
22: '(n,na)',
|
||||
23: '(n,n3a)',
|
||||
24: '(n,2na)',
|
||||
25: '(n,3na)',
|
||||
28: '(n,np)',
|
||||
29: '(n,n2a)',
|
||||
30: '(n,2n2a)',
|
||||
32: '(n,nd)',
|
||||
33: '(n,nt)',
|
||||
34: '(n,nHe-3)',
|
||||
35: '(n,nd2a)',
|
||||
36: '(n,nt2a)',
|
||||
37: '(n,4n)',
|
||||
38: '(n,3nf)',
|
||||
41: '(n,2np)',
|
||||
42: '(n,3np)',
|
||||
44: '(n,n2p)',
|
||||
45: '(n,npa)',
|
||||
91: '(n,nc)',
|
||||
101: '(n,disappear)',
|
||||
102: '(n,gamma)',
|
||||
103: '(n,p)',
|
||||
104: '(n,d)',
|
||||
105: '(n,t)',
|
||||
106: '(n,3He)',
|
||||
107: '(n,a)',
|
||||
108: '(n,2a)',
|
||||
109: '(n,3a)',
|
||||
111: '(n,2p)',
|
||||
112: '(n,pa)',
|
||||
113: '(n,t2a)',
|
||||
114: '(n,d2a)',
|
||||
115: '(n,pd)',
|
||||
116: '(n,pt)',
|
||||
117: '(n,da)',
|
||||
201: '(n,Xn)',
|
||||
202: '(n,Xgamma)',
|
||||
203: '(n,Xp)',
|
||||
204: '(n,Xd)',
|
||||
205: '(n,Xt)',
|
||||
206: '(n,X3He)',
|
||||
207: '(n,Xa)',
|
||||
444: '(damage)',
|
||||
649: '(n,pc)',
|
||||
699: '(n,dc)',
|
||||
749: '(n,tc)',
|
||||
799: '(n,3Hec)',
|
||||
849: '(n,tc)'}
|
||||
score_types.update({MT: '(n,n' + str(MT-50) + ')' for MT in range(51,91)})
|
||||
score_types.update({MT: '(n,p' + str(MT-600) + ')' for MT in range(600,649)})
|
||||
score_types.update({MT: '(n,d' + str(MT-650) + ')' for MT in range(650,699)})
|
||||
|
|
@ -151,7 +159,7 @@ class StatePoint(object):
|
|||
|
||||
# Read statepoint revision
|
||||
self.revision = self._get_int(path='revision')[0]
|
||||
if self.revision != 11:
|
||||
if self.revision != REVISION_STATEPOINT:
|
||||
raise Exception('Statepoint Revision is not consistent.')
|
||||
|
||||
# Read OpenMC version
|
||||
|
|
@ -287,21 +295,21 @@ class StatePoint(object):
|
|||
t.n_scores = self._get_int(path=base+'n_score_bins')[0]
|
||||
t.scores = [score_types[j] for j in self._get_int(
|
||||
t.n_scores, path=base+'score_bins')]
|
||||
t.scatt_order = self._get_int(t.n_scores, path=base+'scatt_order')
|
||||
t.moment_order = self._get_int(t.n_scores, path=base+'moment_order')
|
||||
|
||||
# Read number of user score bins
|
||||
t.n_user_scores = self._get_int(path=base+'n_user_score_bins')[0]
|
||||
|
||||
# Set up stride
|
||||
stride = 1
|
||||
for f in t.filters.values()[::-1]:
|
||||
for f in list(t.filters.values())[::-1]:
|
||||
f.stride = stride
|
||||
stride *= f.length
|
||||
|
||||
# Source bank present
|
||||
source_present = self._get_int(path='source_present')[0]
|
||||
if source_present == 1:
|
||||
self.source_present = True
|
||||
self.source_present = True
|
||||
else:
|
||||
self.source_present = False
|
||||
|
||||
|
|
@ -493,15 +501,15 @@ class StatePoint(object):
|
|||
try:
|
||||
tally = self.tallies[tally_id-1]
|
||||
except:
|
||||
print 'Tally does not exist'
|
||||
print('Tally does not exist')
|
||||
return
|
||||
|
||||
# get the score index if it is present
|
||||
try:
|
||||
idx = tally.scores.index(score_str)
|
||||
except ValueError:
|
||||
print 'Score does not exist'
|
||||
print tally.scores
|
||||
print('Score does not exist')
|
||||
print(tally.scores)
|
||||
return
|
||||
|
||||
# create numpy array for mean and 95% CI
|
||||
|
|
@ -535,7 +543,7 @@ class StatePoint(object):
|
|||
|
||||
# get bounds of filter bins
|
||||
for akey in tally.filters.keys():
|
||||
idx = tally.filters.keys().index(akey)
|
||||
idx = list(tally.filters.keys()).index(akey)
|
||||
filtmax[n_filters - idx] = tally.filters[akey].length
|
||||
|
||||
# compute bin info
|
||||
|
|
@ -546,11 +554,11 @@ class StatePoint(object):
|
|||
np.prod(filtmax[0:i+2]))/(np.prod(filtmax[0:i+1]))) + 1
|
||||
|
||||
# append in dictionary bin with filter
|
||||
data.update({tally.filters.keys()[n_filters - i - 1]:
|
||||
filters[:,n_filters - i - 1]})
|
||||
data.update({list(tally.filters.keys())[n_filters - i - 1]:
|
||||
filters[:,n_filters - i - 1]})
|
||||
|
||||
# check for mesh
|
||||
if tally.filters.keys()[n_filters - i - 1] == 'mesh':
|
||||
if list(tally.filters.keys())[n_filters - i - 1] == 'mesh':
|
||||
dims = list(self.meshes[tally.filters['mesh'].bins[0] - 1].dimension)
|
||||
dims.reverse()
|
||||
dims = np.asarray(dims)
|
||||
|
|
@ -564,12 +572,12 @@ class StatePoint(object):
|
|||
np.prod(meshmax[0:3]))/(np.prod(meshmax[0:2]))) + 1
|
||||
mesh_bins[:,0] = np.floor(((filters[:,n_filters - i - 1] - 1) %
|
||||
np.prod(meshmax[0:4]))/(np.prod(meshmax[0:3]))) + 1
|
||||
data.update({'mesh':zip(mesh_bins[:,0],mesh_bins[:,1],
|
||||
mesh_bins[:,2])})
|
||||
data.update({'mesh': list(zip(mesh_bins[:,0], mesh_bins[:,1],
|
||||
mesh_bins[:,2]))})
|
||||
i += 1
|
||||
|
||||
# add in maximum bin filters and order
|
||||
b = tally.filters.keys()
|
||||
b = list(tally.filters.keys())
|
||||
b.reverse()
|
||||
filtmax = list(filtmax[1:])
|
||||
try:
|
||||
|
|
@ -596,9 +604,9 @@ class StatePoint(object):
|
|||
|
||||
def _get_long(self, n=1, path=None):
|
||||
if self._hdf5:
|
||||
return [long(v) for v in self._f[path].value]
|
||||
return [int(v) for v in self._f[path].value]
|
||||
else:
|
||||
return [long(v) for v in self._get_data(n, 'q', 8)]
|
||||
return [int(v) for v in self._get_data(n, 'q', 8)]
|
||||
|
||||
def _get_float(self, n=1, path=None):
|
||||
if self._hdf5:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/env python2
|
||||
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function
|
||||
|
||||
import sys
|
||||
import itertools
|
||||
|
|
@ -17,7 +17,7 @@ err = False
|
|||
def parse_options():
|
||||
"""Process command line arguments"""
|
||||
|
||||
|
||||
|
||||
|
||||
def tallies_callback(option, opt, value, parser):
|
||||
"""Option parser function for list of tallies"""
|
||||
|
|
@ -42,7 +42,7 @@ def parse_options():
|
|||
except:
|
||||
p.print_help()
|
||||
err = True
|
||||
|
||||
|
||||
def filters_callback(option, opt, value, parser):
|
||||
"""Option parser function for list of filters"""
|
||||
global err
|
||||
|
|
@ -59,7 +59,7 @@ def parse_options():
|
|||
except:
|
||||
p.print_help()
|
||||
err = True
|
||||
|
||||
|
||||
from optparse import OptionParser
|
||||
usage = r"""%prog [options] <statepoint_file>
|
||||
|
||||
|
|
@ -98,12 +98,12 @@ You can list the available tallies, scores, and filters with the -l option:
|
|||
p.add_option('-o', '--output', action='store', dest='output',
|
||||
default='tally', help='path to output SILO file.')
|
||||
p.add_option('-e', '--error', dest='valerr', default=False,
|
||||
action='store_true',
|
||||
action='store_true',
|
||||
help='Flag to extract errors instead of values.')
|
||||
p.add_option('-v', '--vtk', action='store_true', dest='vtk',
|
||||
default=False, help='Flag to convert to VTK instead of SILO.')
|
||||
parsed = p.parse_args()
|
||||
|
||||
|
||||
if not parsed[1]:
|
||||
p.print_help()
|
||||
return parsed, err
|
||||
|
|
@ -118,35 +118,35 @@ You can list the available tallies, scores, and filters with the -l option:
|
|||
################################################################################
|
||||
def main(file_, o):
|
||||
"""Main program"""
|
||||
|
||||
|
||||
sp = StatePoint(file_)
|
||||
sp.read_results()
|
||||
|
||||
validate_options(sp, o)
|
||||
|
||||
|
||||
if o.list:
|
||||
print_available(sp)
|
||||
return
|
||||
|
||||
|
||||
if o.vtk:
|
||||
if not o.output[-4:] == ".vtm": o.output += ".vtm"
|
||||
else:
|
||||
if not o.output[-5:] == ".silo": o.output += ".silo"
|
||||
|
||||
|
||||
if o.vtk:
|
||||
try:
|
||||
import vtk
|
||||
except:
|
||||
print 'The vtk python bindings do not appear to be installed properly.\n'+\
|
||||
'On Ubuntu: sudo apt-get install python-vtk\n'+\
|
||||
'See: http://www.vtk.org/'
|
||||
print('The vtk python bindings do not appear to be installed properly.\n'
|
||||
'On Ubuntu: sudo apt-get install python-vtk\n'
|
||||
'See: http://www.vtk.org/')
|
||||
return
|
||||
else:
|
||||
try:
|
||||
import silomesh
|
||||
except:
|
||||
print 'The silomesh package does not appear to be installed properly.\n'+\
|
||||
'See: https://github.com/nhorelik/silomesh/'
|
||||
print('The silomesh package does not appear to be installed properly.\n'
|
||||
'See: https://github.com/nhorelik/silomesh/')
|
||||
return
|
||||
|
||||
if o.vtk:
|
||||
|
|
@ -158,20 +158,20 @@ def main(file_, o):
|
|||
|
||||
# Tally loop #################################################################
|
||||
for tally in sp.tallies:
|
||||
|
||||
|
||||
# skip non-mesh tallies or non-user-specified tallies
|
||||
if o.tallies and not tally.id in o.tallies: continue
|
||||
if not 'mesh' in tally.filters: continue
|
||||
|
||||
print "Processing Tally {}...".format(tally.id)
|
||||
|
||||
|
||||
print("Processing Tally {}...".format(tally.id))
|
||||
|
||||
# extract filter options and mesh parameters for this tally
|
||||
filtercombos = get_filter_combos(tally)
|
||||
meshparms = get_mesh_parms(sp, tally)
|
||||
nx,ny,nz = meshparms[:3]
|
||||
ll = meshparms[3:6]
|
||||
ur = meshparms[6:9]
|
||||
|
||||
|
||||
if o.vtk:
|
||||
ww = [(u-l)/n for u,l,n in zip(ur,ll,(nx,ny,nz))]
|
||||
grid = grid = vtk.vtkImageData()
|
||||
|
|
@ -180,17 +180,17 @@ def main(file_, o):
|
|||
grid.SetSpacing(*ww)
|
||||
else:
|
||||
silomesh.init_mesh('Tally_{}'.format(tally.id), *meshparms)
|
||||
|
||||
|
||||
# Score loop ###############################################################
|
||||
for sid,score in enumerate(tally.scores):
|
||||
|
||||
|
||||
# skip non-user-specified scrores for this tally
|
||||
if o.scores and tally.id in o.scores and not sid in o.scores[tally.id]:
|
||||
continue
|
||||
|
||||
|
||||
# Filter loop ############################################################
|
||||
for filterspec in filtercombos:
|
||||
|
||||
|
||||
# skip non-user-specified filter bins
|
||||
skip = False
|
||||
if o.filters and tally.id in o.filters:
|
||||
|
|
@ -200,7 +200,7 @@ def main(file_, o):
|
|||
skip = True
|
||||
break
|
||||
if skip: continue
|
||||
|
||||
|
||||
# find and sanitize the variable name for this score
|
||||
varname = get_sanitized_filterspec_name(tally, score, filterspec)
|
||||
if o.vtk:
|
||||
|
|
@ -209,9 +209,9 @@ def main(file_, o):
|
|||
dataforvtk = {}
|
||||
else:
|
||||
silomesh.init_var(varname)
|
||||
|
||||
|
||||
lbl = "\t Score {}.{} {}:\t\t{}".format(tally.id, sid+1, score, varname)
|
||||
|
||||
|
||||
# Mesh fill loop #######################################################
|
||||
for x in range(1,nx+1):
|
||||
sys.stdout.write(lbl+" {0}%\r".format(int(x/nx*100)))
|
||||
|
|
@ -226,27 +226,27 @@ def main(file_, o):
|
|||
dataforvtk[i] = float(val)
|
||||
else:
|
||||
silomesh.set_value(float(val), x, y, z)
|
||||
|
||||
|
||||
# end mesh fill loop
|
||||
print
|
||||
print()
|
||||
if o.vtk:
|
||||
for i in range(nx*ny*nz):
|
||||
vtkdata.InsertNextValue(dataforvtk[i])
|
||||
grid.GetCellData().AddArray(vtkdata)
|
||||
del vtkdata
|
||||
|
||||
|
||||
else:
|
||||
silomesh.finalize_var()
|
||||
|
||||
|
||||
# end filter loop
|
||||
|
||||
|
||||
# end score loop
|
||||
if o.vtk:
|
||||
blocks.SetBlock(block_idx, grid)
|
||||
block_idx += 1
|
||||
else:
|
||||
silomesh.finalize_mesh()
|
||||
|
||||
|
||||
# end tally loop
|
||||
if o.vtk:
|
||||
writer = vtk.vtkXMLMultiBlockDataWriter()
|
||||
|
|
@ -259,7 +259,7 @@ def main(file_, o):
|
|||
################################################################################
|
||||
def get_sanitized_filterspec_name(tally, score, filterspec):
|
||||
"""Returns a name fit for silo vars for a given filterspec, tally and score"""
|
||||
|
||||
|
||||
comboname = "_"+" ".join(["{}_{}".format(filter_, bin)
|
||||
for filter_, bin in filterspec[1:]])
|
||||
if len(filterspec[1:]) == 0: comboname = ''
|
||||
|
|
@ -274,16 +274,16 @@ def get_filter_combos(tally):
|
|||
Each combo has the mesh spec as the first element, to be set later.
|
||||
These filter specs correspond with the second argument to StatePoint.get_value
|
||||
"""
|
||||
|
||||
|
||||
specs = []
|
||||
|
||||
if len(tally.filters) == 1:
|
||||
return [[['mesh', [1, 1, 1]]]]
|
||||
|
||||
filters = tally.filters.keys()
|
||||
|
||||
filters = list(tally.filters.keys())
|
||||
filters.pop(filters.index('mesh'))
|
||||
nbins = [tally.filters[f].length for f in filters]
|
||||
|
||||
|
||||
combos = [ [b] for b in range(nbins[0])]
|
||||
for i,b in enumerate(nbins[1:]):
|
||||
prod = list(itertools.product(combos, range(b)))
|
||||
|
|
@ -311,25 +311,25 @@ def get_mesh_parms(sp, tally):
|
|||
################################################################################
|
||||
def print_available(sp):
|
||||
"""Prints available tallies/scores in a statepoint"""
|
||||
|
||||
print "Available tally and score indices:"
|
||||
|
||||
print("Available tally and score indices:")
|
||||
for tally in sp.tallies:
|
||||
mesh = ""
|
||||
if not 'mesh' in tally.filters: mesh = "(no mesh)"
|
||||
print "\tTally {} {}".format(tally.id, mesh)
|
||||
scores = ["{}.{}: {}".format(tally.id, sid, score)
|
||||
print("\tTally {} {}".format(tally.id, mesh))
|
||||
scores = ["{}.{}: {}".format(tally.id, sid, score)
|
||||
for sid, score in enumerate(tally.scores)]
|
||||
for score in scores:
|
||||
print "\t\tScore {}".format(score)
|
||||
print("\t\tScore {}".format(score))
|
||||
for filter_ in tally.filters:
|
||||
if filter_ == 'mesh': continue
|
||||
for bin in range(tally.filters[filter_].length):
|
||||
print "\t\t\tFilters: {}.{}.{}".format(tally.id, filter_, bin)
|
||||
print("\t\t\tFilters: {}.{}.{}".format(tally.id, filter_, bin))
|
||||
|
||||
################################################################################
|
||||
def validate_options(sp,o):
|
||||
"""Validates specified tally/score options for the current statepoint"""
|
||||
|
||||
|
||||
available_tallies = [t.id for t in sp.tallies]
|
||||
if o.tallies:
|
||||
for otally in o.tallies:
|
||||
|
|
@ -345,7 +345,7 @@ def validate_options(sp,o):
|
|||
for oscore in o.scores[otally]:
|
||||
if oscore > len(tally.scores):
|
||||
warnings.warn('No score {} in tally {}'.format(oscore, otally))
|
||||
|
||||
|
||||
if o.scores:
|
||||
for otally in o.scores.keys():
|
||||
if not otally in available_tallies:
|
||||
|
|
@ -355,7 +355,7 @@ def validate_options(sp,o):
|
|||
warnings.warn(
|
||||
'Skipping scores for tally {}, excluded by tally list'.format(otally))
|
||||
continue
|
||||
|
||||
|
||||
if o.filters:
|
||||
for otally in o.filters.keys():
|
||||
if not otally in available_tallies:
|
||||
|
|
@ -380,7 +380,7 @@ def validate_options(sp,o):
|
|||
warnings.warn(
|
||||
'No bin {} in tally {} filter {}'.format(bin, otally, filter_))
|
||||
|
||||
################################################################################
|
||||
################################################################################
|
||||
# monkeypatch to suppress the source echo produced by warnings
|
||||
def formatwarning(message, category, filename, lineno, line):
|
||||
return "{}:{}: {}: {}\n".format(filename, lineno, category.__name__, message)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python2
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/env python2
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
from sys import argv
|
||||
from math import sqrt
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
#!/usr/bin/env python2
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function, division
|
||||
|
||||
from sys import argv
|
||||
from math import sqrt
|
||||
|
|
@ -56,7 +58,7 @@ for t in sp.tallies:
|
|||
nx, ny, nz = m.dimension
|
||||
|
||||
# Calculate number of score bins
|
||||
ns = t.total_score_bins * t.total_filter_bins / (nx*ny*nz)
|
||||
ns = t.total_score_bins * t.total_filter_bins // (nx*ny*nz)
|
||||
assert n_bins == nx*ny*nz*ns
|
||||
|
||||
# Create lists for tallies
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python2
|
||||
#!/usr/bin/env python
|
||||
|
||||
# This program takes OpenMC statepoint binary files and creates a variety of
|
||||
# outputs from them which should provide the user with an idea of the
|
||||
|
|
@ -15,6 +15,7 @@
|
|||
# fileType, printxs, showImg, and savetoCSV. See the options block for more
|
||||
# information.
|
||||
|
||||
from __future__ import print_function
|
||||
from math import sqrt, pow
|
||||
from glob import glob
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/env python2
|
||||
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function
|
||||
|
||||
import struct
|
||||
import sys
|
||||
|
|
@ -25,7 +25,7 @@ def parse_options():
|
|||
################################################################################
|
||||
def main(file_, o):
|
||||
|
||||
print file_
|
||||
print(file_)
|
||||
fh = open(file_,'rb')
|
||||
header = get_header(fh)
|
||||
meshparms = header['dimension'] + header['lower_left'] + header['upper_right']
|
||||
|
|
@ -36,18 +36,18 @@ def main(file_, o):
|
|||
try:
|
||||
import vtk
|
||||
except:
|
||||
print 'The vtk python bindings do not appear to be installed properly.\n'+\
|
||||
'On Ubuntu: sudo apt-get install python-vtk\n'+\
|
||||
'See: http://www.vtk.org/'
|
||||
print('The vtk python bindings do not appear to be installed properly.\n'
|
||||
'On Ubuntu: sudo apt-get install python-vtk\n'
|
||||
'See: http://www.vtk.org/')
|
||||
return
|
||||
|
||||
|
||||
origin = [(l+w*n/2.) for n,l,w in zip((nx,ny,nz),ll,header['width'])]
|
||||
|
||||
|
||||
grid = vtk.vtkImageData()
|
||||
grid.SetDimensions(nx+1,ny+1,nz+1)
|
||||
grid.SetOrigin(*ll)
|
||||
grid.SetSpacing(*header['width'])
|
||||
|
||||
|
||||
data = vtk.vtkDoubleArray()
|
||||
data.SetName("id")
|
||||
data.SetNumberOfTuples(nx*ny*nz)
|
||||
|
|
@ -60,7 +60,7 @@ def main(file_, o):
|
|||
id_ = get_int(fh)[0]
|
||||
data.SetValue(i, id_)
|
||||
grid.GetCellData().AddArray(data)
|
||||
|
||||
|
||||
writer = vtk.vtkXMLImageDataWriter()
|
||||
writer.SetInput(grid)
|
||||
if not o.output[-4:] == ".vti": o.output += ".vti"
|
||||
|
|
@ -72,8 +72,8 @@ def main(file_, o):
|
|||
try:
|
||||
import silomesh
|
||||
except:
|
||||
print 'The silomesh package does not appear to be installed properly.\n'+\
|
||||
'See: https://github.com/nhorelik/silomesh/'
|
||||
print('The silomesh package does not appear to be installed properly.\n'
|
||||
'See: https://github.com/nhorelik/silomesh/')
|
||||
return
|
||||
if not o.output[-5:] == ".silo": o.output += ".silo"
|
||||
silomesh.init_silo(o.output)
|
||||
|
|
@ -86,10 +86,10 @@ def main(file_, o):
|
|||
for z in range(1,nz+1):
|
||||
id_ = get_int(fh)[0]
|
||||
silomesh.set_value(float(id_), x, y, z)
|
||||
print
|
||||
print()
|
||||
silomesh.finalize_var()
|
||||
silomesh.finalize_mesh()
|
||||
silomesh.finalize_silo()
|
||||
silomesh.finalize_silo()
|
||||
|
||||
################################################################################
|
||||
def get_header(file_):
|
||||
|
|
|
|||
|
|
@ -89,40 +89,40 @@ contains
|
|||
! VECTOR_SETUP_PETSC links the data to a PETSc vector
|
||||
!===============================================================================
|
||||
|
||||
#ifdef PETSC
|
||||
subroutine vector_setup_petsc(self)
|
||||
|
||||
class(Vector), intent(inout) :: self ! vector instance
|
||||
|
||||
! Link to PETSc
|
||||
#ifdef PETSC
|
||||
call VecCreateSeqWithArray(PETSC_COMM_WORLD, 1, self % n, self % val, &
|
||||
self % petsc_vec, petsc_err)
|
||||
#endif
|
||||
|
||||
! Set that PETSc is now active
|
||||
self % petsc_active = .true.
|
||||
|
||||
end subroutine vector_setup_petsc
|
||||
#endif
|
||||
|
||||
!===============================================================================
|
||||
! VECTOR_WRITE_PETSC_BINARY writes the PETSc vector to a binary file
|
||||
!===============================================================================
|
||||
|
||||
#ifdef PETSC
|
||||
subroutine vector_write_petsc_binary(self, filename)
|
||||
|
||||
character(*), intent(in) :: filename ! name of file to write to
|
||||
class(Vector), intent(in) :: self ! vector instance
|
||||
|
||||
#ifdef PETSC
|
||||
type(PetscViewer) :: viewer ! PETSc viewer instance
|
||||
|
||||
call PetscViewerBinaryOpen(PETSC_COMM_WORLD, trim(filename), &
|
||||
FILE_MODE_WRITE, viewer, petsc_err)
|
||||
call VecView(self % petsc_vec, viewer, petsc_err)
|
||||
call PetscViewerDestroy(viewer, petsc_err)
|
||||
#endif
|
||||
|
||||
end subroutine vector_write_petsc_binary
|
||||
#endif
|
||||
|
||||
!===============================================================================
|
||||
! VECTOR_COPY allocates a separate vector and copies
|
||||
|
|
|
|||
|
|
@ -1,71 +0,0 @@
|
|||
FoX - Fortran XML library
|
||||
|
||||
FoX was originally derived from the xmlf90 codebase,
|
||||
(c) Alberto Garcia & Jon Wakelin, 2003-2004.
|
||||
|
||||
FoX also includes externally-written code from
|
||||
Scott Ladd <scott.ladd@coyotegulch.com>, which is licensed
|
||||
as shown in the file utils/fox_m_utils_mtprng.f90
|
||||
|
||||
This version of FoX is:
|
||||
(c) 2005-2009 Toby White <tow@uszla.me.uk>
|
||||
(c) 2007-2009 Gen-Tao Chiang <gtc25@cam.ac.uk>
|
||||
(c) 2008-2012 Andrew Walker <a.walker@ucl.ac.uk>
|
||||
|
||||
All rights reserved.
|
||||
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
This distribution also includes code wrtten by Scott Ladd
|
||||
utils/,
|
||||
|
||||
! This computer program source file is supplied "AS IS". Scott Robert <br />
|
||||
! Ladd (hereinafter referred to as "Author") disclaims all warranties, <br />
|
||||
! expressed or implied, including, without limitation, the warranties <br />
|
||||
! of merchantability and of fitness for any purpose. The Author <br />
|
||||
! assumes no liability for direct, indirect, incidental, special, <br />
|
||||
! exemplary, or consequential damages, which may result from the use <br />
|
||||
! of this software, even if advised of the possibility of such damage. <br />
|
||||
! <br />
|
||||
! The Author hereby grants anyone permission to use, copy, modify, and <br />
|
||||
! distribute this source code, or portions hereof, for any purpose, <br />
|
||||
! without fee, subject to the following restrictions: <br />
|
||||
! <br />
|
||||
! 1. The origin of this source code must not be misrepresented. <br />
|
||||
! <br />
|
||||
! 2. Altered versions must be plainly marked as such and must not <br />
|
||||
! be misrepresented as being the original source. <br />
|
||||
! <br />
|
||||
! 3. This Copyright notice may not be removed or altered from any <br />
|
||||
! source or altered source distribution. <br />
|
||||
! <br />
|
||||
! The Author specifically permits (without fee) and encourages the use <br />
|
||||
! of this source code for entertainment, education, or decoration. If <br />
|
||||
! you use this source code in a product, acknowledgment is not required <br />
|
||||
! but would be appreciated.
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
xml_lib = lib/libxml.a
|
||||
|
||||
#===============================================================================
|
||||
# Targets
|
||||
#===============================================================================
|
||||
|
||||
$(xml_lib):
|
||||
mkdir -p include
|
||||
mkdir -p lib
|
||||
cd fsys; make MACHINE=$(MACHINE) F90=$(F90) F90FLAGS="$(F90FLAGS)"
|
||||
cd utils; make MACHINE=$(MACHINE) F90=$(F90) F90FLAGS="$(F90FLAGS)"
|
||||
cd common; make MACHINE=$(MACHINE) F90=$(F90) F90FLAGS="$(F90FLAGS)"
|
||||
cd wxml; make MACHINE=$(MACHINE) F90=$(F90) F90FLAGS="$(F90FLAGS)"
|
||||
cd sax; make MACHINE=$(MACHINE) F90=$(F90) F90FLAGS="$(F90FLAGS)"
|
||||
cd dom; make MACHINE=$(MACHINE) F90=$(F90) F90FLAGS="$(F90FLAGS)"
|
||||
cd lib; ar rcs libxml.a *.o; rm -f *.o
|
||||
|
||||
clean:
|
||||
cd fsys; make clean
|
||||
cd utils; make clean
|
||||
cd common; make clean
|
||||
cd wxml; make clean
|
||||
cd sax; make clean
|
||||
cd dom; make clean
|
||||
@rm -r -f include
|
||||
@rm -r -f lib
|
||||
|
||||
#===============================================================================
|
||||
# Rules
|
||||
#===============================================================================
|
||||
|
||||
.PHONY: clean
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
This directory contains source code from FoX - A Fortran Library for XML
|
||||
Current version is 4.1.2
|
||||
www1.gly.bris.ac.uk/~walker/FoX/
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
module FoX_common
|
||||
|
||||
use fox_m_fsys_array_str
|
||||
use fox_m_fsys_format
|
||||
use fox_m_fsys_parse_input
|
||||
use fox_m_fsys_count_parse_input
|
||||
use m_common_attrs
|
||||
use m_common_error
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
#ifdef DUMMYLIB
|
||||
character(len=*), parameter :: FoX_version = '4.1.2-dummy'
|
||||
#else
|
||||
character(len=*), parameter :: FoX_version = '4.1.2'
|
||||
#endif
|
||||
|
||||
public :: FoX_version
|
||||
|
||||
public :: rts
|
||||
public :: countrts
|
||||
public :: str
|
||||
public :: operator(//)
|
||||
|
||||
public :: FoX_set_fatal_errors
|
||||
public :: FoX_get_fatal_errors
|
||||
public :: FoX_set_fatal_warnings
|
||||
public :: FoX_get_fatal_warnings
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
public :: str_vs
|
||||
public :: vs_str
|
||||
public :: alloc
|
||||
public :: concat
|
||||
#endif
|
||||
|
||||
!These are all exported through SAX now
|
||||
public :: dictionary_t
|
||||
!SAX functions
|
||||
public :: getIndex
|
||||
public :: getLength
|
||||
public :: getLocalName
|
||||
public :: getQName
|
||||
public :: getURI
|
||||
public :: getValue
|
||||
public :: getType
|
||||
public :: isSpecified
|
||||
public :: isDeclared
|
||||
public :: setSpecified
|
||||
public :: setDeclared
|
||||
!For convenience
|
||||
public :: hasKey
|
||||
|
||||
end module FoX_common
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
source = $(wildcard *.F90)
|
||||
objects = $(source:.F90=.o)
|
||||
|
||||
#===============================================================================
|
||||
# Compiler Options
|
||||
#===============================================================================
|
||||
|
||||
# Ignore unusd variables
|
||||
|
||||
ifeq ($(MACHINE),bluegene)
|
||||
override F90 = xlf2003
|
||||
endif
|
||||
|
||||
ifeq ($(F90),ifort)
|
||||
override F90FLAGS += -warn nounused
|
||||
endif
|
||||
|
||||
#===============================================================================
|
||||
# Targets
|
||||
#===============================================================================
|
||||
|
||||
all: $(objects)
|
||||
mv *.mod ../include
|
||||
mv *.o ../lib
|
||||
clean:
|
||||
@rm -f *.o *.mod
|
||||
neat:
|
||||
@rm -f *.o *.mod
|
||||
|
||||
#===============================================================================
|
||||
# Rules
|
||||
#===============================================================================
|
||||
|
||||
.SUFFIXES: .F90 .o
|
||||
|
||||
.PHONY: clean neat
|
||||
|
||||
%.o: %.F90
|
||||
$(F90) $(F90FLAGS) -c -I../include $<
|
||||
|
||||
#===============================================================================
|
||||
# Dependencies
|
||||
#===============================================================================
|
||||
|
||||
FoX_common.o: m_common_attrs.o
|
||||
m_common_attrs.o: m_common_element.o m_common_error.o
|
||||
m_common_buffer.o: m_common_charset.o m_common_error.o
|
||||
m_common_element.o: m_common_charset.o m_common_content_model.o m_common_error.o m_common_namecheck.o
|
||||
m_common_elstack.o: m_common_content_model.o m_common_error.o
|
||||
m_common_entities.o: m_common_charset.o m_common_error.o
|
||||
m_common_entity_expand.o: m_common_entities.o m_common_error.o
|
||||
m_common_entity_expand.o: m_common_namecheck.o m_common_struct.o
|
||||
m_common_io.o: m_common_error.o
|
||||
m_common_namecheck.o: m_common_charset.o
|
||||
m_common_namespaces.o: m_common_attrs.o m_common_charset.o m_common_error.o
|
||||
m_common_namespaces.o: m_common_namecheck.o m_common_struct.o
|
||||
m_common_notations.o: m_common_error.o
|
||||
m_common_struct.o: m_common_charset.o m_common_element.o m_common_entities.o
|
||||
m_common_struct.o: m_common_notations.o
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,261 +0,0 @@
|
|||
module m_common_buffer
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
use fox_m_fsys_format, only: str
|
||||
use m_common_charset, only: XML1_0
|
||||
use m_common_error, only: FoX_error, FoX_warning
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
! At this point we use a fixed-size buffer.
|
||||
! Note however that buffer overflows will only be
|
||||
! triggered by overly long *unbroken* pcdata values, or
|
||||
! by overly long attribute values. Hopefully
|
||||
! element or attribute names are "short enough".
|
||||
!
|
||||
! In a forthcoming implementation it could be made dynamical...
|
||||
|
||||
! MAX_BUFF_SIZE cannot be bigger than the maximum available
|
||||
! record length for a compiler. In practice, this means
|
||||
! 1024 seems to be the biggest available size.
|
||||
|
||||
integer, parameter :: MAX_BUFF_SIZE = 1024
|
||||
|
||||
type buffer_t
|
||||
private
|
||||
integer :: size
|
||||
character(len=MAX_BUFF_SIZE) :: str
|
||||
integer :: unit
|
||||
integer :: xml_version
|
||||
end type buffer_t
|
||||
|
||||
public :: buffer_t
|
||||
|
||||
public :: add_to_buffer
|
||||
public :: print_buffer, str, char, len
|
||||
public :: buffer_to_chararray
|
||||
public :: reset_buffer
|
||||
public :: dump_buffer
|
||||
|
||||
interface str
|
||||
module procedure buffer_to_str
|
||||
end interface
|
||||
|
||||
interface char
|
||||
module procedure buffer_to_str
|
||||
end interface
|
||||
|
||||
interface len
|
||||
module procedure buffer_length
|
||||
end interface
|
||||
|
||||
contains
|
||||
|
||||
subroutine reset_buffer(buffer, unit, xml_version)
|
||||
type(buffer_t), intent(inout) :: buffer
|
||||
integer, intent(in), optional :: unit
|
||||
integer, intent(in) :: xml_version
|
||||
|
||||
buffer%size = 0
|
||||
if (present(unit)) then
|
||||
buffer%unit = unit
|
||||
else
|
||||
buffer%unit = 6
|
||||
endif
|
||||
buffer%xml_version = xml_version
|
||||
|
||||
end subroutine reset_buffer
|
||||
|
||||
|
||||
subroutine print_buffer(buffer)
|
||||
type(buffer_t), intent(in) :: buffer
|
||||
|
||||
write(unit=6,fmt="(a)") buffer%str(:buffer%size)
|
||||
|
||||
end subroutine print_buffer
|
||||
|
||||
|
||||
function buffer_to_str(buffer) result(str)
|
||||
type(buffer_t), intent(in) :: buffer
|
||||
character(len=buffer%size) :: str
|
||||
|
||||
str = buffer%str(:buffer%size)
|
||||
end function buffer_to_str
|
||||
|
||||
|
||||
function buffer_to_chararray(buffer) result(str)
|
||||
type(buffer_t), intent(in) :: buffer
|
||||
character(len=1), dimension(buffer%size) :: str
|
||||
integer :: i
|
||||
|
||||
do i = 1, buffer%size
|
||||
str(i) = buffer%str(i:i)
|
||||
enddo
|
||||
end function buffer_to_chararray
|
||||
|
||||
|
||||
function buffer_length(buffer) result(length)
|
||||
type(buffer_t), intent(in) :: buffer
|
||||
integer :: length
|
||||
|
||||
length = buffer%size
|
||||
|
||||
end function buffer_length
|
||||
|
||||
|
||||
subroutine dump_buffer(buffer, lf)
|
||||
type(buffer_t), intent(inout) :: buffer
|
||||
logical, intent(in), optional :: lf
|
||||
|
||||
integer :: i, n
|
||||
logical :: lf_
|
||||
|
||||
if (present(lf)) then
|
||||
lf_ = lf
|
||||
else
|
||||
lf_ = .true.
|
||||
endif
|
||||
|
||||
i = scan(buffer%str(:buffer%size), achar(10)//achar(13))
|
||||
n = 1
|
||||
do while (i>0)
|
||||
write(buffer%unit, '(a)', advance="yes") buffer%str(n:n+i-2)
|
||||
n = n + i
|
||||
if (n>buffer%size) exit
|
||||
i = scan(buffer%str(n:), achar(10)//achar(13))
|
||||
enddo
|
||||
|
||||
if (n<=buffer%size) then
|
||||
if (lf_) then
|
||||
write(buffer%unit, '(a)', advance="yes") buffer%str(n:buffer%size)
|
||||
else
|
||||
write(buffer%unit, '(a)', advance="no") buffer%str(n:buffer%size)
|
||||
endif
|
||||
endif
|
||||
|
||||
buffer%size = 0
|
||||
end subroutine dump_buffer
|
||||
|
||||
|
||||
subroutine check_buffer(s, version)
|
||||
character(len=*), intent(in) :: s
|
||||
integer, intent(in) :: version
|
||||
|
||||
integer :: i
|
||||
|
||||
!FIXME this is almost a duplicate of logic in wxml/m_wxml_escape.f90
|
||||
|
||||
! We have to do it this way (with achar etc) in case the native
|
||||
! platform encoding is not ASCII
|
||||
|
||||
do i = 1, len(s)
|
||||
select case (iachar(s(i:i)))
|
||||
case (0)
|
||||
call FoX_error("Tried to output a NUL character")
|
||||
case (1:8,11:12,14:31)
|
||||
if (version==XML1_0) then
|
||||
call FoX_error("Tried to output a character invalid under XML 1.0: &#"//str(iachar(s(i:i)))//";")
|
||||
endif
|
||||
case (128:)
|
||||
!TOHW we should maybe just disallow this ...
|
||||
call FoX_warning("emitting non-ASCII character. Platform-dependent result!")
|
||||
end select
|
||||
enddo
|
||||
|
||||
end subroutine check_buffer
|
||||
|
||||
|
||||
subroutine add_to_buffer(s, buffer, ws_significant)
|
||||
character(len=*), intent(in) :: s
|
||||
type(buffer_t), intent(inout) :: buffer
|
||||
logical, intent(in), optional :: ws_significant
|
||||
|
||||
character(len=(buffer%size+len(s))) :: s2
|
||||
integer :: i, n, len_b
|
||||
logical :: warning, ws_
|
||||
|
||||
! Is whitespace significant in this context?
|
||||
! We have to assume so unless told otherwise.
|
||||
if (present(ws_significant)) then
|
||||
ws_ = ws_significant
|
||||
else
|
||||
ws_ = .true.
|
||||
endif
|
||||
|
||||
! FIXME The algorithm below unilaterally forces all
|
||||
! line feeds and carriage returns to native EOL, regardless
|
||||
! of input document. Thus it is impossible to output a
|
||||
! document containing a literal non-native newline character
|
||||
! Ideally we would put this under the control of the user.
|
||||
|
||||
! We check if whitespace is significant. If not, we can
|
||||
! adjust the buffer without worrying about it.
|
||||
! But if we are not told, we warn about it.
|
||||
! And if we are told it definitely is - then we error out.
|
||||
|
||||
! If we overreach our buffer size, we will be unable to
|
||||
! output any more characters without a newline.
|
||||
! Go through new string, insert newlines
|
||||
! at spaces just before MAX_BUFF_SIZE chars
|
||||
! until we have less than MAX_BUFF_SIZE left to go,
|
||||
! then put that in the buffer.
|
||||
|
||||
! If no whitespace is found in the newly-added string, then
|
||||
! insert a new line immediately before it (at the end of the
|
||||
! current buffer)
|
||||
|
||||
call check_buffer(s, buffer%xml_version)
|
||||
|
||||
s2 = buffer%str(:buffer%size)//s
|
||||
|
||||
|
||||
! output as much of this using existing newlines as possible.
|
||||
warning = .false.
|
||||
n = 1
|
||||
do while (n<=len(s2))
|
||||
! Note this is an XML-1.0 only definition of newline
|
||||
i = scan(s2(n:), achar(10)//achar(13))
|
||||
if (i>0) then
|
||||
! turn that newline into an output newline ...
|
||||
write(buffer%unit, '(a)') s2(n:n+i-2)
|
||||
n = n + i
|
||||
elseif (n<=len(s2)-MAX_BUFF_SIZE) then
|
||||
! We need to insert a newline, or we'll overrun the buffer
|
||||
! No suitable newline, so convert a space or tab into a newline.
|
||||
i = scan(s2(n:n+MAX_BUFF_SIZE-1), achar(9)//achar(32), back=.true.)
|
||||
! If no space or tab is present, we fail.
|
||||
if (i>0.and..not.present(ws_significant)) then
|
||||
! We can insert a newline, but we don't know whether it is significant. Warn:
|
||||
if (.not.warning) then
|
||||
! We only output this warning once.
|
||||
call FoX_warning( &
|
||||
"Fortran made FoX insert a newline. "// &
|
||||
"If whitespace might be significant, check your output.")
|
||||
warning = .true.
|
||||
endif
|
||||
elseif (i==0) then
|
||||
call FoX_error( &
|
||||
"Fortran made FoX insert a newline but it can't. Stopping now.")
|
||||
elseif (ws_) then
|
||||
call FoX_error( &
|
||||
"Fortran made FoX insert a newline but whitespace is significant. Stopping now.")
|
||||
else
|
||||
continue ! without error or warning, because whitespace is not significant
|
||||
endif
|
||||
write(buffer%unit, '(a)') s2(n:n+i-1)
|
||||
n = n + i
|
||||
else
|
||||
! We don't need to do anything, just add the remainder to the buffer.
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
len_b = len(s2) - n + 1
|
||||
buffer%str(:len_b) = s2(n:)
|
||||
buffer%size = len_b
|
||||
|
||||
end subroutine add_to_buffer
|
||||
|
||||
#endif
|
||||
end module m_common_buffer
|
||||
|
|
@ -1,447 +0,0 @@
|
|||
module m_common_charset
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
! Written to use ASCII charset only. Full UNICODE would
|
||||
! take much more work and need a proper unicode library.
|
||||
|
||||
use fox_m_fsys_string, only: toLower
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
!!$ character(len=1), parameter :: ASCII = &
|
||||
!!$achar(0)//achar(1)//achar(2)//achar(3)//achar(4)//achar(5)//achar(6)//achar(7)//achar(8)//achar(9)//&
|
||||
!!$achar(10)//achar(11)//achar(12)//achar(13)//achar(14)//achar(15)//achar(16)//achar(17)//achar(18)//achar(19)//&
|
||||
!!$achar(20)//achar(21)//achar(22)//achar(23)//achar(24)//achar(25)//achar(26)//achar(27)//achar(28)//achar(29)//&
|
||||
!!$achar(30)//achar(31)//achar(32)//achar(33)//achar(34)//achar(35)//achar(36)//achar(37)//achar(38)//achar(39)//&
|
||||
!!$achar(40)//achar(41)//achar(42)//achar(43)//achar(44)//achar(45)//achar(46)//achar(47)//achar(48)//achar(49)//&
|
||||
!!$achar(50)//achar(51)//achar(52)//achar(53)//achar(54)//achar(55)//achar(56)//achar(57)//achar(58)//achar(59)//&
|
||||
!!$achar(60)//achar(61)//achar(62)//achar(63)//achar(64)//achar(65)//achar(66)//achar(67)//achar(68)//achar(69)//&
|
||||
!!$achar(70)//achar(71)//achar(72)//achar(73)//achar(74)//achar(75)//achar(76)//achar(77)//achar(78)//achar(79)//&
|
||||
!!$achar(80)//achar(81)//achar(82)//achar(83)//achar(84)//achar(85)//achar(86)//achar(87)//achar(88)//achar(89)//&
|
||||
!!$achar(90)//achar(91)//achar(92)//achar(93)//achar(94)//achar(95)//achar(96)//achar(97)//achar(98)//achar(99)//&
|
||||
!!$achar(100)//achar(101)//achar(102)//achar(103)//achar(104)//achar(105)//achar(106)//achar(107)//achar(108)//achar(109)//&
|
||||
!!$achar(110)//achar(111)//achar(112)//achar(113)//achar(114)//achar(115)//achar(116)//achar(117)//achar(118)//achar(119)//&
|
||||
!!$achar(120)//achar(121)//achar(122)//achar(123)//achar(124)//achar(125)//achar(126)//achar(127)
|
||||
|
||||
character(len=1), parameter :: SPACE = achar(32)
|
||||
character(len=1), parameter :: NEWLINE = achar(10)
|
||||
character(len=1), parameter :: CARRIAGE_RETURN = achar(13)
|
||||
character(len=1), parameter :: TAB = achar(9)
|
||||
|
||||
character(len=*), parameter :: whitespace = SPACE//NEWLINE//CARRIAGE_RETURN//TAB
|
||||
|
||||
character(len=*), parameter :: lowerCase = "abcdefghijklmnopqrstuvwxyz"
|
||||
character(len=*), parameter :: upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
character(len=*), parameter :: digits = "0123456789"
|
||||
character(len=*), parameter :: hexdigits = "0123456789abcdefABCDEF"
|
||||
character(len=*), parameter :: InitialNCNameChars = lowerCase//upperCase//"_"
|
||||
character(len=*), parameter :: NCNameChars = InitialNCNameChars//digits//".-"
|
||||
character(len=*), parameter :: InitialNameChars = InitialNCNameChars//":"
|
||||
character(len=*), parameter :: NameChars = NCNameChars//":"
|
||||
|
||||
character(len=*), parameter :: PubIdChars = NameChars//whitespace//"'()+,/=?;!*#@$%"
|
||||
character(len=*), parameter :: validchars = &
|
||||
whitespace//"!""#$%&'()*+,-./"//digits// &
|
||||
":;<=>?@"//upperCase//"[\]^_`"//lowerCase//"{|}~"
|
||||
! these are all the standard ASCII printable characters: whitespace + (33-126)
|
||||
! which are the only characters we can guarantee to know how to handle properly.
|
||||
|
||||
integer, parameter :: XML1_0 = 10 ! NB 0x7F was legal in XML-1.0, but illegal in XML-1.1
|
||||
|
||||
integer, parameter :: XML1_1 = 11
|
||||
|
||||
character(len=*), parameter :: XML1_0_ILLEGALCHARS = achar(0)
|
||||
character(len=*), parameter :: XML1_1_ILLEGALCHARS = NameChars
|
||||
|
||||
character(len=*), parameter :: XML1_0_INITIALNAMECHARS = InitialNameChars
|
||||
character(len=*), parameter :: XML1_1_INITIALNAMECHARS = InitialNameChars
|
||||
character(len=*), parameter :: XML1_0_NAMECHARS = NameChars
|
||||
character(len=*), parameter :: XML1_1_NAMECHARS = NameChars
|
||||
|
||||
character(len=*), parameter :: XML1_0_INITIALNCNAMECHARS = InitialNCNameChars
|
||||
character(len=*), parameter :: XML1_1_INITIALNCNAMECHARS = InitialNCNameChars
|
||||
character(len=*), parameter :: XML1_0_NCNAMECHARS = NCNameChars
|
||||
character(len=*), parameter :: XML1_1_NCNAMECHARS = NCNameChars
|
||||
|
||||
|
||||
character(len=*), parameter :: XML_WHITESPACE = whitespace
|
||||
character(len=*), parameter :: XML_INITIALENCODINGCHARS = lowerCase//upperCase
|
||||
character(len=*), parameter :: XML_ENCODINGCHARS = lowerCase//upperCase//digits//'._-'
|
||||
|
||||
public :: validchars
|
||||
public :: whitespace
|
||||
public :: uppercase
|
||||
|
||||
public :: digits
|
||||
public :: hexdigits
|
||||
|
||||
public :: XML1_0
|
||||
public :: XML1_1
|
||||
public :: XML1_0_NAMECHARS
|
||||
public :: XML1_1_NAMECHARS
|
||||
public :: XML1_0_INITIALNAMECHARS
|
||||
public :: XML1_1_INITIALNAMECHARS
|
||||
public :: XML_WHITESPACE
|
||||
public :: XML_INITIALENCODINGCHARS
|
||||
public :: XML_ENCODINGCHARS
|
||||
|
||||
public :: isLegalChar
|
||||
public :: isLegalCharRef
|
||||
public :: isRepCharRef
|
||||
public :: isInitialNameChar
|
||||
public :: isNameChar
|
||||
public :: isInitialNCNameChar
|
||||
public :: isNCNameChar
|
||||
public :: isXML1_0_NameChar
|
||||
public :: isXML1_1_NameChar
|
||||
public :: checkChars
|
||||
public :: isUSASCII
|
||||
public :: allowed_encoding
|
||||
|
||||
contains
|
||||
|
||||
pure function isLegalChar(c, ascii_p, xml_version) result(p)
|
||||
character, intent(in) :: c
|
||||
! really we should check the encoding here & be more intelligent
|
||||
! for now we worry only about is it ascii or not.
|
||||
logical, intent(in) :: ascii_p
|
||||
integer, intent(in) :: xml_version
|
||||
logical :: p
|
||||
! Is this character legal as a source character in the document?
|
||||
integer :: i
|
||||
i = iachar(c)
|
||||
if (i<0) then
|
||||
p = .false.
|
||||
return
|
||||
elseif (i>127) then
|
||||
p = .not.ascii_p
|
||||
return
|
||||
! ie if we are ASCII, then >127 is definitely illegal.
|
||||
! otherwise maybe it's ok
|
||||
endif
|
||||
select case(xml_version)
|
||||
case (XML1_0)
|
||||
p = (i==9.or.i==10.or.i==13.or.(i>31.and.i<128))
|
||||
case (XML1_1)
|
||||
p = (i==9.or.i==10.or.i==13.or.(i>31.and.i<127))
|
||||
! NB 0x7F was legal in XML-1.0, but illegal in XML-1.1
|
||||
end select
|
||||
end function isLegalChar
|
||||
|
||||
pure function isLegalCharRef(i, xml_version) result(p)
|
||||
integer, intent(in) :: i
|
||||
integer, intent(in) :: xml_version
|
||||
logical :: p
|
||||
|
||||
! Is Unicode character #i legal as a character reference?
|
||||
|
||||
if (xml_version==XML1_0) then
|
||||
p = (i==9).or.(i==10).or.(i==13).or.(i>31.and.i<55296).or.(i>57343.and.i<65534).or.(i>65535.and.i<1114112)
|
||||
elseif (xml_version==XML1_1) then
|
||||
p = (i>0.and.i<55296).or.(i>57343.and.i<65534).or.(i>65535.and.i<1114112)
|
||||
! XML 1.1 made all control characters legal as character references.
|
||||
end if
|
||||
end function isLegalCharRef
|
||||
|
||||
pure function isRepCharRef(i, xml_version) result(p)
|
||||
integer, intent(in) :: i
|
||||
integer, intent(in) :: xml_version
|
||||
logical :: p
|
||||
|
||||
! Is Unicode character #i legal and representable here?
|
||||
|
||||
if (xml_version==XML1_0) then
|
||||
p = (i==9).or.(i==10).or.(i==13).or.(i>31.and.i<128)
|
||||
elseif (xml_version==XML1_1) then
|
||||
p = (i>0.and.i<128)
|
||||
! XML 1.1 made all control characters legal as character references.
|
||||
end if
|
||||
end function isRepCharRef
|
||||
|
||||
pure function isInitialNameChar(c, xml_version) result(p)
|
||||
character, intent(in) :: c
|
||||
integer, intent(in) :: xml_version
|
||||
logical :: p
|
||||
|
||||
select case(xml_version)
|
||||
case (XML1_0)
|
||||
p = (verify(c, XML1_0_INITIALNAMECHARS)==0)
|
||||
case (XML1_1)
|
||||
p = (verify(c, XML1_1_INITIALNAMECHARS)==0)
|
||||
end select
|
||||
|
||||
end function isInitialNameChar
|
||||
|
||||
pure function isNameChar(c, xml_version) result(p)
|
||||
character(len=*), intent(in) :: c
|
||||
integer, intent(in) :: xml_version
|
||||
logical :: p
|
||||
|
||||
select case(xml_version)
|
||||
case (XML1_0)
|
||||
p = (verify(c, XML1_0_NAMECHARS)==0)
|
||||
case (XML1_1)
|
||||
p = (verify(c, XML1_1_NAMECHARS)==0)
|
||||
end select
|
||||
|
||||
end function isNameChar
|
||||
|
||||
pure function isInitialNCNameChar(c, xml_version) result(p)
|
||||
character, intent(in) :: c
|
||||
integer, intent(in) :: xml_version
|
||||
logical :: p
|
||||
|
||||
select case(xml_version)
|
||||
case (XML1_0)
|
||||
p = (verify(c, XML1_0_INITIALNCNAMECHARS)==0)
|
||||
case (XML1_1)
|
||||
p = (verify(c, XML1_1_INITIALNCNAMECHARS)==0)
|
||||
end select
|
||||
end function isInitialNCNameChar
|
||||
|
||||
pure function isNCNameChar(c, xml_version) result(p)
|
||||
character(len=*), intent(in) :: c
|
||||
integer, intent(in) :: xml_version
|
||||
logical :: p
|
||||
|
||||
select case(xml_version)
|
||||
case (XML1_0)
|
||||
p = (verify(c, XML1_0_NCNAMECHARS)==0)
|
||||
case (XML1_1)
|
||||
p = (verify(c, XML1_1_NCNAMECHARS)==0)
|
||||
end select
|
||||
end function isNCNameChar
|
||||
|
||||
function isXML1_0_NameChar(c) result(p)
|
||||
character, intent(in) :: c
|
||||
logical :: p
|
||||
|
||||
p = (verify(c, XML1_0_NAMECHARS)==0)
|
||||
|
||||
end function isXML1_0_NameChar
|
||||
|
||||
function isXML1_1_NameChar(c) result(p)
|
||||
character, intent(in) :: c
|
||||
logical :: p
|
||||
|
||||
p = (verify(c, XML1_1_NAMECHARS)==0)
|
||||
|
||||
end function isXML1_1_NameChar
|
||||
|
||||
pure function checkChars(value, xv) result(p)
|
||||
character(len=*), intent(in) :: value
|
||||
integer, intent(in) :: xv
|
||||
logical :: p
|
||||
|
||||
! This checks if value only contains values
|
||||
! legal to appear (escaped or unescaped)
|
||||
! according to whichever XML version is in force.
|
||||
integer :: i
|
||||
|
||||
p = .true.
|
||||
do i = 1, len(value)
|
||||
if (xv == XML1_0) then
|
||||
select case(iachar(value(i:i)))
|
||||
case (0,8)
|
||||
p = .false.
|
||||
case (11,12)
|
||||
p = .false.
|
||||
end select
|
||||
else
|
||||
if (iachar(value(i:i))==0) p =.false.
|
||||
endif
|
||||
enddo
|
||||
end function checkChars
|
||||
|
||||
function isUSASCII(encoding) result(p)
|
||||
character(len=*), intent(in) :: encoding
|
||||
logical :: p
|
||||
|
||||
character(len=len(encoding)) :: enc
|
||||
enc = toLower(encoding)
|
||||
p = (enc=="ansi_x3.4-1968" &
|
||||
.or. enc=="ansi_x3.4-1986" &
|
||||
.or. enc=="iso_646.irv:1991" &
|
||||
.or. enc=="ascii" &
|
||||
.or. enc=="iso646-us" &
|
||||
.or. enc=="us-ascii" &
|
||||
.or. enc=="us" &
|
||||
.or. enc=="ibm367" &
|
||||
.or. enc=="cp367" &
|
||||
.or. enc=="csascii")
|
||||
|
||||
end function isUSASCII
|
||||
|
||||
function allowed_encoding(encoding) result(p)
|
||||
character(len=*), intent(in) :: encoding
|
||||
logical :: p
|
||||
|
||||
character(len=len(encoding)) :: enc
|
||||
logical :: utf8, usascii, iso88591, iso88592, iso88593, iso88594, &
|
||||
iso88595, iso88596, iso88597, iso88598, iso88599, iso885910, &
|
||||
iso885913, iso885914, iso885915, iso885916
|
||||
|
||||
enc = toLower(encoding)
|
||||
|
||||
! From http://www.iana.org/assignments/character-sets
|
||||
! We can only reliably do US-ASCII (the below is mostly
|
||||
! a list of synonyms for US-ASCII) but we also accept
|
||||
! UTF-8 as a practicality. We bail out if any non-ASCII
|
||||
! characters are used later on.
|
||||
utf8 = (enc=="utf-8")
|
||||
|
||||
usascii = (enc=="ansi_x3.4-1968" &
|
||||
.or. enc=="ansi_x3.4-1986" &
|
||||
.or. enc=="iso_646.irv:1991" &
|
||||
.or. enc=="ascii" &
|
||||
.or. enc=="iso646-us" &
|
||||
.or. enc=="us-ascii" &
|
||||
.or. enc=="us" &
|
||||
.or. enc=="ibm367" &
|
||||
.or. enc=="cp367" &
|
||||
.or. enc=="csascii")
|
||||
! As of FoX 4.0, we accept ISO-8859-??, also as practicality
|
||||
! since we know it is identical to ASCII as far as 0x7F
|
||||
|
||||
iso88591 = (enc =="iso_8859-1:1987" &
|
||||
.or. enc=="iso-ir-100" &
|
||||
.or. enc=="iso_8859-1" &
|
||||
.or. enc=="iso-8859-1" &
|
||||
.or. enc=="latin1" &
|
||||
.or. enc=="l1" &
|
||||
.or. enc=="ibm819" &
|
||||
.or. enc=="cp819" &
|
||||
.or. enc=="csisolatin1")
|
||||
|
||||
iso88592 = (enc=="iso_8859-2:1987" &
|
||||
.or. enc=="iso-ir-101" &
|
||||
.or. enc=="iso_8859-2" &
|
||||
.or. enc=="iso-8859-2" &
|
||||
.or. enc=="latin2" &
|
||||
.or. enc=="l2" &
|
||||
.or. enc=="csisolatin2")
|
||||
|
||||
iso88593 = (enc=="iso_8859-3:1988" &
|
||||
.or. enc=="iso-ir-109" &
|
||||
.or. enc=="iso_8859-3" &
|
||||
.or. enc=="iso-8859-3" &
|
||||
.or. enc=="latin3" &
|
||||
.or. enc=="l3" &
|
||||
.or. enc=="csisolatin3")
|
||||
|
||||
iso88594 = (enc=="iso_8859-4:1988" &
|
||||
.or. enc=="iso-ir-110" &
|
||||
.or. enc=="iso_8859-4" &
|
||||
.or. enc=="iso-8859-4" &
|
||||
.or. enc=="latin4" &
|
||||
.or. enc=="l4" &
|
||||
.or. enc=="csisolatin4")
|
||||
|
||||
iso88595 = (enc=="iso_8859-5:1988" &
|
||||
.or. enc=="iso-ir-144" &
|
||||
.or. enc=="iso_8859-5" &
|
||||
.or. enc=="iso-8859-5" &
|
||||
.or. enc=="cyrillic" &
|
||||
.or. enc=="csisolatincyrillic")
|
||||
|
||||
iso88596 = (enc=="iso_8859-6:1987" &
|
||||
.or. enc=="iso-ir-127" &
|
||||
.or. enc=="iso_8859-6" &
|
||||
.or. enc=="iso-8859-6" &
|
||||
.or. enc=="ecma-114" &
|
||||
.or. enc=="asmo-708" &
|
||||
.or. enc=="arabic" &
|
||||
.or. enc=="csisolatinarabic")
|
||||
|
||||
iso88597 = (enc=="iso_8859-7:1987" &
|
||||
.or. enc=="iso-ir-126" &
|
||||
.or. enc=="iso_8859-7" &
|
||||
.or. enc=="iso-8859-7" &
|
||||
.or. enc=="elot_928" &
|
||||
.or. enc=="ecma-118" &
|
||||
.or. enc=="greek" &
|
||||
.or. enc=="greek8" &
|
||||
.or. enc=="csisolatingreek")
|
||||
|
||||
iso88598 = (enc=="iso_8859-8:1988" &
|
||||
.or. enc=="iso-ir-138" &
|
||||
.or. enc=="iso_8859-8" &
|
||||
.or. enc=="iso-8859-8" &
|
||||
.or. enc=="hebrew" &
|
||||
.or. enc=="csisolatinhebrew")
|
||||
|
||||
iso88599 = (enc=="iso_8859-9:1989" &
|
||||
.or. enc=="iso-ir-148" &
|
||||
.or. enc=="iso_8859-9" &
|
||||
.or. enc=="iso-8859-9" &
|
||||
.or. enc=="latin5" &
|
||||
.or. enc=="l5" &
|
||||
.or. enc=="csisolatin5")
|
||||
|
||||
iso885910 = (enc=="iso-8859-10" &
|
||||
.or. enc=="iso-ir-157" &
|
||||
.or. enc=="l6" &
|
||||
.or. enc=="iso_8859-10:1992" &
|
||||
.or. enc=="csisolatin6" &
|
||||
.or. enc=="latin6")
|
||||
|
||||
! ISO 6937 replaces $ sign with currency sign.
|
||||
! JIS-X0201 has Yen instead of backslash, macron instead of tilde
|
||||
! 16, 17, 18, 19 - Japanese encoding we can't use.
|
||||
! BS 4730 replaces hash with UK pound sign, and tilde to macron
|
||||
! 21, 22, 23, 24, 25, 26 - other variants of iso646, similar but not identical
|
||||
|
||||
! iso10646utf1 = (enc=="iso-10646-utf-1") ! FIXME check
|
||||
! iso656basic1983 = (enc=="iso_646.basic:1983" &
|
||||
! .or. enc=="csiso646basic1983") ! FIXME check
|
||||
! INVARIANT - almost but not quite a subset of ASCII
|
||||
! iso646irv = (enc=="iso_646.irv:1983" &
|
||||
! .or. enc=="iso-ir-2" &
|
||||
! .or. enc=="irv")
|
||||
! 31, 32, 33, 34 - NATS scandinavian, different from ASCII
|
||||
! 35 - another iso646 variant
|
||||
! 36, 37, 38 Korean shifted/multibyte
|
||||
! 39, 40 Japanese shifted/multibyte
|
||||
! 41, 42, JIS (iso646inv 7 bits)
|
||||
! 43 another iso646 variantt
|
||||
! 44, 45 greek variants
|
||||
! 46 another iso646 variant
|
||||
! 47 greek
|
||||
! 48 cyrillic ascii relationship unknown
|
||||
! 49 JIS again
|
||||
! 50 similar not identical
|
||||
! 51, 52, 53 not identical
|
||||
! 54 see 48
|
||||
! 55 see 47
|
||||
! 56 another iso646 variant
|
||||
! 57 chinese
|
||||
! ... to be continued
|
||||
|
||||
iso885913 = (enc=="iso-8859-13")
|
||||
iso885914 = (enc=="iso-8859-14" &
|
||||
.or. enc=="iso-ir-199" &
|
||||
.or. enc=="iso_8859-14:1998" &
|
||||
.or. enc=="iso_8849-14" &
|
||||
.or. enc=="iso_latin8" &
|
||||
.or. enc=="iso-celtic" &
|
||||
.or. enc=="l8")
|
||||
iso885915 = (enc=="iso-8859-15" &
|
||||
.or. enc=="iso-8859-15" &
|
||||
.or. enc=="latin-9")
|
||||
iso885916 = (enc=="iso-8859-16" &
|
||||
.or. enc=="iso-ir226" &
|
||||
.or. enc=="iso_8859-16:2001" &
|
||||
.or. enc=="iso_8859-16" &
|
||||
.or. enc=="latin10" &
|
||||
.or. enc=="l10")
|
||||
|
||||
p = utf8.or.usascii.or.iso88591.or.iso88592.or.iso88593 &
|
||||
.or.iso88594.or.iso88595.or.iso88596.or.iso88597 &
|
||||
.or.iso88598.or.iso88599.or.iso885910.or.iso885913 &
|
||||
.or.iso885914.or.iso885915.or.iso885916
|
||||
|
||||
end function allowed_encoding
|
||||
|
||||
#endif
|
||||
end module m_common_charset
|
||||
|
|
@ -1,490 +0,0 @@
|
|||
module m_common_content_model
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
! Allow validating the content model of an XML document
|
||||
|
||||
use fox_m_fsys_array_str, only: str_vs, vs_str_alloc, vs_vs_alloc
|
||||
implicit none
|
||||
private
|
||||
|
||||
integer, parameter :: OP_NULL = 0
|
||||
integer, parameter :: OP_EMPTY = 1
|
||||
integer, parameter :: OP_ANY = 2
|
||||
integer, parameter :: OP_MIXED = 3
|
||||
integer, parameter :: OP_NAME = 4
|
||||
integer, parameter :: OP_CHOICE = 5
|
||||
integer, parameter :: OP_SEQ = 6
|
||||
|
||||
integer, parameter :: REP_NULL = 0
|
||||
integer, parameter :: REP_ONCE = 1
|
||||
integer, parameter :: REP_QUESTION_MARK = 2
|
||||
integer, parameter :: REP_ASTERISK = 3
|
||||
|
||||
type content_particle_t
|
||||
character, pointer :: name(:) => null()
|
||||
integer :: operator = OP_NULL
|
||||
integer :: repeater = REP_NULL
|
||||
type(content_particle_t), pointer :: nextSibling => null()
|
||||
type(content_particle_t), pointer :: parent => null()
|
||||
type(content_particle_t), pointer :: firstChild => null()
|
||||
end type content_particle_t
|
||||
|
||||
public :: content_particle_t
|
||||
|
||||
public :: newCP
|
||||
public :: transformCPPlus
|
||||
public :: checkCP
|
||||
public :: checkCPToEnd
|
||||
public :: elementContentCP
|
||||
public :: emptyContentCP
|
||||
public :: destroyCPtree
|
||||
public :: dumpCPtree
|
||||
|
||||
public :: OP_NULL, OP_NAME, OP_MIXED, OP_CHOICE, OP_SEQ
|
||||
public :: REP_QUESTION_MARK, REP_ASTERISK
|
||||
|
||||
contains
|
||||
|
||||
function newCP(empty, any, name, repeat) result(cp)
|
||||
logical, intent(in), optional :: empty
|
||||
logical, intent(in), optional :: any
|
||||
character(len=*), intent(in), optional :: name
|
||||
character, intent(in), optional :: repeat
|
||||
type(content_particle_t), pointer :: cp
|
||||
|
||||
allocate(cp)
|
||||
if (present(empty)) then
|
||||
cp%operator = OP_EMPTY
|
||||
elseif (present(any)) then
|
||||
cp%operator = OP_ANY
|
||||
elseif (present(name)) then
|
||||
cp%operator = OP_NAME
|
||||
cp%name => vs_str_alloc(name)
|
||||
else
|
||||
cp%operator = OP_SEQ
|
||||
endif
|
||||
if (present(repeat)) then
|
||||
select case (repeat)
|
||||
case("?")
|
||||
cp%repeater = REP_QUESTION_MARK
|
||||
case("*")
|
||||
cp%repeater = REP_ASTERISK
|
||||
end select
|
||||
endif
|
||||
|
||||
end function newCP
|
||||
|
||||
function copyCP(cp) result(cp_out)
|
||||
type(content_particle_t), pointer :: cp
|
||||
type(content_particle_t), pointer :: cp_out
|
||||
|
||||
allocate(cp_out)
|
||||
if (associated(cp%name)) cp_out%name => vs_vs_alloc(cp%name)
|
||||
cp_out%operator = cp%operator
|
||||
cp_out%repeater = cp%repeater
|
||||
end function copyCP
|
||||
|
||||
function copyCPtree(cp) result(cp_out)
|
||||
type(content_particle_t), pointer :: cp
|
||||
type(content_particle_t), pointer :: cp_out
|
||||
|
||||
type(content_particle_t), pointer :: tcp, tcp_out, tcpn_out, tcpp_out
|
||||
logical :: done
|
||||
|
||||
tcp => cp
|
||||
cp_out => copyCP(cp)
|
||||
tcp_out => cp_out
|
||||
done = .false.
|
||||
do while (associated(tcp_out))
|
||||
if (.not.done) then
|
||||
do while (associated(tcp%firstChild))
|
||||
tcp => tcp%firstChild
|
||||
tcpn_out => copyCP(tcp)
|
||||
tcp_out%firstChild => tcpn_out
|
||||
tcpn_out%parent => tcp_out
|
||||
tcp_out => tcpn_out
|
||||
enddo
|
||||
endif
|
||||
tcpp_out => tcp_out%parent
|
||||
if (associated(tcp%nextSibling)) then
|
||||
done = .false.
|
||||
tcp => tcp%nextSibling
|
||||
tcpn_out => copyCP(tcp)
|
||||
tcp_out%nextSibling => tcpn_out
|
||||
tcpn_out%parent => tcpp_out
|
||||
tcp_out => tcpn_out
|
||||
else
|
||||
done = .true.
|
||||
tcp => tcp%parent
|
||||
tcp_out => tcp_out%parent
|
||||
endif
|
||||
enddo
|
||||
end function copyCPtree
|
||||
|
||||
subroutine transformCPPlus(cp)
|
||||
type(content_particle_t), pointer :: cp
|
||||
|
||||
type(content_particle_t), pointer :: tcp, cp_new
|
||||
|
||||
! Make copy of cp, and graft children on
|
||||
cp_new => copyCP(cp)
|
||||
cp_new%firstChild => cp%firstChild
|
||||
|
||||
! Reset children's parents ...
|
||||
tcp => cp%firstChild
|
||||
do while (associated(tcp))
|
||||
tcp%parent => cp_new
|
||||
tcp => tcp%nextSibling
|
||||
enddo
|
||||
|
||||
! Clear cp & make it an SEQ
|
||||
if (associated(cp%name)) deallocate(cp%name)
|
||||
cp%operator = OP_SEQ
|
||||
|
||||
! Append our copied cp to the now-an-SEQ
|
||||
cp%firstChild => cp_new
|
||||
cp_new%parent => cp
|
||||
|
||||
! Copy it for a sibling, and make the sibling a *
|
||||
cp_new%nextSibling => copyCPtree(cp_new)
|
||||
cp_new%nextSibling%parent => cp
|
||||
cp_new%nextSibling%repeater = REP_ASTERISK
|
||||
|
||||
end subroutine transformCPPlus
|
||||
|
||||
function checkCP(cp, name) result(p)
|
||||
type(content_particle_t), pointer :: cp
|
||||
character(len=*), intent(in) :: name
|
||||
logical :: p
|
||||
|
||||
type(content_particle_t), pointer :: tcp
|
||||
|
||||
! for EMPTY, ANY or MIXED, cp never moves.
|
||||
! for element content, we move the pointer as we
|
||||
! move through the regex.
|
||||
|
||||
! If the regex includes ambiguous content, we are
|
||||
! a bit screwed. But the document is in error if so.
|
||||
! (and we are not required to diagnose errors.)
|
||||
|
||||
p = .false.
|
||||
if (.not.associated(cp)) return
|
||||
|
||||
select case(cp%operator)
|
||||
case (OP_EMPTY)
|
||||
continue ! anything fails
|
||||
case (OP_ANY)
|
||||
p = .true.
|
||||
case (OP_MIXED)
|
||||
tcp => cp%firstChild
|
||||
do while (associated(tcp))
|
||||
if (name==str_vs(tcp%name)) then
|
||||
p = .true.
|
||||
exit
|
||||
endif
|
||||
tcp => tcp%nextSibling
|
||||
enddo
|
||||
case default
|
||||
do
|
||||
if (.not.associated(cp)) exit
|
||||
select case (cp%operator)
|
||||
case (OP_NAME)
|
||||
p = (name==str_vs(cp%name))
|
||||
if (p) then
|
||||
tcp => nextCPAfterMatch(cp)
|
||||
cp => tcp
|
||||
exit
|
||||
else
|
||||
tcp => nextCPAfterFail(cp)
|
||||
cp => tcp
|
||||
endif
|
||||
case (OP_CHOICE, OP_SEQ)
|
||||
cp => cp%firstChild
|
||||
end select
|
||||
end do
|
||||
end select
|
||||
|
||||
end function checkCP
|
||||
|
||||
function nextCPaftermatch(cp) result(cp_next)
|
||||
type (content_particle_t), pointer :: cp
|
||||
type (content_particle_t), pointer :: cp_next
|
||||
|
||||
type (content_particle_t), pointer :: tcp
|
||||
|
||||
cp_next => cp
|
||||
|
||||
do
|
||||
if (cp_next%repeater==REP_ASTERISK) exit
|
||||
tcp => cp_next%parent
|
||||
if (associated(tcp)) then
|
||||
if (tcp%operator==OP_CHOICE) then
|
||||
! siblings are uninteresting, we've matched this CHOICE
|
||||
cp_next => tcp
|
||||
! Move up & try the whole thing again on the parent CHOICE
|
||||
elseif (tcp%operator==OP_SEQ) then
|
||||
! we do care about siblings, move onto next one
|
||||
if (associated(cp_next%nextSibling)) then
|
||||
cp_next => cp_next%nextSibling
|
||||
! thatll do, itll be the next thing to try
|
||||
exit
|
||||
else
|
||||
! No sibling, move up a level
|
||||
cp_next => tcp
|
||||
! and try again
|
||||
endif
|
||||
endif
|
||||
else
|
||||
! We've got to the top already.
|
||||
cp_next => tcp
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function nextCPaftermatch
|
||||
|
||||
function nextCPafterfail(cp) result(cp_next)
|
||||
type(content_particle_t), pointer :: cp
|
||||
type(content_particle_t), pointer :: cp_next
|
||||
|
||||
type(content_particle_t), pointer :: tcp
|
||||
logical :: match
|
||||
|
||||
match = .false.
|
||||
cp_next => cp
|
||||
do
|
||||
tcp => cp_next%parent
|
||||
if (associated(tcp)) then
|
||||
if (tcp%operator==OP_CHOICE) then
|
||||
! we care about siblings, lets try the next one
|
||||
if (associated(cp_next%nextSibling)) then
|
||||
cp_next => cp_next%nextSibling
|
||||
! super, lets go back and try that
|
||||
exit
|
||||
else ! weve failed to match any cp in this CHOICE ...
|
||||
cp_next => tcp
|
||||
! go up a level and see if theres another legitimate choice
|
||||
endif
|
||||
elseif (tcp%operator==OP_SEQ) then
|
||||
if ((match.or.cp_next%repeater/=REP_NULL) &
|
||||
.and.associated(cp_next%nextSibling)) then
|
||||
! we were allowed to fail to match, try sibling
|
||||
cp_next => cp_next%nextSibling
|
||||
exit
|
||||
elseif (cp_next%repeater/=REP_NULL) then
|
||||
match = .true.
|
||||
! The last item was optional, so weve matched at this level
|
||||
cp_next => tcp
|
||||
elseif (associated(tcp%firstChild, cp_next)) then
|
||||
! we havent matched - but we hadnt started, Maybe it was ok
|
||||
! not to match because we are nested inside an optional thingy
|
||||
cp_next => tcp
|
||||
else
|
||||
! We were not allowed to fail there,
|
||||
! there is no legitimate next choice.
|
||||
cp_next => null()
|
||||
exit
|
||||
endif
|
||||
endif
|
||||
else
|
||||
! weve got all the way to the top without
|
||||
! finding a new cp to try. But if this top-level
|
||||
! cp is ASTERISK'ed we can try it agin
|
||||
cp_next => null()
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function nextCPafterfail
|
||||
|
||||
function checkCPToEnd(cp) result(p)
|
||||
type(content_particle_t), pointer :: cp
|
||||
logical :: p
|
||||
|
||||
type(content_particle_t), pointer :: tcp
|
||||
|
||||
if (associated(cp)) then
|
||||
select case(cp%operator)
|
||||
case (OP_EMPTY, OP_ANY, OP_MIXED)
|
||||
p = .true.
|
||||
case default
|
||||
tcp => nextCPMustMatch(cp)
|
||||
p = .not.associated(tcp)
|
||||
end select
|
||||
else
|
||||
p = .true.
|
||||
endif
|
||||
end function checkCPToEnd
|
||||
|
||||
function nextCPMustMatch(cp) result(cp_next)
|
||||
type(content_particle_t), pointer :: cp
|
||||
type(content_particle_t), pointer :: cp_next
|
||||
|
||||
type(content_particle_t), pointer :: tcp
|
||||
|
||||
if (.not.associated(cp)) return
|
||||
if (.not.associated(cp%parent)) then
|
||||
! we havent started exploring this one.
|
||||
! get the first starting position
|
||||
cp_next => cp
|
||||
do while (cp_next%repeater==REP_NULL)
|
||||
if (associated(cp_next%firstChild)) then
|
||||
cp_next => cp_next%firstChild
|
||||
else
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
else
|
||||
cp_next => cp
|
||||
endif
|
||||
if (cp_next%repeater==REP_NULL) return
|
||||
do
|
||||
tcp => cp_next%parent
|
||||
if (associated(tcp)) then
|
||||
if (tcp%operator==OP_CHOICE) then
|
||||
! its matched by the optional one we are on, go up a level
|
||||
cp_next => tcp
|
||||
elseif (tcp%operator==OP_SEQ) then
|
||||
! check all siblings for any compulsory ones
|
||||
do while (associated(cp_next%nextSibling))
|
||||
cp_next => cp_next%nextSibling
|
||||
if (cp_next%repeater==REP_NULL) return
|
||||
enddo
|
||||
! all were optional, go up a level
|
||||
cp_next => tcp
|
||||
endif
|
||||
else
|
||||
! weve got all the way to the top without
|
||||
! finding a new cp to try
|
||||
cp_next => tcp
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function nextCPMustMatch
|
||||
|
||||
function elementContentCP(cp) result(p)
|
||||
type(content_particle_t), pointer :: cp
|
||||
logical :: p
|
||||
|
||||
if (associated(cp)) then
|
||||
select case (cp%operator)
|
||||
case (OP_EMPTY, OP_ANY, OP_MIXED)
|
||||
p = .false.
|
||||
case default
|
||||
p = .true.
|
||||
end select
|
||||
else
|
||||
p = .true.
|
||||
endif
|
||||
|
||||
end function elementContentCP
|
||||
|
||||
function emptyContentCP(cp) result(p)
|
||||
type(content_particle_t), pointer :: cp
|
||||
logical :: p
|
||||
|
||||
if (associated(cp)) then
|
||||
p = cp%operator==OP_EMPTY
|
||||
else
|
||||
p = .false.
|
||||
endif
|
||||
|
||||
end function emptyContentCP
|
||||
|
||||
subroutine destroyCP(cp)
|
||||
type(content_particle_t), pointer :: cp
|
||||
|
||||
if (associated(cp%name)) deallocate(cp%name)
|
||||
deallocate(cp)
|
||||
end subroutine destroyCP
|
||||
|
||||
subroutine destroyCPtree(cp)
|
||||
type(content_particle_t), pointer :: cp
|
||||
|
||||
type(content_particle_t), pointer :: current, tcp
|
||||
|
||||
current => cp
|
||||
do
|
||||
do while (associated(current%firstChild))
|
||||
current => current%firstChild
|
||||
enddo
|
||||
if (associated(current, cp)) exit
|
||||
tcp => current
|
||||
if (associated(current%nextSibling)) then
|
||||
current => current%nextSibling
|
||||
call destroyCP(tcp)
|
||||
else
|
||||
current => current%parent
|
||||
call destroyCP(tcp)
|
||||
current%firstChild => null()
|
||||
endif
|
||||
enddo
|
||||
call destroyCP(cp)
|
||||
|
||||
end subroutine destroyCPtree
|
||||
|
||||
subroutine dumpCP(cp)
|
||||
type(content_particle_t), pointer :: cp
|
||||
|
||||
select case(cp%operator)
|
||||
case (OP_EMPTY)
|
||||
write(*,'(a)', advance="no") "EMPTY"
|
||||
case (OP_ANY)
|
||||
write(*,'(a)', advance="no") "ANY"
|
||||
case (OP_MIXED)
|
||||
write(*,'(a)', advance="no") "MIXED"
|
||||
case (OP_NAME)
|
||||
write(*,'(a)', advance="no") str_vs(cp%name)
|
||||
case (OP_CHOICE)
|
||||
write(*,'(a)', advance="no") "CHOICE"
|
||||
case (OP_SEQ)
|
||||
write(*,'(a)', advance="no") "SEQ"
|
||||
end select
|
||||
select case(cp%repeater)
|
||||
case (REP_QUESTION_MARK)
|
||||
write(*,'(a)', advance="no") "?"
|
||||
case (REP_ASTERISK)
|
||||
write(*,'(a)', advance="no") "*"
|
||||
end select
|
||||
write(*,*)
|
||||
end subroutine dumpCP
|
||||
|
||||
subroutine dumpCPtree(cp)
|
||||
type(content_particle_t), pointer :: cp
|
||||
|
||||
type(content_particle_t), pointer :: current
|
||||
|
||||
integer :: i
|
||||
logical :: done
|
||||
i = 0
|
||||
current => cp
|
||||
done = .false.
|
||||
call dumpCP(current)
|
||||
do
|
||||
if (.not.done) then
|
||||
do while (associated(current%firstChild))
|
||||
i = i + 2
|
||||
current => current%firstChild
|
||||
write(*,'(a)', advance="no") repeat(" ",i)
|
||||
call dumpCP(current)
|
||||
enddo
|
||||
endif
|
||||
if (associated(current, cp)) exit
|
||||
if (associated(current%nextSibling)) then
|
||||
done = .false.
|
||||
current => current%nextSibling
|
||||
write(*,'(a)', advance="no") repeat(" ",i)
|
||||
call dumpCP(current)
|
||||
else
|
||||
done = .true.
|
||||
i = i - 2
|
||||
current => current%parent
|
||||
endif
|
||||
enddo
|
||||
|
||||
end subroutine dumpCPtree
|
||||
|
||||
#endif
|
||||
|
||||
end module m_common_content_model
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,236 +0,0 @@
|
|||
module m_common_elstack
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
use fox_m_fsys_array_str, only: str_vs, vs_str
|
||||
use m_common_error, only: FoX_fatal
|
||||
use m_common_content_model, only: content_particle_t, checkCP, &
|
||||
elementContentCP, emptyContentCP, checkCPToEnd
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
! Element stack during parsing. Keeps track of element names
|
||||
! and optionally tracks validity of content model
|
||||
|
||||
! Initial stack size:
|
||||
integer, parameter :: STACK_SIZE_INIT = 10
|
||||
! Multiplier when stack is exceeded:
|
||||
real, parameter :: STACK_SIZE_MULT = 1.5
|
||||
|
||||
type :: elstack_item
|
||||
character, dimension(:), pointer :: name => null()
|
||||
type(content_particle_t), pointer :: cp => null()
|
||||
end type elstack_item
|
||||
|
||||
type :: elstack_t
|
||||
private
|
||||
integer :: n_items
|
||||
type(elstack_item), pointer, dimension(:) :: stack => null()
|
||||
end type elstack_t
|
||||
|
||||
public :: elstack_t
|
||||
|
||||
public :: push_elstack, pop_elstack, init_elstack, destroy_elstack, reset_elstack, print_elstack
|
||||
public :: get_top_elstack, is_empty
|
||||
public :: checkContentModel
|
||||
public :: checkContentModelToEnd
|
||||
public :: elementContent
|
||||
public :: emptyContent
|
||||
public :: len
|
||||
|
||||
interface len
|
||||
module procedure number_of_items
|
||||
end interface
|
||||
|
||||
interface is_empty
|
||||
module procedure is_empty_elstack
|
||||
end interface
|
||||
|
||||
contains
|
||||
|
||||
subroutine init_elstack(elstack)
|
||||
type(elstack_t), intent(inout) :: elstack
|
||||
|
||||
! We go from 0 (and initialize the 0th string to "")
|
||||
! in order that we can safely check the top of an
|
||||
! empty stack
|
||||
allocate(elstack%stack(0:STACK_SIZE_INIT))
|
||||
elstack%n_items = 0
|
||||
allocate(elstack%stack(0)%name(0))
|
||||
|
||||
end subroutine init_elstack
|
||||
|
||||
subroutine destroy_elstack(elstack)
|
||||
type(elstack_t), intent(inout) :: elstack
|
||||
integer :: i
|
||||
do i = 0, elstack % n_items
|
||||
deallocate(elstack%stack(i)%name)
|
||||
enddo
|
||||
deallocate(elstack%stack)
|
||||
end subroutine destroy_elstack
|
||||
|
||||
subroutine reset_elstack(elstack)
|
||||
type(elstack_t), intent(inout) :: elstack
|
||||
|
||||
call destroy_elstack(elstack)
|
||||
call init_elstack(elstack)
|
||||
|
||||
end subroutine reset_elstack
|
||||
|
||||
subroutine resize_elstack(elstack)
|
||||
type(elstack_t), intent(inout) :: elstack
|
||||
type(elstack_item), dimension(0:ubound(elstack%stack,1)) :: temp
|
||||
integer :: i, s
|
||||
|
||||
s = ubound(elstack%stack, 1)
|
||||
|
||||
do i = 0, s
|
||||
temp(i)%name => elstack%stack(i)%name
|
||||
temp(i)%cp => elstack%stack(i)%cp
|
||||
enddo
|
||||
deallocate(elstack%stack)
|
||||
allocate(elstack%stack(0:nint(s*STACK_SIZE_MULT)))
|
||||
do i = 0, s
|
||||
elstack%stack(i)%name => temp(i)%name
|
||||
elstack%stack(i)%cp => temp(i)%cp
|
||||
enddo
|
||||
|
||||
end subroutine resize_elstack
|
||||
|
||||
pure function is_empty_elstack(elstack) result(answer)
|
||||
type(elstack_t), intent(in) :: elstack
|
||||
logical :: answer
|
||||
|
||||
answer = (elstack%n_items == 0)
|
||||
end function is_empty_elstack
|
||||
|
||||
function number_of_items(elstack) result(n)
|
||||
type(elstack_t), intent(in) :: elstack
|
||||
integer :: n
|
||||
|
||||
n = elstack%n_items
|
||||
end function number_of_items
|
||||
|
||||
subroutine push_elstack(elstack, name, cp)
|
||||
type(elstack_t), intent(inout) :: elstack
|
||||
character(len=*), intent(in) :: name
|
||||
type(content_particle_t), pointer, optional :: cp
|
||||
|
||||
integer :: n
|
||||
|
||||
n = elstack%n_items
|
||||
n = n + 1
|
||||
if (n == size(elstack%stack)) then
|
||||
call resize_elstack(elstack)
|
||||
endif
|
||||
allocate(elstack%stack(n)%name(len(name)))
|
||||
elstack%stack(n)%name = vs_str(name)
|
||||
if (present(cp)) elstack%stack(n)%cp => cp
|
||||
elstack%n_items = n
|
||||
|
||||
end subroutine push_elstack
|
||||
|
||||
function pop_elstack(elstack) result(item)
|
||||
type(elstack_t), intent(inout) :: elstack
|
||||
character(len=merge(size(elstack%stack(elstack%n_items)%name), 0, elstack%n_items > 0)) :: item
|
||||
|
||||
integer :: n
|
||||
|
||||
n = elstack%n_items
|
||||
if (n == 0) then
|
||||
call FoX_fatal("Element stack empty")
|
||||
endif
|
||||
item = str_vs(elstack%stack(n)%name)
|
||||
deallocate(elstack%stack(n)%name)
|
||||
elstack%n_items = n - 1
|
||||
|
||||
end function pop_elstack
|
||||
|
||||
pure function get_top_elstack(elstack) result(item)
|
||||
! Get the top element of the stack, *without popping it*.
|
||||
type(elstack_t), intent(in) :: elstack
|
||||
character(len=merge(size(elstack%stack(elstack%n_items)%name), 0, elstack%n_items > 0)) :: item
|
||||
|
||||
integer :: n
|
||||
|
||||
n = elstack%n_items
|
||||
|
||||
if (n==0) then
|
||||
item = ""
|
||||
else
|
||||
item = str_vs(elstack%stack(n)%name)
|
||||
endif
|
||||
|
||||
end function get_top_elstack
|
||||
|
||||
function checkContentModel(elstack, name) result(p)
|
||||
type(elstack_t), intent(inout) :: elstack
|
||||
character(len=*), intent(in) :: name
|
||||
logical :: p
|
||||
|
||||
type(content_particle_t), pointer :: cp
|
||||
|
||||
integer :: n
|
||||
n = elstack%n_items
|
||||
if (n==0) then
|
||||
p = .true.
|
||||
else
|
||||
cp => elstack%stack(n)%cp
|
||||
p = checkCP(cp, name)
|
||||
elstack%stack(n)%cp => cp
|
||||
endif
|
||||
end function checkContentModel
|
||||
|
||||
function checkContentModelToEnd(elstack) result(p)
|
||||
type(elstack_t), intent(inout) :: elstack
|
||||
logical :: p
|
||||
|
||||
type(content_particle_t), pointer :: cp
|
||||
|
||||
integer :: n
|
||||
n = elstack%n_items
|
||||
|
||||
cp => elstack%stack(n)%cp
|
||||
p = checkCPToEnd(cp)
|
||||
|
||||
end function checkContentModelToEnd
|
||||
|
||||
function elementContent(elstack) result(p)
|
||||
type(elstack_t), intent(in) :: elstack
|
||||
logical :: p
|
||||
|
||||
integer :: n
|
||||
n = elstack%n_items
|
||||
if (n==0) then
|
||||
p = .false.
|
||||
else
|
||||
p = elementContentCP(elstack%stack(n)%cp)
|
||||
endif
|
||||
end function elementContent
|
||||
|
||||
function emptyContent(elstack) result(p)
|
||||
type(elstack_t), intent(in) :: elstack
|
||||
logical :: p
|
||||
|
||||
integer :: n
|
||||
n = elstack%n_items
|
||||
if (n==0) then
|
||||
p = .false.
|
||||
else
|
||||
p = emptyContentCP(elstack%stack(n)%cp)
|
||||
endif
|
||||
end function emptyContent
|
||||
|
||||
subroutine print_elstack(elstack,unit)
|
||||
type(elstack_t), intent(in) :: elstack
|
||||
integer, intent(in) :: unit
|
||||
integer :: i
|
||||
|
||||
do i = elstack%n_items, 1, -1
|
||||
write(unit=unit,fmt=*) elstack%stack(i)%name
|
||||
enddo
|
||||
|
||||
end subroutine print_elstack
|
||||
|
||||
#endif
|
||||
end module m_common_elstack
|
||||
|
|
@ -1,475 +0,0 @@
|
|||
module m_common_entities
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
|
||||
use fox_m_fsys_array_str, only: str_vs, vs_str_alloc
|
||||
use fox_m_fsys_format, only: str_to_int_10, str_to_int_16
|
||||
use fox_m_utils_uri, only: URI, destroyURI
|
||||
use m_common_charset, only: digits, hexdigits
|
||||
use m_common_error, only: FoX_error
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
type entity_t
|
||||
logical :: external
|
||||
logical :: wfc ! Was this entity declared externally or in a PE, where
|
||||
! a non-validating processor might not see it?
|
||||
character(len=1), dimension(:), pointer :: name => null()
|
||||
character(len=1), dimension(:), pointer :: text => null()
|
||||
character(len=1), dimension(:), pointer :: publicId => null()
|
||||
character(len=1), dimension(:), pointer :: systemId => null()
|
||||
character(len=1), dimension(:), pointer :: notation => null()
|
||||
type(URI), pointer :: baseURI => null()
|
||||
end type entity_t
|
||||
|
||||
type entity_list
|
||||
private
|
||||
type(entity_t), dimension(:), pointer :: list => null()
|
||||
end type entity_list
|
||||
|
||||
public :: is_unparsed_entity
|
||||
public :: is_external_entity
|
||||
|
||||
public :: expand_entity_text
|
||||
public :: expand_entity_text_len
|
||||
public :: existing_entity
|
||||
|
||||
public :: expand_char_entity
|
||||
|
||||
public :: expand_entity
|
||||
public :: expand_entity_len
|
||||
|
||||
public :: entity_t
|
||||
public :: entity_list
|
||||
public :: init_entity_list
|
||||
public :: reset_entity_list
|
||||
public :: destroy_entity_list
|
||||
public :: print_entity_list
|
||||
public :: add_internal_entity
|
||||
public :: add_external_entity
|
||||
public :: pop_entity_list
|
||||
|
||||
interface size
|
||||
module procedure size_el
|
||||
end interface
|
||||
|
||||
interface is_unparsed_entity
|
||||
module procedure is_unparsed_entity_
|
||||
module procedure is_unparsed_entity_from_list
|
||||
end interface
|
||||
|
||||
public :: getEntityByIndex
|
||||
public :: getEntityByName
|
||||
|
||||
public :: size
|
||||
|
||||
contains
|
||||
|
||||
function size_el(el) result(n)
|
||||
type(entity_list), intent(in) :: el
|
||||
integer :: n
|
||||
|
||||
n = ubound(el%list, 1)
|
||||
end function size_el
|
||||
|
||||
function shallow_copy_entity(ent1) result(ent2)
|
||||
type(entity_t), intent(in) :: ent1
|
||||
type(entity_t) :: ent2
|
||||
|
||||
ent2%external = ent1%external
|
||||
ent2%wfc = ent1%wfc
|
||||
ent2%name => ent1%name
|
||||
ent2%text => ent1%text
|
||||
ent2%publicId => ent1%publicId
|
||||
ent2%systemId => ent1%systemId
|
||||
ent2%notation => ent1%notation
|
||||
ent2%baseURI => ent1%baseURI
|
||||
|
||||
end function shallow_copy_entity
|
||||
|
||||
function getEntityByIndex(el, i) result(e)
|
||||
type(entity_list), intent(in) :: el
|
||||
integer, intent(in) :: i
|
||||
type(entity_t), pointer :: e
|
||||
|
||||
e => el%list(i)
|
||||
end function getEntityByIndex
|
||||
|
||||
function getEntityNameByIndex(el, i) result(c)
|
||||
type(entity_list), intent(in) :: el
|
||||
integer, intent(in) :: i
|
||||
character(len=size(el%list(i)%name)) :: c
|
||||
|
||||
c = str_vs(el%list(i)%name)
|
||||
end function getEntityNameByIndex
|
||||
|
||||
function getEntityByName(el, name) result(e)
|
||||
type(entity_list), intent(in) :: el
|
||||
character(len=*), intent(in) :: name
|
||||
type(entity_t), pointer :: e
|
||||
|
||||
integer :: i
|
||||
|
||||
e => null()
|
||||
do i = 1, size(el%list)
|
||||
if (str_vs(el%list(i)%name)==name) then
|
||||
e => el%list(i)
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
end function getEntityByName
|
||||
|
||||
|
||||
subroutine destroy_entity(ent)
|
||||
type(entity_t), intent(inout) :: ent
|
||||
|
||||
deallocate(ent%name)
|
||||
deallocate(ent%text)
|
||||
deallocate(ent%publicId)
|
||||
deallocate(ent%systemId)
|
||||
deallocate(ent%notation)
|
||||
|
||||
if (associated(ent%baseURI)) call destroyURI(ent%baseURI)
|
||||
|
||||
end subroutine destroy_entity
|
||||
|
||||
|
||||
subroutine init_entity_list(ents)
|
||||
type(entity_list), intent(inout) :: ents
|
||||
|
||||
if (associated(ents%list)) deallocate(ents%list)
|
||||
allocate(ents%list(0))
|
||||
|
||||
end subroutine init_entity_list
|
||||
|
||||
|
||||
subroutine reset_entity_list(ents)
|
||||
type(entity_list), intent(inout) :: ents
|
||||
|
||||
call destroy_entity_list(ents)
|
||||
call init_entity_list(ents)
|
||||
|
||||
end subroutine reset_entity_list
|
||||
|
||||
|
||||
subroutine destroy_entity_list(ents)
|
||||
type(entity_list), intent(inout) :: ents
|
||||
|
||||
integer :: i, n
|
||||
|
||||
n = size(ents%list)
|
||||
do i = 1, n
|
||||
call destroy_entity(ents%list(i))
|
||||
enddo
|
||||
deallocate(ents%list)
|
||||
end subroutine destroy_entity_list
|
||||
|
||||
function pop_entity_list(ents) result(name)
|
||||
type(entity_list), intent(inout) :: ents
|
||||
character(len=size(ents%list(size(ents%list))%name)) :: name
|
||||
|
||||
type(entity_t), pointer :: ents_tmp(:)
|
||||
integer :: i, n
|
||||
n = size(ents%list)
|
||||
|
||||
ents_tmp => ents%list
|
||||
allocate(ents%list(n-1))
|
||||
do i = 1, n - 1
|
||||
ents%list(i) = shallow_copy_entity(ents_tmp(i))
|
||||
enddo
|
||||
name = str_vs(ents_tmp(i)%name)
|
||||
|
||||
call destroy_entity(ents_tmp(i))
|
||||
deallocate(ents_tmp)
|
||||
end function pop_entity_list
|
||||
|
||||
subroutine print_entity_list(ents)
|
||||
type(entity_list), intent(in) :: ents
|
||||
|
||||
integer :: i, n
|
||||
|
||||
n = size(ents%list)
|
||||
write(*,'(a)') '>ENTITYLIST'
|
||||
do i = 1, n
|
||||
write(*,'(a)') str_vs(ents%list(i)%name)
|
||||
write(*,'(a)') str_vs(ents%list(i)%text)
|
||||
write(*,'(a)') str_vs(ents%list(i)%publicId)
|
||||
write(*,'(a)') str_vs(ents%list(i)%systemId)
|
||||
write(*,'(a)') str_vs(ents%list(i)%notation)
|
||||
enddo
|
||||
write(*,'(a)') '<ENTITYLIST'
|
||||
end subroutine print_entity_list
|
||||
|
||||
|
||||
subroutine add_entity(ents, name, text, publicId, systemId, notation, baseURI, wfc)
|
||||
type(entity_list), intent(inout) :: ents
|
||||
character(len=*), intent(in) :: name
|
||||
character(len=*), intent(in) :: text
|
||||
character(len=*), intent(in) :: publicId
|
||||
character(len=*), intent(in) :: systemId
|
||||
character(len=*), intent(in) :: notation
|
||||
type(URI), pointer :: baseURI
|
||||
logical, intent(in) :: wfc
|
||||
|
||||
type(entity_t), pointer :: ents_tmp(:)
|
||||
integer :: i, n
|
||||
|
||||
! This should only ever be called by add_internal_entity or add_external_entity
|
||||
! below, so we don't bother sanity-checking input. Note especially we don't
|
||||
! check for duplication of entities, so this will happily add another entity
|
||||
! of the same name if you ask it to. This should't matter though, since the
|
||||
! first defined will always be picked up first, which is what the XML spec
|
||||
! requires.
|
||||
|
||||
n = size(ents%list)
|
||||
ents_tmp => ents%list
|
||||
allocate(ents%list(n+1))
|
||||
do i = 1, n
|
||||
ents%list(i) = shallow_copy_entity(ents_tmp(i))
|
||||
enddo
|
||||
deallocate(ents_tmp)
|
||||
ents%list(i)%external = len(systemId)>0
|
||||
ents%list(i)%wfc = wfc
|
||||
ents%list(i)%name => vs_str_alloc(name)
|
||||
ents%list(i)%text => vs_str_alloc(text)
|
||||
ents%list(i)%publicId => vs_str_alloc(publicId)
|
||||
ents%list(i)%systemId => vs_str_alloc(systemId)
|
||||
ents%list(i)%notation => vs_str_alloc(notation)
|
||||
ents%list(i)%baseURI => baseURI
|
||||
end subroutine add_entity
|
||||
|
||||
|
||||
subroutine add_internal_entity(ents, name, text, baseURI, wfc)
|
||||
type(entity_list), intent(inout) :: ents
|
||||
character(len=*), intent(in) :: name
|
||||
character(len=*), intent(in) :: text
|
||||
type(URI), pointer :: baseURI
|
||||
logical, intent(in) :: wfc
|
||||
|
||||
call add_entity(ents, name=name, text=text, &
|
||||
publicId="", systemId="", notation="", baseURI=baseURI, wfc=wfc)
|
||||
end subroutine add_internal_entity
|
||||
|
||||
|
||||
subroutine add_external_entity(ents, name, systemId, baseURI, wfc, publicId, notation)
|
||||
type(entity_list), intent(inout) :: ents
|
||||
character(len=*), intent(in) :: name
|
||||
character(len=*), intent(in) :: systemId
|
||||
character(len=*), intent(in), optional :: publicId
|
||||
character(len=*), intent(in), optional :: notation
|
||||
type(URI), pointer :: baseURI
|
||||
logical, intent(in) :: wfc
|
||||
|
||||
if (present(publicId) .and. present(notation)) then
|
||||
call add_entity(ents, name=name, text="", &
|
||||
publicId=publicId, systemId=systemId, notation=notation, &
|
||||
wfc=wfc, baseURI=baseURI)
|
||||
elseif (present(publicId)) then
|
||||
call add_entity(ents, name=name, text="", &
|
||||
publicId=publicId, systemId=systemId, notation="", &
|
||||
wfc=wfc, baseURI=baseURI)
|
||||
elseif (present(notation)) then
|
||||
call add_entity(ents, name=name, text="", &
|
||||
publicId="", systemId=systemId, notation=notation, &
|
||||
wfc=wfc, baseURI=baseURI)
|
||||
else
|
||||
call add_entity(ents, name=name, text="", &
|
||||
publicId="", systemId=systemId, notation="", &
|
||||
wfc=wfc, baseURI=baseURI)
|
||||
endif
|
||||
end subroutine add_external_entity
|
||||
|
||||
|
||||
function is_unparsed_entity_from_list(ents, name) result(p)
|
||||
type(entity_list), intent(in) :: ents
|
||||
character(len=*), intent(in) :: name
|
||||
logical :: p
|
||||
|
||||
integer :: i
|
||||
|
||||
p = .false.
|
||||
|
||||
do i = 1, size(ents%list)
|
||||
if (name == str_vs(ents%list(i)%name)) then
|
||||
p = (size(ents%list(i)%notation)>0)
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
end function is_unparsed_entity_from_list
|
||||
|
||||
function is_unparsed_entity_(ent) result(p)
|
||||
type(entity_t), intent(in) :: ent
|
||||
logical :: p
|
||||
|
||||
p = (size(ent%notation)>0)
|
||||
|
||||
end function is_unparsed_entity_
|
||||
|
||||
|
||||
function is_external_entity(ents, name) result(p)
|
||||
type(entity_list), intent(in) :: ents
|
||||
character(len=*), intent(in) :: name
|
||||
logical :: p
|
||||
|
||||
integer :: i
|
||||
|
||||
p = .false.
|
||||
|
||||
do i = 1, size(ents%list)
|
||||
if (name == str_vs(ents%list(i)%name)) then
|
||||
p = ents%list(i)%external
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
end function is_external_entity
|
||||
|
||||
pure function expand_char_entity_len(name) result(n)
|
||||
character(len=*), intent(in) :: name
|
||||
integer :: n
|
||||
|
||||
integer :: number
|
||||
|
||||
if (name(1:1) == "#") then
|
||||
if (name(2:2) == "x") then ! hex character reference
|
||||
if (verify(name(3:), hexdigits) == 0) then
|
||||
number = str_to_int_16(name(3:))
|
||||
if (0 <= number .and. number <= 128) then
|
||||
n = 1
|
||||
else
|
||||
n = len(name) + 2
|
||||
endif
|
||||
else
|
||||
n = 0
|
||||
endif
|
||||
else ! decimal character reference
|
||||
if (verify(name(3:), digits) == 0) then
|
||||
number = str_to_int_10(name(2:))
|
||||
if (0 <= number .and. number <= 128) then
|
||||
n = 1
|
||||
else
|
||||
n = len(name) + 2
|
||||
endif
|
||||
else
|
||||
n = 0
|
||||
endif
|
||||
endif
|
||||
else
|
||||
n = 0
|
||||
endif
|
||||
end function expand_char_entity_len
|
||||
|
||||
|
||||
function expand_char_entity(name) result(text)
|
||||
character(len=*), intent(in) :: name
|
||||
character(len=expand_char_entity_len(name)) :: text
|
||||
|
||||
integer :: number
|
||||
|
||||
select case (len(text))
|
||||
case (0)
|
||||
call FoX_error("Invalid character entity reference")
|
||||
case (1)
|
||||
if (name(2:2) == "x") then ! hex character reference
|
||||
number = str_to_int_16(name(3:))
|
||||
else ! decimal character reference
|
||||
number = str_to_int_10(name(2:))
|
||||
endif
|
||||
text = achar(number)
|
||||
! FIXME what about > 127 ...
|
||||
case default
|
||||
text = "&"//name//";"
|
||||
end select
|
||||
|
||||
end function expand_char_entity
|
||||
|
||||
|
||||
pure function existing_entity(ents, name) result(p)
|
||||
type(entity_list), intent(in) :: ents
|
||||
character(len=*), intent(in) :: name
|
||||
logical :: p
|
||||
|
||||
integer :: i
|
||||
|
||||
p = .false.
|
||||
|
||||
!FIXME the following test is not entirely in accordance with the valid chars check we do elsewhere...
|
||||
|
||||
do i = 1, size(ents%list)
|
||||
if (name == str_vs(ents%list(i)%name)) then
|
||||
p = .true.
|
||||
return
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function existing_entity
|
||||
|
||||
|
||||
pure function expand_entity_text_len(ents, name) result(n)
|
||||
type(entity_list), intent(in) :: ents
|
||||
character(len=*), intent(in) :: name
|
||||
integer :: n
|
||||
|
||||
integer :: i
|
||||
|
||||
do i = 1, size(ents%list)
|
||||
if (name == str_vs(ents%list(i)%name)) then
|
||||
n = size(ents%list(i)%text)
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function expand_entity_text_len
|
||||
|
||||
|
||||
function expand_entity_text(ents, name) result(text)
|
||||
type(entity_list), intent(in) :: ents
|
||||
character(len=*), intent(in) :: name
|
||||
character(len=expand_entity_text_len(ents, name)) :: text
|
||||
|
||||
integer :: i
|
||||
|
||||
! No error checking - make sure entity exists before calling it.
|
||||
|
||||
do i = 1, size(ents%list)
|
||||
if (name == str_vs(ents%list(i)%name)) then
|
||||
text = str_vs(ents%list(i)%text)
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function expand_entity_text
|
||||
|
||||
|
||||
pure function expand_entity_len(ents, name) result(n)
|
||||
type(entity_list), intent(in) :: ents
|
||||
character(len=*), intent(in) :: name
|
||||
integer :: n
|
||||
|
||||
integer :: i
|
||||
|
||||
do i = 1, size(ents%list)
|
||||
if (name == str_vs(ents%list(i)%name)) then
|
||||
n = size(ents%list(i)%text)
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function expand_entity_len
|
||||
|
||||
|
||||
function expand_entity(ents, name) result(text)
|
||||
type(entity_list), intent(in) :: ents
|
||||
character(len=*), intent(in) :: name
|
||||
character(len=expand_entity_len(ents, name)) :: text
|
||||
|
||||
integer :: i
|
||||
|
||||
do i = 1, size(ents%list)
|
||||
if (name == str_vs(ents%list(i)%name)) then
|
||||
text = str_vs(ents%list(i)%text)
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function expand_entity
|
||||
|
||||
#endif
|
||||
end module m_common_entities
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
module m_common_entity_expand
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
use fox_m_fsys_array_str, only: str_vs, vs_str
|
||||
use m_common_entities, only: expand_char_entity
|
||||
use m_common_error, only: error_stack, add_error
|
||||
use m_common_namecheck, only: checkName, checkCharacterEntityReference, &
|
||||
checkRepCharEntityReference
|
||||
use m_common_struct, only: xml_doc_state
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
public :: expand_entity_value_alloc
|
||||
|
||||
! This does the first level of expansion of the contents of an entity
|
||||
! reference, for storage during processing. Only character references
|
||||
! are expanded.
|
||||
|
||||
contains
|
||||
|
||||
function expand_entity_value_alloc(repl, xds, stack) result(repl_new)
|
||||
!perform expansion of character entity references
|
||||
! check that no parameter entities are present
|
||||
! and check that all general entity references are well-formed.
|
||||
!before storing it.
|
||||
!
|
||||
! This is only ever called from the SAX parser
|
||||
! (might it be called from WXML?)
|
||||
! so input & output is with character arrays, not strings.
|
||||
character, dimension(:), intent(in) :: repl
|
||||
type(xml_doc_state), intent(in) :: xds
|
||||
type(error_stack), intent(inout) :: stack
|
||||
character, dimension(:), pointer :: repl_new
|
||||
|
||||
character, dimension(size(repl)) :: repl_temp
|
||||
integer :: i, i2, j
|
||||
|
||||
allocate(repl_new(0))
|
||||
if (index(str_vs(repl),'%')/=0) then
|
||||
call add_error(stack, "Not allowed % in internal subset general entity value")
|
||||
return
|
||||
endif
|
||||
|
||||
i = 1
|
||||
i2 = 1
|
||||
do
|
||||
if (i>size(repl)) exit
|
||||
if (repl(i)=='&') then
|
||||
j = index(str_vs(repl(i+1:)),';')
|
||||
if (j==0) then
|
||||
call add_error(stack, "Not allowed bare & in entity value")
|
||||
return
|
||||
elseif (checkName(str_vs(repl(i+1:i+j-1)), xds%xml_version)) then
|
||||
repl_temp(i2:i2+j) = repl(i:i+j)
|
||||
i = i + j + 1
|
||||
i2 = i2 + j + 1
|
||||
! For SAX, we need to be able to represent the character:
|
||||
elseif (checkRepCharEntityReference(str_vs(repl(i+1:i+j-1)), xds%xml_version)) then
|
||||
!if it is ascii then
|
||||
repl_temp(i2:i2) = vs_str(expand_char_entity(str_vs(repl(i+1:i+j-1))))
|
||||
i = i + j + 1
|
||||
i2 = i2 + 1
|
||||
elseif (checkCharacterEntityReference(str_vs(repl(i+1:i+j-1)), xds%xml_version)) then
|
||||
! We can't represent it. Issue an error and stop.
|
||||
call add_error(stack, "Unable to digest character entity reference in entity value, sorry.")
|
||||
return
|
||||
else
|
||||
call add_error(stack, "Invalid entity reference in entity value")
|
||||
return
|
||||
endif
|
||||
else
|
||||
repl_temp(i2) = repl(i)
|
||||
i = i + 1
|
||||
i2 = i2 + 1
|
||||
endif
|
||||
enddo
|
||||
|
||||
deallocate(repl_new)
|
||||
allocate(repl_new(i2-1))
|
||||
repl_new = repl_temp(:i2-1)
|
||||
|
||||
end function expand_entity_value_alloc
|
||||
|
||||
#endif
|
||||
end module m_common_entity_expand
|
||||
|
|
@ -1,211 +0,0 @@
|
|||
module m_common_error
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
use fox_m_fsys_abort_flush, only: pxfabort, pxfflush
|
||||
use fox_m_fsys_array_str, only: vs_str_alloc
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
integer, parameter :: ERR_NULL = 0
|
||||
integer, parameter :: ERR_WARNING = 1
|
||||
integer, parameter :: ERR_ERROR = 2
|
||||
integer, parameter :: ERR_FATAL = 3
|
||||
#endif
|
||||
logical, save :: errors_are_fatal = .false.
|
||||
logical, save :: warnings_are_fatal = .false.
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
type error_t
|
||||
integer :: severity = ERR_NULL
|
||||
integer :: error_code = 0
|
||||
character, dimension(:), pointer :: msg => null()
|
||||
end type error_t
|
||||
|
||||
type error_stack
|
||||
type(error_t), dimension(:), pointer :: stack => null()
|
||||
end type error_stack
|
||||
|
||||
interface FoX_warning
|
||||
module procedure FoX_warning_base
|
||||
end interface
|
||||
|
||||
interface FoX_error
|
||||
module procedure FoX_error_base
|
||||
end interface
|
||||
|
||||
interface FoX_fatal
|
||||
module procedure FoX_fatal_base
|
||||
end interface
|
||||
|
||||
public :: ERR_NULL
|
||||
public :: ERR_WARNING
|
||||
public :: ERR_ERROR
|
||||
public :: ERR_FATAL
|
||||
|
||||
public :: error_t
|
||||
public :: error_stack
|
||||
|
||||
public :: init_error_stack
|
||||
public :: destroy_error_stack
|
||||
|
||||
public :: FoX_warning
|
||||
public :: FoX_error
|
||||
public :: FoX_fatal
|
||||
|
||||
public :: FoX_warning_base
|
||||
public :: FoX_error_base
|
||||
public :: FoX_fatal_base
|
||||
|
||||
public :: add_error
|
||||
public :: in_error
|
||||
|
||||
#endif
|
||||
public :: FoX_set_fatal_errors
|
||||
public :: FoX_get_fatal_errors
|
||||
public :: FoX_set_fatal_warnings
|
||||
public :: FoX_get_fatal_warnings
|
||||
|
||||
contains
|
||||
#ifndef DUMMYLIB
|
||||
|
||||
subroutine FoX_warning_base(msg)
|
||||
! Emit warning, but carry on.
|
||||
character(len=*), intent(in) :: msg
|
||||
|
||||
if (warnings_are_fatal) then
|
||||
write(0,'(a)') 'FoX warning made fatal'
|
||||
call FoX_fatal_base(msg)
|
||||
endif
|
||||
|
||||
write(0,'(a)') 'WARNING(FoX)'
|
||||
write(0,'(a)') msg
|
||||
call pxfflush(0)
|
||||
|
||||
end subroutine FoX_warning_base
|
||||
|
||||
|
||||
subroutine FoX_error_base(msg)
|
||||
! Emit error message and stop.
|
||||
! No clean up is done here, but this can
|
||||
! be overridden to include clean-up routines
|
||||
character(len=*), intent(in) :: msg
|
||||
|
||||
if (errors_are_fatal) then
|
||||
write(0,'(a)') 'FoX error made fatal'
|
||||
call FoX_fatal_base(msg)
|
||||
endif
|
||||
|
||||
write(0,'(a)') 'ERROR(FoX)'
|
||||
write(0,'(a)') msg
|
||||
call pxfflush(0)
|
||||
|
||||
stop
|
||||
|
||||
end subroutine FoX_error_base
|
||||
|
||||
subroutine FoX_fatal_base(msg)
|
||||
!Emit error message and abort with coredump.
|
||||
!No clean-up occurs
|
||||
|
||||
character(len=*), intent(in) :: msg
|
||||
|
||||
write(0,'(a)') 'ABORT(FOX)'
|
||||
write(0,'(a)') msg
|
||||
call pxfflush(0)
|
||||
|
||||
call pxfabort()
|
||||
|
||||
end subroutine FoX_fatal_base
|
||||
|
||||
|
||||
subroutine init_error_stack(stack)
|
||||
type(error_stack), intent(inout) :: stack
|
||||
|
||||
allocate(stack%stack(0))
|
||||
end subroutine init_error_stack
|
||||
|
||||
|
||||
subroutine destroy_error_stack(stack)
|
||||
type(error_stack), intent(inout) :: stack
|
||||
|
||||
integer :: i
|
||||
|
||||
do i = 1, size(stack%stack)
|
||||
deallocate(stack%stack(i)%msg)
|
||||
enddo
|
||||
deallocate(stack%stack)
|
||||
end subroutine destroy_error_stack
|
||||
|
||||
|
||||
subroutine add_error(stack, msg, severity, error_code)
|
||||
type(error_stack), intent(inout) :: stack
|
||||
character(len=*), intent(in) :: msg
|
||||
integer, intent(in), optional :: severity
|
||||
integer, intent(in), optional :: error_code
|
||||
|
||||
integer :: i, n
|
||||
type(error_t), dimension(:), pointer :: temp_stack
|
||||
|
||||
if (.not.associated(stack%stack)) &
|
||||
call init_error_stack(stack)
|
||||
|
||||
n = size(stack%stack)
|
||||
|
||||
temp_stack => stack%stack
|
||||
allocate(stack%stack(n+1))
|
||||
do i = 1, size(temp_stack)
|
||||
stack%stack(i)%msg => temp_stack(i)%msg
|
||||
stack%stack(i)%severity = temp_stack(i)%severity
|
||||
stack%stack(i)%error_code = temp_stack(i)%error_code
|
||||
enddo
|
||||
deallocate(temp_stack)
|
||||
|
||||
stack%stack(n+1)%msg => vs_str_alloc(msg)
|
||||
if (present(severity)) then
|
||||
stack%stack(n+1)%severity = severity
|
||||
else
|
||||
stack%stack(n+1)%severity = ERR_ERROR
|
||||
endif
|
||||
if (present(error_code)) then
|
||||
stack%stack(n+1)%error_code = error_code
|
||||
else
|
||||
stack%stack(n+1)%error_code = -1
|
||||
endif
|
||||
|
||||
end subroutine add_error
|
||||
|
||||
|
||||
function in_error(stack) result(p)
|
||||
type(error_stack), intent(in) :: stack
|
||||
logical :: p
|
||||
|
||||
if (associated(stack%stack)) then
|
||||
p = (size(stack%stack) > 0)
|
||||
else
|
||||
p = .false.
|
||||
endif
|
||||
end function in_error
|
||||
|
||||
#endif
|
||||
subroutine FoX_set_fatal_errors(newvalue)
|
||||
logical, intent(in) :: newvalue
|
||||
errors_are_fatal = newvalue
|
||||
end subroutine FoX_set_fatal_errors
|
||||
|
||||
function FoX_get_fatal_errors()
|
||||
logical :: FoX_get_fatal_errors
|
||||
FoX_get_fatal_errors = errors_are_fatal
|
||||
end function FoX_get_fatal_errors
|
||||
|
||||
subroutine FoX_set_fatal_warnings(newvalue)
|
||||
logical, intent(in) :: newvalue
|
||||
warnings_are_fatal = newvalue
|
||||
end subroutine FoX_set_fatal_warnings
|
||||
|
||||
function FoX_get_fatal_warnings()
|
||||
logical :: FoX_get_fatal_warnings
|
||||
FoX_get_fatal_warnings = warnings_are_fatal
|
||||
end function FoX_get_fatal_warnings
|
||||
|
||||
end module m_common_error
|
||||
|
|
@ -1,102 +0,0 @@
|
|||
module m_common_io
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
use m_common_error, only : FoX_error
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
! Basic I/O tools
|
||||
|
||||
integer, save :: io_eor
|
||||
integer, save :: io_eof
|
||||
integer, save :: io_err
|
||||
|
||||
public :: io_eor
|
||||
public :: io_eof
|
||||
public :: io_err
|
||||
public :: get_unit
|
||||
public :: setup_io
|
||||
|
||||
contains
|
||||
|
||||
subroutine setup_io()
|
||||
call find_eor_eof(io_eor, io_eof)
|
||||
end subroutine setup_io
|
||||
|
||||
|
||||
subroutine get_unit(lun,iostat)
|
||||
! Get an available Fortran unit number
|
||||
integer, intent(out) :: lun
|
||||
integer, intent(out) :: iostat
|
||||
|
||||
integer :: i
|
||||
logical :: unit_used
|
||||
|
||||
do i = 10, 99
|
||||
lun = i
|
||||
inquire(unit=lun,opened=unit_used)
|
||||
if (.not. unit_used) then
|
||||
iostat = 0
|
||||
return
|
||||
endif
|
||||
enddo
|
||||
iostat = -1
|
||||
lun = -1
|
||||
end subroutine get_unit
|
||||
|
||||
|
||||
subroutine find_eor_eof(io_eor,io_eof)
|
||||
! Determines the values of the iostat values for End of File and
|
||||
! End of Record (in non-advancing I/O)
|
||||
#ifdef __NAG__
|
||||
use f90_iostat
|
||||
#endif
|
||||
integer, intent(out) :: io_eor
|
||||
integer, intent(out) :: io_eof
|
||||
|
||||
#ifdef __NAG__
|
||||
io_eor = ioerr_eor
|
||||
io_eof = ioerr_eof
|
||||
#else
|
||||
integer :: lun, iostat
|
||||
character(len=1) :: c
|
||||
|
||||
call get_unit(lun,iostat)
|
||||
|
||||
if (iostat /= 0) call FoX_error("Out of unit numbers")
|
||||
|
||||
open(unit=lun,status="scratch",form="formatted", &
|
||||
action="readwrite",position="rewind",iostat=iostat)
|
||||
if (iostat /= 0) call FoX_error("Cannot open test file")
|
||||
|
||||
write(unit=lun,fmt=*) "a"
|
||||
write(unit=lun,fmt=*) "b"
|
||||
|
||||
rewind(unit=lun)
|
||||
|
||||
io_eor = 0
|
||||
do
|
||||
read(unit=lun,fmt="(a1)",advance="no",iostat=io_eor) c
|
||||
if (io_eor /= 0) exit
|
||||
enddo
|
||||
|
||||
io_eof = 0
|
||||
do
|
||||
read(unit=lun,fmt=*,iostat=io_eof)
|
||||
if (io_eof /= 0) exit
|
||||
enddo
|
||||
|
||||
close(unit=lun,status="delete")
|
||||
#endif
|
||||
|
||||
! Invent an io_err ...
|
||||
io_err = 1
|
||||
do
|
||||
if (io_err/=0.and.io_err/=io_eor.and.io_err/=io_eof) exit
|
||||
io_err = io_err + 1
|
||||
end do
|
||||
end subroutine find_eor_eof
|
||||
|
||||
#endif
|
||||
end module m_common_io
|
||||
|
|
@ -1,501 +0,0 @@
|
|||
module m_common_namecheck
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
! These are basically a collection of what would be regular
|
||||
! expressions in a more sensible language.
|
||||
! The only external dependency should be knowing how these
|
||||
! regular expressions may differ between XML-1.0 and 1.1 (which
|
||||
! is only in the areas of
|
||||
! 1: allowing character entity references to control characters
|
||||
! 2: More characters allowed in Names (but this only affects
|
||||
! unicode-aware programs, so is only skeleton here)
|
||||
|
||||
use fox_m_fsys_format, only: str_to_int_10, str_to_int_16, operator(//)
|
||||
use fox_m_fsys_string, only: toLower
|
||||
use m_common_charset, only: isLegalCharRef, isNCNameChar, &
|
||||
isInitialNCNameChar, isInitialNameChar, isNameChar, isRepCharRef
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
character(len=*), parameter :: lowerCase = "abcdefghijklmnopqrstuvwxyz"
|
||||
character(len=*), parameter :: upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
character(len=*), parameter :: letters = lowerCase//upperCase
|
||||
character(len=*), parameter :: digits = "0123456789"
|
||||
character(len=*), parameter :: hexdigits = "0123456789abcdefABCDEF"
|
||||
character(len=*), parameter :: NameChars = lowerCase//upperCase//digits//".-_:"
|
||||
|
||||
public :: checkName
|
||||
public :: checkNames
|
||||
public :: checkQName
|
||||
public :: checkQNames
|
||||
public :: checkNmtoken
|
||||
public :: checkNmtokens
|
||||
public :: checkNCName
|
||||
public :: checkNCNames
|
||||
public :: checkEncName
|
||||
public :: checkPITarget
|
||||
public :: checkPublicId
|
||||
public :: checkPEDef
|
||||
public :: checkPseudoAttValue
|
||||
public :: checkAttValue
|
||||
public :: checkCharacterEntityReference
|
||||
public :: checkRepCharEntityReference
|
||||
public :: likeCharacterEntityReference
|
||||
|
||||
public :: prefixOfQName
|
||||
public :: localpartOfQName
|
||||
|
||||
contains
|
||||
|
||||
pure function checkEncName(name) result(good)
|
||||
![81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
|
||||
character(len=*), intent(in) :: name
|
||||
logical :: good
|
||||
|
||||
integer :: n
|
||||
|
||||
n = len(name)
|
||||
good = (n > 0)
|
||||
if (good) good = (scan(name(1:1), letters) /= 0)
|
||||
if (good .and. n > 1) &
|
||||
good = (verify(name(2:), letters//digits//'.-_') == 0)
|
||||
end function checkEncName
|
||||
|
||||
|
||||
function checkPITarget(name, xv) result(good)
|
||||
character(len=*), intent(in) :: name
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
! Validates a string against the XML requirements for a NAME
|
||||
! Is not fully compliant; ignores UTF issues.
|
||||
|
||||
good = checkName(name, xv) &
|
||||
.and.toLower(name)/="xml"
|
||||
|
||||
end function checkPITarget
|
||||
|
||||
|
||||
pure function checkName(name, xv) result(good)
|
||||
character(len=*), intent(in) :: name
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
! Validates a string against the XML requirements for a NAME
|
||||
! Is not fully compliant; ignores UTF issues.
|
||||
|
||||
good = (len(name) > 0)
|
||||
if (.not.good) return
|
||||
if (good) good = isInitialNameChar(name(1:1), xv)
|
||||
if (.not.good.or.len(name)==1) return
|
||||
good = isNameChar(name(2:), xv)
|
||||
|
||||
end function checkName
|
||||
|
||||
pure function checkNames(name, xv) result(good)
|
||||
character(len=*), intent(in) :: name
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
! Validates a string against the production for NAMES
|
||||
|
||||
integer :: i, j
|
||||
|
||||
good = (len(name) > 0)
|
||||
if (.not.good) return
|
||||
i = verify(name, " ")
|
||||
if (i==0) then
|
||||
good = .false.
|
||||
return
|
||||
endif
|
||||
j = scan(name(i:), " ")
|
||||
if (j==0) then
|
||||
j = len(name)
|
||||
else
|
||||
j = i + j - 2
|
||||
endif
|
||||
do
|
||||
good = checkName(name(i:j), xv)
|
||||
if (.not.good) return
|
||||
i = j + 1
|
||||
j = verify(name(i:), " ")
|
||||
if (j==0) exit
|
||||
i = i + j - 1
|
||||
j = scan(name(i:), " ")
|
||||
if (j==0) then
|
||||
j = len(name)
|
||||
else
|
||||
j = i + j - 2
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function checkNames
|
||||
|
||||
|
||||
pure function checkQName(name, xv) result(good)
|
||||
character(len=*), intent(in) :: name
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
! Validates a string against the XML requirements for a NAME
|
||||
! Is not fully compliant; ignores UTF issues.
|
||||
|
||||
integer :: n
|
||||
|
||||
n = index(name, ':')
|
||||
if (n == 0) then
|
||||
good = checkNCName(name, xv)
|
||||
else
|
||||
good = (checkNCName(name(:n-1), xv) .and. checkNCName(name(n+1:), xv))
|
||||
endif
|
||||
end function checkQName
|
||||
|
||||
|
||||
pure function checkQNames(name, xv) result(good)
|
||||
character(len=*), intent(in) :: name
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
! Validates a string against the production for NAMES
|
||||
|
||||
integer :: i, j
|
||||
|
||||
good = (len(name) > 0)
|
||||
if (.not.good) return
|
||||
i = verify(name, " ")
|
||||
if (i==0) then
|
||||
good = .false.
|
||||
return
|
||||
endif
|
||||
j = scan(name(i:), " ")
|
||||
if (j==0) then
|
||||
j = len(name)
|
||||
else
|
||||
j = i + j - 2
|
||||
endif
|
||||
do
|
||||
good = checkQName(name(i:j), xv)
|
||||
if (.not.good) return
|
||||
i = j + 1
|
||||
j = verify(name(i:), " ")
|
||||
if (j==0) exit
|
||||
i = i + j - 1
|
||||
j = scan(name(i:), " ")
|
||||
if (j==0) then
|
||||
j = len(name)
|
||||
else
|
||||
j = i + j - 2
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function checkQNames
|
||||
|
||||
|
||||
pure function checkNCName(name, xv) result(good)
|
||||
character(len=*), intent(in) :: name
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
! Validates a string against the XML requirements for an NCNAME
|
||||
! Is not fully compliant; ignores UTF issues.
|
||||
|
||||
good = (len(name)/=0)
|
||||
if (.not.good) return
|
||||
good = isInitialNCNameChar(name(1:1), xv)
|
||||
if (.not.good.or.len(name)==1) return
|
||||
good = isNCNameChar(name(2:), xv)
|
||||
|
||||
end function checkNCName
|
||||
|
||||
|
||||
pure function checkNCNames(name, xv) result(good)
|
||||
character(len=*), intent(in) :: name
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
! Validates a string against the production for NAMES
|
||||
|
||||
integer :: i, j
|
||||
|
||||
good = (len(name) > 0)
|
||||
if (.not.good) return
|
||||
i = verify(name, " ")
|
||||
if (i==0) then
|
||||
good = .false.
|
||||
return
|
||||
endif
|
||||
j = scan(name(i:), " ")
|
||||
if (j==0) then
|
||||
j = len(name)
|
||||
else
|
||||
j = i + j - 2
|
||||
endif
|
||||
do
|
||||
good = checkNCName(name(i:j), xv)
|
||||
if (.not.good) return
|
||||
i = j + 1
|
||||
j = verify(name(i:), " ")
|
||||
if (j==0) exit
|
||||
i = i + j - 1
|
||||
j = scan(name(i:), " ")
|
||||
if (j==0) then
|
||||
j = len(name)
|
||||
else
|
||||
j = i + j - 2
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function checkNCNames
|
||||
|
||||
|
||||
pure function checkNmtoken(name, xv) result(good)
|
||||
character(len=*), intent(in) :: name
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
! Validates a string against the XML requirements for an NCNAME
|
||||
! Is not fully compliant; ignores UTF issues.
|
||||
|
||||
good = isNameChar(name, xv)
|
||||
|
||||
end function checkNmtoken
|
||||
|
||||
|
||||
pure function checkNmtokens(name, xv) result(good)
|
||||
character(len=*), intent(in) :: name
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
! Validates a string against the XML requirements for an NCNAME
|
||||
! Is not fully compliant; ignores UTF issues.
|
||||
|
||||
integer :: i, j
|
||||
|
||||
good = (len(name) > 0)
|
||||
if (.not.good) return
|
||||
i = verify(name, " ")
|
||||
if (i==0) then
|
||||
good = .false.
|
||||
return
|
||||
endif
|
||||
j = scan(name(i:), " ")
|
||||
if (j==0) then
|
||||
j = len(name)
|
||||
else
|
||||
j = i + j - 2
|
||||
endif
|
||||
do
|
||||
good = isNameChar(name(i:j), xv)
|
||||
if (.not.good) return
|
||||
i = j + 1
|
||||
j = verify(name(i:), " ")
|
||||
if (j==0) exit
|
||||
i = i + j - 1
|
||||
j = scan(name(i:), " ")
|
||||
if (j==0) then
|
||||
j = len(name)
|
||||
else
|
||||
j = i + j - 2
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function checkNmtokens
|
||||
|
||||
|
||||
function checkPublicId(value) result(good)
|
||||
character(len=*), intent(in) :: value
|
||||
logical :: good
|
||||
character(len=*), parameter :: PubIdChars = &
|
||||
" "//achar(10)//achar(13)//lowerCase//upperCase//digits//"-'()+,./:=?;!*#@$_%"
|
||||
|
||||
good = (verify(value, PubIdChars)==0)
|
||||
end function checkPublicId
|
||||
|
||||
|
||||
function checkPEDef(value, xv) result(p)
|
||||
character(len=*), intent(in) :: value
|
||||
integer, intent(in) :: xv
|
||||
logical :: p
|
||||
|
||||
integer :: i1, i2
|
||||
|
||||
p = .false.
|
||||
if (scan(value, '%&')==0) then
|
||||
p = .true.
|
||||
elseif (scan(value, '"')==0) then
|
||||
i1 = scan(value, '%&')
|
||||
i2 = 0
|
||||
do while (i1>0)
|
||||
i1 = i2 + i1
|
||||
i2 = index(value(i1+1:),';')
|
||||
if (i2==0) return
|
||||
i2 = i1 + i2
|
||||
if (value(i1:i1)=='&') then
|
||||
if (.not.checkName(value(i1+1:i2-1), xv) .and. &
|
||||
.not.checkCharacterEntityReference(value(i1+1:i2-1), xv)) return
|
||||
else
|
||||
if (.not.checkName(value(i1+1:i2-1), xv)) &
|
||||
return
|
||||
endif
|
||||
i1 = scan(value(i2+1:), '%&')
|
||||
enddo
|
||||
p = .true.
|
||||
endif
|
||||
end function checkPEDef
|
||||
|
||||
function checkPseudoAttValue(value, xv) result(p)
|
||||
character(len=*), intent(in) :: value
|
||||
integer, intent(in) :: xv
|
||||
logical :: p
|
||||
|
||||
integer :: i1, i2
|
||||
!fixme can we have entrefs in PIs?
|
||||
p = .false.
|
||||
if (scan(value, '"<&')==0) then
|
||||
p = .true.
|
||||
elseif (index(value, '&') > 0) then
|
||||
i1 = index(value, '&')
|
||||
i2 = 0
|
||||
do while (i1 > 0)
|
||||
i1 = i2 + i1
|
||||
i2 = index(value(i1+1:),';')
|
||||
if (i2==0) return
|
||||
i2 = i1 + i2
|
||||
if (value(i1+1:i2-1) /= 'amp' .and. &
|
||||
value(i1+1:i2-1) /= 'lt' .and. &
|
||||
value(i1+1:i2-1) /= 'gt' .and. &
|
||||
value(i1+1:i2-1) /= 'quot' .and. &
|
||||
value(i1+1:i2-1) /= 'apos' .and. &
|
||||
.not.checkCharacterEntityReference(value(i1+1:i2-1), xv)) &
|
||||
return
|
||||
i1 = index(value(i2+1:), '&')
|
||||
enddo
|
||||
p = .true.
|
||||
endif
|
||||
end function checkPseudoAttValue
|
||||
|
||||
function checkAttValue(value, xv) result(p)
|
||||
character(len=*), intent(in) :: value
|
||||
integer, intent(in) :: xv
|
||||
logical :: p
|
||||
! This function is called basically to make sure
|
||||
! that any attribute value looks like one. It will
|
||||
! not flag up out-of-range character entities, and
|
||||
! is a very weak check. Only used from xml_AddAttribute
|
||||
! when escaping is off.
|
||||
integer :: i1, i2
|
||||
|
||||
p = .false.
|
||||
if (scan(value, '"<&'//"'")==0) then
|
||||
p = .true.
|
||||
elseif (index(value, '&') > 0) then
|
||||
i1 = index(value, '&')
|
||||
i2 = 0
|
||||
do while (i1 > 0)
|
||||
i1 = i1 + i2 + 1
|
||||
i2 = scan(value(i1+1:),';')
|
||||
if (i2 == 0) return
|
||||
i2 = i1 + i2
|
||||
if (.not.checkName(value(i1+1:i2-1), xv) .and. &
|
||||
.not.likeCharacterEntityReference(value(i1+1:i2-1))) then
|
||||
print*, value(i1+1:i2-1), " ", &
|
||||
likeCharacterEntityReference(value(i1+1:i2-1))
|
||||
return
|
||||
endif
|
||||
i1 = index(value(i2+1:), '&')
|
||||
enddo
|
||||
p = .true.
|
||||
endif
|
||||
end function checkAttValue
|
||||
|
||||
|
||||
function likeCharacterEntityReference(code) result(good)
|
||||
character(len=*), intent(in) :: code
|
||||
logical :: good
|
||||
|
||||
good = .false.
|
||||
if (len(code) > 0) then
|
||||
if (code(1:1) == "#") then
|
||||
if (code(2:2) == "x") then
|
||||
if (len(code) > 2) then
|
||||
good = (verify(code(3:), hexdigits) == 0)
|
||||
endif
|
||||
else
|
||||
good = (verify(code(2:), digits) == 0)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
end function likeCharacterEntityReference
|
||||
|
||||
function checkCharacterEntityReference(code, xv) result(good)
|
||||
character(len=*), intent(in) :: code
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
|
||||
integer :: i
|
||||
|
||||
good = .false.
|
||||
if (len(code) > 0) then
|
||||
if (code(1:1) == "#") then
|
||||
if (code(2:2) == "x") then
|
||||
if (len(code) > 2) then
|
||||
good = (verify(code(3:), hexdigits) == 0)
|
||||
if (good) then
|
||||
i = str_to_int_16(code(3:))
|
||||
endif
|
||||
endif
|
||||
else
|
||||
good = (verify(code(2:), digits) == 0)
|
||||
if (good) then
|
||||
i = str_to_int_10(code(2:))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
if (good) good = isLegalCharRef(i, xv)
|
||||
|
||||
end function checkCharacterEntityReference
|
||||
|
||||
function checkRepCharEntityReference(code, xv) result(good)
|
||||
character(len=*), intent(in) :: code
|
||||
integer, intent(in) :: xv
|
||||
logical :: good
|
||||
|
||||
! Is this a reference to a character we can actually represent
|
||||
! in memory? ie without unicode, US-ASCII only.
|
||||
|
||||
integer :: i
|
||||
|
||||
good = .false.
|
||||
if (len(code) > 0) then
|
||||
if (code(1:1) == "#") then
|
||||
if (code(2:2) == "x") then
|
||||
if (len(code) > 2) then
|
||||
good = (verify(code(3:), hexdigits) == 0)
|
||||
if (good) then
|
||||
i = str_to_int_16(code(3:))
|
||||
endif
|
||||
endif
|
||||
else
|
||||
good = (verify(code(2:), digits) == 0)
|
||||
if (good) then
|
||||
i = str_to_int_10(code(2:))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
if (good) good = isRepCharRef(i, xv)
|
||||
|
||||
end function checkRepCharEntityReference
|
||||
|
||||
|
||||
pure function prefixOfQName(qname) result(prefix)
|
||||
character(len=*), intent(in) :: qname
|
||||
character(len=max(index(qname, ':')-1,0)) :: prefix
|
||||
|
||||
prefix = qname ! automatic truncation
|
||||
end function prefixOfQName
|
||||
|
||||
|
||||
pure function localpartOfQname(qname) result(localpart)
|
||||
character(len=*), intent(in) :: qname
|
||||
character(len=max(len(qname)-index(qname,':'),0)) ::localpart
|
||||
|
||||
localpart = qname(index(qname,':')+1:)
|
||||
end function localpartOfQname
|
||||
|
||||
#endif
|
||||
end module m_common_namecheck
|
||||
|
|
@ -1,830 +0,0 @@
|
|||
module m_common_namespaces
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
use fox_m_fsys_array_str, only: str_vs, vs_str, vs_str_alloc
|
||||
|
||||
use fox_m_utils_uri, only: URI, parseURI, destroyURI, hasScheme
|
||||
use m_common_attrs, only: dictionary_t, get_key, get_value, remove_key, getLength, hasKey
|
||||
use m_common_attrs, only: set_nsURI, set_localName, get_prefix, add_item_to_dict
|
||||
use m_common_charset, only: XML1_0, XML1_1
|
||||
use m_common_error, only: FoX_error, FoX_warning, error_stack, add_error, in_error
|
||||
use m_common_namecheck, only: checkNCName
|
||||
use m_common_struct, only: xml_doc_state
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
character(len=*), parameter :: invalidNS = '::INVALID::'
|
||||
! an invalid URI name to indicate a namespace error.
|
||||
|
||||
type URIMapping
|
||||
character, dimension(:), pointer :: URI
|
||||
integer :: ix ! link back to node depth
|
||||
end type URIMapping
|
||||
!This is a single URI, and the node depth under which
|
||||
!its namespace applies.
|
||||
|
||||
type prefixMapping
|
||||
character, dimension(:), pointer :: prefix
|
||||
type(URIMapping), dimension(:), pointer :: urilist
|
||||
end type prefixMapping
|
||||
!This is the mapping for a single prefix; with the
|
||||
!list of namespaces which are in force at various
|
||||
!depths
|
||||
|
||||
type namespaceDictionary
|
||||
private
|
||||
type(URIMapping), dimension(:), pointer :: defaults
|
||||
type(prefixMapping), dimension(:), pointer :: prefixes
|
||||
end type namespaceDictionary
|
||||
!This is the full namespace dictionary; defaults is
|
||||
!the list of default namespaces in force; prefix a
|
||||
!list of all prefixes in force.
|
||||
|
||||
public :: invalidNS
|
||||
|
||||
public :: initNamespaceDictionary
|
||||
public :: destroyNamespaceDictionary
|
||||
public :: namespaceDictionary
|
||||
public :: checkNamespaces
|
||||
public :: checkNamespacesWriting
|
||||
public :: checkEndNamespaces
|
||||
public :: getnamespaceURI
|
||||
interface getnamespaceURI
|
||||
module procedure getURIofDefaultNS, getURIofPrefixedNS
|
||||
end interface
|
||||
public :: isPrefixInForce
|
||||
public :: isDefaultNSInForce
|
||||
public :: getNumberOfPrefixes
|
||||
public :: getPrefixByIndex
|
||||
|
||||
public :: dumpnsdict !FIXME
|
||||
|
||||
public :: addDefaultNS
|
||||
public :: removeDefaultNS
|
||||
public :: addPrefixedNS
|
||||
public :: removePrefixedNS
|
||||
|
||||
contains
|
||||
|
||||
|
||||
subroutine initNamespaceDictionary(nsDict)
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
|
||||
!We need to properly initialize 0th elements
|
||||
!(which are never used) in order to provide
|
||||
!sensible behaviour when trying to manipulate
|
||||
!an empty dictionary.
|
||||
|
||||
allocate(nsDict%defaults(0:0))
|
||||
allocate(nsDict%defaults(0)%URI(0))
|
||||
!The 0th element of the defaults NS is the empty namespace
|
||||
nsDict%defaults(0)%ix = -1
|
||||
|
||||
allocate(nsDict%prefixes(0:0))
|
||||
allocate(nsDict%prefixes(0)%prefix(0))
|
||||
allocate(nsDict%prefixes(0)%urilist(0:0))
|
||||
allocate(nsDict%prefixes(0)%urilist(0)%URI(len(invalidNS)))
|
||||
nsDict%prefixes(0)%urilist(0)%URI = vs_str(invalidNS)
|
||||
nsDict%prefixes(0)%urilist(0)%ix = -1
|
||||
|
||||
end subroutine initNamespaceDictionary
|
||||
|
||||
|
||||
subroutine destroyNamespaceDictionary(nsDict)
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
|
||||
integer :: i, j
|
||||
|
||||
do i = 0, ubound(nsDict%defaults,1)
|
||||
deallocate(nsDict%defaults(i)%URI)
|
||||
enddo
|
||||
deallocate(nsDict%defaults)
|
||||
do i = 0, ubound(nsDict%prefixes,1)
|
||||
do j = 0, ubound(nsDict%prefixes(i)%urilist,1)
|
||||
deallocate(nsDict%prefixes(i)%urilist(j)%URI)
|
||||
enddo
|
||||
deallocate(nsDict%prefixes(i)%prefix)
|
||||
deallocate(nsDict%prefixes(i)%urilist)
|
||||
enddo
|
||||
deallocate(nsDict%prefixes)
|
||||
end subroutine destroyNamespaceDictionary
|
||||
|
||||
|
||||
subroutine copyURIMapping(urilist1, urilist2, l_m)
|
||||
type(URIMapping), dimension(0:), intent(inout) :: urilist1
|
||||
type(URIMapping), dimension(0:), intent(inout) :: urilist2
|
||||
integer, intent(in):: l_m
|
||||
integer :: i
|
||||
|
||||
if (ubound(urilist1,1) < l_m .or. ubound(urilist2,1) < l_m) then
|
||||
call FoX_error('Internal error in m_sax_namespaces:copyURIMapping')
|
||||
endif
|
||||
! Now copy all defaults across (or rather - add pointers to them)
|
||||
do i = 0, l_m
|
||||
urilist2(i)%ix = urilist1(i)%ix
|
||||
urilist2(i)%URI => urilist1(i)%URI
|
||||
enddo
|
||||
|
||||
end subroutine copyURIMapping
|
||||
|
||||
|
||||
subroutine addDefaultNS(nsDict, uri, ix, es)
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
character(len=*), intent(in) :: uri
|
||||
integer, intent(in) :: ix
|
||||
type(error_stack), intent(inout), optional :: es
|
||||
|
||||
type(URIMapping), dimension(:), allocatable :: tempMap
|
||||
integer :: l_m, l_s
|
||||
|
||||
if (uri=="http://www.w3.org/XML/1998/namespace") then
|
||||
if (present(es)) then
|
||||
call add_error(es, "Attempt to assign incorrect URI to prefix 'xml'")
|
||||
else
|
||||
call FoX_error("Attempt to assign incorrect URI to prefix 'xml'")
|
||||
endif
|
||||
elseif (uri=="http://www.w3.org/2000/xmlns/") then
|
||||
if (present(es)) then
|
||||
call add_error(es, "Attempt to assign prefix to xmlns namespace")
|
||||
else
|
||||
call FoX_error("Attempt to assign prefix to xmlns namespace")
|
||||
endif
|
||||
endif
|
||||
|
||||
! FIXME check URI is valid ...
|
||||
|
||||
l_m = ubound(nsDict%defaults,1)
|
||||
allocate(tempMap(0:l_m))
|
||||
! Now copy all defaults across ...
|
||||
call copyURIMapping(nsDict%defaults, tempMap, l_m)
|
||||
deallocate(nsDict%defaults)
|
||||
l_m = l_m + 1
|
||||
allocate(nsDict%defaults(0:l_m))
|
||||
!Now copy everything back ...
|
||||
call copyURIMapping(tempMap, nsDict%defaults, l_m-1)
|
||||
deallocate(tempMap)
|
||||
! And finally, add the new default NS
|
||||
nsDict%defaults(l_m)%ix = ix
|
||||
l_s = len(uri)
|
||||
allocate(nsDict%defaults(l_m)%URI(l_s))
|
||||
nsDict%defaults(l_m)%URI = vs_str(uri)
|
||||
|
||||
end subroutine addDefaultNS
|
||||
|
||||
|
||||
subroutine addPrefixedURI(nsPrefix, uri, ix)
|
||||
type(PrefixMapping), intent(inout) :: nsPrefix
|
||||
character, dimension(:), intent(in) :: uri
|
||||
integer, intent(in) :: ix
|
||||
|
||||
type(URIMapping), dimension(:), allocatable :: tempMap
|
||||
integer :: l_m, l_s
|
||||
|
||||
l_m = ubound(nsPrefix%urilist,1)
|
||||
allocate(tempMap(0:l_m))
|
||||
! Now copy all across ...
|
||||
call copyURIMapping(nsPrefix%urilist, tempMap, l_m)
|
||||
deallocate(nsPrefix%urilist)
|
||||
l_m = l_m + 1
|
||||
allocate(nsPrefix%urilist(0:l_m))
|
||||
!Now copy everything back ...
|
||||
call copyURIMapping(tempMap, nsPrefix%urilist, l_m-1)
|
||||
deallocate(tempMap)
|
||||
! And finally, add the new default NS
|
||||
nsPrefix%urilist(l_m)%ix = ix
|
||||
l_s = size(uri)
|
||||
allocate(nsPrefix%urilist(l_m)%URI(l_s))
|
||||
nsPrefix%urilist(l_m)%URI = uri
|
||||
|
||||
end subroutine addPrefixedURI
|
||||
|
||||
subroutine removeDefaultNS(nsDict)
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
|
||||
type(URIMapping), dimension(:), allocatable :: tempMap
|
||||
integer :: l_m
|
||||
|
||||
l_m = ubound(nsDict%defaults,1)
|
||||
allocate(tempMap(0:l_m-1))
|
||||
! Now copy all defaults across ...
|
||||
call copyURIMapping(nsDict%defaults, tempMap, l_m-1)
|
||||
!And remove tail-end charlie
|
||||
deallocate(nsDict%defaults(l_m)%URI)
|
||||
deallocate(nsDict%defaults)
|
||||
l_m = l_m - 1
|
||||
allocate(nsDict%defaults(0:l_m))
|
||||
!Now copy everything back ...
|
||||
call copyURIMapping(tempMap, nsDict%defaults, l_m)
|
||||
deallocate(tempMap)
|
||||
|
||||
end subroutine removeDefaultNS
|
||||
|
||||
subroutine removePrefixedURI(nsPrefix)
|
||||
type(PrefixMapping), intent(inout) :: nsPrefix
|
||||
|
||||
type(URIMapping), dimension(:), allocatable :: tempMap
|
||||
integer :: l_m
|
||||
|
||||
l_m = ubound(nsPrefix%urilist,1)
|
||||
allocate(tempMap(0:l_m-1))
|
||||
! Now copy all defaults across ...
|
||||
call copyURIMapping(nsPrefix%urilist, tempMap, l_m-1)
|
||||
!And remove tail-end charlie
|
||||
deallocate(nsPrefix%urilist(l_m)%URI)
|
||||
deallocate(nsPrefix%urilist)
|
||||
l_m = l_m - 1
|
||||
allocate(nsPrefix%urilist(0:l_m))
|
||||
!Now copy everything back ...
|
||||
call copyURIMapping(tempMap, nsPrefix%urilist, l_m)
|
||||
deallocate(tempMap)
|
||||
|
||||
end subroutine removePrefixedURI
|
||||
|
||||
subroutine addPrefixedNS(nsDict, prefix, URI, ix, xds, xml, es)
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
character(len=*), intent(in) :: prefix
|
||||
character(len=*), intent(in) :: uri
|
||||
integer, intent(in) :: ix
|
||||
type(xml_doc_state), intent(in) :: xds
|
||||
logical, intent(in), optional :: xml
|
||||
type(error_stack), intent(inout), optional :: es
|
||||
|
||||
integer :: l_p, p_i, i
|
||||
logical :: xml_
|
||||
|
||||
if (present(xml)) then
|
||||
xml_ = xml
|
||||
else
|
||||
xml_ = .false.
|
||||
endif
|
||||
|
||||
if (prefix=='xml' .and. &
|
||||
URI/='http://www.w3.org/XML/1998/namespace') then
|
||||
if (present(es)) then
|
||||
call add_error(es, "Attempt to assign incorrect URI to prefix 'xml'")
|
||||
else
|
||||
call FoX_error("Attempt to assign incorrect URI to prefix 'xml'")
|
||||
endif
|
||||
elseif (prefix/='xml' .and. &
|
||||
URI=='http://www.w3.org/XML/1998/namespace') then
|
||||
if (present(es)) then
|
||||
call add_error(es, "Attempt to assign incorrect prefix to XML namespace")
|
||||
else
|
||||
call FoX_error("Attempt to assign incorrect prefix to XML namespace")
|
||||
endif
|
||||
elseif (prefix == 'xmlns') then
|
||||
if (present(es)) then
|
||||
call add_error(es, "Attempt to declare 'xmlns' prefix")
|
||||
else
|
||||
call FoX_error("Attempt to declare 'xmlns' prefix")
|
||||
endif
|
||||
elseif (URI=="http://www.w3.org/2000/xmlns/") then
|
||||
if (present(es)) then
|
||||
call add_error(es, "Attempt to assign prefix to xmlns namespace")
|
||||
else
|
||||
call FoX_error("Attempt to assign prefix to xmlns namespace")
|
||||
endif
|
||||
elseif (len(prefix) > 2) then
|
||||
if ((verify(prefix(1:1), 'xX') == 0) &
|
||||
.and. (verify(prefix(2:2), 'mM') == 0) &
|
||||
.and. (verify(prefix(3:3), 'lL') == 0)) then
|
||||
if (.not.xml_) then
|
||||
! FIXME need working warning infrastructure
|
||||
!if (present(es)) then
|
||||
! call add_error(es, "Attempt to declare reserved prefix: "//prefix)
|
||||
!else
|
||||
call FoX_warning("Attempt to declare reserved prefix: "//prefix)
|
||||
!endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
if (.not.checkNCName(prefix, xds%xml_version)) &
|
||||
call FoX_error("Attempt to declare invalid prefix: "//prefix)
|
||||
|
||||
! FIXME check URI is valid
|
||||
|
||||
l_p = ubound(nsDict%prefixes, 1)
|
||||
|
||||
p_i = 0
|
||||
do i = 1, l_p
|
||||
if (str_vs(nsDict%prefixes(i)%prefix) == prefix) then
|
||||
p_i = i
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
if (p_i == 0) then
|
||||
call addPrefix(nsDict, vs_str(prefix))
|
||||
p_i = l_p + 1
|
||||
endif
|
||||
|
||||
call addPrefixedURI(nsDict%prefixes(p_i), vs_str(URI), ix)
|
||||
|
||||
end subroutine addPrefixedNS
|
||||
|
||||
subroutine removePrefixedNS(nsDict, prefix)
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
character, dimension(:), intent(in) :: prefix
|
||||
integer :: l_p, p_i, i
|
||||
l_p = ubound(nsDict%prefixes, 1)
|
||||
|
||||
p_i = 0
|
||||
do i = 1, l_p
|
||||
if (str_vs(nsDict%prefixes(i)%prefix) == str_vs(prefix)) then
|
||||
p_i = i
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
if (p_i /= 0) then
|
||||
call removePrefixedURI(nsDict%prefixes(p_i))
|
||||
if (ubound(nsDict%prefixes(p_i)%urilist,1) == 0) then
|
||||
!that was the last mapping for that prefix
|
||||
call removePrefix(nsDict, p_i)
|
||||
endif
|
||||
else
|
||||
call FoX_error('Internal error in m_sax_namespaces:removePrefixedNS')
|
||||
endif
|
||||
|
||||
end subroutine removePrefixedNS
|
||||
|
||||
subroutine addPrefix(nsDict, prefix)
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
character, dimension(:), intent(in) :: prefix
|
||||
integer :: l_p
|
||||
|
||||
type(prefixMapping), dimension(:), pointer :: tempPrefixMap
|
||||
|
||||
integer :: i
|
||||
|
||||
!Add a new prefix to the namespace dictionary.
|
||||
!Unfortunately this involves copying the entire
|
||||
!prefixes dictionary to a temporary structure, then
|
||||
!reallocating the prefixes dictionary to be one
|
||||
!longer, then copying everything back:
|
||||
|
||||
l_p = ubound(nsDict%prefixes, 1)
|
||||
allocate(tempPrefixMap(0:l_p))
|
||||
|
||||
!for each current prefix, append everything to temporary structure
|
||||
do i = 0, l_p
|
||||
tempPrefixMap(i)%prefix => nsDict%prefixes(i)%prefix
|
||||
tempPrefixMap(i)%urilist => nsDict%prefixes(i)%urilist
|
||||
enddo
|
||||
deallocate(nsDict%prefixes)
|
||||
!extend prefix dictionary by one ...
|
||||
l_p = l_p + 1
|
||||
allocate(nsDict%prefixes(0:l_p))
|
||||
!and copy back ...
|
||||
do i = 0, l_p-1
|
||||
nsDict%prefixes(i)%prefix => tempPrefixMap(i)%prefix
|
||||
nsDict%prefixes(i)%urilist => tempPrefixMap(i)%urilist
|
||||
enddo
|
||||
deallocate(tempPrefixMap)
|
||||
|
||||
allocate(nsDict%prefixes(l_p)%prefix(size(prefix)))
|
||||
nsDict%prefixes(l_p)%prefix = prefix
|
||||
allocate(nsDict%prefixes(l_p)%urilist(0:0))
|
||||
allocate(nsDict%prefixes(l_p)%urilist(0)%URI(len(invalidNS)))
|
||||
nsDict%prefixes(l_p)%urilist(0)%URI = vs_str(invalidNS)
|
||||
nsDict%prefixes(l_p)%urilist(0)%ix = -1
|
||||
|
||||
end subroutine addPrefix
|
||||
|
||||
subroutine removePrefix(nsDict, i_p)
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
integer, intent(in) :: i_p
|
||||
integer :: l_p
|
||||
|
||||
type(prefixMapping), dimension(:), pointer :: tempPrefixMap
|
||||
|
||||
integer :: i
|
||||
|
||||
!Remove a prefix from the namespace dictionary.
|
||||
!Unfortunately this involves copying the entire
|
||||
!prefixes dictionary to a temporary structure, then
|
||||
!reallocating the prefixes dictionary to be one
|
||||
!shorter, then copying everything back:
|
||||
|
||||
l_p = ubound(nsDict%prefixes, 1)
|
||||
allocate(tempPrefixMap(0:l_p-1))
|
||||
|
||||
!for each current prefix, append everything to temporary structure
|
||||
do i = 0, i_p-1
|
||||
tempPrefixMap(i)%prefix => nsDict%prefixes(i)%prefix
|
||||
tempPrefixMap(i)%urilist => nsDict%prefixes(i)%urilist
|
||||
enddo
|
||||
deallocate(nsDict%prefixes(i_p)%urilist(0)%URI)
|
||||
deallocate(nsDict%prefixes(i_p)%urilist)
|
||||
deallocate(nsDict%prefixes(i_p)%prefix)
|
||||
!this subroutine will only get called if the urilist is already
|
||||
!empty, so no need to deallocate it.
|
||||
do i = i_p+1, l_p
|
||||
tempPrefixMap(i-1)%prefix => nsDict%prefixes(i)%prefix
|
||||
tempPrefixMap(i-1)%urilist => nsDict%prefixes(i)%urilist
|
||||
enddo
|
||||
deallocate(nsDict%prefixes)
|
||||
!shorten prefix dictionary by one ...
|
||||
l_p = l_p - 1
|
||||
allocate(nsDict%prefixes(0:l_p))
|
||||
!and copy back ...
|
||||
do i = 0, l_p
|
||||
nsDict%prefixes(i)%prefix => tempPrefixMap(i)%prefix
|
||||
nsDict%prefixes(i)%urilist => tempPrefixMap(i)%urilist
|
||||
enddo
|
||||
deallocate(tempPrefixMap)
|
||||
|
||||
end subroutine removePrefix
|
||||
|
||||
|
||||
subroutine checkNamespaces(atts, nsDict, ix, xds, namespace_prefixes, xmlns_uris, es, &
|
||||
partial, start_prefix_handler, end_prefix_handler)
|
||||
type(dictionary_t), intent(inout) :: atts
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
integer, intent(in) :: ix ! depth of nesting of current element.
|
||||
type(xml_doc_state), intent(in) :: xds
|
||||
logical, intent(in) :: namespace_prefixes, xmlns_uris
|
||||
type(error_stack), intent(inout) :: es
|
||||
logical, intent(in) :: partial ! if so, don't try and resolve anything except xml & xmlns
|
||||
optional :: start_prefix_handler, end_prefix_handler
|
||||
|
||||
interface
|
||||
subroutine start_prefix_handler(namespaceURI, prefix)
|
||||
character(len=*), intent(in) :: namespaceURI
|
||||
character(len=*), intent(in) :: prefix
|
||||
end subroutine start_prefix_handler
|
||||
subroutine end_prefix_handler(prefix)
|
||||
character(len=*), intent(in) :: prefix
|
||||
end subroutine end_prefix_handler
|
||||
end interface
|
||||
|
||||
character(len=6) :: xmlns
|
||||
character, dimension(:), pointer :: QName, URIstring
|
||||
integer :: i, n
|
||||
type(URI), pointer :: URIref
|
||||
!Check for namespaces; *and* remove xmlns references from
|
||||
!the attributes dictionary.
|
||||
|
||||
! we can't do a simple loop across the attributes,
|
||||
! because we need to remove some as we go along ...
|
||||
i = 1
|
||||
do while (i <= getLength(atts))
|
||||
xmlns = get_key(atts, i)
|
||||
if (xmlns == 'xmlns ') then
|
||||
!Default namespace is being set
|
||||
URIstring => vs_str_alloc(get_value(atts, i))
|
||||
if (str_vs(URIstring)=="") then
|
||||
! Empty nsURI on default namespace has same effect in 1.0 and 1.1
|
||||
if (present(end_prefix_handler)) &
|
||||
call end_prefix_handler("")
|
||||
call addDefaultNS(nsDict, invalidNS, ix)
|
||||
deallocate(URIstring)
|
||||
else
|
||||
URIref => parseURI(str_vs(URIstring))
|
||||
if (.not.associated(URIref)) then
|
||||
call add_error(es, "Invalid URI: "//str_vs(URIstring))
|
||||
deallocate(URIstring)
|
||||
return
|
||||
elseif (.not.hasScheme(URIref)) then
|
||||
call add_error(es, "Relative namespace in URI deprecated: "//str_vs(URIstring))
|
||||
deallocate(URIstring)
|
||||
call destroyURI(URIref)
|
||||
return
|
||||
endif
|
||||
call destroyURI(URIref)
|
||||
if (present(start_prefix_handler)) &
|
||||
call start_prefix_handler(str_vs(URIstring), "")
|
||||
call addDefaultNS(nsDict, str_vs(URIstring), ix)
|
||||
deallocate(URIstring)
|
||||
endif
|
||||
if (namespace_prefixes) then
|
||||
i = i + 1
|
||||
else
|
||||
call remove_key(atts, i)
|
||||
endif
|
||||
elseif (xmlns == 'xmlns:') then
|
||||
!Prefixed namespace is being set
|
||||
QName => vs_str_alloc(get_key(atts, i))
|
||||
URIstring => vs_str_alloc(get_value(atts, i))
|
||||
if (str_vs(URIstring)=="") then
|
||||
if (xds%xml_version==XML1_0) then
|
||||
call add_error(es, "Empty nsURI is invalid in XML 1.0")
|
||||
deallocate(URIstring)
|
||||
deallocate(QName)
|
||||
return
|
||||
elseif (xds%xml_version==XML1_1) then
|
||||
call addPrefixedNS(nsDict, str_vs(QName(7:)), invalidNS, ix, xds, es=es)
|
||||
if (in_error(es)) then
|
||||
deallocate(URIstring)
|
||||
deallocate(QName)
|
||||
return
|
||||
elseif (present(end_prefix_handler)) then
|
||||
call end_prefix_handler(str_vs(QName(7:)))
|
||||
endif
|
||||
deallocate(URIstring)
|
||||
deallocate(QName)
|
||||
endif
|
||||
else
|
||||
URIref => parseURI(str_vs(URIstring))
|
||||
if (.not.associated(URIref)) then
|
||||
call add_error(es, "Invalid URI: "//str_vs(URIstring))
|
||||
deallocate(URIstring)
|
||||
deallocate(QName)
|
||||
return
|
||||
elseif (.not.hasScheme(URIref)) then
|
||||
call add_error(es, "Relative namespace in URI deprecated: "//str_vs(URIstring))
|
||||
deallocate(URIstring)
|
||||
deallocate(QName)
|
||||
call destroyURI(URIref)
|
||||
return
|
||||
endif
|
||||
call destroyURI(URIref)
|
||||
call addPrefixedNS(nsDict, str_vs(QName(7:)), str_vs(URIstring), ix, xds, es=es)
|
||||
if (in_error(es)) then
|
||||
deallocate(URIstring)
|
||||
deallocate(QName)
|
||||
return
|
||||
elseif (present(start_prefix_handler)) then
|
||||
call start_prefix_handler(str_vs(URIstring), str_vs(QName(7:)))
|
||||
endif
|
||||
deallocate(URIstring)
|
||||
deallocate(QName)
|
||||
endif
|
||||
if (namespace_prefixes) then
|
||||
i = i + 1
|
||||
else
|
||||
call remove_key(atts, i)
|
||||
endif
|
||||
else
|
||||
! we only increment if we haven't removed a key
|
||||
i = i + 1
|
||||
endif
|
||||
enddo
|
||||
|
||||
! having done that, now resolve all attribute namespaces:
|
||||
do i = 1, getLength(atts)
|
||||
QName => vs_str_alloc(get_key(atts,i))
|
||||
n = index(str_vs(QName), ":")
|
||||
if (n > 0) then
|
||||
if (str_vs(QName(1:n-1))=="xmlns") then
|
||||
! FIXME but this can be controlled by SAX configuration xmlns-uris
|
||||
if (xmlns_uris) then
|
||||
call set_nsURI(atts, i, "http://www.w3.org/2000/xmlns/")
|
||||
else
|
||||
call set_nsURI(atts, i, "")
|
||||
endif
|
||||
else
|
||||
if (str_vs(QName(1:n-1))=="xml") then
|
||||
call set_nsURI(atts, i, "http://www.w3.org/XML/1998/namespace")
|
||||
elseif (getnamespaceURI(nsDict, str_vs(QName(1:n-1)))==invalidNS) then
|
||||
! Sometimes we don't want to worry about unbound prefixes,
|
||||
! eg if we are in the middle of parsing an entity.
|
||||
if (.not.partial) then
|
||||
call add_error(es, "Unbound namespace prefix")
|
||||
deallocate(QName)
|
||||
return
|
||||
else
|
||||
call set_nsURI(atts, i, "")
|
||||
endif
|
||||
else
|
||||
call set_nsURI(atts, i, getnamespaceURI(nsDict, str_vs(QName(1:n-1))))
|
||||
endif
|
||||
endif
|
||||
else
|
||||
if (xmlns_uris.and.str_vs(QName)=="xmlns") then
|
||||
call set_nsURI(atts, i, "http://www.w3.org/2000/xmlns/")
|
||||
else
|
||||
call set_nsURI(atts, i, "") ! no such thing as a default namespace on attributes
|
||||
endif
|
||||
endif
|
||||
! Check for duplicates
|
||||
if (hasKey(atts, getnamespaceURI(nsDict, str_vs(QName(1:n-1))), str_vs(QName(n+1:)))) then
|
||||
call add_error(es, "Duplicate attribute names after namespace processing")
|
||||
deallocate(QName)
|
||||
return
|
||||
endif
|
||||
call set_localName(atts, i, QName(n+1:))
|
||||
deallocate(QName)
|
||||
enddo
|
||||
|
||||
end subroutine checkNamespaces
|
||||
|
||||
|
||||
subroutine checkNamespacesWriting(atts, nsdict, ix)
|
||||
type(dictionary_t), intent(inout) :: atts
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
integer, intent(in) :: ix
|
||||
! Read through a list of attributes, check with currently
|
||||
! active namespaces & add any necessary declarations
|
||||
|
||||
integer :: i, i_p, l_d, l_ps, n
|
||||
|
||||
n = getLength(atts) ! we need the length before we fiddle with it
|
||||
|
||||
!Does the default NS need added?
|
||||
l_d = ubound(nsDict%defaults,1)
|
||||
if (nsDict%defaults(l_d)%ix == ix) then
|
||||
!It's not been registered yet:
|
||||
call add_item_to_dict(atts, "xmlns", &
|
||||
str_vs(nsDict%defaults(l_d)%URI), type="CDATA")
|
||||
endif
|
||||
|
||||
!next, add any overdue prefixed NS's in the same way:
|
||||
! there should only ever be one. More would be an error,
|
||||
! but the check should have been done earlier.
|
||||
do i_p = 0, ubound(nsDict%prefixes, 1)
|
||||
l_ps = ubound(nsDict%prefixes(i_p)%urilist,1)
|
||||
if (nsDict%prefixes(i_p)%urilist(l_ps)%ix == ix) then
|
||||
call add_item_to_dict(atts, &
|
||||
"xmlns:"//str_vs(nsDict%prefixes(i_p)%prefix), &
|
||||
str_vs(nsDict%prefixes(i_p)%urilist(l_ps)%URI), &
|
||||
type="CDATA")
|
||||
endif
|
||||
enddo
|
||||
|
||||
|
||||
!Finally, we may have some we've added for attribute QNames
|
||||
! have to get those too:
|
||||
do i = 1, getLength(atts)
|
||||
! get prefix, and identify the relevant NS mapping
|
||||
i_p = getPrefixIndex(nsDict, get_prefix(atts, i))
|
||||
l_ps = ubound(nsDict%prefixes(i_p)%urilist,1)
|
||||
!If the index is greater than what it should be:
|
||||
if (nsDict%prefixes(i_p)%urilist(l_ps)%ix > ix) then
|
||||
!we only just added this, so we need to declare it
|
||||
call add_item_to_dict(atts, "xmlns:"//get_prefix(atts, i), &
|
||||
str_vs(nsDict%prefixes(i_p)%urilist(l_ps)%URI), &
|
||||
type="CDATA")
|
||||
!Reset the index to the right value:
|
||||
nsDict%prefixes(i_p)%urilist(l_ps)%ix = ix
|
||||
endif
|
||||
enddo
|
||||
|
||||
end subroutine checkNamespacesWriting
|
||||
|
||||
|
||||
subroutine checkEndNamespaces(nsDict, ix, end_prefix_handler)
|
||||
type(namespaceDictionary), intent(inout) :: nsDict
|
||||
integer, intent(in) :: ix
|
||||
|
||||
optional :: end_prefix_handler
|
||||
|
||||
interface
|
||||
subroutine end_prefix_handler(prefix)
|
||||
character(len=*), intent(in) :: prefix
|
||||
end subroutine end_prefix_handler
|
||||
end interface
|
||||
|
||||
integer :: l_d, l_p, l_ps, i
|
||||
character, pointer :: prefix(:)
|
||||
|
||||
!It will only ever be the final elements in the list which
|
||||
! might have expired.
|
||||
|
||||
l_d = ubound(nsDict%defaults,1)
|
||||
do while (nsDict%defaults(l_d)%ix == ix)
|
||||
if (present(end_prefix_handler)) &
|
||||
call end_prefix_handler("")
|
||||
call removeDefaultNS(nsDict)
|
||||
l_d = ubound(nsDict%defaults,1)
|
||||
enddo
|
||||
|
||||
l_p = ubound(nsDict%prefixes, 1)
|
||||
i = 1
|
||||
do while (i <= l_p)
|
||||
l_ps = ubound(nsDict%prefixes(l_p)%urilist,1)
|
||||
if (nsDict%prefixes(i)%urilist(l_ps)%ix == ix) then
|
||||
if (present(end_prefix_handler)) &
|
||||
call end_prefix_handler(str_vs(nsDict%prefixes(i)%prefix))
|
||||
! We have to assign this pointer explicitly, otherwise the next call
|
||||
! aliases its arguments illegally.
|
||||
prefix => nsDict%prefixes(i)%prefix
|
||||
call removePrefixedNS(nsDict, prefix)
|
||||
if (l_p > ubound(nsDict%prefixes, 1)) then
|
||||
! we just removed the last reference to that prefix,
|
||||
! so our list of prefixes has shrunk - update the running total.
|
||||
! and go to the next prefix, which is at the same index
|
||||
l_p = l_p - 1
|
||||
cycle
|
||||
endif
|
||||
endif
|
||||
i = i + 1
|
||||
enddo
|
||||
|
||||
end subroutine checkEndNamespaces
|
||||
|
||||
|
||||
subroutine dumpnsdict(nsdict)
|
||||
type(namespaceDictionary), intent(in) :: nsdict
|
||||
integer :: i, j
|
||||
write(*,'(a)')'* default namespaces *'
|
||||
|
||||
do i = 1, ubound(nsdict%defaults, 1)
|
||||
write(*,'(i0,a)') nsdict%defaults(i)%ix, str_vs(nsdict%defaults(i)%URI)
|
||||
enddo
|
||||
write(*,'(a)') '* Prefixed namespaces *'
|
||||
do i = 1, ubound(nsdict%prefixes, 1)
|
||||
write(*,'(2a)') '* prefix: ', str_vs(nsdict%prefixes(i)%prefix)
|
||||
do j = 1, ubound(nsdict%prefixes(i)%urilist, 1)
|
||||
write(*,'(i0,a)') nsdict%prefixes(i)%urilist(j)%ix, str_vs(nsdict%prefixes(i)%urilist(j)%URI)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end subroutine dumpnsdict
|
||||
|
||||
|
||||
pure function getURIofDefaultNS(nsDict) result(uri)
|
||||
type(namespaceDictionary), intent(in) :: nsDict
|
||||
character(len=size(nsDict%defaults(ubound(nsDict%defaults,1))%URI)) :: URI
|
||||
|
||||
integer :: l_d
|
||||
l_d = ubound(nsDict%defaults,1)
|
||||
uri = str_vs(nsDict%defaults(l_d)%URI)
|
||||
end function getURIofDefaultNS
|
||||
|
||||
|
||||
pure function isPrefixInForce(nsDict, prefix) result(force)
|
||||
type(namespaceDictionary), intent(in) :: nsDict
|
||||
character(len=*), intent(in) :: prefix
|
||||
logical :: force
|
||||
integer :: i, l_s
|
||||
|
||||
force = .false.
|
||||
do i = 1, ubound(nsDict%prefixes, 1)
|
||||
if (str_vs(nsDict%prefixes(i)%prefix) == prefix) then
|
||||
l_s = ubound(nsDict%prefixes(i)%urilist, 1)
|
||||
force = (size(nsdict%prefixes(i)%urilist(l_s)%URI) > 0)
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
end function isPrefixInForce
|
||||
|
||||
|
||||
pure function isDefaultNSInForce(nsDict) result(force)
|
||||
type(namespaceDictionary), intent(in) :: nsDict
|
||||
logical :: force
|
||||
integer :: l_s
|
||||
|
||||
force = .false.
|
||||
l_s = ubound(nsDict%defaults, 1)
|
||||
if (l_s > 0) &
|
||||
force = (size(nsdict%defaults(l_s)%URI) > 0)
|
||||
|
||||
end function isDefaultNSInForce
|
||||
|
||||
|
||||
pure function getPrefixIndex(nsDict, prefix) result(p)
|
||||
type(namespaceDictionary), intent(in) :: nsDict
|
||||
character(len=*), intent(in) :: prefix
|
||||
integer :: p
|
||||
|
||||
integer :: i
|
||||
p = 0
|
||||
do i = 1, ubound(nsDict%prefixes, 1)
|
||||
if (str_vs(nsDict%prefixes(i)%prefix) == prefix) then
|
||||
p = i
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
end function getPrefixIndex
|
||||
|
||||
|
||||
function getNumberOfPrefixes(nsDict) result(n)
|
||||
type(namespaceDictionary), intent(in) :: nsDict
|
||||
integer :: n
|
||||
n = ubound(nsDict%prefixes, 1)
|
||||
end function getNumberOfPrefixes
|
||||
|
||||
|
||||
function getPrefixByIndex(nsDict, i) result(c)
|
||||
type(namespaceDictionary), intent(in) :: nsDict
|
||||
integer, intent(in) :: i
|
||||
character(len=size(nsDict%prefixes(i)%prefix)) :: c
|
||||
|
||||
c = str_vs(nsDict%prefixes(i)%prefix)
|
||||
end function getPrefixByIndex
|
||||
|
||||
|
||||
pure function getURIofPrefixedNS(nsDict, prefix) result(uri)
|
||||
type(namespaceDictionary), intent(in) :: nsDict
|
||||
character(len=*), intent(in) :: prefix
|
||||
character(len=size( &
|
||||
nsDict%prefixes( &
|
||||
getPrefixIndex(nsDict,prefix) &
|
||||
) &
|
||||
%urilist( &
|
||||
ubound(nsDict%prefixes(getPrefixIndex(nsDict,prefix))%urilist, 1) &
|
||||
) &
|
||||
%uri)) :: URI
|
||||
integer :: p_i, l_m
|
||||
p_i = getPrefixIndex(nsDict, prefix)
|
||||
l_m = ubound(nsDict%prefixes(p_i)%urilist, 1)
|
||||
uri = str_vs(nsDict%prefixes(p_i)%urilist(l_m)%URI)
|
||||
|
||||
end function getURIofPrefixedNS
|
||||
|
||||
#endif
|
||||
end module m_common_namespaces
|
||||
|
|
@ -1,120 +0,0 @@
|
|||
module m_common_notations
|
||||
|
||||
#ifndef DUMMYLIB
|
||||
use fox_m_fsys_array_str, only: vs_str, str_vs
|
||||
use m_common_error, only: FoX_error
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
||||
type notation
|
||||
character(len=1), dimension(:), pointer :: name
|
||||
character(len=1), dimension(:), pointer :: systemID
|
||||
character(len=1), dimension(:), pointer :: publicId
|
||||
end type notation
|
||||
|
||||
type notation_list
|
||||
type(notation), dimension(:), pointer :: list
|
||||
end type notation_list
|
||||
|
||||
public :: notation
|
||||
public :: notation_list
|
||||
public :: init_notation_list
|
||||
public :: destroy_notation_list
|
||||
public :: add_notation
|
||||
public :: notation_exists
|
||||
|
||||
contains
|
||||
|
||||
subroutine init_notation_list(nlist)
|
||||
! It is not clear how we should specify the
|
||||
! intent of this argument - different
|
||||
! compilers seem to have different semantics
|
||||
type(notation_list), intent(inout) :: nlist
|
||||
|
||||
allocate(nlist%list(0:0))
|
||||
allocate(nlist%list(0)%name(0))
|
||||
allocate(nlist%list(0)%systemId(0))
|
||||
allocate(nlist%list(0)%publicId(0))
|
||||
|
||||
end subroutine init_notation_list
|
||||
|
||||
|
||||
subroutine destroy_notation_list(nlist)
|
||||
type(notation_list), intent(inout) :: nlist
|
||||
|
||||
integer :: i
|
||||
|
||||
do i = 0, ubound(nlist%list, 1)
|
||||
deallocate(nlist%list(i)%name)
|
||||
deallocate(nlist%list(i)%systemId)
|
||||
deallocate(nlist%list(i)%publicId)
|
||||
enddo
|
||||
deallocate(nlist%list)
|
||||
end subroutine destroy_notation_list
|
||||
|
||||
|
||||
subroutine add_notation(nlist, name, systemId, publicId)
|
||||
type(notation_list), intent(inout) :: nlist
|
||||
character(len=*), intent(in) :: name
|
||||
character(len=*), intent(in), optional :: systemId
|
||||
character(len=*), intent(in), optional :: publicId
|
||||
|
||||
integer :: i
|
||||
type(notation), dimension(:), pointer :: temp
|
||||
! pointer not allocatable to avoid bug on Lahey
|
||||
|
||||
if (.not.present(systemId) .and. .not.present(publicId)) &
|
||||
call FoX_error("Neither System nor Public Id specified for notation: "//name)
|
||||
|
||||
allocate(temp(0:ubound(nlist%list,1)))
|
||||
do i = 0, ubound(nlist%list, 1)
|
||||
temp(i)%name => nlist%list(i)%name
|
||||
temp(i)%systemId => nlist%list(i)%systemId
|
||||
temp(i)%publicId => nlist%list(i)%publicId
|
||||
enddo
|
||||
|
||||
deallocate(nlist%list)
|
||||
allocate(nlist%list(0:ubound(temp, 1)+1))
|
||||
do i = 0, ubound(temp, 1)
|
||||
nlist%list(i)%name => temp(i)%name
|
||||
nlist%list(i)%systemId => temp(i)%systemId
|
||||
nlist%list(i)%publicId => temp(i)%publicId
|
||||
enddo
|
||||
deallocate(temp)
|
||||
|
||||
allocate(nlist%list(i)%name(len(name)))
|
||||
nlist%list(i)%name = vs_str(name)
|
||||
if (present(systemId)) then
|
||||
allocate(nlist%list(i)%systemId(len(systemId)))
|
||||
nlist%list(i)%systemId = vs_str(systemId)
|
||||
else
|
||||
allocate(nlist%list(i)%systemId(0))
|
||||
endif
|
||||
if (present(publicId)) then
|
||||
allocate(nlist%list(i)%publicId(len(publicId)))
|
||||
nlist%list(i)%publicId = vs_str(publicId)
|
||||
else
|
||||
allocate(nlist%list(i)%publicId(0))
|
||||
endif
|
||||
end subroutine add_notation
|
||||
|
||||
|
||||
function notation_exists(nlist, name) result(p)
|
||||
type(notation_list), intent(in) :: nlist
|
||||
character(len=*), intent(in) :: name
|
||||
logical :: p
|
||||
|
||||
integer :: i
|
||||
|
||||
p = .false.
|
||||
do i = 1, ubound(nlist%list, 1)
|
||||
if (str_vs(nlist%list(i)%name) == name) then
|
||||
p = .true.
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
end function notation_exists
|
||||
|
||||
#endif
|
||||
end module m_common_notations
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue