Downscattering

The fusion property of only-downscattering can be exploited to yield a more efficient solver. The only operator coupling different energy groups is the scattering operator.

Defining the group-to-group scattering operator and the group gather scatter operator as

\[\begin{split}&\mathbf{S}_{g\tilde{g}}[a_{\ell e \dots} ] &&= \sigma^s_{\ell g \tilde{g} e} a_{\ell e \dots} \\ &\mathbf{S}_{g}[a_{\tilde{g} \ell e \dots }] &&= \sum_{\tilde{g}}\mathbf{S}_{g\tilde{g}}[a_{\tilde{g} \ell e \dots}]\end{split}\]

Then, the total system can also be written in a group matrix form:

\[\begin{split}\begin{bmatrix} \mathbf{I} - \mathbf{M}\mathbf{T}_1^{-1}\mathbf{H}\mathbf{D}\mathbf{S}_{11} & -\mathbf{M}\mathbf{T}_1^{-1}\mathbf{H}\mathbf{D}\mathbf{S}_{12}& \cdots & -\mathbf{M}\mathbf{T}_1^{-1}\mathbf{H}\mathbf{D}\mathbf{S}_{1G} \\ -\mathbf{M}\mathbf{T}_2^{-1}\mathbf{H}\mathbf{D}\mathbf{S}_{21}& \mathbf{I} - \mathbf{M}\mathbf{T}_2^{-1}\mathbf{H}\mathbf{D}\mathbf{S}_{22} & \cdots & -\mathbf{M}\mathbf{T}_2^{-1}\mathbf{H}\mathbf{D}\mathbf{S}_{2G} \\ \vdots & \vdots & \ddots & \vdots \\ -\mathbf{M}\mathbf{T}_G^{-1}\mathbf{H}\mathbf{D}\mathbf{S}_{G1} & -\mathbf{M}\mathbf{T}_G^{-1}\mathbf{H}\mathbf{D}\mathbf{S}_{G2} & \cdots & \mathbf{I} - \mathbf{M}\mathbf{T}_G^{-1}\mathbf{H}\mathbf{D}\mathbf{S}_{GG} \end{bmatrix} \begin{bmatrix} \phi_{1\ell ei} \\ \phi_{2\ell ei} \\ \vdots \\ \phi_{G \ell ei} \end{bmatrix} = \begin{bmatrix} \mathbf{M}\mathbf{T}_1^{-1}\mathbf{H}[q_{1kei}] \\ \mathbf{M}\mathbf{T}_2^{-1}\mathbf{H}[q_{2kei}] \\ \vdots \\ \mathbf{M}\mathbf{T}_G^{-1}\mathbf{H}[q_{Gkei}] \end{bmatrix}\end{split}\]

If there’s no upscattering, this matrix is lower triangular, which can be solved by forward substitution.

Downscattering algorithm

Initialize:

\(\phi_{g\ell ei} \gets 0\)

For \(g = 1, \dots, G\)

Compute group right-hand side:

\(b_{\ell ei} = \mathbf{M}\mathbf{T}_g^{-1}\mathbf{H} \left[ \mathbf{D}\mathbf{S}_g[\phi_{\tilde{g}\ell ei}] + [q_{gkei}] \right]\)

Iteratively solve:

\(( \mathbf{I} - \mathbf{M}\mathbf{T}_g^{-1}\mathbf{H}\mathbf{D}\mathbf{S}_{gg} )[x_{\ell ei}] = b_{\ell ei}\)

Update:

\(\phi_{g\ell ei} \gets x_{\ell ei}\)

Also for the adjoint solve we should be able to exploit the same property. Let us transpose the entire system, noting that

\[\mathbf{S}^T_{g\tilde{g}} = \mathbf{S}_{g\tilde{g}}\]

since it just acts as elementwise multiplication for fixed \(g,\tilde{g}\). Transposing the block matrix yields the system of a given right-hand-side \(b^\dagger_{glei}\)

\[\begin{split}\begin{bmatrix} \mathbf{I} - \mathbf{S}_{11}\mathbf{D}^T\mathbf{H}\mathbf{T}_1^{-T}\mathbf{M}^T & -\mathbf{S}_{21}\mathbf{D}^T\mathbf{H}\mathbf{T}_2^{-T}\mathbf{M}^T & \cdots & -\mathbf{S}_{G1}\mathbf{D}^T\mathbf{H}\mathbf{T}_G^{-T}\mathbf{M}^T \\ -\mathbf{S}_{12}\mathbf{D}^T\mathbf{H}\mathbf{T}_1^{-T}\mathbf{M}^T & \mathbf{I} - \mathbf{S}_{22}\mathbf{D}^T\mathbf{H}\mathbf{T}_2^{-T}\mathbf{M}^T & \cdots & -\mathbf{S}_{G2}\mathbf{D}^T\mathbf{H}\mathbf{T}_G^{-T}\mathbf{M}^T \\ \vdots & \vdots & \ddots & \vdots \\ -\mathbf{S}_{1G}\mathbf{D}^T\mathbf{H}\mathbf{T}_1^{-T}\mathbf{M}^T & -\mathbf{S}_{2G}\mathbf{D}^T\mathbf{H}\mathbf{T}_2^{-T}\mathbf{M}^T & \cdots & \mathbf{I} - \mathbf{S}_{GG}\mathbf{D}^T\mathbf{H}\mathbf{T}_G^{-T}\mathbf{M}^T \end{bmatrix} \begin{bmatrix} \phi^\dagger_{1\ell ei} \\ \phi^\dagger_{2\ell ei} \\ \vdots \\ \phi^\dagger_{G \ell ei} \end{bmatrix} = \begin{bmatrix} b^\dagger_{1\ell ei} \\ b^\dagger_{2\ell ei} \\ \vdots \\ b^\dagger_{G \ell ei} \end{bmatrix}\end{split}\]

which is upper triangular if all \(\mathbf{S}_{g\tilde{g}}\) are zero for \(g < \tilde{g}\). This can be solved by backward substitution. One thing to note is that for a single row, all transport operators for all groups are present and we cannot solve it with just one sweep. Instead, we can define the transpose gathering operator:

\[\mathbf{S}^T_{g}[a_{\tilde{g}\ell e \dots }] = \sum_{\tilde{g}}\mathbf{S}_{\tilde{g} g}[a_{\tilde{g}\ell e \dots}]\]

and the transposed downscatter system can be solved group-by-group using an intermediate quantity \(\zeta\), as shown below.

Transposed Downscatter solution

Initialize:

\(\phi^\dagger_{g\ell ei} \gets 0\)

Set intermediate:

\(\zeta_{g\ell ei} \gets 0\)

For \(g = G, \dots, 1\)

Compute group right-hand side:

\(b_{\ell ei} = \mathbf{S}_g^T[\zeta_{\tilde{g}\ell ei}] + b^\dagger_{g\ell ei}\)

Iteratively solve:

\(( \mathbf{I} - \mathbf{S}_{gg} \mathbf{D}^T \mathbf{H} \mathbf{T}_g^{-T} \mathbf{M}^T )[x_{\ell ei}] = b_{\ell ei}\)

Update:

\(\phi^\dagger_{g\ell ei} \gets x_{\ell ei}\)

Update intermediate:

\(\zeta_{g\ell ei} \gets \mathbf{D}^T \mathbf{H} \mathbf{T}_g^{-T} \mathbf{M}^T [x_{\ell ei}]\)