Open Access
Issue
EPJ Nuclear Sci. Technol.
Volume 12, 2026
Article Number 14
Number of page(s) 24
DOI https://doi.org/10.1051/epjn/2026006
Published online 08 June 2026

© H. Belanger et al., Published by EDP Sciences, 2026

Licence Creative CommonsThis is an Open Access article distributed under the terms of the Creative Commons Attribution License (https://creativecommons.org/licenses/by/4.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.

1. Introduction

Despite the growing prevalence of the use of Monte Carlo methods in nuclear reactor analysis, deterministic methods, particularly lattice physics codes, remain the dominant work horse for most industry LWR design calculations. Examples of such codes include APOLLO3 [1], STREAM [2], GALAXY [3], CASMO-5 [4], and DRAGON [5], just to name a few. Most lattice physics codes in use today are closed source1. This can be a challenging limitation in a teaching and research context, as it limits students’ access to appropriate tools to perform realistic reactor calculations, and impedes graduate students from learning the details about how these methods are implemented and applied “under the hood”. Over the past decade, OpenMC has become a widely used Monte Carlo transport tool that is open source, permitting easy access to all students [6]. However, using only the Monte Carlo method, it is impractical, if not impossible, for students to perform calculations beyond the scope of a single fuel assembly using their laptops. Full core PWR studies related to depletion, fuel loading patterns, transients, and more, are therefore out of reach when one only has access to a Monte Carlo code and a laptop.

To put reactor physics tools into the hands of students, a new suite of deterministic neutron transport calculation tools has been developed, called Scarabée. This library was developed from the ground up, with students and ease of use in mind. It has an assortment of various transport and diffusion solvers which can be accessed directly. Additionally, a lattice physics tool chain is provided for PWR fuel assembly analysis. The objective of this work is to present the current features and development status of the Scarabée library, highlighting the architecture of the code, the methods employed, and some example calculations.

2. Software and architecture

Scarabée has been designed to be natively multi-platform, and supports Linux, Windows, and macOS. A majority of the code base is written in C++20, using an object-oriented approach. Fundamental objects such as cross sections and transport solvers are all written as C++ classes to ensure optimal performance. General users of the library, however, are not expected to know or use any C++. Instead, all publicly accessible objects which are intended for user interaction are made accessible via a Python interface using the Pybind11 library [7]. As such, to use the library, users write an “input” file for Scarabée using standard Python syntax and the exposed Python interface for the library. This design choice was inspired by the approach used in the TRIPOLI-5 Monte Carlo code [8], and is very reminiscent of the current approach used by OpenMC [9]. In fact, some of the syntax in Scarabée, such as for building materials, has been made to be nearly identical to the OpenMC Python interface, facilitating easy translation of models.

While low level objects which represent cross sections and various transport solvers are all written in C++, a portion of the library is also written in pure Python. This includes classes and functionality related to automated PWR fuel assembly lattice calculations. These portions of the library can be written in Python as they are largely based on coupling the outputs and inputs of several different transport solvers in the correct order. Such operations are not typically bottle necks on performance, and writing them in Python allows them to be easily examined and modified without needing to recompile the library. Figure 1 provides a depiction for how the Python portion of the library is layered on top of the C++ portion of the library. Multidimensional arrays are used quite extensively in the library, on both the C++ and the Python side. In Python, the de facto standard for multidimensional arrays is Numpy [10]. To allow for seamless integration between the arrays on both the Python and C++ sides of the code, the xtensor library is used, which has native support for Pybind11 [11, 12]. Using xtensor, Numpy arrays from Python can be viewed and modified on the C++ side without even needing to make a copy of the underlying data, allowing for in-memory modifications to data arrays.

Thumbnail: Fig. 1. Refer to the following caption and surrounding text. Fig. 1.

Depiction of how Pybind11 is used to interface low-level C++ classes in Scarabée with the higher level features written in Python.

Other external libraries which are used in Scarabée include Eigen [13] and HDF5 [14]. Eigen is a linear algebra library which is used for solving all linear systems on the C++ side. It also provides a sparse matrix representation which keeps memory usage at reasonable levels when using certain transport solvers. As will be outlined in Section 3.1, microscopic nuclear data for Scarabée are stored in an HDF5 file, so the HDF5 library is required to read this information. Because Python on Windows now requires the user to give explicit permission to load dynamic libraries, Scarabée compiles and statically links all dependencies to prevent errors and avoid problems with incompatible versions which might already be on a given system.

The project is hosted on GitHub where the community may download and review the source code [15]. The cibuildwheel tool is used to automatically compile Python wheels of Scarabée for all supported platforms and Python versions as an automatic GitHub Action when new versions are released. As such, users do not even need to have a compiler present on their system, and can simply install it with pip, the standard Python package manager. Currently Python versions 3.10 through 3.14 are supported; only living versions of Python are supported by the project. External users are welcome to contribute, as the goal is for Scarabée to become a community developed and maintained tool for nuclear engineering education.

3. Methods and theory

3.1. Nuclear data and self-shielding

3.1.1. Nuclear data library

The cross section library in Scarabée uses a custom formatted HDF5 file, partially inspired by XPZLIB [16]. Each nuclide in the library is contained in a single group2 within the HDF5 file. Information such as the nuclide’s atomic weight ratio, potential cross section, and energy released per fission are stored as attributes on the group. All of the microscopic cross sections are stored in various datasets contained within the group. All nuclides contain datasets for the absorption cross section, transport correction cross section, the P0 scattering matrix, and the P1 scattering matrix, at infinite dilution and for all tabulated temperatures. If a nuclide has reactions such as fission, (n, γ), (n, 2n), (n, 3n), (n, p), or (n, α), these may also have datasets present with these cross sections at infinite dilution tabulated as a function of temperature. The naming convention for these datasets is the prefix “inf” followed by the reaction name (i.e. inf-absorption, inf-scatter, or inf-(n,gamma)). Higher scattering moment matrices may be provided in the library. If the P3 scattering matrix is provided, then there would be an inf-p3-scatter dataset provided in the nuclide’s group. Scattering matrices are stored in a compressed format, similar to the MATXS format [17]. Certain reactions, such as absorption, scattering, fission, and (n, γ), may exhibit resonant behavior for certain nuclides (i.e. 238U). When this is the case, an additional dataset is provided for that reaction with the “res” prefix, where the cross sections are stored as a function of temperature and dilution. The reactions (n, 2n), (n, 3n), (n, p), and (n, α) are never assumed to be resonant. If a resonant table is provided for a given nuclide and reaction, it only provides data for the energy groups which are in the resonance region of the library, and is dependent on the chosen group structure. Figure 2 provides a depiction of what the HDF5 file structure looks like for a single nuclide. The Scarabée source repository contains several scripts which can automate the generation of a minimal nuclear data library for ENDF/B-VIII.0 in various group structures [18]. These scripts are not distributed in the Python wheel for Scarabée, as they require other dependencies such as ENDFtk [19], PapillonNDL [20], and FRENDY [21, 22]. Currently, nuclear data libraries can only be generated for Scarabée using the FRENDY nuclear data processing code. This choice was made due to FRENDY’s ease of use and advanced multi-group processing capabilities [22, 23]. While the use of another data processing code is theoretically possible, no infrastructure currently exists to support other codes. Therefore, most users should use FRENDY to generate their cross section libraries.

Thumbnail: Fig. 2. Refer to the following caption and surrounding text. Fig. 2.

Depiction of the HDF5 file structure for the microscopic nuclear data used by Scarabée.

3.1.2. Transport correction

The transport correction is a common approximation that is used in many neutronics solvers to treat the effects of anisotropic scattering. In general, the total cross section and the scattering matrix are modified by subtracting a correction term:

Σ t r , g = Σ t , g Δ Σ t r , g , Mathematical equation: $$ \begin{aligned} \Sigma _{tr,g}&= \Sigma _{t,g} - \Delta \Sigma _{tr,g},\end{aligned} $$(1)

Σ s t r , g g = Σ s , 0 , g g δ g , g Δ Σ t r , g , Mathematical equation: $$ \begin{aligned} \Sigma _{str,g^{\prime }\rightarrow g}&= \Sigma _{s,0,g^{\prime }\rightarrow g}-\delta _{g^{\prime },g}\Delta \Sigma _{tr,g}, \end{aligned} $$(2)

where Σt, g is the total cross section in group g, Σtr, g is the transport cross section, Σstr, g′→g is an element of the transport corrected scattering matrix, Σs, 0, g′→g is the P0 moment of the scattering matrix, and ΔΣtr, g is the transport correction cross section. After application of this correction, calculations are performed assuming isotropic scattering [24]. Traditionally, the transport correction cross section in many codes is defined using the “outflow” approximation where

Δ Σ t r , g = g = 0 G Σ s , 1 , g g = μ ¯ Σ s , g , Mathematical equation: $$ \begin{aligned} \Delta \Sigma _{tr,g} = \sum _{g^{\prime }=0}^{G} \Sigma _{s,1,g\rightarrow g^{\prime }} = \bar{\mu }\Sigma _{s,g}, \end{aligned} $$(3)

Σs, 1, g → g being the P1 scattering moment when scattering from group g to group g′, and μ ¯ Mathematical equation: $ \bar{\mu} $ is the average cosine of the scattering angle for all scatter events in group g [25]. Previous work by Choi and Smith have indicated that the use of the outflow approximation is quite inadequate for LWR analysis, particularly for modeling neutron scattering off of 1H bound in water [26, 27]. As an alternative, they recommend using the “inflow” transport correction, defined as

Δ Σ t r , g = g = 0 G Σ s , 1 , g g ϕ 1 , g ϕ 1 , g , Mathematical equation: $$ \begin{aligned} \Delta \Sigma _{tr,g} = \frac{\displaystyle \sum _{g^{\prime }=0}^G \Sigma _{s,1,g^{\prime }\rightarrow g}\phi _{1,g^{\prime }}}{\phi _{1,g}}, \end{aligned} $$(4)

where ϕ1, g is the P1 flux moment in group g.

As the outflow and inflow transport corrections are quite different from one another, Scarabée has a unique feature where the transport correction cross section is tabulated for each nuclide, with both an infinite dilution table and a resonant table (if the nuclide is resonant). In the library preparation scripts provided with Scarabée, the outflow transport correction is used for all nuclides, with the exception of 1H in water and 2H in heavy water. For these two nuclides, the approach taken by Herman is employed, where the homogeneous P1 equations are solved using the fission spectrum of 235U as a source [28]. The computational strategy outlined by Stamm’ler and Abbate is used to solve the homogeneous P1 equations, allowing the inflow transport correction cross section from equation (4) to be obtained [25].

3.1.3. Intermediate resonance parameters

In the field of neutron slowing down and resonance self-shielding, two approximations are commonly employed: the narrow resonance (NR) approximation and the wide resonance (WR) approximation [29, 30]. Both permit one to obtain an analytical solution for the neutron slowing down equation in an infinite homogeneous medium. In the NR approximation, it is assumed that all non-absorbing nuclei (the moderators) are very light, which means that the average width of a resonance is much narrower than the average amount of energy a neutron will lose in a scatter. In the WR approximation, the absorbing (resonant) nuclei are considered to be infinitely massive, so a neutron loses no energy during a scattering event so the resonances appear to be very wide. Practically speaking, whether a nuclide appears narrow or wide depends on the width of the individual resonance, the mass of the nuclide with which the neutron is scattering, and the incident energy of the neutron. This effect of nuclides being neither perfectly “narrow” nor “wide” can be accounted for by scaling its potential scattering cross section by a factor λ ∈ [0, 1], known as the intermediate resonance parameter. A value of λ = 0 corresponds to the WR approximation (the nuclide does not contribute to slowing down) and λ = 1 corresponds to the NR approximation. Only 1H has λ = 1, and this is due to the fact that a neutron can lose all of its energy in an elastic scatter with this isotope.

As previously mentioned, λ will depend on the nuclide with which the scattering is occurring, the energy of the incident neutron, and the width of the particular resonance in question. We could never tabulate λ for all three of these parameters. Instead, we follow the suggestions of Knott, Yamamoto, and Gibson, only tabulating them for the nuclide, i, and the incident neutron energy group g [29, 30]. Since 238U is typically the most important resonant isotope in an LWR, we will calculate λi, g using the 238U cross section in group g. The method used by Scarabée to determine λi, g is known as the hydrogen equivalence procedure, which is well outlined by Xu, Gao, and Downar [31]. First, a dilution table is generated for the (n, γ) cross section of 238U, where the only other add-mixed moderator is 1H. When creating this dilution table, the slowing-down equation is numerically solved on a log-spaced 500,000 point energy grid over the interval of [10 μeV, 20 MeV]. We now consider a reference dilution, σ0, ref, taken to be 50 b [29]. At this reference dilution, the ratio of the 1H number density to that of 238U would be

R ref = σ 0 , ref σ p , H 1 · Mathematical equation: $$ \begin{aligned} R_{\rm ref} = \frac{\sigma _{0,\mathrm{ref}}}{\sigma _{p,H1}}\cdot \end{aligned} $$(5)

Subsequently, one additional slowing down calculation is performed where both 1H and nuclide i are add-mixed with the 238U, assuming that σt(E)=σp for each of these add-mixed isotopes. The fractions attributed to 1H and i are determined from Rref, where the ratio of 1H to 238U is taken to be RH1 = 0.95Rref, and the ratio of nuclide i to 238U is taken to be Ri = 0.05Rref. Once the new grouped cross sections are obtained from this flux spectrum, the capture cross section σc, g is used to search in the previously generated 1H-only dilution table to find what equivalent hydrogen dilution, σ0, equiv(σc, g), is needed to obtain σc, g. Once known, the intermediate resonance parameter may be calculated using

λ i , g = σ 0 , equiv ( σ c , g ) R H 1 σ p , H 1 R i σ p , i · Mathematical equation: $$ \begin{aligned} \lambda _{i,g} = \frac{\sigma _{0,\mathrm{equiv}}(\sigma _{c,g}) - R_{H1}\sigma _{p,H1}}{R_i \sigma _{p,i}}\cdot \end{aligned} $$(6)

The astute reader might notice that equation (6) does not necessarily enforce λr, g ∈ [0, 1]. Sanchez has pointed out that while one might like this condition to be met (to correspond with the NR and WR approximations as the extrema), there is no mathematical reason why this must be the case [32]. If one were to consider the intermediate resonance parameter as a “glorified fudge factor” which allows one to retrieve the correct resonance integral, then it could indeed be any real quantity. At the moment, Scarabée enforces λr, g ∈ [0, 1], and sets λr, g = 1 for groups where this was not the case. If, after this process, there are resonance groups with λr, g = 1, then this procedure is repeated with 235U, as it is assumed that the reason for an invalid value (resulting in λr, g = 1) was potentially due to a lack of 238U resonances within group g. Any groups where λr, g = 1 for 238U are replaced with the λr, g value obtained using 235U (which might also be unity). In the future, the current choice of enforcing λr, g ∈ [0, 1] will be reexamined.

3.1.4. Self-shielding

Like many other lattice physics codes, Scarabée uses equivalence in dilution for determining appropriate multi-group cross sections. By considering the slowing down equation for neutrons in a cylindrical fuel rod surrounded by moderator, one is able to show that after applying the Narrow Resonance (NR) approximation, the slowing down equation becomes

V f Σ t , f ( E ) ϕ f ( E ) = 1 E [ ( 1 P f m ( E ) ) V f Σ p , f + P m f ( E ) V m Σ p , m ] , Mathematical equation: $$ \begin{aligned} V_f\Sigma _{t,f}(E)\phi _f(E)&= \frac{1}{E}\left[(1-P_{f\rightarrow m}(E))V_f\Sigma _{p,f}\right.\nonumber \\&\quad \left. + P_{m\rightarrow f}(E)V_m\Sigma _{p,m}\right], \end{aligned} $$(7)

where Vf and Vm are the volume (area) of the fuel and moderator, Σp, f and Σp, m are the potential scattering cross sections for the fuel and moderator, Pf → m(E) is the probability of a neutron to fly from the fuel to the moderator and have a collision, and Pm → f(E) is the probability of the neutron to fly from the moderator to the fuel and have a collision [2, 3, 29, 30, 33]. After applying the reciprocity relation from collision probabilities (provided in Eq. (16)), we can express Pm → f(E) in terms of Pf → m(E), arriving at an expression for the flux spectrum in the fuel:

ϕ f ( E ) = 1 E [ ( 1 P f m ( E ) ) Σ p , f Σ t , f ( E ) + P f m ( E ) ] . Mathematical equation: $$ \begin{aligned} \phi _f(E) = \frac{1}{E}\left[(1-P_{f\rightarrow m}(E))\frac{\Sigma _{p,f}}{\Sigma _{t,f}(E)} + P_{f\rightarrow m}(E)\right]. \end{aligned} $$(8)

This then implies that if the proper expression for Pf → m(E) can be found, it would be possible to obtain an approximation for the flux spectrum in the fuel.

To approximate the probability of a neutron to escape the fuel into the moderator, a classic 2-term rational approximation is used such that

P f m ( E ) = n = 1 2 b n a n Σ e Σ t , f ( E ) + a n Σ e , Mathematical equation: $$ \begin{aligned} P_{f\rightarrow m}(E) = \sum _{n=1}^{2} b_n \frac{a_n\Sigma _e}{\Sigma _{t,f}(E) + a_n\Sigma _e}, \end{aligned} $$(9)

where bn and an are geometry specific quantities, and Σe is known as the “escape cross section”, calculated as

Σ e = S 4 V , Mathematical equation: $$ \begin{aligned} \Sigma _e = \frac{S}{4V}, \end{aligned} $$(10)

where S is the surface area (perimeter) of the fuel region and V is the volume (area). Equation (9) is also subject to the constraint that b1 + b2 = 1 [29]. Substituting equation (9) into equation (8), one finds that

ϕ f ( E ) = 1 E n = 1 2 b n Σ p , f + a n Σ e Σ t , f ( E ) + a n Σ e · Mathematical equation: $$ \begin{aligned} \phi _f(E) = \frac{1}{E}\sum _{n=1}^{2} b_n \frac{\Sigma _{p,f} + a_n\Sigma _e}{\Sigma _{t,f}(E) + a_n\Sigma _e}\cdot \end{aligned} $$(11)

At this point, we will consider only one resonant nuclide at a time, denoted with the r subscript, and we will assume that the cross section for all other nuclides in the fuel can be approximated as λi σp, i, where λi is nuclide i’s intermediate resonance parameter and σp, i is its potential scattering cross section. This allows us to rewrite equation (11) as

ϕ r ( E ) = 1 E n = 1 2 b n λ r σ p , r + σ 0 , n σ a , r ( E ) + λ r σ s , r ( E ) + σ 0 , n , Mathematical equation: $$ \begin{aligned} \phi _{r}(E) = \frac{1}{E}\sum _{n=1}^{2}b_n \frac{\lambda _r\sigma _{p,r} + \sigma _{0,n}}{\sigma _{a,r}(E) + \lambda _r\sigma _{s,r}(E)+ \sigma _{0,n}}, \end{aligned} $$(12)

where the term-dependent dilution is computed as

σ 0 , n = i r N i λ i σ p , i + a n Σ e N r · Mathematical equation: $$ \begin{aligned} \sigma _{0,n} = \frac{\displaystyle \sum _{i\ne r}N_i\lambda _i\sigma _{p,i} + a_n\Sigma _e}{N_r}\cdot \end{aligned} $$(13)

From equation (12), we can compute the multi-group cross section for any given reaction x in group g as

σ r , x , g = E g E g 1 σ x , r ( E ) ϕ r ( E ) d E E g E g 1 ϕ r ( E ) d E = n = 1 2 b n σ r , x , g , n ϕ r , g , n n = 1 2 b n ϕ r , g , n , Mathematical equation: $$ \begin{aligned} \sigma _{r,x,g} = \frac{\displaystyle \int _{E_g}^{E_{g-1}} \sigma _{x,r}(E)\phi _{r}(E) \mathrm{d} E}{\displaystyle \int _{E_g}^{E_{g-1}} \phi _{r}(E) \mathrm{d} E} = \frac{\displaystyle \sum _{n=1}^{2}b_n\sigma _{r,x,g,n}\phi _{r,g,n}}{\displaystyle \sum _{n=1}^{2}b_n\phi _{r,g,n}}, \end{aligned} $$(14)

where the flux ϕr, g, n can be retrieved as

ϕ r , g , n = λ r , g σ p , r + σ 0 , n σ r , a , g , n + λ r , g σ r , s , g , n + λ r , g σ p , r + σ 0 , n , Mathematical equation: $$ \begin{aligned} \phi _{r,g,n} = \frac{\lambda _{r,g}\sigma _{p,r} + \sigma _{0,n}}{\sigma _{r,a,g,n} + \lambda _{r,g}\sigma _{r,s,g,n} + \lambda _{r,g}\sigma _{p,r} + \sigma _{0,n}}, \end{aligned} $$(15)

and σr, x, g, n is the effective cross section for resonant nuclide r for reaction x in group g, which was interpolated from the pre-generated dilution tables at a dilution of σ0, n (computed using the group-dependent intermediate resonant parameters for all nuclides) [30, 33].

The only parameters which have not yet been defined (or obtained from the previously described dilution tables from Sect. 3.1) are the coefficients an and bn for the multi-term rational approximation of Pf → m(E), provided in equation (9). Since Scarabée is written with LWR reactor analysis in mind, all fuel regions are considered to be cylindrical. This allows us to use Carlvik’s approximation for a cylindrical fuel region where b1 = 2, b2 = −1, a1 = 2, and a2 = 3 [29, 30]. While often neglected in many codes, the isotopes in the fuel cladding do exhibit resonant behavior, and more accurate results can be obtained if the cladding cross sections are also self-shielded. For these regions, Scarabée approximates the cladding as an infinite slab, in the same manner taken by the STREAM lattice physics code [2]. For this geometry, Román’s approximation for slab geometry may be used, where b1 = 1.1, b2 = −0.1, a1 = 1.4, and a2 = 5.4 [29, 30]. Both the Carlvik and Román approximations, however, assume that the resonant region is the only one in the vicinity, and that there are no other resonant regions from which neutrons could arrive. In the tightly packed lattices of a nuclear reactor, this is not the case, as a neutron could easily fly from one fuel pin to another, or from one cladding region to another. If these lattice effects are not taken into account, the predicted flux spectrum will not be valid, and the multi-group cross sections will not accurately predict the behavior of the system. To account for these effects, the Dancoff correction, C, is obtained for every single fuel and cladding region in the geometry using the neutron current method [34]. This ensures that local spectral effects unique to each pin (such as the presence of an empty guide tube or inter-assembly gap) are accounted for in the self-shielded cross sections of each fuel pin. The Dancoff correction is then used to obtain a new set of parameters to be used in equation (9), the formulas for which can be found in Gibson’s PhD thesis [30].

Throughout this approach to self-shielding, it has been assumed that one set of multi-group cross sections is being obtained for the entire fuel pin. In general, for standard UO2 or MOX fuel, it is perfectly fine to consider the cross sections as being homogeneous in the fuel pellet. However, many modern LWR designs use Gadolinium or Erbium in fuel pins to act as a poison which is burned out over the course of the first fuel cycle. Both of these materials have very large neutron absorption cross sections, which leads to very strong spatial self-shielding effects across the fuel pellet. To account for the strong spatial self-shielding within the fuel pellet, the pin is discretized into a user provided number of equal volume rings, and each ring has its own set of self-shielded cross sections, obtained using the Stoker-Weiss method [29, 35]. The interested reader is encouraged to read the paper by Ferrer and Hykes which gives a detailed outline of the method [33].

3.2. Cylindrical collision probabilities solver

For annular 1D geometries, the method of collision probabilities is fast and effective, as the problem has no azimuthal dependence, so the integration process is very efficient. This makes it an ideal choice for studying single pin-cell problems. The implementation in Scarabée closely follows the general approach initially developed by Carlvik and well outlined by Stamm’ler and Abbate [25]. If p ~ j , i Mathematical equation: $ \tilde{p}_{j,i} $ is the probability that a neutron born uniformly in ring j undergoes its first collision in ring i, then the reciprocity relation states that

V j Σ t r , j p ~ j , i = V i Σ t r , i p ~ i , j , Mathematical equation: $$ \begin{aligned} V_j\Sigma _{tr,j} \tilde{p}_{j,i} = V_i\Sigma _{tr,i} \tilde{p}_{i,j}, \end{aligned} $$(16)

where Σtr, j is the transport cross section and Vj is the volume/area, both in ring j. This then indicates that a symmetric collision probability could instead be defined, such that p j , i V j Σ t r , j p ~ j , i Mathematical equation: $ p_{j,i}\equiv V_j\Sigma_{tr,j} \tilde{p}_{j,i} $, where pj, i = pi, j. These symmetric collision probabilities can then be calculated as

p i , j = Σ t r , j V j δ i , j + 2 ( S i 1 , j 1 S i 1 , j S i , j 1 + S i , j ) Mathematical equation: $$ \begin{aligned} p_{i,j} = \Sigma _{tr,j}V_j \delta _{i,j} + 2\left( S_{i-1,j-1} - S_{i-1,j} - S_{i,j-1} + S_{i,j} \right) \end{aligned} $$(17)

given

S i , j = 0 R i Ki 3 ( τ i , j + ( y ) ) Ki 3 ( τ i , j ( y ) ) d y , Mathematical equation: $$ \begin{aligned} S_{i,j} = \int _0^{R_i} \mathrm{Ki}_3(\tau _{i,j}^+(y)) - \mathrm{Ki}_3(\tau _{i,j}^-(y)) \mathrm{d} y, \end{aligned} $$(18)

where Ki3(x) is the 3rd Bickley–Naylor function, and τi, j ±(y) are the optical depths in mean free paths, as indicated by Figure 3 [25]. The integral in equation (18) is broken up such that each annulus is integrated separately:

S i , j = 0 R 1 Ki 3 ( τ i , j + ( y ) ) Ki 3 ( τ i , j ( y ) ) d y + R 1 R 2 Ki 3 ( τ i , j + ( y ) ) Ki 3 ( τ i , j ( y ) ) d y + + R i 1 R i Ki 3 ( τ i , j + ( y ) ) Ki 3 ( τ i , j ( y ) ) d y . Mathematical equation: $$ \begin{aligned} S_{i,j}&= \int _{0}^{R_1} \mathrm{Ki}_3(\tau _{i,j}^+(y)) - \mathrm{Ki}_3(\tau _{i,j}^-(y)) \mathrm{d} y\nonumber \\&\quad + \int _{R_1}^{R_2} \mathrm{Ki}_3(\tau _{i,j}^+(y)) - \mathrm{Ki}_3(\tau _{i,j}^-(y)) \mathrm{d} y\nonumber \\&\quad + \dots + \int _{R_{i-1}}^{R_i} \mathrm{Ki}_3(\tau _{i,j}^+(y)) - \mathrm{Ki}_3(\tau _{i,j}^-(y)) \mathrm{d} y. \end{aligned} $$(19)

Thumbnail: Fig. 3. Refer to the following caption and surrounding text. Fig. 3.

Depiction of how the optical depths, τi, j ±(y), are computed as a function of y in the 1D annular collision probabilities solver.

Each sub-integral over an annulus is performed using a 15 point Gauss-Kronrod quadrature. The Bickley-Naylor functions are computationally quite expensive to compute, and most lattice physics codes approximate its solution to optimize performance. In Scarabée, the range x ∈ [0, 15] has been broken into 8 regions with each one having a unique 25 term Chebyshev approximation, maintaining high accuracy and fast evaluation times. In equation (17), Si, j = 0 if either i or j are zero. Since the symmetric collision probabilities are used, one only needs to compute pi, jj ≤ i for all energy groups.

The symmetric collision probabilities are only indirectly used to compute the flux within ring i. To begin, the Matrix M ̂ Mathematical equation: $ \hat{M} $ is constructed such that its elements are

M i , j = Σ t r , i V i δ i , j Σ s t r , i Σ t r , i p j , i , Mathematical equation: $$ \begin{aligned} M_{i,j} = \Sigma _{tr,i}V_i\delta _{i,j} - \frac{\Sigma _{str,i}}{\Sigma _{tr,i}} p_{j,i}, \end{aligned} $$(20)

where Σstr, i ≡ Σstr, i, g → g and g is the energy group being solved. The matrix M ̂ Mathematical equation: $ \hat{M} $ is then used to compute the set of Xi k and Yi. Xi k is the flux in ring i due to a uniform unit source in ring k, and Yi is the flux in ring i due to a unit neutron current entering the external boundary of the cell with a cosine angular distribution; both sets of quantities assume a zero albedo boundary condition on the periphery of the cell. The vector of flux responses for a source in ring k can be calculated as

M ̂ X k = 1 Σ t r , k p k , Mathematical equation: $$ \begin{aligned} \hat{M} \boldsymbol{X^k} = \frac{1}{\Sigma _{tr,k}}\boldsymbol{p^k}, \end{aligned} $$(21)

where X k is the vector of Xi k entries, and p k is the vector of pk, i entries. A similar matrix equation is solved for the current response vector:

M ̂ Y = γ , Mathematical equation: $$ \begin{aligned} \hat{M} \boldsymbol{Y} = \boldsymbol{\gamma }, \end{aligned} $$(22)

where Y is the vector of of Yi entries and γ is the vector of first-flight collision blackness values, γi, which can be calculated as

γ i = 4 S B ( Σ t r , i V i j = 1 N p j , j ) , Mathematical equation: $$ \begin{aligned} \gamma _i = \frac{4}{S_B} \left(\Sigma _{tr,i}V_i - \sum _{j=1}^N p_{j,j} \right), \end{aligned} $$(23)

and SB is the circumference of the cell. If there are N rings, then N + 1 systems of equations must be solved for each energy group. The same matrix is used for all systems in a given group, so it can be inverted once and then reused. In Scarabée, the Eigen library is used to solve the system of equations using a column pivoting Householder QR decomposition.

With the set of source and current responses (Xi k and Yi) for black boundary conditions (zero albedo) determined, the multi-collision blackness of the cell can be computed as

Γ = i = 1 N Σ r , i V i Y i , Mathematical equation: $$ \begin{aligned} \Gamma = \sum _{i=1}^N \Sigma _{r,i} V_i Y_i, \end{aligned} $$(24)

Σr, i being the removal cross section for ring i. This term is needed in computing the current and source responses for an arbitrary albedo, a, at the cell boundary:

Y i ( a ) = Y i 1 a ( 1 Γ ) , Mathematical equation: $$ \begin{aligned} Y_i(a)&= \frac{Y_i}{1 - a(1-\Gamma )},\end{aligned} $$(25)

X i k ( a ) = X i k + a ( S B V i Y i 4 ) Y i ( a ) . Mathematical equation: $$ \begin{aligned} X_i^k(a)&= X_i^k + a \left(\frac{S_B V_i Y_i}{4}\right) Y_i(a). \end{aligned} $$(26)

At this point, the flux in ring i for a given energy group is calculated using

ϕ i = k = 1 N Q k X i k ( a ) + J ext Y i ( a ) , Mathematical equation: $$ \begin{aligned} \phi _i = \sum _{k=1}^{N} Q_k X_i^k(a) + J_{\rm ext}Y_i(a), \end{aligned} $$(27)

where Qk is the source in ring k and Jext is the external current on the boundary of the problem [25]. The source term contains the sum of the scattering sources, fission sources, and any possible external sources that may exist in the problem:

Q i , g = g g Σ s t r , i , g g ϕ i , g + χ i , g k eff g ν Σ f , i , g ϕ i , g + Q ext , i , g . Mathematical equation: $$ \begin{aligned} Q_{i,g} = \sum _{g^{\prime }\ne g} \Sigma _{str,i,g^{\prime }\rightarrow g}\phi _{i,g^{\prime }} + \frac{\chi _{i,g}}{{k_{\mathrm{eff}}}}\sum _{g^{\prime }}\nu \Sigma _{f,i,g^{\prime }}\phi _{i,g^{\prime }} + Q_{\mathrm{ext},i,g}. \end{aligned} $$(28)

Here, νΣf, i, g is the fission production cross section in ring i and group g, χi, g is the fission spectrum in ring i group g, and keff is the eigenvalue of the problem (if being run in eigenvalue mode). When run in k-eigenvalue mode, the standard power iteration method is used to converge to the fundamental eigenstate [36].

The cylindrical collision probabilities solver in Scarabée is very general, and can support a user provided boundary albedo, external current and sources, and any number of annular regions with any number of energy groups. It can be run in fixed-source mode or k-eigenvalue mode. The most common use case, however, is to run single pin-cell calculations with an albedo of unity and no external current in k-eigenvalue mode.

3.3. Discrete ordinates solver for slab geometry

Scarabée has a specialized discrete ordinates (Sn) solver for 1D slab geometries with a reflective boundary condition on the −x side and a vacuum boundary condition on the +x side. Currently, it can only solve k-eigenvalue problems, and is primarily used to generate few-group nodal diffusion parameters for the baffle / reflector region using a scheme very similar to the Baff-Refl method employed in Framatome’s SCIENCE chain, and well outlined by Machach [37, 38]. The solver can be run with isotropic scattering and transport corrected cross sections, or with explicit modeling of anisotropic scattering.

Both the isotropic and anisotropic sweep algorithms make use of a Gauss-Legendre quadrature. Since there is always a vacuum boundary on the right hand side and a reflective boundary on the left, sweeps start on the right hand boundary with all angles μ <  0 moving into the slab, as the entry angular flux is always known to be zero. Subsequently, all angles μ >  0 are considered, where the sweep starts on the left hand boundary using the known reflected flux from the complementary μ <  0 sweep. We will use the notation that ϕi, n, in/out is the angular flux along direction μn that is entering/leaving region i 3. This solver uses the diamond-difference approximation for the average value of the angular flux in region i:

ϕ i , n = ϕ i , n , in + ϕ i , n , out 2 · Mathematical equation: $$ \begin{aligned} \phi _{i,n} = \frac{\phi _{i,n,\mathrm{in}} + \phi _{i,n,\mathrm{out}}}{2}\cdot \end{aligned} $$(29)

Using equation (29), it is possible to derive a relation for the outgoing angular flux in the region from the neutron balance equation, resulting in

ϕ i , n , out = 2 Δ x i Q i , n + ( 2 | μ n | Δ x i Σ t r , i ) ϕ i , n , in Δ x Σ t r , i + 2 | μ n | , Mathematical equation: $$ \begin{aligned} \phi _{i,n,\mathrm{out}} = \frac{2\Delta x_i Q_{i,n} + (2|{\mu _n}| - \Delta x_i \Sigma _{tr,i})\phi _{i,n,\mathrm{in}}}{\Delta x \Sigma _{tr,i} + 2|{\mu _n}|}, \end{aligned} $$(30)

where Δxi is the width of region i and Qi, n is the source term for neutrons in region i that enter direction μn [24]. In this presentation, we have neglected the energy dependence, but in general, the flux, source, and cross sections have an implicit index for the energy group g. The source term is determined from the flux obtained in a previous iteration, and in the assumption of isotropic scattering with transport corrected data, is calculated as

Q i , g , n = 1 2 g [ Σ s t r , g g + χ i , g k eff ν Σ f , i , g ] ϕ i , g . Mathematical equation: $$ \begin{aligned} Q_{i,g,n} = \frac{1}{2} \sum _{g^{\prime }} \left[\Sigma _{str,g^{\prime }\rightarrow g} + \frac{\chi _{i,g}}{{k_{\mathrm{eff}}}}\nu \Sigma _{f,i,g^{\prime }}\right]\phi _{i,g^{\prime }}. \end{aligned} $$(31)

The scalar flux in region i is accumulated during a transport sweep as

ϕ i = n w n ϕ i , n , in + ϕ i , n , out 2 , Mathematical equation: $$ \begin{aligned} \phi _{i} = \sum _{n} w_n \frac{\phi _{i,n,\mathrm{in}} + \phi _{i,n,\mathrm{out}}}{2}, \end{aligned} $$(32)

where wn is the weight associated with μn from the Gauss-Legendre quadrature. As this solver is primarily used for generating nodal diffusion parameters for reflectors, the net current on the boundaries of all regions is also scored for use in generating discontinuity factors [37]. The current at boundary b of region i is calculated as

J b = n w n μ n ϕ b , n , Mathematical equation: $$ \begin{aligned} J_b = \sum _{n} w_n\mu _n\phi _{b,n}, \end{aligned} $$(33)

where ϕb, n is either ϕi, n, in or ϕi, n, out, depending on the direction of μn and wether the boundary b is on the positive or negative side of the region i. The standard power iteration method is used to converge onto the fundamental eigenstate and obtain keff [36]. Unfortunately, using isotropic scattering with transport corrected data, the discrete ordinates solver can fail to converge at times. This is caused by negative values in some groups for Σtr, g and Σstr, g → g, leading to negative flux values and negative source values, becoming more problematic with more energy groups. To permit convergence, the stabilization method of Gunow is employed [39]. Since implementing this technique, no transport corrected simulations have failed to converge.

When explicitly modeling anisotropic scattering, a few modification must be made. Firstly, the appearances of the transport cross section, Σtr, i, in equation (30) must be replaced with the total cross section, Σt, i. Second, instead of only accumulating the scalar flux during sweeps, we must accumulate all required moments of the angular flux. If P3 anisotropic scattering data is being used, then one must tally the angular flux in each region up to the l = 3 Legendre moment. This can be accomplished by replacing equation (29) with

ϕ i , l = n w n P l ( μ n ) ϕ i , n , Mathematical equation: $$ \begin{aligned} \phi _{i,l} = \sum _{n} w_n P_l(\mu _n) \phi _{i,n}, \end{aligned} $$(34)

Pl(μ) being the lth order Legendre polynomial. The source Qi, n is now computed from from the Legendre moments of the source:

Q i , n = n P l ( μ n ) Q i , n , l , Mathematical equation: $$ \begin{aligned} Q_{i,n} = \sum _n P_l(\mu _n) Q_{i,n,l}, \end{aligned} $$(35)

where the lth Legendre moment is computed as

Q i , n , l , g = 2 l + 1 2 g Σ s , i , g g , l ϕ i , l , g + δ l , 0 χ i , g 2 k eff g ν Σ f , i , g ϕ i , l , g , Mathematical equation: $$ \begin{aligned} Q_{i,n,l,g}&= \frac{2l + 1}{2} \sum _{g^{\prime }} \Sigma _{s,i,g^{\prime }\rightarrow g, l} \phi _{i,l,g^{\prime }}\nonumber \\&\quad + \delta _{l,0}\frac{\chi _{i,g}}{2{k_{\mathrm{eff}}}}\sum _{g^{\prime }} \nu \Sigma _{f,i,g^{\prime }}\phi _{i,l,g^{\prime }}, \end{aligned} $$(36)

which assumes that fission is perfectly isotropic and therefore only contributes to the l = 0 source moment. As the transport correction is not employed when modeling anisotropic scattering, there is no need to apply Gunow’s stabilization technique.

3.4. Method of characteristics solver

Scarabée has a transport solver for 2D geometries with rectilinear outer boundaries based on the method of characteristics (MOC) with the flat source region approximation [29]. While some MOC codes are quite generalized and allow the user to define almost any geometry [40], Scarabée only provides the user with a few distinct primitive sub-geometries or “cells” which are applicable to LWRs [29]. These include cell types for PWR pin cells, BWR pin cells in the corner of a channel box, and empty homogeneous cells. This somewhat limits the systems which can be accurately modeled, but is more than sufficient for LWR analysis and greatly reduces the user effort required to define a given geometry. The solver can be applied to both fixed-source and k-eigenvalue simulations with isotropic scattering and the transport correction or with explicit anisotropic scattering.

The user must provide the number of azimuthal directions that will be examined within the x-y plane of the geometry, the maximum track width, and the polar quadrature used for the z-direction. Based on this information, the exact azimuthal angles and track widths are slightly modified such that cyclic tracks can be traced across the geometry [29]. This means that at each point where a track exits the problem geometry, there will always be a corresponding track at that same position which has a complementary angle. For a given azimuthal angle, one can compute the starting positions of all tracks associated with the angle in advance. From this starting position, the “segment” information is generated for each track, which includes the index of the Flat Source Region (FSR) being traversed in addition to the distance traveled by the track in that FSR. These tracks are only generated for azimuthal angles φ ∈ [0, π], as following them in the “backwards” direction then gives you the corresponding φ ∈ [π, 2π] angles. Each azimuthal angle φa(t) (where t is the track index) has a corresponding weight wa(t). A product quadrature is used to accomplish integration in the z-direction, perpendicular to the tracks which are generated in the x-y plane. This product quadrature provides a set of polar angles (θp) and weights (wp) which are used to project the track lengths into 3D space, as the length of a segment in the x-y plane (ls) projected along the polar angle θp becomes lssin(θp). The width of track t is denoted as δt.

At the beginning of the simulation, a uniform scalar flux is assumed in all energy groups of all FSRs, which is used for computing the initial source terms. The angular flux is only stored for both end points of a track, which then has the angular flux for that track’s azimuthal angle, along all polar angles, in all energy groups. During a “sweep”, all tracks are followed along the forwards and backwards directions, computing the change in the angular flux along each segment. Once all segments have been traversed, one has obtained the angular fluxes in all groups for the corresponding cyclically connected re-entry track at the opposing end of the geometry. One difference between the MOC solver in Scarabée and other codes is that Scarabée uses total source iterations (similar to OpenMOC [40]), where the scattering source and fission source (including the eigenvalue) are updated before each sweep. Many other codes keep the fission source constant, perform the necessary number of sweeps to converge the scattering source, and only then update the fission source and eigenvalue. Testing seemed to indicate that while this leads to a fewer number of power iterations (where the fission source and eigenvalue are updated), a shorter wall-clock compute time can be achieved with total source iteration.

In this derivation, we shall denote each FSR with the index i, each track with the index t, each segment along a track with the index s, each unique azimuthal direction with the index a (dependent on t), and each unique polar angle with the index p. Under the assumption of isotropic scattering with the transport correction, if ϕi, s, p(0) is the angular flux at the beginning of segment s on track t in FSR i, traveling in the direction specified by azimuthal angle a and polar angle p, then the angular flux leaving that segment after traveling distance ls, p is ϕi, s, p(ls, p), and can be shown to be computed as [29, 40]

ϕ i , s , p ( l s , p ) = ϕ i , s , p ( 0 ) e Σ t r , i l s , p + Q i Σ t r , i ( 1 e Σ t r , i l s , p ) . Mathematical equation: $$ \begin{aligned} \phi _{i,s,p}(l_{s,p}) = \phi _{i,s,p}(0) e^{-\Sigma _{tr,i}l_{s,p}} + \frac{Q_i}{\Sigma _{tr,i}}\left(1 - e^{-\Sigma _{tr,i}l_{s,p}}\right). \end{aligned} $$(37)

Therefore, the change in the angular flux along the segment is

Δ ϕ i , s , p = ( ϕ i , s , p ( 0 ) Q i Σ t r , i ) ( 1 e Σ t r , i l s , p ) . Mathematical equation: $$ \begin{aligned} \Delta \phi _{i,s,p} = \left(\phi _{i,s,p}(0) - \frac{Q_i}{\Sigma _{tr,i}}\right)\left(1 - e^{-\Sigma _{tr,i}l_{s,p}}\right). \end{aligned} $$(38)

These changes in the angular flux can be integrated over all tracks and angles, leading to the following form for the scalar flux in FSR i:

ϕ i = 4 π Σ t r , i [ Q i + 1 A i t i s i p δ t w a ( t ) w p sin ( θ p ) Δ ϕ i , s , p ] , Mathematical equation: $$ \begin{aligned} \phi _i = \frac{4\pi }{\Sigma _{tr,i}}\left[Q_i + \frac{1}{A_i}\sum _{t\in i}\sum _{s\in i}\sum _{p} \delta _t w_a(t) w_p \sin (\theta _p)\Delta \phi _{i,s,p}\right], \end{aligned} $$(39)

where Ai is the 2D area of FSR i. As before, the group index on all flux, source, and cross section terms has been neglected for conciseness. The source term for a sweep can be computed from the flux obtained by the previous iteration:

Q i , g = 1 4 π g [ Σ s t r , g g + χ i , g k eff ν Σ f , i , g ] ϕ i , g . Mathematical equation: $$ \begin{aligned} Q_{i,g} = \frac{1}{4\pi } \sum _{g^{\prime }} \left[\Sigma _{str,g^{\prime }\rightarrow g} + \frac{\chi _{i,g}}{{k_{\mathrm{eff}}}}\nu \Sigma _{f,i,g^{\prime }}\right]\phi _{i,g^{\prime }}. \end{aligned} $$(40)

When using isotropic scattering with the transport correction, Gunow’s stabilization method is employed to avoid convergence problems caused by negative transport cross sections and negative diagonal elements of the transport corrected scattering matrices.

3.4.1. Anisotropic scattering

The explicit anisotropic scattering treatment in the MOC solver uses a spherical harmonics expansion. The main difference between the isotropic and anisotropic treatment is that the scattering source term for each segment crossing each flat source region is now different, and depends on the direction. We can write the source term for segment s crossing FSR i as [41]

Q i , s , p , g = g [ l = 0 N ( Σ s , l , g g j = l l ϕ i , l , j , g Y l , j ( Ω ̂ s , p ) ) + 1 4 π χ i , g k eff ν Σ f , i , g ϕ i , 0 , 0 , g ] . Mathematical equation: $$ \begin{aligned} Q_{i, s, p, g}&= \sum _{g^{\prime }} \left[ \sum _{l=0}^{N} \left(\Sigma _{s,l,g^{\prime } \rightarrow g} \sum _{j=-l}^{l}\phi _{i,l,j,g^{\prime }} Y_{l,j}({\boldsymbol{\hat{\Omega }}}_{s,p}) \right)\right.\nonumber \\&\quad \left.+ \frac{1}{\sqrt{4\pi }}\frac{\chi _{i,g}}{ {k_{\mathrm{eff}}}}\nu \Sigma _{f,i,g^{\prime }}\phi _{i,0,0,g} \right] . \end{aligned} $$(41)

Here, the source term Qi, s, p, g is dependent on the track’s azimuthal angle and polar angle, in addition to the angular flux moments, ϕi, l, j, g, which describe the shape of the angular flux on the unit sphere, and Y l , j ( Ω ̂ s , p ) Mathematical equation: $ Y_{l,j}({\boldsymbol{\hat{\Omega}}}_{s,p}) $ which is the real spherical harmonic function [24]. Therefore, one must calculate the angular flux moments during transport sweeps for all js and ls, where j varies from −l to l for each l = 0, 1, …, N if PN anisotropic scattering data is being used. One will notice that equation (41) assumed the fission source is perfectly isotropic, and only the l = 0, j = 0 flux moment contributes to fission source component.

The expressions for the angular flux leaving a segment, given by equation (37), and the change in the angular flux along the segment, given by equation (38), can be used in the anisotropic scattering treatment with only two minor changes. First, Qi will be replaced by Qi, s, p, which incorporates the anisotropic scattering of neutrons from one direction to another. Secondly, the transport corrected cross section will be replaced by the total cross section, Σt. However, since the higher spherical harmonic moments of the angular flux are required when calculating the source term, it is no longer sufficient to only score the scalar flux. We must also score the ϕi, l, j, g angular flux moments, which can be accomplished with the following relation [41]:

ϕ i , l , j , g = 4 π Σ t , i , g A i [ t i s i p δ t w a ( t ) w p ( sin ( θ p ) Δ ϕ i , s , p , l , j , g + l = 0 N j = l l l s , p Q i , s , p , g ) Y l , j ( Ω ̂ s , p ) ] . Mathematical equation: $$ \begin{aligned}&\phi _{i, l, j, g} = \frac{4\pi }{\Sigma _{t, i, g} A_i} \left[\sum _{t \in i} \sum _{s \in i} \sum _{p} \delta _t w_a(t) w_p\right.\nonumber \\&\left.\left( \sin (\theta _p) \Delta \phi _{i, s, p, l, j, g} + \sum _{l=0}^{N} \sum _{j = -l}^{l} l_{s, p} Q_{i, s, p, g} \right) Y_{l,j}({\boldsymbol{\hat{\Omega }}}_{s,p}) \right] . \end{aligned} $$(42)

In the explicit anisotropic scattering treatment, the transport correction is not employed. Therefore, there is no need to apply Gunow’s stabilization technique to fix the flux moments. At this point, it is likely clear to the reader that modeling anisotropic scattering with a PN approximation requires (N + 1)2 as much memory as the isotropic scattering simulation. It will also require more time to perform the computation, as equation (42) must now be scored for all angular flux moments. Therefore, anisotropic scattering should only be used when required to accurately model the problem of interest.

3.4.2. Coarse Mesh Finite-Difference (CMFD) acceleration

The Scarabée MOC solver includes optional non-linear diffusion acceleration in the form of a Coarse Mesh Finite-Difference (CMFD) solver [29, 42]. CMFD is a common method of accelerating transport problems, particularly in large geometries, and has been implemented in several other codes [4, 40, 42]. In CMFD, a coarse Cartesian mesh is superimposed over the fine FSR mesh used in the MOC solver4, with each coarse CMFD cell typically containing multiple FSRs. In order to remain consistent with the transport solution from the MOC solver, a non-linear diffusion correction is added to the surface diffusion coefficients used in the finite-difference diffusion solver, based on the currents tallied during a MOC sweep. During a MOC sweep, the net current is tallied on each surface, S, of each CMFD cell with

J G , S = 1 l S g G t T S p ω a ( t ) ω p sin θ p δ t ψ t , g , p sign ( cos φ a ( t ) ) , Mathematical equation: $$ \begin{aligned} J_{G,S} = \frac{1}{l_S} \sum _{g\in G} \sum _{t \in \mathcal{T} _S} \sum _{p} \omega _a(t) \omega _p \sin \theta _p \delta _t \psi _{t,g,p} \mathrm{sign}(\cos \varphi _a(t)), \end{aligned} $$(43)

where 𝒯S is the set of all tracks crossing surface S and lS is the length of the surface. When using CMFD, it is possible to specify a condensed group structure that is used to solve the diffusion problem and update the MOC scalar flux. In equation (43), g is the MOC energy group corresponding to the condensed CMFD energy group G. Performing CMFD on a condensed energy grid is generally beneficial for run times.

In the CMFD formalism, the net current crossing the surface S is defined as

J G , S = D ̂ S ( ϕ G , S + ϕ G , S ) D ~ S ( ϕ G , S + + ϕ G , S ) , Mathematical equation: $$ \begin{aligned} J_{G,S}= -\hat{D}_{S} (\phi _{G,S+}-\phi _{G,S-}) - \tilde{D}_{S}(\phi _{G,S+} + \phi _{G,S-}), \end{aligned} $$(44)

where S+ represents the CMFD cell on the positive side of the surface, and S− represents the CMFD cell on the negative surface. D ̂ G , S Mathematical equation: $ \hat{D}_{G,S} $ is the standard diffusion coefficient for the surface, while D ~ G , S Mathematical equation: $ \tilde{D}_{G,S} $ is the non-linear correction which is computed to ensure that the current tallied in the MOC solver is preserved in the CMFD formalism [43]. If the MOC problem has a reflective boundary at surface S, it is assumed that JG, S = 0 and the tallied current is not utilized; a similar assumption is made for the case of a vacuum boundary conditions5 [24]. The choice of how diffusion coefficients are calculated can have important consequences for the stability and convergence of the CMFD solver, particularly for cells with a large optical thickness. Therefore, Scarabée includes two optional methods to deal with this very problem, one being Larsen’s effective diffusion coefficient [44] and the other being to adjust the diffusion coefficient to an optimized value based on the cell optical thickness [45]. By default, the latter method is used in Scarabée, but this can be disabled or replaced with Larsen’s method should the user desire.

Once the surface diffusion coefficients are calculated, Scarabée solves the finite-difference diffusion problem in the typical manner for either k-eigenvalue or fixed-source problems. CMFD is applied at every MOC iteration, and the solution is used to update the MOC scalar flux in each FSR before starting the next MOC iteration:

ϕ g , i n + 1 = ϕ g , i n ϕ G , I CMFD ϕ G , I MOC ( g , i ) ( G , I ) , Mathematical equation: $$ \begin{aligned} \phi ^{n+1}_{g,i}=\phi ^{n}_{g,i}\frac{\phi ^\mathrm{CMFD}_{G,I}}{\phi ^\mathrm{MOC}_{G,I}} \ \forall \ (g,i)\in (G,I), \end{aligned} $$(45)

where the FSR i is contained within the CMFD cell I [43]. The CMFD method greatly accelerates the convergence of the flux in the MOC problem, particularly in problems with large reflectors. An example of this acceleration is provided in Section 4.2.

3.5. Diffusion solvers

While it is ideal to perform neutronics calculations using transport theory whenever possible, this is still a cumbersome endeavor for 3D full core problems on laptops or small workstations. To facilitate the analysis of full core problems, Scarabée provides two different solvers based on diffusion theory for Cartesian geometries.

3.5.1. Finite-difference solver

The first of these is a finite-difference solver based on the method of cell-centered finite-differences [24]. It can solve 1D, 2D, or 3D problems with generalized albedo boundary conditions, and supports the use of assembly discontinuity factors [46]. The theory behind such solvers has been covered in many different texts, though we encourage the reader to examine the excellent explanation provided by Hébert [24].

3.5.2. Nodal expansion method solver

For large problems, the finite-difference methodology can still be somewhat slow, particularly if one must perform many thousands of calculations or examine reactor transients. As an alternative, users can instead use the nodal diffusion solver based on the Nodal Expansion Method (NEM) [47]. In nodal diffusion methods, the problem domain is discretized into relatively large (sometimes assembly size) “nodes” which have homogeneous material properties. Within node i, we want to describe the neutron flux as a function of position, ϕi(x, y, z), which is described by the diffusion equation which we can write as

· J i ( x , y , z ) + Σ r , i ϕ i ( x , y , z ) = Q i ( x , y , z ) , Mathematical equation: $$ \begin{aligned} {\boldsymbol{\nabla }} \cdot \boldsymbol{J}_i(x,y,z) + \Sigma _{r,i}\phi _i(x,y,z) = Q_i(x,y,z), \end{aligned} $$(46)

where J i(x, y, z)= − Di ϕi(x, y, z) is the neutron current, Σr, i is the removal cross section and Qi(x, y, z) is the position dependent source within the node. To simplify the problem, only one axis (x, y, or z) is solved for at a time. If solving for the flux along the x direction, equation (46) is integrated along the y and z axes, applying the operator

1 Δ y Δ z Δ y / 2 Δ y / 2 Δ z / 2 Δ z / 2 ( · ) d z d y Mathematical equation: $$ \begin{aligned} \frac{1}{\Delta y \Delta z}\int _{-\Delta y/2}^{\Delta y/2}\int _{-\Delta z/2}^{\Delta z/2} \left( \cdot \right) \mathrm{d} z \mathrm{d} y \end{aligned} $$(47)

to every term, where Δy is the width of the node along the y direction and similarly for Δz, with the node being centered at the origin. Following this approach, the average value of the flux in the node as a function of the x position is

ϕ x , i ( x ) 1 Δ y Δ z Δ y / 2 Δ y / 2 Δ z / 2 Δ z / 2 ϕ i ( x , y , z ) d z d y , Mathematical equation: $$ \begin{aligned} \phi _{x,i}(x) \equiv \frac{1}{\Delta y \Delta z}\int _{-\Delta y/2}^{\Delta y/2}\int _{-\Delta z/2}^{\Delta z/2} \phi _i(x,y,z) \mathrm{d} z \mathrm{d} y, \end{aligned} $$(48)

and the average value of the source in the node as a function of the x position is

Q x , i ( x ) 1 Δ y Δ z Δ y / 2 Δ y / 2 Δ z / 2 Δ z / 2 Q i ( x , y , z ) d z d y . Mathematical equation: $$ \begin{aligned} Q_{x,i}(x) \equiv \frac{1}{\Delta y \Delta z}\int _{-\Delta y/2}^{\Delta y/2}\int _{-\Delta z/2}^{\Delta z/2} Q_i(x,y,z) \mathrm{d} z \mathrm{d} y. \end{aligned} $$(49)

For each of the three terms from the divergence of the current in equation (46) we have a different resulting expression. For the current along the x direction, we obtain

1 Δ y Δ z Δ y / 2 Δ y / 2 Δ z / 2 Δ z / 2 x J x , i ( x , y , z ) d z d y = 1 Δ y Δ z Δ y / 2 Δ y / 2 Δ z / 2 Δ z / 2 D i 2 ϕ i ( x , y , z ) x 2 d z d y = D i d 2 d x 2 ϕ x , i ( x ) . Mathematical equation: $$ \begin{aligned}&\frac{1}{\Delta y \Delta z}\int _{-\Delta y/2}^{\Delta y/2}\int _{-\Delta z/2}^{\Delta z/2} \frac{\partial }{\partial x} J_{x,i}(x,y,z) \mathrm{d} z \mathrm{d} y \nonumber \\&\quad =\frac{1}{\Delta y \Delta z}\int _{-\Delta y/2}^{\Delta y/2}\int _{-\Delta z/2}^{\Delta z/2} -D_i\frac{\partial ^2\phi _i(x,y,z)}{\partial x^2} \mathrm{d} z \mathrm{d} y \\&\quad =-D_i\frac{\mathrm{d}^2}{\mathrm{d} x^2}\phi _{x,i}(x).\nonumber \end{aligned} $$(50)

For the currents in the two transverse directions, one obtains

1 Δ y Δ z Δ y / 2 Δ y / 2 Δ z / 2 Δ z / 2 y J y , i ( x , y , z ) d z d y = 1 Δ y Δ z Δ z / 2 Δ z / 2 [ J y , i ( x , Δ y / 2 , z ) J y , i ( x , Δ y / 2 , z ) ] d z 1 Δ y L y , i ( x ) Mathematical equation: $$ \begin{aligned}&\frac{1}{\Delta y \Delta z}\int _{-\Delta y/2}^{\Delta y/2}\int _{-\Delta z/2}^{\Delta z/2} \frac{\partial }{\partial y} J_{y,i}(x,y,z) \mathrm{d} z \mathrm{d} y \nonumber \\&=\frac{1}{\Delta y \Delta z}\int _{-\Delta z/2}^{\Delta z/2} \left[ J_{y,i}(x,\Delta y/2, z) - J_{y,i}(x, -\Delta y/2, z) \right] \mathrm{d} z \\&\equiv \frac{1}{\Delta y} L_{y,i}(x)\nonumber \end{aligned} $$(51)

for the transverse leakage in the y direction and

1 Δ y Δ z Δ y / 2 Δ y / 2 Δ z / 2 Δ z / 2 z J z , i ( x , y , z ) d z d y = 1 Δ y Δ z Δ y / 2 Δ y / 2 [ J z , i ( x , y , Δ z / 2 ) J z , i ( x , y , Δ z / 2 ) ] d y 1 Δ z L z , i ( x ) Mathematical equation: $$ \begin{aligned}&\frac{1}{\Delta y \Delta z}\int _{-\Delta y/2}^{\Delta y/2}\int _{-\Delta z/2}^{\Delta z/2} \frac{\partial }{\partial z} J_{z,i}(x,y,z) \mathrm{d} z \mathrm{d} y \nonumber \\&=\frac{1}{\Delta y \Delta z}\int _{-\Delta y/2}^{\Delta y/2} \left[ J_{z,i}(x,y,\Delta z/2) - J_{z,i}(x, y, -\Delta z/2) \right] \mathrm{d} y \\&\equiv \frac{1}{\Delta z} L_{z,i}(x)\nonumber \end{aligned} $$(52)

for the transverse leakage in the z direction. Combining these definitions we arrive at the second order ordinary differential equation for the average value of the flux in the x direction:

D i d 2 d x 2 ϕ x , i ( x ) + Σ r , i ϕ x , i ( x ) = Q x , i ( x ) 1 Δ y L y , i ( x ) 1 Δ z L z , i ( x ) . Mathematical equation: $$ \begin{aligned}&-D_i\frac{\mathrm{d}^2}{\mathrm{d} x^2}\phi _{x,i}(x) + \Sigma _{r,i}\phi _{x,i}(x) \nonumber \\&= Q_{x,i}(x) - \frac{1}{\Delta y} L_{y,i}(x) - \frac{1}{\Delta z} L_{z,i}(x). \end{aligned} $$(53)

Naturally, there are corresponding equations for ϕy, i(y) and ϕz, i(z) that must be solved.

In the NEM approximation, we solve equation (53) by approximating the flux as a 4th order polynomial which takes the form

ϕ x , i ( x ) = ϕ ¯ i + n = 1 4 a x , i , n f n ( x ) , Mathematical equation: $$ \begin{aligned} \phi _{x,i}(x) = \bar{\phi }_{i} + \sum _{n=1}^{4}a_{x,i,n} f_n(x), \end{aligned} $$(54)

where the basis functions are

f 1 ( x ) = x Δ x f 2 ( x ) = 3 ( x Δ x ) 2 1 4 f 3 ( x ) = x Δ x ( x Δ x 1 2 ) ( x Δ x + 1 2 ) f 4 ( x ) = ( ( x Δ x ) 2 1 20 ) ( x Δ x 1 2 ) ( x Δ x + 1 2 ) . Mathematical equation: $$ \begin{aligned} f_1(x)&= \frac{x}{\Delta x} \nonumber \\ f_2(x)&= 3\left(\frac{x}{\Delta x}\right)^2 - \frac{1}{4} \nonumber \\ f_3(x)&= \frac{x}{\Delta x}\left(\frac{x}{\Delta x} - \frac{1}{2}\right)\left(\frac{x}{\Delta x} + \frac{1}{2}\right) \\ f_4(x)&= \left(\left(\frac{x}{\Delta x}\right)^2 - \frac{1}{20}\right)\left(\frac{x}{\Delta x} - \frac{1}{2}\right)\left(\frac{x}{\Delta x} + \frac{1}{2}\right).\nonumber \end{aligned} $$(55)

As outlined by Lawrence, using a 4th order polynomial for the flux requires defining two supplementary moment equations, taking the inner product of equation (53) with f1(x) and f2(x) over the node [47]. Additionally, one must define the functional forms of the transverse leakage terms Ly, i(x) and Lz, i(x). This is approximated as a quadratic polynomial such that the integral of Ly, i(x) over the domain of the node in question (i) and the two adjacent nodes (i − 1 and i + 1) separately recovers the average transverse leakage of the node in question. While this approximation has been shown to yield excellent results, it is not evident how to construct such a quadratic polynomial when the node i lies next to a boundary condition, and the node i ± 1 does not exist. For these nodes, Scarabée assumes that Ly, i(x) is a constant equal to the value of the transverse leakage in node i, as Zerkle indicated that this was a relatively accurate and simple approach for these particular nodes [48]. To obtain the solution to a problem, the values of ϕ ¯ i Mathematical equation: $ \bar{\phi}_i $ and ax, i, n are iteratively solved for across all nodes and energy groups, making sure that the entry current of one node equals the exit current of the adjacent node, taking the derivative of equation (54). In Scarabée, this is accomplished by using the interface current response matrix formalism which has been previously outline by Lawrence [47].

Once the nodal diffusion problem has been solved, one only has values of the node average flux, and the partial currents for each surface of each node. Therefore, we are not directly given any information regarding the intranodal shape of the flux, and therefore the intranodal shape of the power distribution. Without taking the intranodal power distribution into account, one will have very poor estimates for relative pin powers. Therefore, a “reconstruction” technique must be applied where the node average flux and partial currents are used to approximate the intranodal flux shape in each group from which the intranodal power distribution can also be obtained. Many other works have considered this problem, and most make assumptions regarding the number of energy groups being used or the flux behavior in specific groups [49, 50]. While such approximations may have been necessary in the past to obtain reasonable performance, this is no-longer the case. Scarabée applies the Analysis of Variance - High Dimensional Model Representation (ANOVA-HDMR) method to each energy group [51]. Once the reconstruction step has been completed, the user can interrogate the value of the flux or power at any position in the problem domain. All values are normalized such that the average power of all nodes in the problem is unity.

3.6. Lattice calculations

Scarabée also has lattice physics capabilities which allow the user to perform 2D simulations of single PWR fuel assemblies. This can be used to generate few-group diffusion cross sections and discontinuity factors for use in the nodal diffusion solver, and also includes fuel depletion capabilities. Geometries which include normal fuel pins, guide tubes, gadolinium fuel pins, wet burnable absorber rods, pyrex rods, and fuel pin spacer grids with grid sleeves can all be simulated. Currently, there is no modeling of control rods, though this feature is planned for the near future.

Unlike other lattice physics codes, the assembly calculations are only carried out in the group structure of the nuclear data library using the MOC solver; no energy condensation step is performed. This certainly leads to longer computation times, but also more accurate results and eliminates the need to come up with ad-hoc methods for determining the flux spectrum which should be used when condensing cross sections for the grid sleeve and assembly gap. By default, CMFD is used to accelerate flux convergence, helping to reduce run times, particularly when performing depletion calculations. Unique Dancoff corrections are computed for each fuel pin and cladding (including guide tubes) using the neutron current method [29, 34]. These Dancoff corrections are then used in the self-shielding step, along with the geometry and material composition for each fuel pin, to interpolate unique macroscopic cross sections for each fuel pin. When simulating assemblies with gadolinium fuel pins, the user can specify how many rings should be used for spatial self-shielding and depletion, and the Stoker-Weiss method is used to obtain unique cross sections for each fuel ring. While isotropic scattering with the transport correction is used by default, users may choose to explicitly model anisotropic scattering, up to the P3 moment, if the nuclear data library provides the necessary scattering matrices. Single assembly calculations can not directly model the spectral effects caused by neutrons “leaking” between assemblies to achieve criticality, as would occur in an operating reactor. To approximate this effect on the flux spectrum, either a P1, B1, or Fundamental Mode leakage correction can be applied to the MOC results [24, 25, 29]. By default, a P1 leakage model is used, based on the suggestion and reasoning provided by Smith [27]. To generate the few-group diffusion cross sections, standard flux-volume weighting is used across the entire assembly [29]. As suggested by Smith, the diffusion coefficient is directly condensed in energy, instead of first condensing the transport cross section and then converting to the diffusion coefficient [27].

3.6.1. ADF calculation from MOC results

In addition to the few-group cross sections, assembly discontinuity factors are required for the generalized equivalence theory proposed by Smith [52], which greatly improves the results of subsequent full core diffusion simulations. The definition of the discontinuity factor is typically given as

f x + = ϕ het ( x + ) ϕ hom ( x + ) , Mathematical equation: $$ \begin{aligned} f_{x+} = \frac{\phi _{\rm het}(x_+)}{\phi _{\rm hom}(x_+)}, \end{aligned} $$(56)

where ϕhet(x+) is the average value of the flux along the x+ surface of the assembly from the detailed MOC calculation, and ϕhom(x + ) is the average value of the flux along the x+ surface from the homogeneous (i.e. nodal diffusion) solution to the equivalent problem. Since assembly calculations are often performed with reflective boundary conditions, ϕhom(x+) is typically just the average value of the assembly flux, and therefore independent of the surface being considered. To obtain ϕhet(x+), the average flux along the FSRs on the boundary of the desired surface is computed using length weighting [53]. A similar process is used when computing the corner discontinuity factors which are required for the flux-reconstruction processing in the nodal diffusion solver.

3.6.2. ADF calculation from CMFD results

When Smith initially developed and proposed the use of ADFs, assembly calculations were often being performed with homogenized pin cell calculations. Smith has since remarked that the naïve approach for calculating the ADF based on equation (56) is incorrect for modern lattice physics methods where the true heterogeneous geometry is modeled, such as in the MOC6 [27]. The reasoning for this is that ADFs are meant to account for heterogeneity (meaning different types of cells) within a given assembly. It does not make sense to consider the heterogeneity of the assembly at the sub pin cell level, as the downstream nodal diffusion simulation ignores such fine detail, and is looking for the smooth homogeneous solution for the reactor flux. With this in mind, if one were to simulate an assembly with only one type of fuel pin, no guide tubes, and no gap on the exterior of the assembly, the ADFs (and CDFs) in each group should be exactly unity, as there would be no heterogeneity within the assembly. Clearly, computing the ADFs (and CDFs) using the method outlined in Section 3.6.1 will not result in unity, as the flux in the moderator will be used to compute ϕhet along the edge of an assembly, and this is not representative of the behavior of the homogenized pin cell flux on the edge of the assembly. To obtain valid ADFs from MOC lattice calculations, Smith instead proposes tallying the currents for the interface of each pin cell along the exterior of the assembly along with homogenizing diffusion cross sections for those cells. Then, by performing a fixed-source nodal calculation on each pin cell with the reference currents, one can recover the homogenized surface flux within that pin cell which can be integrated along the length of the assembly to compute ϕhet [27].

In Scarabée, a method to compute ADFs based on this concept has been implemented, leveraging the currents which are tallied when CMFD is used to accelerate the calculation. The CMFD mesh in Scarabée corresponds to the pin cells of the assembly, with edge pin cells also having the extra flat source regions which may be present for the moderator gap between assemblies and for the grid sleeve that may be present. The CMFD current is generally tallied in an intermediate group structure, so the currents for the four sides of a pin cell are first condensed down to the few-group structure used for the nodal diffusion parameters. Subsequently, a set of few-group diffusion cross sections are homogenized and condensed for the pin cell. Few-group average fluxes within the pin cell are also computed. All these parameters can then be used to perform a 1D fixed-source calculation for the pin cell. We shall assume that the average flux in group G for the pin cell is ϕ ¯ G Mathematical equation: $ \bar{\phi}_G $, and the net currents on the +x and −x sides of the cell are JG +x and JG x , respectively. Machach has shown that the four coefficients, ax, n, can be solved for using the following system of equations7 [37, 38]:

D G 2 Δ x 2 a x , 3 + Σ r , G 12 ( a x , 1 a x , 3 10 ) H G ( Σ s , H G 12 + χ G k eff ν Σ f , H 12 ) ( a x , 1 a x , 3 10 ) = 0 Mathematical equation: $$ \begin{aligned} -\frac{D_G}{2\Delta x^2}a_{x,3} + \frac{\Sigma _{r,G}}{12}\left(a_{x,1} - \frac{a_{x,3}}{10}\right)\nonumber \\ - \sum _{H\ne G} \left(\frac{\Sigma _{s,H\rightarrow G}}{12} + \frac{\chi _G}{{k_{\mathrm{eff}}}}\frac{\nu \Sigma _{f,H}}{12}\right) \left(a_{x,1} - \frac{a_{x,3}}{10}\right)&= 0\end{aligned} $$(57)

D G 5 Δ x 2 a x , 4 + Σ r , G 20 ( a x , 2 a x , 4 35 ) H G ( Σ s , H G 20 + χ G k eff ν Σ f , H 20 ) ( a x , 2 a x , 4 35 ) = 0 Mathematical equation: $$ \begin{aligned} -\frac{D_G}{5\Delta x^2}a_{x,4} + \frac{\Sigma _{r,G}}{20}\left(a_{x,2} - \frac{a_{x,4}}{35}\right)\nonumber \\ - \sum _{H\ne G} \left(\frac{\Sigma _{s,H\rightarrow G}}{20} + \frac{\chi _G}{{k_{\mathrm{eff}}}}\frac{\nu \Sigma _{f,H}}{20}\right) \left(a_{x,2} - \frac{a_{x,4}}{35}\right)&= 0 \end{aligned} $$(58)

D G Δ x ( a x , 1 3 a x , 2 a x , 3 2 a x , 4 5 ) = J G + x Mathematical equation: $$ \begin{aligned} \frac{D_G}{\Delta x}\left(-a_{x,1} - 3a_{x,2} - \frac{a_{x,3}}{2} - \frac{a_{x,4}}{5}\right)&= J_G^{+x} \end{aligned} $$(59)

D G Δ x ( a x , 1 + 3 a x , 2 a x , 3 2 + a x , 4 5 ) = J G x Mathematical equation: $$ \begin{aligned} \frac{D_G}{\Delta x}\left(-a_{x,1} + 3a_{x,2} - \frac{a_{x,3}}{2} + \frac{a_{x,4}}{5}\right)&= J_G^{-x} \end{aligned} $$(60)

where Δx is the width of the cell in the x direction. With all ax, n determined for each group, one can use equation (54) to demonstrate that the average value of the homogenized pin cell flux at the +x boundary of cell c in group G is

ϕ c , G , + x = ϕ ¯ G + a x , 1 , G 2 + a x , 2 , G 2 · Mathematical equation: $$ \begin{aligned} \phi _{c,G,+x} = \bar{\phi }_G + \frac{a_{x,1,G}}{2} + \frac{a_{x,2,G}}{2}\cdot \end{aligned} $$(61)

Similarly, for the average value of the homogenized pin cell flux at the −x boundary we find that

ϕ c , G , x = ϕ ¯ G a x , 1 , G 2 + a x , 2 , G 2 · Mathematical equation: $$ \begin{aligned} \phi _{c,G,-x} = \bar{\phi }_G - \frac{a_{x,1,G}}{2} + \frac{a_{x,2,G}}{2}\cdot \end{aligned} $$(62)

Using these average homogenized pin cell fluxes on the +x boundary, we can compute ϕhet, G(+x) as

ϕ het , G ( + x ) = c + x l c , + x ϕ c , G , + x c + x l c , + x , Mathematical equation: $$ \begin{aligned} \phi _{\mathrm{het},G}(+x) = \frac{\displaystyle \sum _{c\ \in \ +x}l_{c,+x}\phi _{c,G,+x}}{\displaystyle \sum _{c\ \in \ +x}l_{c,+x}} , \end{aligned} $$(63)

where the sum is carried out for all cells c which touch the +x boundary of the assembly and lc, +x is the length of cell c along the +x assembly boundary.

The homogeneous flux used in the denominator of equation (56) is calculated in a similar manner, but on the scale of the entire assembly. The average net current on each face of the assembly is condensed to the few-group structure from the CMFD results, and few-group diffusion cross sections are also generated. Then, equation (57) through (60) are solved for the assembly, and the average homogenized assembly surface flux can be computed using equation (61) or equation (62). CDFs are computed in a very similar procedure, where the heterogeneous corner flux is computed from a 2D nodal calculation for just the corner pin cell, and the homogeneous corner flux is computed from a 2D nodal calculation for the entire assembly. The value of the corner flux from the 2D nodal calculation is based on the ANOVA-HDRM reconstruction without considering any x-y cross terms [51]. Using this procedure on perfectly homogeneous assemblies with no gap, ADFs and CDFs well within 0.1% of unity can be obtained. When CMFD is used to accelerate assembly problems in Scarabée, this improved technique is used to generate ADFs and CDFs.

Thumbnail: Fig. 4. Refer to the following caption and surrounding text. Fig. 4.

Diagram of the simplified 1D reflector model used to generate few-group diffusion cross sections and discontinuity factors for reflector nodes. This scheme is inspired by the Baff-Ref method [37, 38].

3.6.3. Reflector calculations

To generate few-group diffusion cross sections with discontinuity factors for reflector regions, an approach similar to the improved Baff-Ref technique outlined by Machach is used [37, 38]. A model fuel assembly from the periphery of the core is chosen, and then simulated using a standard k-eigenvalue calculation. This assembly is homogenized to generate cross sections in the group structure of the library. Subsequently, a simplified 1D geometry representing a reflector is created. It consists of a reflective boundary condition on the −x boundary, followed by one assembly width of the homogenized assembly material, a moderator region the width of the gap between the assemblies and the baffle, a baffle region, and then the remaining moderator out to the vacuum boundary condition on the +x boundary. A depiction of this geometry can be found in Figure 4. This geometry is discretized and then a k-eigenvalue problem is solved using the 1D discrete ordinates solver outlined in Section 3.3. Once this simulation is finished, the resulting scalar flux in the reflector regions is used to flux-volume average the cross sections in the reflector before performing energy condensation down to the few-group structure. These homogenized few-group cross sections, along with the few-group net currents which were tallied at the assembly-reflector interface and the vacuum boundary are used to perform a 1D nodal fixed-source calculation, from which the shape of the homogeneous flux can be obtained. This homogeneous flux, along with the heterogeneous flux from the discrete ordinates solve, are used to determine the discontinuity factor at the assembly-reflector interface using equation (56) and the general approach outlined in Section 3.6.2. The discontinuity factor on the reflector side is then normalized by the discontinuity factor on the fuel assembly side; in the full core diffusion model, the reflector discontinuity factor is then multiplied by the adjacent fuel assembly discontinuity factor, as suggested by Smith [27]. It has been observed that the homogeneous flux from the fixed source nodal calculation can be negative at the vacuum boundary, which is of course nonphysical. When this is observed, the previously computed diffusion coefficients from all groups are iteratively increased by a small fraction until the homogeneous flux is positive at the vacuum boundary. Arbitrarily changing the diffusion coefficients in this manner is licit, as the discontinuity factors ensure that the required leakage is preserved [52]. These resulting diffusion coefficients and discontinuity factors are then edited for use in the full core simulation.

3.6.4. Depletion

One of the primary uses of lattice physics codes is to perform depletion calculations so that reactor designers can predict the life time of a fuel cycle and the fuel composition at various time points. This is accomplished by performing a series of k-eigenvalue simulations, where the resulting reaction rates and user provided power normalization are used to perform time integration of the Bateman equation, predicting the isotopic composition of materials at future time points. For a given material region, the Bateman equation which models the time rate of change in isotope i is

d N i ( t ) d t = j N j ( t ) [ r 0 ν r , j i ( E ) σ j , r ( E ) ϕ ( E , t ) d E + λ j i ] N i ( t ) [ 0 σ j ( E ) ϕ ( E , t ) d E + j λ i j ] . Mathematical equation: $$ \begin{aligned}&\frac{\mathrm{d} N_i(t)}{\mathrm{d} t}\nonumber \\&= \sum _{j} N_j(t) \left[ \sum _r \int _0^\infty \nu _{r,j\rightarrow i}(E)\sigma _{j,r}(E) \phi (E,t) \mathrm{d} E + \lambda _{j\rightarrow i}\right] \nonumber \\&\quad - N_i(t) \left[ \int _0^\infty \sigma _{j}(E) \phi (E,t) \mathrm{d} E + \sum _j \lambda _{i\rightarrow j} \right]. \end{aligned} $$(64)

In this form, Ni(t) is the concentration of isotope i at time t, σi is the total cross section of isotope i, σi, r is isotope i’s cross section for reaction r, νr, i → j is the yield for reaction r on isotope i producing isotope j, λi → j is the decay constant for isotope i to decay to isotope j, and ϕ(E, t) is the scalar neutron flux. Often, this system of coupled differential equations is written as a matrix equation:

d N ( t ) d t = A ̂ ( t ) N ( t ) , Mathematical equation: $$ \begin{aligned} \frac{\mathrm{d}\boldsymbol{N}(t)}{\mathrm{d} t} = \boldsymbol{\hat{A}}(t)\boldsymbol{N}(t), \end{aligned} $$(65)

where N is a vector which contains the concentration of all isotopes in the material, and A ̂ Mathematical equation: $ \boldsymbol{\hat{A}} $ is the “depletion matrix” which represents the rate at which isotope i is transforming into isotope j. While in reality there are thousands of isotopes which might appear in a single material region of a nuclear reactor, many lattice physics codes might only track approximately 200 of these [29].

The main difficulty with performing the integration of equation (65) is that the depletion matrix is time dependent. This is due to the fact that the flux in equation (64) is time dependent, as changes to N will result in changes to ϕ(E). Many time integration schemes have been devised so as to adequately model this time dependence in the burn-up matrix [54]. In Scarabée, a predictor-corrector scheme known as LE/QI (Linear Extrapolation on the predictor and Quadratic Interpolation on the corrector) is used with a 4th order commutator free Magnus expansion integrator [54]. To initialize the depletion calculation, a single CE/LI (Constant Extrapolation predictor and Linear Interpolation corrector) time step is performed. The choice of LE/QI was primarily driven by prior observations from Isotalo et al. that other lower order depletion schemes can suffer from problems related to the power normalization not remaining constant over the depletion step [55].

In practice, the depletion matrix is quite sparse. To reduce memory requirements, a specialized data structure based on the Eigen sparse matrix has been implemented on the C++ side of Scarabée, with corresponding Python bindings. The time integration procedure requires that several matrix exponentials be computed [6, 54]. To accomplish this task, Scarabée employs the 16th order Chebyshev Rational Approximation Method (CRAM) to compute the product of a matrix exponential with a vector [56, 57]. To reduce the amount of nuclear data which needs to be stored in the nuclear data library, currently only (n, fission), (n, γ), (n, α), (n, p), (n, 2n), and (n, 3n) reactions are tracked for depletion. Any arbitrary number of isotopes could be modeled (baring memory constraints), and a user can provide an OpenMC formatted depletion chain when creating a nuclear data library [58]. When running a PWR assembly problem with depletion, each fuel pin is automatically depleted independently. If the pin was discretized into rings, each ring is treated as a separate material and depleted independently. In addition to fuel materials, the poison regions of burnable absorber rods are also depleted. No other materials in the simulation are considered to undergo transmutation or radioactive decay. To build the depletion matrix, A ̂ Mathematical equation: $ \boldsymbol{\hat{A}} $, the user must specify the known linear power rating of the entire assembly (without considering symmetry) in units of kW cm−1. Currently, Scarabée only computes the assembly power based on the average energy released per fission for the fissile isotopes. Heating due to other reactions or the effects of photon transport on the heating distribution are not currently considered.

4. Example usage and results

4.1. 1D annular pin cell

This solver is primarily used for performing independent pin cell flux spectrum calculations in the fine-group structure of the nuclear data library. As an example, a single pin-cell calculation has been performed with both Scarabée and OpenMC for the 2.4% enriched pin of the BEAVRS benchmark, with all materials at a temperature of 575 K [59]. For the Scarabée calculation, Dancoff factors were calculated with the 1D CP solver as opposed to the MOC solver, as the OpenMC calculation was also performed in annular geometry with white boundary conditions on the outer surface; additionally, only one annular ring was used per material region (i.e. the fuel pellet was not discretized into several rings) and the convergence criteria was a maximum relative difference in the flux of 10−10. The OpenMC calculation used 105 particles per batch with 2000 active generations and 100 inactive generations. Using ENDF/B-VIII.0, OpenMC estimated keff = 1.14534 ± 0.00006, while Scarabée obtained keff = 1.14547, a difference of only 13 pcm. Figure 5 presents the flux spectrum in the fuel region calculated by both OpenMC and Scarabée, along with the relative difference between the two. With the exception of just a few energy groups, the flux spectrum predicted by Scarabée is largely within 5% relative difference of the Monte Carlo results. The regions where the relative difference exceedes 5% are areas where the flux has very small values (such as in the 21 eV resonance of 238U or above 10 MeV), so the relative difference becomes a poor metric.

Thumbnail: Fig. 5. Refer to the following caption and surrounding text. Fig. 5.

Comparison of the flux spectrum from Scarabée and OpenMC for a 1D annular pin cell problem using Scarabée’s 1D annular collision probabilities solver.

4.2. Method of characteristics solver

To demonstrate the MOC solver, we have chosen to examine the C5G7 benchmark, as many models exist for various transport codes, thus facilitating comparisons [60]. In 2D, this benchmark has four 17 × 17 PWR fuel assemblies in a 1/4 mini-core arrangement, and is defined with 7 energy groups. Figure 6 provides an example of the interactive geometry plotter provided in Scarabée for visualizing MOC geometries. Users can choose wether to color by FSR, or material, and can mark boundaries and change colors if desired. This tools is very useful for verifying that a core geometry as been correctly defined. The plotter renders the image using the same geometry interface used in tracing the characteristics, so it is guaranteed to be representative of the geometry “seen” in the simulation.

Thumbnail: Fig. 6. Refer to the following caption and surrounding text. Fig. 6.

A portion of the C5G7 geometry in the graphical plotter tool for examining MOC simulation geometries.

When simulating C5G7, 64 azimuthal angles over [0, 2π] were used, along with a maximum track spacing of 0.05 cm. The Yamamoto-Tabuchi 6 point polar quadrature (3 points over [0, π/2]) was employed to form the product quadrature, which is an excellent choice for problems with isotropic scattering [61]. In addition to these basic simulation settings, CMFD was also employed to accelerate the convergence of the problem. CMFD tiles were chosen to be the same size as a pin cell (1.26 cm side length) over both the assemblies and the reflector. Only 3 energy groups were used for the CMFD, with the two fast groups, the three epithermal groups, and the two thermal groups all being condensed separately. As a point of reference, a Monte Carlo solution obtained with OpenMC resulted in an eigenvalue of keff = 1.18648 ± 0.00002 using 2 × 104 active generations (500 inactive), each with 105 particles. The Scarabée MOC solver resulted in an eigenvalue of keff = 1.18657, and only took approximately 51 seconds on a Lenovo Yoga Pro 9 16IMH9 laptop to converge to a maximum relative difference in the flux of 10−5, corresponding to 34 iterations. Without CMFD, achieving a similar level of convergence requires 897 iterations and approximately 903 seconds8. The resulting thermal flux (group 7) is provided in Figure 7. Figure 8 gives the convergence rate of the problem when CMFD is or is not used for acceleration. From this, we can see that the CMFD implementation in Scarabée is highly effective at accelerating the flux convergence. Additionally, the eigenvalues obtained with and without CMFD are exactly the same, to within floating point precision, assuming the flux was converged to near floating point differences. This indicates that the CMFD implementation is correct, and is correctly treating nuances, such as corner crossings [62].

Thumbnail: Fig. 7. Refer to the following caption and surrounding text. Fig. 7.

Thermal flux from the C5G7 benchmark predicted by Scarabée.

Thumbnail: Fig. 8. Refer to the following caption and surrounding text. Fig. 8.

Convergence of the C5G7 benchmark problem with and without CMFD to accelerate flux convergence.

Thumbnail: Fig. 9. Refer to the following caption and surrounding text. Fig. 9.

Comparison of depletion results from Scarabée with OpenMC.

Thumbnail: Fig. 10. Refer to the following caption and surrounding text. Fig. 10.

Comparison of the pin power distributions obtained by OpenMC and Scarabée for the 2D variant of the BEAVRS benchmark.

4.3. Assembly depletion calculation

As a demonstration of the lattice physics calculation capabilities of Scarabée, we have chosen to demonstrate a depletion simulation of a PWR assembly based on the initial EPR core specification [63]. The chosen assembly has a 3 w/o enrichment, and 20 Gadolinia poison pins which were 8 w/o Gadolinia, and the remaining 92 w/o was UO2 with an enrichment of 0.25 w/o. This specific assembly was chosen as the depletion of Gadolinia pins is particularly challenging, due to the very strong spatial self-shielding effects and the fast burn-up rate. It therefore serves as an excellent test and verification of the Stoker-Weiss self-shielding implementation, as well as the depletion capabilities of Scarabée. Listing 1 provides the first half of the Python script for Scarabée where the materials are defined. For the reader who is already accustomed to the OpenMC Python interface [9], this input should feel very familiar. Listing 2 contains the second portion of the Python script, where the fuel pins, guide tubes, and assembly geometry are defined. Additional parameters such as the moderator conditions, the linear power rating, and depletion time steps are also specified. While a P1 critical leakage model is used by default in Scarabée, it has been disabled in this case to facilitate comparisons with OpenMC which is not able to incorporate such a leakage model. An equivalent depletion simulation was performed using OpenMC, with the same time integration and power normalization scheme, to obtain a reference solution. The OpenMC solution used 105 particles per generation over a full assembly (as opposed to a quarter assembly in Scarabée), and 100 active generations per transport step, with an additional 10 generations to permit for source convergence. An LE/QI predictor-corrector time integration scheme was chosen, matching Scarabée’s only provided depletion method. The depletion simulation was carried out to a burn-up of 30 MW d kg−1 using five steps of 0.01 MW d kg−1, one step of 0.15 MW d kg−1, one step of 0.8 MW d kg−1, and twenty-nine steps of 1 MW d kg−1, which can be seen at the bottom of Listing 2. Power normalization was performed using only the average energy released from fission (obtained from the intermediate ACE files when the Scarabée nuclear data library is produced), and identical values were used by both codes to ensure an equivalent comparison. A linear power ratting of 42 kW cm−1 was used for the full assembly. The simplified depletion chain proposed by the CASL project was used for the simulation, albeit with a few modifications [64]. Nuclides with a half-life of less than 24 h were removed from the chain and replaced with their decay products. The two exceptions to this were 135I and 135Xe, which are kept due to the importance of 135Xe poisoning in reactor cores. Additionally, nuclides for which no evaluation exists in ENDF/B-VIII.0 were also removed and replaced with their immediate decay products; this would include 115Cd, 102Rh, 102mRh, 127Sb, and 82Br. The resulting chain contains 185 nuclides in total, and fuel which starts as enriched UO2 will evolve with 165 tracked nuclides.

Thumbnail: Listing 1. Refer to the following caption and surrounding text. Listing 1.

Portion of the Python script to define all materials used in the simulation.

Thumbnail: Listing 2. Refer to the following caption and surrounding text. Listing 2.

Portion of the Python script to define all fuel pins, the assembly, and perform the depletion simulation.

The depletion results were obtained using the ENDF/B-VIII.0 nuclear data library in a SHEM-281 group structure, and are presented in Figure 9. In Figures 9(a) and 9(b), a comparison of the keff value over the burnup of the assembly is presented. For the duration of the simulation, Scarabée is well within 200 pcm of the reference OpenMC values, and generally within 100 pcm, even up to 30 MW d kg−1. Figures 9(c) and 9(d) show the assembly averaged densities of 235U and 239Pu, respectively. For both nuclides, the relative difference with OpenMC is well within 0.5% for the duration of the simulation. Similarly, the densities of important poisons, such as 135Xe and 155Gd are provided in Figures 9(e) and 9(f). Apart from a discrepancy at the beginning of the burnup sequence, when the 135Xe density was still very low before achieving equilibrium, the relative error is well within 1%. 155Gd is the primary absorber which is consumed in the Gadolinia fuel pins, and the relative difference with the OpenMC atom density is below 2%, until the 155Gd is almost completely consumed at the time of maximum reactivity, where the relative error reaches its maximum at just shy of 8%. These results demonstrate that Scarabée is capable of achieving very accurate results for PWR assembly depletion problems, and at a far lower computational cost than using a Monte Carlo code such as OpenMC. As a point of comparison, the OpenMC depletion simulation required 6387 minutes (4 days, 10 hours, 27 minutes) to complete on a PC with an i9-13900K CPU (32 threads) and 32 GB of RAM, while the Scarabée simulation only took 30 minutes on a Lenovo Yoga Pro 9 16IMH9 laptop, both using shared memory parallelism.

Table 1.

Relative assembly powers for the 2D BEAVRS benchmark predicted by Scarabée (top), along with the relative % differences with respect to OpenMC (bottom). Differences were computed as (OpenMC – Scarabée)/OpenMC.

4.4. 2D BEAVRS benchmark

As a final example, a 2D variation of the BEAVRS PWR benchmark was modeled [59]. This simulation assumed Hot Zero Power conditions, with a simplified reflector model that only considered the baffle and moderator; the core barrel and neutron shields were neglected for the purposes of this demonstration. All assemblies were modeled with the ENDF/B-VIII.0 library in a SHEM-281 group structure and had a P1 homogeneous leakage spectrum correction. The full core nodal diffusion calculation was performed using 4 nodes per assembly (2 × 2) in a 2-group structure. Following the advice of Smith, the cross sections for the two assemblies with asymmetric burnable poison configurations were generated independently for each quadrant of those assemblies [27]; each independent quadrant therefore had unique ADFs on each side, as well as unique form factors. While Smith specifically signaled the asymmetric 15 burnable poison pin assemblies, the 6 poison pin assemblies on the core periphery, with the poisons toward the core center, should also receive this treatment. It was initially found that while this treatment yields excellent results for the assembly powers, it produces less accurate results for the reconstructed pin powers in the asymmetric assemblies. The reason for this is that if independent quarter assemblies are not used for all assemblies, then the flux reconstruction system does not have access to the most accurate CDFs for the symmetric assemblies at their mid-points along an edge. Generating “independent” quadrant data for a symmetric assembly comes at no additional computational cost (a single transport calculation on a 1/4 assembly is needed in either case), but was found to greatly improve the errors in pin powers. We have also observed that this treatment is not necessary if a core only has symmetric assembly configurations.

The reference OpenMC solution, using 106 particles with 2000 active generations and 200 inactive generations, obtained a multiplication factor of keff = 1.00476 ± 0.00001, while the Scarabée nodal diffusion solver reported keff = 1.00406, a difference of only 70 pcm. While the OpenMC results initially seemed well converged regarding uncertainty and entropy, there was still a clear asymmetry in the predicted assembly and pin powers across the full core. Therefore, for all comparisons made in this paper for both the assembly and pin powers, the OpenMC results were averaged across all eight octants to enforce symmetry and to eliminate unphysical “tilts” in the relative differences not caused by the Scarabée tool chain itself. The relative assembly powers of a single octant predicted by Scarabée are presented in Table 1, along with the relative % difference with respect to the OpenMC reference. The root mean squared difference in assembly powers was only 0.37% compared to the OpenMC reference, with a minimum error of -0.68% and a maximum error of 0.86%. The assembly with the largest relative error is the highly asymmetric 15 poison pin assembly, located at H13 in Table 1. With such irregular poison configurations, it is likely that a rehomogenization model would be needed to achieve better results [6567].

Regarding the pin power distributions, OpenMC predicted a maximum pin peaking factor of 1.545, and a minimum pin peaking factor of 0.207. Using Scarabée, the maximum pin peaking factor was 1.547, with a minimum of 0.206. Figure 10 provides a detailed comparison of the pin power distributions predicted by the two codes. There was a 0.82 % root mean squared difference between Scarabée and OpenMC, with the minimum relative difference being –3.74% and the maximum being 5.75%. As can be observed in Figure 10(b), the largest pin power errors occur at the core-reflector interface, and in the asymmetric assemblies.

5. Conclusions

Scarabée is a new deterministic neutron transport library, providing users with a variety of transport and diffusion solvers. It has tool chains to operate as a full lattice physics code with depletion capabilities, but users can also easily write their own computational schemes. It takes the form of a Python library, giving users access to the full power of the Python scripting language, as well as many other useful open source projects. While indented for use from Python, it is mostly written in C++, ensuring high performance and reasonable run times. It currently targets the traditional two-step computational scheme for LWR analysis, and therefore mostly contains 1D and 2D transport solvers, and 3D simulations (generally assumed to be at the core level) can be performed in diffusion theory. A notable difference from several other open source deterministic tool chains is that Scarabée can use a custom mutli-group nuclear data library, and perform self-shielding calculations to obtain appropriate multi-group cross sections for many different LWR problem geometries; there is no need to run a Monte Carlo simulation before hand to generate these cross sections.

Intended to be an easily accessible and usable tool for teaching nuclear engineering students, it is free and open source software, licensed under the GNU LGPLv3 license. While the very first version was released under the GNU GPLv3 [68], the authors determined that it would likely be more beneficial to the community to use the LGPL, as it would facilitate the library’s use in other open source projects that might use a permissive license. Pre-compiled Python wheels are made available on the Python Package Index, PyPI, and can easily be installed with the pip command on Windows, macOS, and Linux, making adoption in the classroom very easy. The source code for the library can be found at https://github.com/scarabee-dev/scarabee, and the documentation at https://scarabee.readthedocs.io. Many future developments are planned, such as the generation of case-matrices and reactor databases, the handling of IFBA layers on fuel pellets, as well as the creation of a full fledged “core simulator”. Long term objectives include support for other reactor types and geometries such as BWR assemblies, hexagonal VVER / fast reactor assemblies, and CANDU fuel clusters. Other developers are more than welcome to contribute to the code, as the hope is that Scarabée can become a thriving community driven project facilitating reactor physics training and education.

Funding

This research received no external funding.

Conflicts of interest

The authors have no conflicts of interest to disclose.

Data availability statement

No datasets are associated with this article.

Author contribution statement

H. Belanger: Conceptualization, Methodology, Software, Validation, Formal Analysis, Investigation, Writing – Original Draft Preparation, Writing – Review & Editing, Visualization, Supervision; P. Singh: Software, Validation, Writing – Original Draft Preparation; J. Gaiardelli: Software, Validation, Writing – Original Draft Preparation;

Acknowledgments

We would like to thank Prof. Kord Smith for his valuable advice and insightful suggestions on modeling the 2D BEAVRS benchmark, which enabled the excellent level of agreement achieved with the Monte Carlo reference calculations.

References

  1. P. Mosca, L. Bourhrara, A. Calloo, A. Gammicchia, F. Goubioud, L. Mao, F. Madiot, F. Malouch, E. Masiello, F. Moreau, S. Santandrea, D. Sciannandrone, I. Zmijarevic, E.Y. Garcia-Cervantes, G. Valocchi, J.F. Vidal, F. Damian, P. Laurent, A. Willien, A. Brighenti, L. Graziano, B. Vezzoni, APOLLO3®: Overview of the new code capabilities for reactor physics analysis, Nucl. Sci. Eng. 199, S17 (2025), https://doi.org/10.1080/00295639.2024.2334992 [Google Scholar]
  2. S. Choi, H. Lee, S.G. Hong, D. Lee, Resonance self-shielding methodology of new neutron transport code STREAM, J. Nucl. Sci. Technol. 52, 1133 (2015), https://doi.org/10.1080/00223131.2014.993738 [Google Scholar]
  3. H. Koike, K. Yamaji, K. Kirimura, D. Sato, H. Matsumoto, A. Yamamoto, Advanced resonance self-shielding method for gray resonance treatment in lattice physics code GALAXY, J. Nucl. Sci. Technol. 49, 725 (2012), https://doi.org/10.1080/00223131.2012.693885 [Google Scholar]
  4. J. Rhodes, D. Lee, K. Smith, CASMO-5 development and applications, PHYSOR-2006 (2006) [Google Scholar]
  5. G. Marleau, R. Roy, A. Hébert, DRAGON: A Collision Probability Transport Code for Cell and Supercell Calculations (École Polytechnique de Montréal, 1994) [Google Scholar]
  6. P.K. Romano, N.E. Horelik, B.R. Herman, A.G. Nelson, B. Forget, K. Smith, OpenMC: A state-of-the-art Monte Carlo code for research and development, Ann. Nucl. Energy 82, 90 (2015), https://doi.org/10.1016/j.anucene.2014.07.048 [CrossRef] [Google Scholar]
  7. W. Jakob, J. Rhinelander, D. Moldovan, pybind11 – Seamless operability between C++11 and Python (2017), https://github.com/pybind/pybind11 [Google Scholar]
  8. D. Mancusi, E. Brun, B. Dechenaux, K. Frölicher, T. Gonçalves, A. Jinaphanh, M.A. Kowalski, C. Larmier, F. Malvagi, G. Millasseau, W. Monange, O. Petit, A. Zoia, Overview of TRIPOLI-5, a Monte Carlo code for HPC, EPJ Nucl. Sci. Technol. 10, 26 (2024), https://doi.org/10.1051/epjn/2024028 [Google Scholar]
  9. P. Romano, J. Tramm, P. Shriwise, Language and design evolution of the OpenMC Monte Carlo particle transport code, EPJ Nucl. Sci. Technol. 10, 15 (2024), https://doi.org/10.1051/epjn/2024016 [Google Scholar]
  10. C.R. Harris, K.J. Millman, S.J.v.d. Walt, R. Gommers, P. Virtanen, D. Cournapeau, E. Wieser, J. Taylor, S. Berg, N.J. Smith, R. Kern, M. Picus, S. Hoyer, M.H.v. Kerkwijk, M. Brett, A. Haldane, J.F.d. Río, M. Wiebe, P. Peterson, P. Gérard-Marchant, K. Sheppard, T. Reddy, W. Weckesser, H. Abbasi, C. Gohlke, T.E. Oliphant, Array programming with NumPy, Nature 585, 357 (2020), https://doi.org/10.1038/s41586-020-2649-2 [NASA ADS] [CrossRef] [Google Scholar]
  11. xtensor, https://github.com/xtensor-stack/xtensor [Google Scholar]
  12. xtensor-python, https://github.com/xtensor-stack/xtensor-python [Google Scholar]
  13. G. Guennebaud, B. Jacob, et al., Eigen v3 (2010), http://eigen.tuxfamily.org [Google Scholar]
  14. The HDF Group, Hierarchical Data Format, version 5, https://github.com/HDFGroup/hdf5 [Google Scholar]
  15. H. Belanger, P. Sinh, J. Gaiardelli, Scarabée (2025), https://github.com/scarabee-dev/scarabee [Google Scholar]
  16. B. Fu, L.-R. Zhang, D. She, C.-L. Wei, A. Hébert, XPZLIB: An HDF5-format multi-group cross-section library, Nucl. Sci. Tech. 35, 191 (2024), https://doi.org/10.1007/s41365-024-01536-9 [Google Scholar]
  17. R. Macfarlane, D.W. Muir, R.M. Boicourt, A.C. Kahler, III, J.L. Conlin, The NJOY Nuclear Data Processing System, Version 2016 (Los Alamos National Laboratory, 2017), https://doi.org/10.2172/1338791 [Google Scholar]
  18. D. Brown, M. Chadwick, R. Capote, A. Kahler, A. Trkov, M. Herman, A. Sonzogni, Y. Danon, A. Carlson, M. Dunn, D. Smith, G. Hale, G. Arbanas, R. Arcilla, C. Bates, B. Beck, B. Becker, F. Brown, R. Casperson, J. Conlin, D. Cullen, M.-A. Descalle, R. Firestone, T. Gaines, K. Guber, A. Hawari, J. Holmes, T. Johnson, T. Kawano, B. Kiedrowski, A. Koning, S. Kopecky, L. Leal, J. Lestone, C. Lubitz, J.M. Damián, C. Mattoon, E. McCutchan, S. Mughabghab, P. Navratil, D. Neudecker, G. Nobre, G. Noguere, M. Paris, M. Pigni, A. Plompen, B. Pritychenko, V. Pronyaev, D. Roubtsov, D. Rochman, P. Romano, P. Schillebeeckx, S. Simakov, M. Sin, I. Sirakov, B. Sleaford, V. Sobes, E. Soukhovitskii, I. Stetcu, P. Talou, I. Thompson, S.v.d. Marck, L. Welser-Sherrill, D. Wiarda, M. White, J. Wormald, R. Wright, M. Zerkle, G. Žerovnik, Y. Zhu, ENDF/B-VIII.0: The 8th major release of the nuclear reaction data library with CIELO-project cross sections, new standards and thermal scattering data, Nucl. Data Sheets 148, 1 (2018), https://doi.org/10.1016/j.nds.2018.02.001 [CrossRef] [Google Scholar]
  19. W. Haeck, N. Gibson, P. Talou, ENDFtk: A robust tool for reading and writing ENDF-formatted nuclear data, Comp. Phys. Commun. 303, 109245 (2024), https://doi.org/10.1016/j.cpc.2024.109245 [Google Scholar]
  20. H. Belanger, Papillon Nuclear Data Library – A free and open-source C++/Python library for interacting with ACE files for continuous-energy neutron data, EPJ Nuclear Sci. Technol. 9, 23 (2023), https://doi.org/10.1051/epjn/2023006 [Google Scholar]
  21. K. Tada, Y. Nagaya, S. Kunieda, K. Suyama, T. Fukahori, Development and verification of a new nuclear data processing system FRENDY, J. Nucl. Sci. Technol. 54, 806 (2017), https://doi.org/10.1080/00223131.2017.1309306 [CrossRef] [Google Scholar]
  22. A. Yamamoto, K. Tada, G. Chiba, T. Endo, Multi-group neutron cross section generation capability for FRENDY nuclear data processing code, J. Nucl. Sci. Technol. 58, 1165 (2021), https://doi.org/10.1080/00223131.2021.1921631 [Google Scholar]
  23. A. Yamamoto, T. Endo, G. Chiba, K. Tada, Implementation of resonance up-scattering treatment in FRENDY nuclear data processing System, Nucl. Sci. Eng. 196, 1267 (2022), https://doi.org/10.1080/00295639.2022.2087833 [Google Scholar]
  24. A. Hébert, Applied Reactor Physics (Presses Internationales Polytechnique, 2020), https://books.google.com/books/about/Applied_Reactor_Physics.html?hl= &id=tLcszgEACAAJ [Google Scholar]
  25. R.J.J. Stamm’ler, M.J. Abbate, Methods of Steady-State Reactor Physics in Nuclear Design (Academic Press Inc., 1983) [Google Scholar]
  26. S. Choi, K. Smith, H.C. Lee, D. Lee, Impact of inflow transport approximation on light water reactor analysis, J. Comput. Phys. 299, 352 (2015), https://doi.org/10.1016/j.jcp.2015.07.005 [Google Scholar]
  27. K.S. Smith, Nodal diffusion methods and lattice physics data in LWR analyses: Understanding numerous subtle details, Prog. Nucl. Energy 101, 360 (2017), https://doi.org/10.1016/j.pnucene.2017.06.013 [CrossRef] [Google Scholar]
  28. B. Herman, Monte Carlo and thermal hydraulic coupling using low-order nonlinear diffusion acceleration, Ph.D. thesis, Massachusetts Institute of Technology, 2014, https://dspace.mit.edu/handle/1721.1/95525 [Google Scholar]
  29. D. Knott, A. Yamamoto, Lattice Physics Computations, Handbook of Nuclear Engineering (Springer, 2010) [Google Scholar]
  30. N. Gibson, Novel Resonance Self-Shielding Methods for Nuclear Reactor Analysis, Ph.D. thesis, Massachusetts Institute of Technology, 2016 [Google Scholar]
  31. Y. Xu, Z. Gao, T. Downar, The Calculation of Resonance Parameters for the DeCART MOC Code, M &C + SNA 2007 (Monterey, California, 2007) [Google Scholar]
  32. R. Sanchez, On the Intermediary Resonance method and beyond, Ann. Nucl. Energy 213, 111085 (2025), https://doi.org/10.1016/j.anucene.2024.111085 [Google Scholar]
  33. R.M. Ferrer, J.M. Hykes, Spatially dependent resonance self-shielding in CASMO5, Nucl. Sci. Eng. 197, 333 (2023), https://doi.org/10.1080/00295639.2022.2053491 [Google Scholar]
  34. N. Sugimura, A. Yamamoto, Evaluation of Dancoff factors in complicated geometry using the method of characteristics, J. Nucl. Sci. Technol. 43, 1182 (2006), https://doi.org/10.1080/18811248.2006.9711210 [Google Scholar]
  35. C. Stoker, Z. Weiss, Spatially dependent resonance cross sections in a fuel rod, Ann. Nucl. Energy 23, 765 (1996), https://doi.org/10.1016/0306-4549(95)00074-7 [Google Scholar]
  36. E.E. Lewis, W.F. Miller, Computational Method of Neutron Transport (John Wiley & Sons, 1984) [Google Scholar]
  37. S. Machach, Étude des techniques d’équivalence nodale appliquées aux modèles de réflecteurs dans les réacteurs à eau pressurisée, Master’s thesis, Polytechnique Montréal, 2022 [Google Scholar]
  38. S. Machach, A. Hébert, A. Dall’Osso, Improvements to the Baff-Refl equivalence technique applied to reflector models in PWRs, Nucl. Sci. Eng. 199, S1 (2025), https://doi.org/10.1080/00295639.2024.2328451 [Google Scholar]
  39. G. Gunow, B. Forget, K. Smith, Stabilization of multi-group neutron transport with transport-corrected cross-sections, Ann. Nucl. Energy 126, 211 (2019), https://doi.org/10.1016/j.anucene.2018.10.036 [Google Scholar]
  40. W. Boyd, S. Shaner, L. Li, B. Forget, K. Smith, The OpenMOC method of characteristics neutral particle transport code, Ann. Nucl. Energy 68, 43 (2014), https://doi.org/10.1016/j.anucene.2013.12.012 [Google Scholar]
  41. F. Zhou, Y. Yang, X. Wu, P. Fang, Q. Liang, H. Lai, Y. Guo, Y. Zhu, L. Yang, Research on spherical harmonics method based on the MOC neutron transport code OpenMOC, Ann. Nucl. Energy 208, 110759 (2024), https://doi.org/10.1016/j.anucene.2024.110759 [Google Scholar]
  42. K.S. Smith, J.D. Rhodes, Full-core, 2-D, LWR Core Calculations with CASMO-4E, PHYSOR 2002, Seoul, Korea (2002) [Google Scholar]
  43. L. Li, A Low Order Acceleration Scheme for Solving the Neutron Transport Equation Lulu Li, Master’s thesis, Massachusetts Institute of Technology, 2013 [Google Scholar]
  44. E.W. Larsen, Infinite-medium solutions of the transport equation, SN discretization schemes, and the diffusion approximation, Transport Theor. Stat. Phys. 32, 623 (2003) [Google Scholar]
  45. A. Zhu, M. Jarrett, Y. Xu, B. Kochunas, E. Larsen, T. Downar, An optimally diffusive Coarse Mesh Finite Difference method to accelerate neutron transport calculations, Ann. Nucl. Energy 95, 116 (2016) [Google Scholar]
  46. R. Sanchez, G. Dante, I. Zmijarevic, Diffusion piecewise homogenization via flux discontinuity ratios, Nucl. Eng. Technol. 45, 707 (2013), https://doi.org/10.5516/net.02.2013.518 [Google Scholar]
  47. R. Lawrence, Progress in nodal methods for the solution of the neutron diffusion and transport equations, Prog. Nucl. Energy 17, 271 (1986), https://doi.org/10.1016/0149-1970(86)90034-x [Google Scholar]
  48. M.L. Zerkle, Development of a Polynomial Nodal Method with Flux and Current Discontinuity Factors, Ph.D. thesis, Massachusetts Institute of Technology, 1992 [Google Scholar]
  49. K. Koebke, L. Hetzelt, On the reconstruction of local homogeneous neutron flux and current distributions of light water reactors from nodal schemes, Nucl. Sci. Eng. 91, 123 (1985), https://doi.org/10.13182/nse85-a27435 [Google Scholar]
  50. K.R. Rempe, K.S. Smith, A.F. Henry, SIMULATE-3 pin power reconstruction: Methodology and benchmarking, Nucl. Sci. Eng. 103, 334 (1989), https://doi.org/10.13182/nse89-a23686 [Google Scholar]
  51. P.M. Bokov, D. Botes, R.H. Prinsloo, D.I. Tomašević, A multigroup homogeneous flux reconstruction method based on the ANOVA-HDMR decomposition, Nucl. Sci. Eng. 197, 308 (2023), https://doi.org/10.1080/00295639.2022.2108654 [Google Scholar]
  52. K. Smith, Assembly homogenization techniques for light water reactor analysis, Prog. Nucl. Energy 17, 303 (1986), https://doi.org/10.1016/0149-1970(86)90035-1 [Google Scholar]
  53. L. Liponi, Calculation and Verification of Assembly Discontinuity Factors for the Dragon/Parcs Code Sequence, Master’s thesis, École Polytechnique de Montréal, 2017 [Google Scholar]
  54. C. Josey, Development and Analysis of High Order Neutron Transport–Depletion Coupling Algorithms, Ph.D. thesis, Massachusetts Institute of Technology, 2017 [Google Scholar]
  55. A. Isotalo, G. Davidson, T. Pandya, W. Wieselquist, S. Johnson, Flux renormalization in constant power burnup calculations, Ann. Nucl. Energy 96, 148 (2016), https://doi.org/10.1016/j.anucene.2016.05.031 [Google Scholar]
  56. M. Pusa, Rational approximations to the matrix exponential in burnup calculations, Nucl. Sci. Eng. 169, 155 (2011), https://doi.org/10.13182/nse10-81 [Google Scholar]
  57. P. Maria, Higher-order chebyshev rational approximation method and application to burnup equations, Nucl. Sci. Eng. 182, 297 (2016), https://doi.org/10.13182/nse15-26 [CrossRef] [Google Scholar]
  58. P.K. Romano, C.J. Josey, A.E. Johnson, J. Liang, Depletion capabilities in the OpenMC Monte Carlo particle transport code, Ann. Nucl. Energy 152, 107989 (2021), https://doi.org/10.1016/j.anucene.2020.107989 [CrossRef] [Google Scholar]
  59. N. Horelik, B. Herman, M. Ellis, S. Kumar, J. Liang, B. Forget, K. Smith, Benchmark for Evaluation And Validation of Reactor Simulations (Massachusetts Institute of Technology, 2020) [Google Scholar]
  60. E.E. Lewis, M.A. Smith, N. Tsoulfanidis, G. Palmiotti, T.A. Taiwo, R.N. Blomquist, Benchmark specification for Deterministic 2-D/3-D MOX fuel assembly transport calculations without spatial homogenisation (C5G7 MOX), NEA/NSC (2001) [Google Scholar]
  61. A. Yamamoto, M. Tabuchi, N. Sugimura, T. Ushio, M. Mori, Derivation of optimum polar angle quadrature set for the method of characteristics based on approximation error for the Bickley function, J. Nucl. Sci. Technol. 44, 129 (2007), https://doi.org/10.1080/18811248.2007.9711266 [Google Scholar]
  62. A. Yamamoto, T. Endo, Treatment of corner crossing ray-traces in CMFD acceleration of MOC, J. Nucl. Sci. Technol. 63, 120 (2025), https://doi.org/10.1080/00223131.2025.2490832 [Google Scholar]
  63. G. Sengler, F. Forêt, G. Schlosser, R. Lisdat, S. Stelletta, EPR core design, Nucl. Eng. Des. 187, 79 (1999), https://doi.org/10.1016/s0029-5493(98)00259-3 [CrossRef] [Google Scholar]
  64. K.S. Kim, Specification for the VERA Depletion Benchmark Suite, ORNL/TM–2016/53 (Oak Ridge National Laboratory, 2016) [Google Scholar]
  65. K. Smith, Practical and efficient iterative method for LWR fuel assembly homogenization, Trans. Am. Nucl. Soc. 71, 238 (1994) [Google Scholar]
  66. T. Bahadir, S.-Ö. Lindahl, S. P. Palmtag, SIMULATE-4 Multigroup Nodal Code with Microscopic Depletion Model, M &C 2005 (Avignon, France, 2005) [Google Scholar]
  67. A. Dall’Osso, Assembly rehomogenization methods for reactor analysis, J. Nucl. Eng. 6, 14 (2025), https://doi.org/10.3390/jne6020014 [Google Scholar]
  68. H. Belanger, P. Singh, Scarabée: A Free and Open-Source Lattice Physics Code, M &C 2025, Denver, Colorado (2025) [Google Scholar]

1

DRAGON is an exception to this, being free and open-source.

2

Here, the word “group” refers to the HDF5 concept of a group, which can be thought of as a “folder” within the binary HDF5 file. It is not referring to the energy group when used in this section.

3

The in/out notation of course depends on the value of μn. If μn >  0 then “in” refers to the negative boundary of region i, but if μn <  0 “in” refers to the positive boundary.

4

The Cartesian mesh used for CMFD should be conformal with the FSR mesh used by the MOC solver.

5

The current at the reflective boundary of the MOC problem will asymptotically converge to JG, S = 0, but directly using the known asymptotic value improves convergence.

6

Here, heterogeneous simply means the individual pin cell components such as the fuel, cladding, and moderator are all explicitly modeled, with their own flux spectra.

7

It should be noted that in Machach’s master thesis [37] and subsequent publication [38], the two equations for the net current on either end of the cell (Eqs. (59) and (60) in this work) are missing a factor of 3 in front of the ax, 2 terms. This can be confirmed by examining the forms provided by Lawrence [47].

8

It should be noted that the Lenovo Yoga Pro 9 16IMH9 has 22 threads, but the MOC solver in Scarabée is parallelized over energy groups, so was therefore only able to use 7 threads solving this problem.

Cite this article as: Hunter Belanger, Parth Singh, Jay Gaiardelli. Scarabée: A Free and Open-Source Lattice Physics Code, EPJ Nuclear Sci. Technol. 12, 14 (2026). https://doi.org/10.1051/epjn/2026006

All Tables

Table 1.

Relative assembly powers for the 2D BEAVRS benchmark predicted by Scarabée (top), along with the relative % differences with respect to OpenMC (bottom). Differences were computed as (OpenMC – Scarabée)/OpenMC.

All Figures

Thumbnail: Fig. 1. Refer to the following caption and surrounding text. Fig. 1.

Depiction of how Pybind11 is used to interface low-level C++ classes in Scarabée with the higher level features written in Python.

In the text
Thumbnail: Fig. 2. Refer to the following caption and surrounding text. Fig. 2.

Depiction of the HDF5 file structure for the microscopic nuclear data used by Scarabée.

In the text
Thumbnail: Fig. 3. Refer to the following caption and surrounding text. Fig. 3.

Depiction of how the optical depths, τi, j ±(y), are computed as a function of y in the 1D annular collision probabilities solver.

In the text
Thumbnail: Fig. 4. Refer to the following caption and surrounding text. Fig. 4.

Diagram of the simplified 1D reflector model used to generate few-group diffusion cross sections and discontinuity factors for reflector nodes. This scheme is inspired by the Baff-Ref method [37, 38].

In the text
Thumbnail: Fig. 5. Refer to the following caption and surrounding text. Fig. 5.

Comparison of the flux spectrum from Scarabée and OpenMC for a 1D annular pin cell problem using Scarabée’s 1D annular collision probabilities solver.

In the text
Thumbnail: Fig. 6. Refer to the following caption and surrounding text. Fig. 6.

A portion of the C5G7 geometry in the graphical plotter tool for examining MOC simulation geometries.

In the text
Thumbnail: Fig. 7. Refer to the following caption and surrounding text. Fig. 7.

Thermal flux from the C5G7 benchmark predicted by Scarabée.

In the text
Thumbnail: Fig. 8. Refer to the following caption and surrounding text. Fig. 8.

Convergence of the C5G7 benchmark problem with and without CMFD to accelerate flux convergence.

In the text
Thumbnail: Fig. 9. Refer to the following caption and surrounding text. Fig. 9.

Comparison of depletion results from Scarabée with OpenMC.

In the text
Thumbnail: Fig. 10. Refer to the following caption and surrounding text. Fig. 10.

Comparison of the pin power distributions obtained by OpenMC and Scarabée for the 2D variant of the BEAVRS benchmark.

In the text
Thumbnail: Listing 1. Refer to the following caption and surrounding text. Listing 1.

Portion of the Python script to define all materials used in the simulation.

In the text
Thumbnail: Listing 2. Refer to the following caption and surrounding text. Listing 2.

Portion of the Python script to define all fuel pins, the assembly, and perform the depletion simulation.

In the text

Current usage metrics show cumulative count of Article Views (full-text article views including HTML views, PDF and ePub downloads, according to the available data) and Abstracts Views on Vision4Press platform.

Data correspond to usage on the plateform after 2015. The current usage metrics is available 48-96 hours after online publication and is updated daily on week days.

Initial download of the metrics may take a while.