diff --git a/include/openmc/constants.h b/include/openmc/constants.h
index 96fc19b2bd..7697843510 100644
--- a/include/openmc/constants.h
+++ b/include/openmc/constants.h
@@ -438,7 +438,7 @@ constexpr int RUN_MODE_VOLUME {5};
// CMFD CONSTANTS
// For non-accelerated regions on coarse mesh overlay
-constexpr int CMFD_NOACCEL {99999};
+constexpr int CMFD_NOACCEL {-1};
} // namespace openmc
diff --git a/openmc/cmfd.py b/openmc/cmfd.py
index bb40da618e..5626f72eed 100644
--- a/openmc/cmfd.py
+++ b/openmc/cmfd.py
@@ -252,6 +252,10 @@ class CMFDRun(object):
CMFD problem
* "math" - Create adjoint matrices mathematically as the transpose of
loss and production CMFD matrices
+ indices : numpy.ndarray
+ Stores spatial and group dimensions as [nx, ny, nz, ng]
+ cmfd_src : numpy.ndarray
+ CMFD source distribution calculated from solving CMFD equations
entropy : list of floats
"Shannon entropy" from cmfd fission source, stored for each generation
that CMFD is invoked
@@ -443,6 +447,14 @@ class CMFDRun(object):
def gauss_seidel_tolerance(self):
return self._gauss_seidel_tolerance
+ @property
+ def indices(self):
+ return self._indices
+
+ @property
+ def cmfd_src(self):
+ return self._cmfd_src
+
@property
def dom(self):
return self._dom
@@ -555,7 +567,7 @@ class CMFDRun(object):
def adjoint_type(self, adjoint_type):
check_type('CMFD adjoint type', adjoint_type, str)
check_value('CMFD adjoint type', adjoint_type,
- ['math', 'phyical'])
+ ['math', 'physical'])
self._adjoint_type = adjoint_type
@power_monitor.setter
@@ -1005,7 +1017,7 @@ class CMFDRun(object):
# Get all data entries for particular row in matrix
data = matrix.data[matrix.indptr[row]:matrix.indptr[row+1]]
for i in range(len(cols)):
- fh.write('({:3d}, {:3d}): {:0.8f}\n'.format(
+ fh.write('{:3d}, {:3d}, {:0.8f}\n'.format(
row, cols[i], data[i]))
# Save matrix in scipy format
@@ -1572,8 +1584,9 @@ class CMFDRun(object):
kerr = abs(k_o - k_n) / k_n
# Calculate max error in source
- serr = np.sqrt(np.sum(np.where(s_n > 0, ((s_n-s_o) / s_n)**2, 0))
- / len(s_n))
+ with np.errstate(divide='ignore', invalid='ignore'):
+ serr = np.sqrt(np.sum(np.where(s_n > 0, ((s_n-s_o) / s_n)**2, 0))
+ / len(s_n))
# Check for convergence
iconv = kerr < self._cmfd_ktol and serr < self._stol
diff --git a/tests/regression_tests/cmfd_feed/test.py b/tests/regression_tests/cmfd_feed/test.py
index 368e81aee2..61d4ae2eff 100644
--- a/tests/regression_tests/cmfd_feed/test.py
+++ b/tests/regression_tests/cmfd_feed/test.py
@@ -1,8 +1,17 @@
from tests.testing_harness import CMFDTestHarness
import openmc
import numpy as np
+import scipy.sparse
-def test_cmfd_feed():
+def test_cmfd_physical_adjoint():
+ """ Test physical adjoint functionality of CMFD
+
+ This test runs CMFD with a physical adjoint calculation and asserts that the
+ adjoint k-effective and flux vector are equal to the non-adjoint
+ k-effective and flux vector at the last batch (equivalent for 1 group
+ problems).
+
+ """
# Initialize and set CMFD mesh
cmfd_mesh = openmc.CMFDMesh()
cmfd_mesh.lower_left = -10.0, -1.0, -1.0
@@ -12,10 +21,111 @@ def test_cmfd_feed():
# Initialize and run CMFDRun object
cmfd_run = openmc.CMFDRun()
- cmfd_run.cmfd_mesh = cmfd_mesh
- cmfd_run.cmfd_begin = 5
- cmfd_run.cmfd_display = 'dominance'
- cmfd_run.cmfd_feedback = True
+ cmfd_run.mesh = cmfd_mesh
+ cmfd_run.begin = 5
+ cmfd_run.feedback = True
+ cmfd_run.gauss_seidel_tolerance = [1.e-15, 1.e-20]
+ cmfd_run.run_adjoint = True
+ cmfd_run.adjoint_type = 'physical'
+ cmfd_run.run()
+ assert(np.all(cmfd_run._phi == cmfd_run._adj_phi))
+ assert(cmfd_run._adj_keff == cmfd_run._keff)
+
+def test_cmfd_math_adjoint():
+ """ Test mathematical adjoint functionality of CMFD
+
+ This test runs CMFD with a mathematical adjoint calculation and asserts that
+ the adjoint k-effective and flux vector are equal to the non-adjoint
+ k-effective and flux vector at the last batch (equivalent for 1 group
+ problems).
+
+ """
+ # Initialize and set CMFD mesh
+ cmfd_mesh = openmc.CMFDMesh()
+ cmfd_mesh.lower_left = -10.0, -1.0, -1.0
+ cmfd_mesh.upper_right = 10.0, 1.0, 1.0
+ cmfd_mesh.dimension = 10, 1, 1
+ cmfd_mesh.albedo = 0.0, 0.0, 1.0, 1.0, 1.0, 1.0
+
+ # Initialize and run CMFDRun object
+ cmfd_run = openmc.CMFDRun()
+ cmfd_run.mesh = cmfd_mesh
+ cmfd_run.begin = 5
+ cmfd_run.feedback = True
+ cmfd_run.gauss_seidel_tolerance = [1.e-15, 1.e-20]
+ cmfd_run.run_adjoint = True
+ cmfd_run.adjoint_type = 'math'
+ cmfd_run.run()
+ assert(np.all(cmfd_run._phi == cmfd_run._adj_phi))
+ assert(cmfd_run._adj_keff == cmfd_run._keff)
+
+def test_cmfd_write_matrices():
+ """ Test write matrices functionality of CMFD
+
+ This test runs CMFD with feedback and loads the loss/production matrices
+ and flux vector that are saved to disk, and checks to make sure these
+ values are consistent with each other and simulation results.
+
+ """
+ # Initialize and set CMFD mesh
+ cmfd_mesh = openmc.CMFDMesh()
+ cmfd_mesh.lower_left = -10.0, -1.0, -1.0
+ cmfd_mesh.upper_right = 10.0, 1.0, 1.0
+ cmfd_mesh.dimension = 10, 1, 1
+ cmfd_mesh.albedo = 0.0, 0.0, 1.0, 1.0, 1.0, 1.0
+
+ # Initialize and run CMFDRun object
+ cmfd_run = openmc.CMFDRun()
+ cmfd_run.mesh = cmfd_mesh
+ cmfd_run.begin = 5
+ cmfd_run.display = {'dominance': True}
+ cmfd_run.feedback = True
+ cmfd_run.gauss_seidel_tolerance = [1.e-15, 1.e-20]
+ cmfd_run.write_matrices = True
+ cmfd_run.run()
+
+ # Load loss matrix from numpy output file
+ loss_np = scipy.sparse.load_npz('loss.npz').todense()
+ # Load loss matrix from data file
+ loss_dat = np.loadtxt("loss.dat", delimiter=',')
+
+ # Go through each element of loss_dat and compare to loss_np
+ for elem in loss_dat:
+ assert(np.isclose(loss_np[int(elem[0]), int(elem[1])], elem[2]))
+
+ # Load production matrix from numpy output file
+ prod_np = scipy.sparse.load_npz('prod.npz').todense()
+ # Load production matrix from data file
+ prod_dat = np.loadtxt("prod.dat", delimiter=',')
+
+ # Go through each element of prod_dat and compare to prod_np
+ for elem in prod_dat:
+ assert(np.isclose(prod_np[int(elem[0]), int(elem[1])], elem[2]))
+
+ # Load flux vector from numpy output file
+ flux_np = np.load('fluxvec.npy')
+ # Load flux from data file
+ flux_dat = np.loadtxt("fluxvec.dat", delimiter='\n')
+
+ # Compare flux from numpy file, .dat file, and from simulation
+ assert(np.all(np.isclose(flux_np, cmfd_run._phi)))
+ assert(np.all(np.isclose(flux_np, flux_dat)))
+
+def test_cmfd_feed():
+ """ Test 1 group CMFD solver with CMFD feedback"""
+ # Initialize and set CMFD mesh
+ cmfd_mesh = openmc.CMFDMesh()
+ cmfd_mesh.lower_left = -10.0, -1.0, -1.0
+ cmfd_mesh.upper_right = 10.0, 1.0, 1.0
+ cmfd_mesh.dimension = 10, 1, 1
+ cmfd_mesh.albedo = 0.0, 0.0, 1.0, 1.0, 1.0, 1.0
+
+ # Initialize and run CMFDRun object
+ cmfd_run = openmc.CMFDRun()
+ cmfd_run.mesh = cmfd_mesh
+ cmfd_run.begin = 5
+ cmfd_run.display = {'dominance': True}
+ cmfd_run.feedback = True
cmfd_run.gauss_seidel_tolerance = [1.e-15, 1.e-20]
cmfd_run.run()
diff --git a/tests/regression_tests/cmfd_feed_2g/geometry.xml b/tests/regression_tests/cmfd_feed_2g/geometry.xml
new file mode 100644
index 0000000000..9fdd2ddcb6
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_2g/geometry.xml
@@ -0,0 +1,31 @@
+
+
+ |
+
+ |
+ |
+ |
+ |
+ |
+
+
+ 2 2
+ -1.25984 -1.25984
+ 1.25984 1.25984
+
+ 763 763
+ 763 763
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/regression_tests/cmfd_feed_2g/materials.xml b/tests/regression_tests/cmfd_feed_2g/materials.xml
new file mode 100644
index 0000000000..bfa2d8842d
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_2g/materials.xml
@@ -0,0 +1,59 @@
+
+
+
+ 300
+
+
+
+
+
+ 300
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 300
+
+
+
+
+
+
+
+
+
+ 300
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/regression_tests/cmfd_feed_2g/results_true.dat b/tests/regression_tests/cmfd_feed_2g/results_true.dat
new file mode 100644
index 0000000000..2be15c4e88
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_2g/results_true.dat
@@ -0,0 +1,434 @@
+k-combined:
+1.038883E+00 1.017026E-02
+tally 1:
+1.167304E+02
+1.362680E+03
+1.157179E+02
+1.339273E+03
+1.167087E+02
+1.362782E+03
+1.164493E+02
+1.356411E+03
+tally 2:
+4.400233E+01
+9.698989E+01
+6.541957E+01
+2.144299E+02
+1.863245E+02
+1.738212E+03
+1.038047E+02
+5.390768E+02
+4.368854E+01
+9.564001E+01
+6.489620E+01
+2.109923E+02
+1.836691E+02
+1.687792E+03
+1.022706E+02
+5.232407E+02
+4.433402E+01
+9.859049E+01
+6.548060E+01
+2.150470E+02
+1.839219E+02
+1.692209E+03
+1.031634E+02
+5.323852E+02
+4.380686E+01
+9.606723E+01
+6.480355E+01
+2.103905E+02
+1.868847E+02
+1.747254E+03
+1.038109E+02
+5.391360E+02
+tally 3:
+6.192979E+01
+1.921761E+02
+0.000000E+00
+0.000000E+00
+2.033842E-02
+4.375294E-05
+4.296338E+00
+9.280716E-01
+3.493776E+00
+6.157094E-01
+0.000000E+00
+0.000000E+00
+9.876716E+01
+4.880113E+02
+9.043140E-01
+4.156054E-02
+6.138292E+01
+1.887853E+02
+0.000000E+00
+0.000000E+00
+1.591722E-02
+2.328432E-05
+4.296798E+00
+9.289349E-01
+3.584967E+00
+6.444749E-01
+0.000000E+00
+0.000000E+00
+9.717439E+01
+4.724254E+02
+8.435691E-01
+3.666151E-02
+6.192881E+01
+1.924016E+02
+0.000000E+00
+0.000000E+00
+1.796382E-02
+3.190854E-05
+4.343238E+00
+9.514039E-01
+3.504683E+00
+6.157615E-01
+0.000000E+00
+0.000000E+00
+9.818871E+01
+4.822799E+02
+8.401346E-01
+3.664037E-02
+6.130607E+01
+1.882837E+02
+0.000000E+00
+0.000000E+00
+1.220252E-02
+1.711667E-05
+4.245413E+00
+9.056738E-01
+3.468894E+00
+6.033679E-01
+0.000000E+00
+0.000000E+00
+9.885292E+01
+4.888720E+02
+9.509199E-01
+4.670951E-02
+tally 4:
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+9.200260E+00
+4.243011E+00
+3.728022E+01
+6.953801E+01
+9.178009E+00
+4.218903E+00
+3.738925E+01
+6.993833E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+9.019225E+00
+4.079528E+00
+3.709185E+01
+6.883085E+01
+9.037478E+00
+4.095846E+00
+3.710303E+01
+6.888447E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+9.178009E+00
+4.218903E+00
+3.738925E+01
+6.993833E+01
+9.200260E+00
+4.243011E+00
+3.728022E+01
+6.953801E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+9.097360E+00
+4.147125E+00
+3.700603E+01
+6.851110E+01
+9.003417E+00
+4.059372E+00
+3.717266E+01
+6.912709E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+9.042233E+00
+4.097018E+00
+3.711597E+01
+6.891834E+01
+9.107597E+00
+4.161211E+00
+3.715168E+01
+6.904544E+01
+9.037478E+00
+4.095846E+00
+3.710303E+01
+6.888447E+01
+9.019225E+00
+4.079528E+00
+3.709185E+01
+6.883085E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+9.107597E+00
+4.161211E+00
+3.715168E+01
+6.904544E+01
+9.042233E+00
+4.097018E+00
+3.711597E+01
+6.891834E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+9.003417E+00
+4.059372E+00
+3.717266E+01
+6.912709E+01
+9.097360E+00
+4.147125E+00
+3.700603E+01
+6.851110E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+tally 5:
+6.195013E+01
+1.923032E+02
+1.022516E+02
+5.230716E+02
+1.418310E+01
+1.011490E+01
+4.677537E+01
+1.094859E+02
+6.139884E+01
+1.888834E+02
+1.007512E+02
+5.078162E+02
+1.403236E+01
+9.884347E+00
+4.598486E+01
+1.058070E+02
+6.194677E+01
+1.925125E+02
+1.016864E+02
+5.172531E+02
+1.407797E+01
+9.971785E+00
+4.623118E+01
+1.069663E+02
+6.131828E+01
+1.883600E+02
+1.023107E+02
+5.236668E+02
+1.375796E+01
+9.501501E+00
+4.638162E+01
+1.076532E+02
+cmfd indices
+2.000000E+00
+2.000000E+00
+1.000000E+00
+2.000000E+00
+k cmfd
+1.034617E+00
+1.034521E+00
+1.036479E+00
+1.035658E+00
+1.032505E+00
+1.027277E+00
+1.029326E+00
+1.029881E+00
+1.035579E+00
+1.034753E+00
+1.031963E+00
+1.034797E+00
+1.035383E+00
+1.035908E+00
+1.035629E+00
+1.036034E+00
+cmfd entropy
+1.999493E+00
+1.999058E+00
+1.999331E+00
+1.999370E+00
+1.999383E+00
+1.999455E+00
+1.999640E+00
+1.999810E+00
+1.999881E+00
+1.999937E+00
+1.999973E+00
+1.999965E+00
+1.999972E+00
+1.999982E+00
+1.999998E+00
+1.999984E+00
+cmfd balance
+3.993043E-04
+4.168558E-04
+6.384693E-04
+3.928217E-04
+3.789833E-04
+2.684860E-04
+4.849910E-04
+1.084019E-03
+1.091775E-03
+5.459767E-04
+4.455545E-04
+4.011468E-04
+3.710248E-04
+3.577152E-04
+3.845993E-04
+3.900672E-04
+cmfd dominance ratio
+ 6.239E-03
+ 6.303E-03
+ 6.347E-03
+ 6.388E-03
+ 6.340E-03
+ 6.334E-03
+ 6.270E-03
+ 6.173E-03
+ 6.068E-03
+ 6.061E-03
+ 6.016E-03
+ 6.108E-03
+ 6.117E-03
+ 6.074E-03
+ 6.005E-03
+ 5.996E-03
+cmfd openmc source comparison
+1.931386E-05
+2.839162E-05
+1.407962E-05
+6.718148E-06
+9.164193E-06
+1.382539E-05
+2.871606E-05
+4.192300E-05
+5.327516E-05
+6.566500E-05
+6.655541E-05
+6.034977E-05
+6.004677E-05
+5.711623E-05
+6.271264E-05
+6.425363E-05
+cmfd source
+2.510278E-01
+2.480592E-01
+2.501750E-01
+2.507380E-01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
diff --git a/tests/regression_tests/cmfd_feed_2g/settings.xml b/tests/regression_tests/cmfd_feed_2g/settings.xml
new file mode 100644
index 0000000000..9e483e6a09
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_2g/settings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ eigenvalue
+ 20
+ 10
+ 1000
+
+
+
+
+ -1.25984 -1.25984 -1 1.25984 1.25984 1
+
+
+
+
+
+ 2 2 1
+ -1.25984 -1.25984 -1.0
+ 1.25984 1.25984 1.0
+
+ 10
+
+
diff --git a/tests/regression_tests/cmfd_feed_2g/tallies.xml b/tests/regression_tests/cmfd_feed_2g/tallies.xml
new file mode 100644
index 0000000000..477a078331
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_2g/tallies.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ regular
+ -1.25984 -1.25984 -1.0
+ 1.25984 1.25984 1.0
+ 2 2 1
+
+
+
+ mesh
+ 1
+
+
+
+ 1
+ flux
+
+
+
diff --git a/tests/regression_tests/cmfd_feed_2g/test.py b/tests/regression_tests/cmfd_feed_2g/test.py
new file mode 100644
index 0000000000..8377e208a8
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_2g/test.py
@@ -0,0 +1,46 @@
+from tests.testing_harness import CMFDTestHarness
+import openmc
+import numpy as np
+
+def test_cmfd_feed_2g():
+ """ Test 2 group CMFD solver results with CMFD feedback"""
+ # Initialize and set CMFD mesh
+ cmfd_mesh = openmc.CMFDMesh()
+ cmfd_mesh.lower_left = -1.25984, -1.25984, -1.0
+ cmfd_mesh.upper_right = 1.25984, 1.25984, 1.0
+ cmfd_mesh.dimension = 2, 2, 1
+ cmfd_mesh.energy = [0.0, 0.625, 20000000]
+ cmfd_mesh.albedo = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
+
+ # Initialize and run CMFDRun object
+ cmfd_run = openmc.CMFDRun()
+ cmfd_run.mesh = cmfd_mesh
+ cmfd_run.begin = 5
+ cmfd_run.display = {'dominance': True}
+ cmfd_run.feedback = True
+ cmfd_run.downscatter = True
+ cmfd_run.gauss_seidel_tolerance = [1.e-15, 1.e-20]
+ cmfd_run.run()
+
+ # Create output string of all CMFD results to pass into testing harness
+ outstr = 'cmfd indices\n'
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._indices])
+ outstr += '\nk cmfd\n'
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._k_cmfd])
+ outstr += '\ncmfd entropy\n'
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._entropy])
+ outstr += '\ncmfd balance\n'
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._balance])
+ outstr += '\ncmfd dominance ratio\n'
+ outstr += '\n'.join(['{0:10.3E}'.format(x) for x in cmfd_run._dom])
+ outstr += '\ncmfd openmc source comparison\n'
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._src_cmp])
+ outstr += '\ncmfd source\n'
+ cmfdsrc = np.reshape(cmfd_run._cmfd_src, np.product(cmfd_run._indices),
+ order='F')
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfdsrc])
+ outstr += '\n'
+
+ # Initialize and run CMFD test harness
+ harness = CMFDTestHarness('statepoint.20.h5', cmfd_results=outstr)
+ harness.main()
diff --git a/tests/regression_tests/cmfd_feed_ng/geometry.xml b/tests/regression_tests/cmfd_feed_ng/geometry.xml
new file mode 100644
index 0000000000..9fdd2ddcb6
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_ng/geometry.xml
@@ -0,0 +1,31 @@
+
+
+ |
+
+ |
+ |
+ |
+ |
+ |
+
+
+ 2 2
+ -1.25984 -1.25984
+ 1.25984 1.25984
+
+ 763 763
+ 763 763
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/regression_tests/cmfd_feed_ng/materials.xml b/tests/regression_tests/cmfd_feed_ng/materials.xml
new file mode 100644
index 0000000000..bfa2d8842d
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_ng/materials.xml
@@ -0,0 +1,59 @@
+
+
+
+ 300
+
+
+
+
+
+ 300
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 300
+
+
+
+
+
+
+
+
+
+ 300
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/regression_tests/cmfd_feed_ng/results_true.dat b/tests/regression_tests/cmfd_feed_ng/results_true.dat
new file mode 100644
index 0000000000..fea3d38b8b
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_ng/results_true.dat
@@ -0,0 +1,621 @@
+k-combined:
+1.030507E+00 9.667655E-03
+tally 1:
+1.159445E+02
+1.344573E+03
+1.159285E+02
+1.344429E+03
+1.161340E+02
+1.349209E+03
+1.160434E+02
+1.347427E+03
+tally 2:
+3.482032E+01
+7.610041E+01
+5.123532E+01
+1.648226E+02
+1.063498E+01
+7.110316E+00
+9.001212E+00
+5.085589E+00
+1.435947E+02
+1.322778E+03
+7.400822E+01
+3.425876E+02
+3.415144E+01
+7.318850E+01
+5.046314E+01
+1.597317E+02
+1.028893E+01
+6.661534E+00
+8.653997E+00
+4.698660E+00
+1.442064E+02
+1.338979E+03
+7.405073E+01
+3.428774E+02
+3.431740E+01
+7.390622E+01
+5.109288E+01
+1.639090E+02
+1.034894E+01
+6.746021E+00
+8.657005E+00
+4.712481E+00
+1.383790E+02
+1.200016E+03
+7.320761E+01
+3.351661E+02
+3.426169E+01
+7.373156E+01
+5.042174E+01
+1.596859E+02
+1.041331E+01
+6.828453E+00
+8.729287E+00
+4.779221E+00
+1.374766E+02
+1.182015E+03
+7.390660E+01
+3.416196E+02
+tally 3:
+4.842028E+01
+1.472522E+02
+0.000000E+00
+0.000000E+00
+1.766768E-02
+3.669087E-05
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+3.489090E+00
+7.670426E-01
+2.522457E+00
+3.988419E-01
+0.000000E+00
+0.000000E+00
+6.323118E+00
+2.515554E+00
+0.000000E+00
+0.000000E+00
+1.000000E-03
+1.000000E-06
+9.772798E-02
+7.833336E-04
+3.020916E-01
+5.962947E-03
+0.000000E+00
+0.000000E+00
+2.669802E+00
+4.494602E-01
+0.000000E+00
+0.000000E+00
+6.995726E+01
+3.061105E+02
+6.245439E-01
+2.516241E-02
+4.767259E+01
+1.425559E+02
+0.000000E+00
+0.000000E+00
+1.511055E-02
+2.706989E-05
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+3.359388E+00
+7.162206E-01
+2.420435E+00
+3.693966E-01
+0.000000E+00
+0.000000E+00
+6.097921E+00
+2.335376E+00
+0.000000E+00
+0.000000E+00
+2.973834E-03
+2.952905E-06
+9.585516E-02
+7.950754E-04
+3.306195E-01
+7.226156E-03
+0.000000E+00
+0.000000E+00
+2.606740E+00
+4.273433E-01
+0.000000E+00
+0.000000E+00
+7.004531E+01
+3.068103E+02
+5.609353E-01
+2.054700E-02
+4.844434E+01
+1.474236E+02
+0.000000E+00
+0.000000E+00
+6.909228E-03
+6.822381E-06
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+3.337728E+00
+7.036827E-01
+2.418767E+00
+3.680337E-01
+0.000000E+00
+0.000000E+00
+6.114057E+00
+2.352184E+00
+0.000000E+00
+0.000000E+00
+1.000000E-03
+1.000000E-06
+1.057559E-01
+8.659764E-04
+3.268970E-01
+6.949165E-03
+0.000000E+00
+0.000000E+00
+2.538042E+00
+4.047397E-01
+0.000000E+00
+0.000000E+00
+6.922289E+01
+2.996756E+02
+6.190458E-01
+2.456695E-02
+4.757150E+01
+1.421640E+02
+0.000000E+00
+0.000000E+00
+8.765775E-03
+1.054666E-05
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+3.436793E+00
+7.430145E-01
+2.473841E+00
+3.843375E-01
+0.000000E+00
+0.000000E+00
+6.104077E+00
+2.339598E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+1.061129E-01
+8.936114E-04
+3.092546E-01
+6.384841E-03
+0.000000E+00
+0.000000E+00
+2.539292E+00
+4.045561E-01
+0.000000E+00
+0.000000E+00
+6.994273E+01
+3.059846E+02
+5.887450E-01
+2.235244E-02
+tally 4:
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+7.109363E+00
+3.174618E+00
+2.099346E+00
+2.784777E-01
+2.785196E+01
+4.850659E+01
+7.069021E+00
+3.132588E+00
+2.149589E+00
+2.900131E-01
+2.768129E+01
+4.790811E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+7.175941E+00
+3.224156E+00
+2.135542E+00
+2.863424E-01
+2.728334E+01
+4.655111E+01
+7.206774E+00
+3.256252E+00
+2.075924E+00
+2.712640E-01
+2.747967E+01
+4.722188E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+7.069021E+00
+3.132588E+00
+2.149589E+00
+2.900131E-01
+2.768129E+01
+4.790811E+01
+7.109363E+00
+3.174618E+00
+2.099346E+00
+2.784777E-01
+2.785196E+01
+4.850659E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+7.108601E+00
+3.175833E+00
+2.103259E+00
+2.783890E-01
+2.784173E+01
+4.846581E+01
+7.107753E+00
+3.173064E+00
+2.087728E+00
+2.737368E-01
+2.779197E+01
+4.828855E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+7.148041E+00
+3.216417E+00
+2.124230E+00
+2.831606E-01
+2.743879E+01
+4.708424E+01
+7.081749E+00
+3.151711E+00
+2.062609E+00
+2.682691E-01
+2.761154E+01
+4.768316E+01
+7.206774E+00
+3.256252E+00
+2.075924E+00
+2.712640E-01
+2.747967E+01
+4.722188E+01
+7.175941E+00
+3.224156E+00
+2.135542E+00
+2.863424E-01
+2.728334E+01
+4.655111E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+7.081749E+00
+3.151711E+00
+2.062609E+00
+2.682691E-01
+2.761154E+01
+4.768316E+01
+7.148041E+00
+3.216417E+00
+2.124230E+00
+2.831606E-01
+2.743879E+01
+4.708424E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+7.107753E+00
+3.173064E+00
+2.087728E+00
+2.737368E-01
+2.779197E+01
+4.828855E+01
+7.108601E+00
+3.175833E+00
+2.103259E+00
+2.783890E-01
+2.784173E+01
+4.846581E+01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+tally 5:
+4.843795E+01
+1.473599E+02
+8.846575E+00
+4.912671E+00
+7.292412E+01
+3.326224E+02
+1.096673E+01
+7.549697E+00
+4.119614E+00
+1.064248E+00
+3.323487E+01
+6.913295E+01
+4.768770E+01
+1.426471E+02
+8.521329E+00
+4.554207E+00
+7.297983E+01
+3.330439E+02
+1.083867E+01
+7.393362E+00
+3.955093E+00
+9.810363E-01
+3.309790E+01
+6.852254E+01
+4.845125E+01
+1.474656E+02
+8.533824E+00
+4.579629E+00
+7.208076E+01
+3.249387E+02
+1.100395E+01
+7.627044E+00
+3.908798E+00
+9.610162E-01
+3.287630E+01
+6.763801E+01
+4.758027E+01
+1.422161E+02
+8.577918E+00
+4.614174E+00
+7.278634E+01
+3.313433E+02
+1.072190E+01
+7.216342E+00
+3.922303E+00
+9.640585E-01
+3.334768E+01
+6.955922E+01
+cmfd indices
+2.000000E+00
+2.000000E+00
+1.000000E+00
+3.000000E+00
+k cmfd
+1.024488E+00
+1.022339E+00
+1.024720E+00
+1.025459E+00
+1.029180E+00
+1.022688E+00
+1.019305E+00
+1.020356E+00
+1.023384E+00
+1.023519E+00
+1.026360E+00
+cmfd entropy
+1.999710E+00
+1.999709E+00
+1.999704E+00
+1.999747E+00
+1.999885E+00
+1.999911E+00
+1.999905E+00
+1.999936E+00
+1.999873E+00
+1.999826E+00
+1.999768E+00
+cmfd balance
+3.179889E-04
+4.166064E-04
+2.746180E-04
+3.345930E-04
+5.129605E-04
+4.008511E-04
+3.628451E-04
+3.401727E-04
+3.166255E-04
+2.642675E-04
+2.482640E-04
+cmfd dominance ratio
+ 3.737E-03
+ 3.786E-03
+ 3.798E-03
+ 3.789E-03
+ 3.741E-03
+ 3.772E-03
+ 3.793E-03
+ 3.684E-03
+ 3.740E-03
+ 3.764E-03
+ 3.798E-03
+cmfd openmc source comparison
+3.559244E-05
+4.429506E-05
+2.739679E-05
+2.715448E-05
+5.105340E-05
+4.069206E-05
+4.033877E-05
+3.669734E-05
+3.540373E-05
+2.907247E-05
+2.734478E-05
+cmfd source
+2.564687E-01
+2.445733E-01
+2.473769E-01
+2.515811E-01
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
+0.000000E+00
diff --git a/tests/regression_tests/cmfd_feed_ng/settings.xml b/tests/regression_tests/cmfd_feed_ng/settings.xml
new file mode 100644
index 0000000000..9e483e6a09
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_ng/settings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ eigenvalue
+ 20
+ 10
+ 1000
+
+
+
+
+ -1.25984 -1.25984 -1 1.25984 1.25984 1
+
+
+
+
+
+ 2 2 1
+ -1.25984 -1.25984 -1.0
+ 1.25984 1.25984 1.0
+
+ 10
+
+
diff --git a/tests/regression_tests/cmfd_feed_ng/tallies.xml b/tests/regression_tests/cmfd_feed_ng/tallies.xml
new file mode 100644
index 0000000000..477a078331
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_ng/tallies.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ regular
+ -1.25984 -1.25984 -1.0
+ 1.25984 1.25984 1.0
+ 2 2 1
+
+
+
+ mesh
+ 1
+
+
+
+ 1
+ flux
+
+
+
diff --git a/tests/regression_tests/cmfd_feed_ng/test.py b/tests/regression_tests/cmfd_feed_ng/test.py
new file mode 100644
index 0000000000..e49f912aaa
--- /dev/null
+++ b/tests/regression_tests/cmfd_feed_ng/test.py
@@ -0,0 +1,47 @@
+from tests.testing_harness import CMFDTestHarness
+import openmc
+import numpy as np
+
+def test_cmfd_feed_ng():
+ """ Test n group CMFD solver with CMFD feedback"""
+ # Initialize and set CMFD mesh
+ cmfd_mesh = openmc.CMFDMesh()
+ cmfd_mesh.lower_left = -1.25984, -1.25984, -1.0
+ cmfd_mesh.upper_right = 1.25984, 1.25984, 1.0
+ cmfd_mesh.dimension = 2, 2, 1
+ cmfd_mesh.energy = [0.0, 0.625, 5.53080, 20000000]
+ cmfd_mesh.albedo = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
+
+ # Initialize and run CMFDRun object
+ cmfd_run = openmc.CMFDRun()
+ cmfd_run.mesh = cmfd_mesh
+ cmfd_run.reset = [5]
+ cmfd_run.begin = 10
+ cmfd_run.display = {'dominance': True}
+ cmfd_run.feedback = True
+ cmfd_run.downscatter = True
+ cmfd_run.gauss_seidel_tolerance = [1.e-15, 1.e-20]
+ cmfd_run.run()
+
+ # Create output string of all CMFD results to pass into testing harness
+ outstr = 'cmfd indices\n'
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._indices])
+ outstr += '\nk cmfd\n'
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._k_cmfd])
+ outstr += '\ncmfd entropy\n'
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._entropy])
+ outstr += '\ncmfd balance\n'
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._balance])
+ outstr += '\ncmfd dominance ratio\n'
+ outstr += '\n'.join(['{0:10.3E}'.format(x) for x in cmfd_run._dom])
+ outstr += '\ncmfd openmc source comparison\n'
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._src_cmp])
+ outstr += '\ncmfd source\n'
+ cmfdsrc = np.reshape(cmfd_run._cmfd_src, np.product(cmfd_run._indices),
+ order='F')
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfdsrc])
+ outstr += '\n'
+
+ # Initialize and run CMFD test harness
+ harness = CMFDTestHarness('statepoint.20.h5', cmfd_results=outstr)
+ harness.main()
diff --git a/tests/regression_tests/cmfd_nofeed/test.py b/tests/regression_tests/cmfd_nofeed/test.py
index 4e34029a9e..11f8187659 100644
--- a/tests/regression_tests/cmfd_nofeed/test.py
+++ b/tests/regression_tests/cmfd_nofeed/test.py
@@ -2,7 +2,9 @@ from tests.testing_harness import CMFDTestHarness
import openmc
import numpy as np
+
def test_cmfd_nofeed():
+ """ Test 1 group CMFD solver without CMFD feedback"""
# Initialize and set CMFD mesh
cmfd_mesh = openmc.CMFDMesh()
cmfd_mesh.lower_left = -10.0, -1.0, -1.0
@@ -12,28 +14,28 @@ def test_cmfd_nofeed():
# Initialize and run CMFDRun object
cmfd_run = openmc.CMFDRun()
- cmfd_run.cmfd_mesh = cmfd_mesh
- cmfd_run.cmfd_begin = 5
- cmfd_run.cmfd_display = 'dominance'
- cmfd_run.cmfd_feedback = False
+ cmfd_run.mesh = cmfd_mesh
+ cmfd_run.begin = 5
+ cmfd_run.display = {'dominance': True}
+ cmfd_run.feedback = False
cmfd_run.gauss_seidel_tolerance = [1.e-15, 1.e-20]
cmfd_run.run()
# Create output string of all CMFD results to pass into testing harness
outstr = 'cmfd indices\n'
- outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._indices])
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run.indices])
outstr += '\nk cmfd\n'
- outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._k_cmfd])
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run.k_cmfd])
outstr += '\ncmfd entropy\n'
- outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._entropy])
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run.entropy])
outstr += '\ncmfd balance\n'
- outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._balance])
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run.balance])
outstr += '\ncmfd dominance ratio\n'
- outstr += '\n'.join(['{0:10.3E}'.format(x) for x in cmfd_run._dom])
+ outstr += '\n'.join(['{0:10.3E}'.format(x) for x in cmfd_run.dom])
outstr += '\ncmfd openmc source comparison\n'
- outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run._src_cmp])
+ outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfd_run.src_cmp])
outstr += '\ncmfd source\n'
- cmfdsrc = np.reshape(cmfd_run._cmfd_src, np.product(cmfd_run._indices),
+ cmfdsrc = np.reshape(cmfd_run.cmfd_src, np.product(cmfd_run.indices),
order='F')
outstr += '\n'.join(['{0:12.6E}'.format(x) for x in cmfdsrc])
outstr += '\n'
diff --git a/tests/testing_harness.py b/tests/testing_harness.py
index 50f02ee63c..408ddf1878 100644
--- a/tests/testing_harness.py
+++ b/tests/testing_harness.py
@@ -165,6 +165,15 @@ class CMFDTestHarness(TestHarness):
finally:
self._cleanup()
+ def _cleanup(self):
+ """Delete output files for numpy matrices and flux vectors."""
+ super()._cleanup()
+ output = ['loss.npz', 'loss.dat', 'prod.npz', 'prod.dat',
+ 'fluxvec.npy', 'fluxvec.dat']
+ for f in output:
+ if os.path.exists(f):
+ os.remove(f)
+
class ParticleRestartTestHarness(TestHarness):
"""Specialized TestHarness for running OpenMC particle restart tests."""