10. Physics Coupling
10.1. Loose Coupling
ARMI supports loose and tight coupling. Loose coupling is interpreted as one-way coupling between physics for a single time node. For example, a power distribution in cycle 0 node 0 is used to calculate a temperature distribution in cycle 0 node 0. This temperature is then used in cycle 0 node 1 to compute new cross sections and a new power distribution. This process repeats itself for the lifetime of the simulation.
Loose coupling is enabled by default in ARMI simulations.
10.2. Tight Coupling
Tight coupling is interpreted as two-way communication between physics within a given time node. Revisiting our previous example, enabling tight coupling results in the temperature distribution being used to generate updated cross sections (new temperatures induce changes such as Doppler broadening feedback) and ultimately an updated power distribution. This process is repeated iteratively until a numerical convergence criteria is met.
The following settings are involved with enabling tight coupling in ARMI:
tightCoupling
: WhenTrue
, tight coupling is enabled.tightCouplingSettings
: Used to specify which parameters and convergence criteria will be used to measure the convergence of a given interface.
tightCoupling: true
tightCouplingSettings:
globalFlux:
parameter: power
convergence: 1.0e-4
thermalHydraulics:
parameter: THaverageCladTemperature
convergence: 1.0e-2
The tightCouplingSettings
settings interact with the interfaces available in ARMI (or an ARMI app). The interface headers (i.e., “globalFlux” and “thermalHydraulics”) must match the value prescribed for Interface.function
. The option, parameter
, can be a registered parameter. The convergence
option is expected to be any float value. In the current implementation, different interfaces may have different developer intended restrictions. For example, the global flux interface currently only allows the eigenvalue (i.e. \(k_{\text{eff}}\)) or block-wise power to be valid parameter
values.
Warning
The inherent limitations of the above interface-based tight coupling settings have been documented and a new and improved user-interface is currently being developed.
In the global flux interface, the following norms are used to compute the convergence of \(k_{\text{eff}}\) and block-wise power.
10.2.1. Eigenvalue
The convergence of the eigenvalue is measured through an L2-norm.
10.2.2. Block-wise Power
The block-wise power can be used as a convergence mechanism to avoid the integral effects of \(k_{\text{eff}}\) (i.e., over and under predictions cancelling each other out) and in turn, can have a different convergence rate. To measure the convergence of the power distribution with the prescribed tolerances (e.g., 1e-4), the power is scaled in the following manner (otherwise the calculation struggles to converge).
For an assembly, \(a\), we compute the total power of the assembly,
where \(i\) is the \(i^{\text{th}}\) assembly and \(j\) is the \(j^{\text{th}}\) block within assembly, \(i\). With the assembly power, we scale the block power and obtain an array of scaled block powers for a given assembly, \(\mathbf{b}_{i}\),
We can now calculate a convergence parameter for each assembly,
These assembly-wise convergence parameters are then stored in an array of convergence values,
The total convergence of the power distribution is finally measured through the infinity norm (i.e, the max) of \(\xi\),
10.2.3. The Global Flux Interface
The Global Flux Interface
class will attempt to set its own TightCoupler
based on keff
. To see the specifics, see:
_setTightCouplingDefaults
.
If you want to change the tight coupling performance of the GlobalFluxInterface
, it would be
easiest to just sublass the interface and over-write the _setTightCouplingDefaults method.