diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py
index 2b08e8274..70421281d 100644
--- a/examples/python/pincell_multigroup/build-xml.py
+++ b/examples/python/pincell_multigroup/build-xml.py
@@ -21,44 +21,47 @@ groups = openmc.mgxs.EnergyGroups(group_edges=[1E-11, 0.0635E-6, 10.0E-6,
# Instantiate the 7-group (C5G7) cross section data
uo2_xsdata = openmc.XSdata('UO2', groups)
uo2_xsdata.order = 0
-uo2_xsdata.total = [0.1779492, 0.3298048, 0.4803882, 0.5543674,
- 0.3118013, 0.3951678, 0.5644058]
-uo2_xsdata.absorption = [8.0248E-03, 3.7174E-03, 2.6769E-02, 9.6236E-02,
- 3.0020E-02, 1.1126E-01, 2.8278E-01]
-uo2_xsdata.scatter = [[[0.1275370, 0.0423780, 0.0000094, 0.0000000, 0.0000000, 0.0000000, 0.0000000],
- [0.0000000, 0.3244560, 0.0016314, 0.0000000, 0.0000000, 0.0000000, 0.0000000],
- [0.0000000, 0.0000000, 0.4509400, 0.0026792, 0.0000000, 0.0000000, 0.0000000],
- [0.0000000, 0.0000000, 0.0000000, 0.4525650, 0.0055664, 0.0000000, 0.0000000],
- [0.0000000, 0.0000000, 0.0000000, 0.0001253, 0.2714010, 0.0102550, 0.0000000],
- [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0012968, 0.2658020, 0.0168090],
- [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0085458, 0.2730800]]]
-uo2_xsdata.fission = [7.21206E-03, 8.19301E-04, 6.45320E-03,
- 1.85648E-02, 1.78084E-02, 8.30348E-02,
- 2.16004E-01]
-uo2_xsdata.nu_fission = [2.005998E-02, 2.027303E-03, 1.570599E-02,
- 4.518301E-02, 4.334208E-02, 2.020901E-01,
- 5.257105E-01]
-uo2_xsdata.chi = [5.8791E-01, 4.1176E-01, 3.3906E-04, 1.1761E-07,
- 0.0000E+00, 0.0000E+00, 0.0000E+00]
+uo2_xsdata.set_total(
+ [0.1779492, 0.3298048, 0.4803882, 0.5543674, 0.3118013, 0.3951678,
+ 0.5644058])
+uo2_xsdata.set_absorption([8.0248E-03, 3.7174E-03, 2.6769E-02, 9.6236E-02,
+ 3.0020E-02, 1.1126E-01, 2.8278E-01])
+uo2_xsdata.set_scatter_matrix(
+ [[[0.1275370, 0.0423780, 0.0000094, 0.0000000, 0.0000000, 0.0000000, 0.0000000],
+ [0.0000000, 0.3244560, 0.0016314, 0.0000000, 0.0000000, 0.0000000, 0.0000000],
+ [0.0000000, 0.0000000, 0.4509400, 0.0026792, 0.0000000, 0.0000000, 0.0000000],
+ [0.0000000, 0.0000000, 0.0000000, 0.4525650, 0.0055664, 0.0000000, 0.0000000],
+ [0.0000000, 0.0000000, 0.0000000, 0.0001253, 0.2714010, 0.0102550, 0.0000000],
+ [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0012968, 0.2658020, 0.0168090],
+ [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0085458, 0.2730800]]])
+uo2_xsdata.set_fission([7.21206E-03, 8.19301E-04, 6.45320E-03,
+ 1.85648E-02, 1.78084E-02, 8.30348E-02,
+ 2.16004E-01])
+uo2_xsdata.set_nu_fission([2.005998E-02, 2.027303E-03, 1.570599E-02,
+ 4.518301E-02, 4.334208E-02, 2.020901E-01,
+ 5.257105E-01])
+uo2_xsdata.set_chi([5.8791E-01, 4.1176E-01, 3.3906E-04, 1.1761E-07, 0.0000E+00,
+ 0.0000E+00, 0.0000E+00])
h2o_xsdata = openmc.XSdata('LWTR', groups)
h2o_xsdata.order = 0
-h2o_xsdata.total = [0.15920605, 0.412969593, 0.59030986, 0.58435,
- 0.718, 1.2544497, 2.650379]
-h2o_xsdata.absorption = [6.0105E-04, 1.5793E-05, 3.3716E-04,
- 1.9406E-03, 5.7416E-03, 1.5001E-02,
- 3.7239E-02]
-h2o_xsdata.scatter = [[[0.0444777, 0.1134000, 0.0007235, 0.0000037, 0.0000001, 0.0000000, 0.0000000],
- [0.0000000, 0.2823340, 0.1299400, 0.0006234, 0.0000480, 0.0000074, 0.0000010],
- [0.0000000, 0.0000000, 0.3452560, 0.2245700, 0.0169990, 0.0026443, 0.0005034],
- [0.0000000, 0.0000000, 0.0000000, 0.0910284, 0.4155100, 0.0637320, 0.0121390],
- [0.0000000, 0.0000000, 0.0000000, 0.0000714, 0.1391380, 0.5118200, 0.0612290],
- [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0022157, 0.6999130, 0.5373200],
- [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.1324400, 2.4807000]]]
+h2o_xsdata.set_total([0.15920605, 0.412969593, 0.59030986, 0.58435,
+ 0.718, 1.2544497, 2.650379])
+h2o_xsdata.set_absorption([6.0105E-04, 1.5793E-05, 3.3716E-04,
+ 1.9406E-03, 5.7416E-03, 1.5001E-02,
+ 3.7239E-02])
+h2o_xsdata.set_scatter_matrix(
+ [[[0.0444777, 0.1134000, 0.0007235, 0.0000037, 0.0000001, 0.0000000, 0.0000000],
+ [0.0000000, 0.2823340, 0.1299400, 0.0006234, 0.0000480, 0.0000074, 0.0000010],
+ [0.0000000, 0.0000000, 0.3452560, 0.2245700, 0.0169990, 0.0026443, 0.0005034],
+ [0.0000000, 0.0000000, 0.0000000, 0.0910284, 0.4155100, 0.0637320, 0.0121390],
+ [0.0000000, 0.0000000, 0.0000000, 0.0000714, 0.1391380, 0.5118200, 0.0612290],
+ [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0022157, 0.6999130, 0.5373200],
+ [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.1324400, 2.4807000]]])
mg_cross_sections_file = openmc.MGXSLibrary(groups)
mg_cross_sections_file.add_xsdatas([uo2_xsdata, h2o_xsdata])
-mg_cross_sections_file.export_to_xml()
+mg_cross_sections_file.export_to_hdf5()
###############################################################################
@@ -129,7 +132,7 @@ geometry.export_to_xml()
# Instantiate a Settings object, set all runtime parameters, and export to XML
settings_file = openmc.Settings()
settings_file.energy_mode = "multi-group"
-settings_file.cross_sections = "./mgxs.xml"
+settings_file.cross_sections = "./mgxs.h5"
settings_file.batches = batches
settings_file.inactive = inactive
settings_file.particles = particles
diff --git a/examples/xml/pincell_multigroup/mg_cross_sections.xml b/examples/xml/pincell_multigroup/mg_cross_sections.xml
deleted file mode 100644
index af1f0072b..000000000
--- a/examples/xml/pincell_multigroup/mg_cross_sections.xml
+++ /dev/null
@@ -1,383 +0,0 @@
-
-
-
- 7
-
- 1E-11 0.0635E-6 10.0E-6 1.0E-4 1.0E-3 0.5 1.0 20.0
-
-
-
-
-
- UO2
- UO2
- 2.53E-8
- 0
- true
-
- isotropic
-
-
-
- 8.0248E-03 3.7174E-03 2.6769E-02 9.6236E-02 3.0020E-02 1.1126E-01 2.8278E-01
-
-
-
- 2.005998E-02 2.027303E-03 1.570599E-02 4.518301E-02 4.334208E-02 2.020901E-01 5.257105E-01
-
-
-
- 5.8791E-01 4.1176E-01 3.3906E-04 1.1761E-07 0.0000E+00 0.0000E+00 0.0000E+00
-
-
- 7.21206E-03 8.19301E-04 6.45320E-03 1.85648E-02 1.78084E-02 8.30348E-02 2.16004E-01
-
-
-
-
-
- 1.0 1.0 1.0 1.0 1.0 1.0 1.0
-
-
-
-
-
- 0.1275370 0.0423780 0.0000094 0.0000000 0.0000000 0.0000000 0.0000000
- 0.0000000 0.3244560 0.0016314 0.0000000 0.0000000 0.0000000 0.0000000
- 0.0000000 0.0000000 0.4509400 0.0026792 0.0000000 0.0000000 0.0000000
- 0.0000000 0.0000000 0.0000000 0.4525650 0.0055664 0.0000000 0.0000000
- 0.0000000 0.0000000 0.0000000 0.0001253 0.2714010 0.0102550 0.0000000
- 0.0000000 0.0000000 0.0000000 0.0000000 0.0012968 0.2658020 0.0168090
- 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0085458 0.2730800
-
-
-
-
- 0.1779492 0.3298048 0.4803882 0.5543674000000001 0.3118013 0.39516779999999996 0.5644058
-
-
-
-
-
-
- MOX1
- MOX1
- 2.53E-8
- 0
- true
-
-
-
- 8.4339E-03 3.7577E-03 2.7970E-02 1.0421E-01 1.3994E-01 4.0918E-01 4.0935E-01
-
-
-
- 1.27888062E-02 8.95701528E-03 7.37557218E-06 2.55837033E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 1.49041240E-03 1.04385401E-03 8.59552023E-07 2.98153464E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 9.56411400E-03 6.69850756E-03 5.51582469E-06 1.91327830E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 3.84928781E-02 2.69596154E-02 2.21996483E-05 7.70040890E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 1.80629998E-02 1.26509513E-02 1.04173100E-05 3.61346022E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 3.91930789E-01 2.74500216E-01 2.26034688E-04 7.84048241E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 4.19762096E-01 2.93992687E-01 2.42085585E-04 8.39724109E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00
-
-
-
- 7.62704E-03 8.76898E-04 5.69835E-03 2.28872E-02 1.07635E-02 2.32757E-01 2.48968E-01
-
-
-
-
- 1.0 1.0 1.0 1.0 1.0 1.0 1.0
-
-
-
-
-
- 1.27537000E-01 4.23780000E-02 9.43740000E-06 5.51630000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 3.24456000E-01 1.63140000E-03 3.14270000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 4.50940000E-01 2.67920000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.52565000E-01 5.56640000E-03 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.25250000E-04 2.71401000E-01 1.02550000E-02 1.00210000E-08
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.29680000E-03 2.65802000E-01 1.68090000E-02
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.54580000E-03 2.73080000E-01
-
-
-
- 0.1783583429163 0.3298451031427 0.4815892 0.5623414 0.421721260021 0.6930878 0.6909757999999999
-
-
-
-
-
-
- MOX2
- MOX2
- 2.53E-8
- 0
- true
-
-
-
- 0.0090657 0.0042967 0.032881 0.12203 0.18298 0.56846 0.58521
-
-
-
- 1.40004593E-02 9.80563205E-03 8.07435789E-06 2.80075866E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 2.26856185E-03 1.58885378E-03 1.30832709E-06 4.53820413E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 1.41886199E-02 9.93741584E-03 8.18287404E-06 2.83839974E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 5.54788444E-02 3.88562347E-02 3.19958106E-05 1.10984111E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 2.69085702E-02 1.88462058E-02 1.55187355E-05 5.38299559E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 5.45687127E-01 3.82187973E-01 3.14709185E-04 1.09163414E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 6.13307712E-01 4.29548032E-01 3.53707392E-04 1.22690752E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00
-
-
-
- 0.00825446 0.00132565 0.00842156 0.032873 0.0159636 0.323794 0.362803
-
-
-
-
- 1.0 1.0 1.0 1.0 1.0 1.0 1.0
-
-
-
-
-
- 1.30457000E-01 4.17920000E-02 8.51050000E-06 5.13290000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 3.28428000E-01 1.64360000E-03 2.20170000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 4.58371000E-01 2.53310000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.63709000E-01 5.47660000E-03 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.76190000E-04 2.82313000E-01 8.72890000E-03 9.00160000E-09
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.27600000E-03 2.49751000E-01 1.31140000E-02
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.86450000E-03 2.59529000E-01
-
-
-
- 0.1813232156329 0.3343683022017 0.4937851 0.5912156 0.47419809900160004 0.833601 0.8536035
-
-
-
-
-
-
- MOX3
- MOX3
- 2.53E-8
- 0
- true
-
-
-
- 9.48620000E-03 4.65560000E-03 3.62400000E-02 1.32720000E-01 2.08400000E-01 6.58700000E-01 6.90170000E-01
-
-
-
- 1.48071013E-02 1.03705874E-02 8.53956516E-06 2.96212546E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 2.78640474E-03 1.95154023E-03 1.60697792E-06 5.57413653E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 1.73304404E-02 1.21378819E-02 9.99482763E-06 3.46691346E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 6.59928975E-02 4.62200600E-02 3.80594850E-05 1.32017225E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 3.25131926E-02 2.27715674E-02 1.87510386E-05 6.50418701E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 6.32002662E-01 4.42641588E-01 3.64489161E-04 1.26430632E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 7.28595687E-01 5.10293344E-01 4.20196380E-04 1.45753838E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00
-
-
-
- 8.67209000E-03 1.62426000E-03 1.02716000E-02 3.90447000E-02 1.92576000E-02 3.74888000E-01 4.30599000E-01
-
-
-
-
- 1.0 1.0 1.0 1.0 1.0 1.0 1.0
-
-
-
-
-
- 1.31504000E-01 4.20460000E-02 8.69720000E-06 5.19380000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 3.30403000E-01 1.64630000E-03 2.60060000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 4.61792000E-01 2.47490000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.68021000E-01 5.43300000E-03 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.85970000E-04 2.85771000E-01 8.39730000E-03 8.92800000E-09
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.39160000E-03 2.47614000E-01 1.23220000E-02
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.96810000E-03 2.56093000E-01
-
-
-
- 1.83044902E-01 3.36704903E-01 5.00506900E-01 6.06174000E-01 5.02754279E-01 9.21027600E-01 9.55231100E-01
-
-
-
-
-
-
- FC
- FC
- 2.53E-8
- 0
- true
-
-
-
- 5.1132E-04 7.5813E-05 3.1643E-04 1.1675E-03 3.3977E-03 9.1886E-03 2.3244E-02
-
-
-
- 1.323401E-08 1.434500E-08 1.128599E-06 1.276299E-05 3.538502E-07 1.740099E-06 5.063302E-06
-
-
-
- 5.8791E-01 4.1176E-01 3.3906E-04 1.1761E-07 0.0000E+00 0.0000E+00 0.0000E+00
-
-
-
- 4.79002E-09 5.82564E-09 4.63719E-07 5.24406E-06 1.45390E-07 7.14972E-07 2.08041E-06
-
-
-
-
- 1.0 1.0 1.0 1.0 1.0 1.0 1.0
-
-
-
-
-
- 6.61659000E-02 5.90700000E-02 2.83340000E-04 1.46220000E-06 2.06420000E-08 0.00000000E00 0.00000000E00
- 0.00000000E00 2.40377000E-01 5.24350000E-02 2.49900000E-04 1.92390000E-05 2.98750000E-06 4.21400000E-07
- 0.00000000E00 0.00000000E00 1.83425000E-01 9.22880000E-02 6.93650000E-03 1.07900000E-03 2.05430000E-04
- 0.00000000E00 0.00000000E00 0.00000000E00 7.90769000E-02 1.69990000E-01 2.58600000E-02 4.92560000E-03
- 0.00000000E00 0.00000000E00 0.00000000E00 3.73400000E-05 9.97570000E-02 2.06790000E-01 2.44780000E-02
- 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 9.17420000E-04 3.16774000E-01 2.38760000E-01
- 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 4.97930000E-02 1.09910000E00
-
-
-
- 1.26032048E-01 2.93160367E-01 2.84250824E-01 2.81025244E-01 3.34460185E-01 5.65640735E-01 1.17213908E00
-
-
-
-
-
-
- GT
- GT
- 2.53E-8
- 0
- false
-
-
-
- 5.11320000E-04 7.58010000E-05 3.15720000E-04 1.15820000E-03 3.39750000E-03 9.18780000E-03 2.32420000E-02
-
-
-
-
-
- 6.61659000E-02 5.90700000E-02 2.83340000E-04 1.46220000E-06 2.06420000E-08 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 2.40377000E-01 5.24350000E-02 2.49900000E-04 1.92390000E-05 2.98750000E-06 4.21400000E-07
- 0.00000000E+00 0.00000000E+00 1.83297000E-01 9.23970000E-02 6.94460000E-03 1.08030000E-03 2.05670000E-04
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.88511000E-02 1.70140000E-01 2.58810000E-02 4.92970000E-03
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.73330000E-05 9.97372000E-02 2.06790000E-01 2.44780000E-02
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.17260000E-04 3.16765000E-01 2.38770000E-01
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.97920000E-02 1.09912000E+00
-
-
-
- 1.26032043E-01 2.93160349E-01 2.84240290E-01 2.80960000E-01 3.34440033E-01 5.65640060E-01 1.17215400E+00
-
-
-
-
-
- LWTR
- LWTR
- 2.53E-8
- 0
- false
-
-
-
- 6.0105E-04 1.5793E-05 3.3716E-04 1.9406E-03 5.7416E-03 1.5001E-02 3.7239E-02
-
-
-
-
-
- 0.0444777 0.1134000 0.0007235 0.0000037 0.0000001 0.0000000 0.0000000
- 0.0000000 0.2823340 0.1299400 0.0006234 0.0000480 0.0000074 0.0000010
- 0.0000000 0.0000000 0.3452560 0.2245700 0.0169990 0.0026443 0.0005034
- 0.0000000 0.0000000 0.0000000 0.0910284 0.4155100 0.0637320 0.0121390
- 0.0000000 0.0000000 0.0000000 0.0000714 0.1391380 0.5118200 0.0612290
- 0.0000000 0.0000000 0.0000000 0.0000000 0.0022157 0.6999130 0.5373200
- 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1324400 2.4807000
-
-
-
- 0.15920605 0.41296959299999997 0.59030986 0.5843499999999999 0.7180000000000001 1.2544497000000001 2.650379
-
-
-
-
-
-
- CR
- CR
- 2.53E-8
- 0
- false
-
-
-
- 1.70490000E-03 8.36224000E-03 8.37901000E-02 3.97797000E-01 6.98763000E-01 9.29508000E-01 1.17836000E+00
-
-
-
-
-
- 1.70563000E-01 4.44012000E-02 9.83670000E-05 1.27786000E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 4.71050000E-01 6.85480000E-04 3.91395000E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 8.01859000E-01 7.20132000E-04 0.00000000E+00 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.70752000E-01 1.46015000E-03 0.00000000E+00 0.00000000E+00
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.55562000E-05 2.07838000E-01 3.81486000E-03 3.69760000E-09
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.02427000E-03 2.02465000E-01 4.75290000E-03
- 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.53043000E-03 6.58597000E-01
-
-
-
- 2.16767595E-01 4.80097720E-01 8.86369232E-01 9.70009150E-01 9.10481420E-01 1.13775017E+00 1.84048743E+00
-
-
-
diff --git a/examples/xml/pincell_multigroup/settings.xml b/examples/xml/pincell_multigroup/settings.xml
index dfd2fac81..1030762fa 100644
--- a/examples/xml/pincell_multigroup/settings.xml
+++ b/examples/xml/pincell_multigroup/settings.xml
@@ -28,13 +28,12 @@
false
- ./mg_cross_sections.xml
+ ./mg_cross_sections.h5
diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py
index 15d80dc91..3188631bc 100644
--- a/openmc/mgxs_library.py
+++ b/openmc/mgxs_library.py
@@ -315,7 +315,6 @@ class XSdata(object):
check_value('representation', representation, _REPRESENTATIONS)
self._representation = representation
-
@awr.setter
def awr(self, awr):
# Check validity of type and that the awr value is > 0
@@ -371,6 +370,31 @@ class XSdata(object):
check_type('use_chi', use_chi, bool)
self._use_chi = use_chi
+ def add_temperature(self, temperature):
+ """This method re-sizes the attributes of this XSdata object so that it
+ can accomodate an additional temperature. Note that the set_* methods
+ will still need to be executed.
+
+ Parameters
+ ----------
+ temperature : float
+ Temperature (in units of Kelvin) of the provided dataset.
+
+ """
+ check_type('temperature', temperature, Real)
+
+ temp_store = self.temperatures.tolist().append(temperature)
+ self.temperatures = temp_store
+
+ self._total.append(None)
+ self._absorption.append(None)
+ self._scatter_matrix.append(None)
+ self._multiplicity_matrix.append(None)
+ self._fission.append(None)
+ self._nu_fission.append(None)
+ self._kappa_fission.append(None)
+ self._chi.append(None)
+
def set_total(self, total, temperature=294.):
"""This method sets the cross section for this XSdata object at the
provided temperature.
diff --git a/scripts/openmc-update-mgxs.py b/scripts/openmc-update-mgxs.py
new file mode 100755
index 000000000..a13004042
--- /dev/null
+++ b/scripts/openmc-update-mgxs.py
@@ -0,0 +1,229 @@
+#!/usr/bin/env python
+"""Update OpenMC's deprecated multi-group cross section XML files to the latest
+HDF5-based format.
+
+Usage information can be obtained by running 'openmc-update-mgxs --help':
+
+usage: openmc-update-mgxs [-h] in out
+
+Update mgxs.xml files to the latest format. This will remove 'outside'
+attributes/elements from lattices and replace them with 'outer' attributes. For
+'cell' elements, any 'surfaces' attributes/elements will be renamed
+'region'. Note that this script will not delete the given files; it will append
+'.original' to the given files and write new ones.
+
+positional arguments:
+ in Input mgxs xml file
+ out Output mgxs hdf5 file
+
+optional arguments:
+ -h, --help show this help message and exit
+
+"""
+
+from __future__ import print_function
+from shutil import move
+import warnings
+import xml.etree.ElementTree as ET
+
+import argparse
+import h5py
+import numpy as np
+
+import openmc.mgxs_library
+
+description = """\
+Update OpenMC's deprecated multi-group cross section XML files to the latest
+HDF5-based format."""
+
+
+def parse_args():
+ """Read the input files from the commandline."""
+ # Create argument parser
+ parser = argparse.ArgumentParser(description=description,
+ formatter_class=argparse.RawTextHelpFormatter)
+ parser.add_argument('-c', '--compression', type=int,
+ help='input XML file')
+ parser.add_argument('-i', '--input', type=argparse.FileType('r'),
+ help='input XML file')
+ parser.add_argument('-o', '--output', nargs='?', default='',
+ help='output file, in HDF5 format')
+ args = vars(parser.parse_args())
+
+ if args['output'] == '':
+ fname = args['input'].name.split('.')
+ fname[-1] = '.h5'
+ args['output'] = ''.join(fname)
+
+ # Parse and return commandline arguments.
+ return args
+
+
+if __name__ == '__main__':
+ args = parse_args()
+
+ # Parse the XML data.
+ tree = ET.parse(args['input'])
+ root = tree.getroot()
+
+ if root.tag != 'library':
+ raise ValueError("Invalid XML file type")
+
+ # Get old metadata
+ temp = tree.find('group_structure').text
+ temp = np.array(temp.split())
+ group_structure = temp.astype(np.float)
+ energy_groups = openmc.mgxs.EnergyGroups(group_structure)
+ temp = tree.find('inverse_velocities')
+ if temp is not None:
+ temp = temp.text
+ temp = np.array(temp.split())
+ inverse_velocities = temp.astype(np.float)
+ else:
+ inverse_velocities = None
+
+ xsd = []
+ names = []
+
+ # Now move on to the cross section data itself
+ for xsdata_elem in root.iter('xsdata'):
+ name = xsdata_elem.find('name').text
+
+ temperature = xsdata_elem.find('kT')
+ if temperature is not None:
+ temperature = \
+ float(temperature.text) / openmc.data.K_BOLTZMANN
+ else:
+ temperature = 294.
+ temperatures = [temperature]
+
+ awr = xsdata_elem.find('awr')
+ if awr is not None:
+ awr = float(awr.text)
+
+ representation = xsdata_elem.find('representation')
+ if representation is not None:
+ representation = representation.text
+ else:
+ representation = 'isotropic'
+ if representation == 'angle':
+ n_azi = int(xsdata_elem.find('num_azimuthal').text)
+ n_pol = int(xsdata_elem.find('num_polar').text)
+
+ scatter_type = xsdata_elem.find('scatt_type')
+ if scatter_type is not None:
+ scatter_type = scatter_type.text
+ else:
+ scatter_type = 'legendre'
+
+ order = int(xsdata_elem.find('order').text)
+
+ tab_leg = xsdata_elem.find('tabular_legendre')
+ if tab_leg is not None:
+ warnings.Warning('The tabular_legendre option has moved to the '
+ 'settings.xml file and must be added manually')
+
+ # Either add the data to a previously existing xsdata (if it is
+ # for the same 'name' but a different temperature), or create a
+ # new one.
+
+ try:
+ # It is in our list, so store that entry
+ i = names.index(name)
+ except:
+ # It is not in our list, so add it
+ i = -1
+ xsd.append(openmc.XSdata(name, energy_groups,
+ temperatures=temperatures,
+ representation=representation))
+ if awr is not None:
+ xsd[-1].awr = awr
+ if representation == 'angle':
+ xsd[-1].num_azimuthal = n_azi
+ xsd[-1].num_polar = n_pol
+ xsd[-1].scatter_type = scatter_type
+ xsd[-1].order = order
+ names.append(name)
+
+ if scatter_type == 'legendre':
+ order_dim = order + 1
+ else:
+ order_dim = order
+
+ if i != -1:
+ xsd[i].add_temperature(temperature)
+
+ temp = xsdata_elem.find('total')
+ if temp is not None:
+ temp = temp.text
+ temp = np.array(temp.split())
+ total = temp.astype(np.float)
+ total = np.reshape(total, xsd[i].vector_shape)
+ xsd[i].set_total(total, temperature)
+
+ temp = xsdata_elem.find('absorption').text
+ temp = np.array(temp.split())
+ absorption = temp.astype(np.float)
+ absorption = np.reshape(absorption, xsd[i].vector_shape)
+ xsd[i].set_absorption(absorption, temperature)
+
+ temp = xsdata_elem.find('scatter').text
+ temp = np.array(temp.split())
+ temp = temp.astype(np.float)
+ scatter = np.reshape(temp, xsd[i].pn_matrix_shape)
+ xsd[i].set_scatter_matrix(scatter, temperature)
+
+ temp = xsdata_elem.find('multiplicity')
+ if temp is not None:
+ temp = temp.text
+ temp = np.array(temp.split())
+ temp = temp.astype(np.float)
+ multiplicity = np.reshape(temp, xsd[i].matrix_shape)
+ xsd[i].set_multiplicity_matrix(multiplicity, temperature)
+
+ temp = xsdata_elem.find('fission')
+ if temp is not None:
+ temp = temp.text
+ temp = np.array(temp.split())
+ fission = temp.astype(np.float)
+ fission = np.reshape(fission, xsd[i].vector_shape)
+ xsd[i].set_fission(fission, temperature)
+
+ temp = xsdata_elem.find('kappa_fission')
+ if temp is not None:
+ temp = temp.text
+ temp = np.array(temp.split())
+ kappa_fission = temp.astype(np.float)
+ kappa_fission = np.reshape(kappa_fission, xsd[i].vector_shape)
+ xsd[i].set_kappa_fission(kappa_fission, temperature)
+
+ temp = xsdata_elem.find('chi')
+ if temp is not None:
+ temp = temp.text
+ temp = np.array(temp.split())
+ chi = temp.astype(np.float)
+ chi = np.reshape(chi, xsd[i].vector_shape)
+ xsd[i].set_chi(chi, temperature)
+ else:
+ chi = None
+
+ temp = xsdata_elem.find('nu_fission')
+ if temp is not None:
+ temp = temp.text
+ temp = np.array(temp.split())
+ temp = temp.astype(np.float)
+ if chi is not None:
+ nu_fission = np.reshape(temp, xsd[i].vector_shape)
+ else:
+ nu_fission = np.reshape(temp, xsd[i].matrix_shape)
+ xsd[i].set_nu_fission(nu_fission, temperature)
+
+ # Build library as we go, but first we have enough to initialize it
+ lib = openmc.MGXSLibrary(energy_groups)
+ if inverse_velocities is not None:
+ lib.inverse_velocities = inverse_velocities
+
+ lib.add_xsdatas(xsd)
+
+ print(args['output'])
+ lib.export_to_hdf5(args['output'], compression=args['compression'])
diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90
index f17f2781e..d9039a3ad 100644
--- a/src/mgxs_data.F90
+++ b/src/mgxs_data.F90
@@ -1,6 +1,6 @@
module mgxs_data
-use constants
+ use constants
use algorithm, only: find
use error, only: fatal_error
use global
@@ -184,10 +184,14 @@ contains
type is (MgxsAngle)
allocate(MgxsAngle :: macro_xs(i_mat) % obj)
end select
- call macro_xs(i_mat) % obj % combine(kTs(i_mat), mat, nuclides_MG, &
- energy_groups, max_order, &
- temperature_tolerance, &
- temperature_method)
+ ! Do not read materials which we do not actually use in the problem to
+ ! save space
+ if (allocated(kTs(i_mat) % data)) then
+ call macro_xs(i_mat) % obj % combine(kTs(i_mat), mat, nuclides_MG, &
+ energy_groups, max_order, &
+ temperature_tolerance, &
+ temperature_method)
+ end if
end do
end subroutine create_macro_xs
diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90
index cefd8725d..cef468517 100644
--- a/src/mgxs_header.F90
+++ b/src/mgxs_header.F90
@@ -923,7 +923,7 @@ module mgxs_header
if (mat % name == "") then
this % name = trim(to_str(mat % id))
else
- this % name = mat % name
+ this % name = trim(mat % name)
end if
this % fissionable = mat % fissionable
@@ -992,15 +992,16 @@ module mgxs_header
do i = 1, mat % n_nuclides
select type(nuc => nuclides(mat % nuclide(i)) % obj)
type is (MgxsIso)
- if (size(nuc % xs(1) % scatter % dist(1) % data, dim=1) > &
- mat_max_order) &
+ if (size(nuc % xs(1) % scatter % dist(1) % data, &
+ dim=1) > mat_max_order) &
mat_max_order = size(nuc % xs(1) % scatter % dist(1) % data, &
dim=1)
type is (MgxsAngle)
- if (size(nuc % xs(1) % scatter(1, 1) % obj % dist(1) % data, dim=1) > &
- mat_max_order) &
- mat_max_order = size(nuc % xs(1) % scatter(1, 1) % obj % dist(1) % data, &
- dim=1)
+ if (size(nuc % xs(1) % scatter(1, 1) % obj % dist(1) % data, &
+ dim=1) > mat_max_order) &
+ mat_max_order = &
+ size(nuc % xs(1) % scatter(1, 1) % obj % dist(1) % data, &
+ dim=1)
end select
end do