Added a MG version of regression_tests/volume_calc

This commit is contained in:
agnelson 2021-10-05 11:59:47 -05:00
parent 5ef01628c6
commit adc935b99d
2 changed files with 131 additions and 5 deletions

View file

@ -0,0 +1,76 @@
<?xml version='1.0' encoding='utf-8'?>
<geometry>
<cell id="1" material="2" region="-1 -3 5" universe="0" />
<cell id="2" material="1" region="-2 3" universe="0" />
<cell id="3" material="1" region="-4 -3" universe="0" />
<surface boundary="vacuum" coeffs="0.0 0.0 1.0" id="1" type="z-cylinder" />
<surface boundary="vacuum" coeffs="0.0 0.0 5.0 1.0" id="2" type="sphere" />
<surface coeffs="5.0" id="3" type="z-plane" />
<surface boundary="vacuum" coeffs="0.0 0.0 -5.0 1.0" id="4" type="sphere" />
<surface coeffs="-5.0" id="5" type="z-plane" />
</geometry>
<?xml version='1.0' encoding='utf-8'?>
<materials>
<cross_sections>mg_lib.h5</cross_sections>
<material id="1">
<density units="g/cc" value="1.0" />
<nuclide ao="2.0" name="H1" />
<nuclide ao="1.0" name="O16" />
<nuclide ao="0.0001" name="B10" />
</material>
<material depletable="true" id="2">
<density units="g/cc" value="4.5" />
<nuclide ao="1.0" name="U235" />
<nuclide ao="0.1" name="Mo99" />
</material>
</materials>
<?xml version='1.0' encoding='utf-8'?>
<settings>
<run_mode>volume</run_mode>
<energy_mode>multi-group</energy_mode>
<volume_calc>
<domain_type>cell</domain_type>
<domain_ids>1 2 3</domain_ids>
<samples>100000</samples>
<lower_left>-1.0 -1.0 -6.0</lower_left>
<upper_right>1.0 1.0 6.0</upper_right>
</volume_calc>
<volume_calc>
<domain_type>material</domain_type>
<domain_ids>1 2</domain_ids>
<samples>100000</samples>
<lower_left>-1.0 -1.0 -6.0</lower_left>
<upper_right>1.0 1.0 6.0</upper_right>
</volume_calc>
<volume_calc>
<domain_type>universe</domain_type>
<domain_ids>0</domain_ids>
<samples>100000</samples>
<lower_left>-1.0 -1.0 -6.0</lower_left>
<upper_right>1.0 1.0 6.0</upper_right>
</volume_calc>
<volume_calc>
<domain_type>cell</domain_type>
<domain_ids>1 2 3</domain_ids>
<samples>100</samples>
<lower_left>-1.0 -1.0 -6.0</lower_left>
<upper_right>1.0 1.0 6.0</upper_right>
<threshold threshold="0.1" type="std_dev" />
</volume_calc>
<volume_calc>
<domain_type>material</domain_type>
<domain_ids>1 2</domain_ids>
<samples>100</samples>
<lower_left>-1.0 -1.0 -6.0</lower_left>
<upper_right>1.0 1.0 6.0</upper_right>
<threshold threshold="0.1" type="rel_err" />
</volume_calc>
<volume_calc>
<domain_type>cell</domain_type>
<domain_ids>1 2 3</domain_ids>
<samples>100</samples>
<lower_left>-1.0 -1.0 -6.0</lower_left>
<upper_right>1.0 1.0 6.0</upper_right>
<threshold threshold="0.05" type="variance" />
</volume_calc>
</settings>

View file

@ -1,6 +1,7 @@
import os
import glob
import sys
import numpy as np
import openmc
@ -9,12 +10,15 @@ from tests.testing_harness import PyAPITestHarness
class VolumeTest(PyAPITestHarness):
def __init__(self, *args, **kwargs):
def __init__(self, is_ce, *args, **kwargs):
super().__init__(*args, **kwargs)
self.exp_std_dev = 1e-01
self.exp_rel_err = 1e-01
self.exp_variance = 5e-02
self.is_ce = is_ce
if not is_ce:
self.inputs_true = 'inputs_true_mg.dat'
def _build_inputs(self):
# Define materials
@ -22,7 +26,8 @@ class VolumeTest(PyAPITestHarness):
water.add_nuclide('H1', 2.0)
water.add_nuclide('O16', 1.0)
water.add_nuclide('B10', 0.0001)
water.add_s_alpha_beta('c_H_in_H2O')
if self.is_ce:
water.add_s_alpha_beta('c_H_in_H2O')
water.set_density('g/cc', 1.0)
fuel = openmc.Material(2)
@ -31,6 +36,8 @@ class VolumeTest(PyAPITestHarness):
fuel.set_density('g/cc', 4.5)
materials = openmc.Materials((water, fuel))
if not self.is_ce:
materials.cross_sections = 'mg_lib.h5'
materials.export_to_xml()
cyl = openmc.ZCylinder(surface_id=1, r=1.0, boundary_type='vacuum')
@ -68,9 +75,50 @@ class VolumeTest(PyAPITestHarness):
# Define settings
settings = openmc.Settings()
settings.run_mode = 'volume'
if not self.is_ce:
settings.energy_mode = 'multi-group'
settings.volume_calculations = vol_calcs
settings.export_to_xml()
# Create the MGXS file is necessary
if not self.is_ce:
groups = openmc.mgxs.EnergyGroups(group_edges=[0., 20.e6])
mg_xs_file = openmc.MGXSLibrary(groups)
nu = [2.]
fiss = [1.]
capture = [1.]
absorption_fissile = np.add(fiss, capture)
absorption_other = capture
scatter = np.array([[[1.]]])
total_fissile = np.add(absorption_fissile,
np.sum(scatter[:, :, 0], axis=1))
total_other = np.add(absorption_other,
np.sum(scatter[:, :, 0], axis=1))
chi = [1.]
for iso in ['H1', 'O16', 'B10', 'Mo99', 'U235']:
mat = openmc.XSdata(iso, groups)
mat.order = 0
mat.set_scatter_matrix(scatter)
if iso == 'U235':
mat.set_nu_fission(np.multiply(nu, fiss))
mat.set_absorption(absorption_fissile)
mat.set_total(total_fissile)
mat.set_chi(chi)
else:
mat.set_absorption(absorption_other)
mat.set_total(total_other)
mg_xs_file.add_xsdata(mat)
mg_xs_file.export_to_hdf5('mg_lib.h5')
def _cleanup(self):
super()._cleanup()
output = ['mg_lib.h5']
for f in output:
if os.path.exists(f):
os.remove(f)
def _get_results(self):
outstr = ''
for i, filename in enumerate(sorted(glob.glob('volume_*.h5'))):
@ -116,6 +164,8 @@ class VolumeTest(PyAPITestHarness):
def _test_output_created(self):
pass
def test_volume_calc():
harness = VolumeTest('')
harness.main()
for is_ce in [True, False]:
harness = VolumeTest(is_ce, '')
harness.main()