|
MatlabTransportPack
|
Livolant acceleration for inner iterations. More...


Public Member Functions | |
| function | Livolant () |
| Class constructor. | |
| function | setup (in obj, in) |
| Setup the solver. | |
| function | solve (in obj, in g) |
| Solve the within-group problem. | |
| function | reset_convergence (in this, in max_iters, in tolerance) |
| Solve the within-group problem. | |
| function | display_me (in this) |
Protected Member Functions | |
| function | setup_base (in this, in) |
| Setup the base solver. | |
| function | initialize_scatter (in this) |
| Prebuild scattering matrix for each cell. | |
| function | build_scatter_source (in this, in g, in phi) |
| Build the within-group scattering source. | |
| function | build_all_scatter_source (in this, in g, in phi) |
| Build all the scattering sources. | |
| function | build_fixed_source (in this, in g) |
| Build source for this group excluding within-group scatter. | |
| function | build_external_source (in this, in g) |
| function | check_convergence (in this, in iteration, in flux_error) |
| function | print_iteration (in this, in it, in e0, in e1, in e2) |
Protected Attributes | |
| Property | d_input |
| User input. | |
| Property | d_state |
| State vectors. | |
| Property | d_boundary |
| Boundary fluxes. | |
| Property | d_mesh |
| Problem mesh (either Cartesian mesh or MOC tracking) | |
| Property | d_mat |
| Materials definitions. | |
| Property | d_quadrature |
| Angular mesh. | |
| Property | d_equation |
| Spatial discretization. | |
| Property | d_sweeper |
| Sweeper over the space-angle domain. | |
| Property | d_external_source |
| User-defined external source. | |
| Property | d_fission_source |
| Fission source, if used. | |
| Property | d_fixed_source |
| Any source that remains "fixed" within the group solve. | |
| Property | d_scatter_source |
| The within group scattering source. | |
| Property | d_sigma_s |
| Scattering cross-section vector for faster source computation. | |
| Property | d_max_iters |
| Property | d_tolerance |
| Property | d_g |
| Property | d_M |
| Moments to discrete operator. | |
Private Member Functions | |
| function | accelerated_iterations (in obj, in g, in mu) |
| Perform a few source iterations. | |
| function | source_iterations (in obj, in g) |
| Perform a few source iterations. | |
| function | shuffle_index (in obj) |
| Shuffle indices so that storage is reused. | |
| function | relaxation_factor (in obj, in e0, in e1) |
| Compute the relaxation factor from two residual vectors. | |
Private Attributes | |
| Property | d_phi |
| A three column vector of current, last, and penultimate fluxes. | |
| Property | d_2 |
| Column index of current flux. | |
| Property | d_1 |
| Column index of last flux. | |
| Property | d_0 |
| Column index of penultimate flux. | |
| Property | d_free_iters |
| Number of free iterations. | |
| Property | d_accel_iters |
| Number of acceleration iteration. | |
Livolant acceleration for inner iterations.
Source iteration for a one-group transport equation is defined by the sequence
Simplifying notation, we have
Livolant acceleration solves this via relaxation, or
where
is a relaxation parameter and
is the residual, defined as the difference between successive flux estimates.
Here,
is dynamically updated to minimize the residual. In other words, we choose
to minimize
Doing so in a least-squares sense (i.e. via the
norm) yields
The implementation is sketched as follows (which follows Hebert). Suppose we have three sequential flux estimates from regular source iterations,
and
Using these, we define the first two residuals as
and
The accelerated estimate is
We need three new successive estimates to reestimate
. These are
and
Notice that the first two estimates require nothing new. Only the last iterate requires further application of the operators.
Hebert suggests doing three source (or "free") iterations, followed by three accelerated iterations for the sake of stability. What this means is that three source iterations are performed, resulting in an updated
at a cost of three sweeps. Then, the sequence of
's is performed three times, with each sequence resulting in a new
at a cost of a single sweep. Hence, the Livolant iteration costs little more than source iteration in computational expense and an extra flux-sized vector or two in storage depending on implementation.
The iteration limits are defaulted (to three each), but the user can change these. However, doing so may yield poor stability. In particular, negative values for
are problematic (and if found to be negative, the accelerated iterations are simply skipped with a warning.
Input parameters specific to Livolant:
For other relevant parameters, see InnerIteration.
Reference: Hebert, A. Applied Reactor Physics. See pp. 147-148 and 345-347.
| function Livolant | ( | ) |
Class constructor.
| function accelerated_iterations | ( | in | obj, |
| in | g, | ||
| in | mu | ||
| ) | [private] |
Perform a few source iterations.
| g | Current group. |
| mu | Current value of relaxation parameter. |
| function build_all_scatter_source | ( | in | this, |
| in | g, | ||
| in | phi | ||
| ) | [protected, inherited] |
Build all the scattering sources.
| g | Group for this problem. (I.e. row in MG). |
| phi | Current MG flux. |
| function build_external_source | ( | in | this, |
| in | g | ||
| ) | [protected, inherited] |
| function build_fixed_source | ( | in | this, |
| in | g | ||
| ) | [protected, inherited] |
Build source for this group excluding within-group scatter.
| g | Group for this problem. |
| function build_scatter_source | ( | in | this, |
| in | g, | ||
| in | phi | ||
| ) | [protected, inherited] |
Build the within-group scattering source.
| g | Group for this problem. |
| phi | Current group flux. |
| function check_convergence | ( | in | this, |
| in | iteration, | ||
| in | flux_error | ||
| ) | [protected, inherited] |
| function display_me | ( | in | this | ) | [inherited] |
| function initialize_scatter | ( | in | this | ) | [protected, inherited] |
Prebuild scattering matrix for each cell.
While not the most *memory* efficient, this saves *time* by eliminate lots of loops.
| function print_iteration | ( | in | this, |
| in | it, | ||
| in | e0, | ||
| in | e1, | ||
| in | e2 | ||
| ) | [protected, inherited] |
| function relaxation_factor | ( | in | obj, |
| in | e0, | ||
| in | e1 | ||
| ) | [private] |
Compute the relaxation factor from two residual vectors.
| e0 | Previous residual. |
| e1 | Current residual. |
. | function reset_convergence | ( | in | this, |
| in | max_iters, | ||
| in | tolerance | ||
| ) | [inherited] |
Solve the within-group problem.
| g | Group of the problem to be solved. |
| max_iters | Maximum number of iterations. |
| tolerance | Maximum point-wise error in flux |
| function setup | ( | in | obj, |
| in | |||
| ) |
| function setup_base | ( | in | this, |
| in | |||
| ) | [protected, inherited] |
Setup the base solver.
By keeping everything out of the constructor, we can avoid having to copy the signature for all derived classes, both in their definitions and whereever thisects are instantiated. However, derived classes have other setup issues that need to be done, and so this serves as a general setup function that must be called before other setup stuff.
| function shuffle_index | ( | in | obj | ) | [private] |
Shuffle indices so that storage is reused.
This is performed before and iteration so that the "2" flux can be written into.
| function solve | ( | in | obj, |
| in | g | ||
| ) |
Solve the within-group problem.
| g | Group of the problem to be solved. |
| function source_iterations | ( | in | obj, |
| in | g | ||
| ) | [private] |
Perform a few source iterations.
| g | Current group. |
Property d_0 [private] |
Column index of penultimate flux.
Property d_1 [private] |
Column index of last flux.
Property d_2 [private] |
Column index of current flux.
Property d_accel_iters [private] |
Number of acceleration iteration.
Property d_boundary [protected, inherited] |
Boundary fluxes.
Property d_equation [protected, inherited] |
Spatial discretization.
Property d_external_source [protected, inherited] |
User-defined external source.
Property d_fission_source [protected, inherited] |
Fission source, if used.
Property d_fixed_source [protected, inherited] |
Any source that remains "fixed" within the group solve.
Property d_free_iters [private] |
Number of free iterations.
Property d_g [protected, inherited] |
Property d_input [protected, inherited] |
User input.
Property d_M [protected, inherited] |
Moments to discrete operator.
Property d_max_iters [protected, inherited] |
Property d_mesh [protected, inherited] |
Problem mesh (either Cartesian mesh or MOC tracking)
Property d_phi [private] |
A three column vector of current, last, and penultimate fluxes.
Property d_quadrature [protected, inherited] |
Angular mesh.
Property d_scatter_source [protected, inherited] |
The within group scattering source.
Property d_sigma_s [protected, inherited] |
Scattering cross-section vector for faster source computation.
Property d_sweeper [protected, inherited] |
Sweeper over the space-angle domain.
Property d_tolerance [protected, inherited] |
1.7.3