Communication¶
When two blocks of different levels connect, a proper communication strategy must be developed. In the adopted formulation, we performed the communication such that it assures that the macroscopics (\(\rho, u_{\alpha}, \sigma_{\alpha\beta}\)) are continuous throughout the simulation domain. The coupling between fine and coarse grid is illustrated below:
What crosses the interface
Only the macroscopics \(\rho\), \(u_{\alpha}\) and the shear stress \(\sigma_{\alpha\beta}\) are exchanged at an interface, not the populations directly. Each side reconstructs its own populations from these matched macroscopics. This keeps the transfer compact and lets the level-dependent rescaling act on the stress, where it belongs.
The top nodes of the fine blocks do not coincide with the coarse level (only when the fine level ends). So to facilitate interpolation, this node is not used in the communication, serving as a ghost node, only to keep the recursiveness of the refinement.
Note
Why the top fine node is a ghost
To avoid invalid macroscopics on a node with no coarse counterpart, the ghost node simply copies the values of the neighbour node that does coincide with the coarse level. It carries no independent solution and exists only to preserve the recursiveness of the refinement.
The communication of the coupling scheme is shown below:
Straight¶
The coarse-to-fine transference of information occurs in the blue nodes, whilst the fine-to-coarse in the orange. For concave and convex nodes, the communication is as follows:
The ghost nodes of the fine level do not participate in the communication.
Top domain refinement¶
One consequence of the ghost node in the fine block is an edge case for boundary conditions on top of the domain.
Example of two levels refinement on top of the domain.¶
When refining one or more levels in the top, the top nodes of a level do not coincide with the top one of the coarse level. So if a boundary condition is applied in the top node of the coarse level, in the fine level it must be applied in the same position.
Fine to Coarse overlap¶
From the communication images, there is an offset between the coarse to fine (C2F) and fine to coarse (F2C) communication borders. These are the F2C overlap nodes, and are measured using the coarse level node distance as reference.
For simulations of great turbulence, increasing this overlap from 1 to 2 or 3 gives the simulation more stability, as stated by Lagrava et al.[1]. In the macroscopics field it’s possible to see a smoother transition between levels and the decrease of checkerboard phenomena (especially in pressure).
Example of F2C overlap equals to 2. Blue is C2F and yellow is F2C.¶
Macroscopics reconstruction¶
The populations of the fine grid for the nodes that coincide with the blue coarse nodes are initially unknown, and are reconstructed from the macroscopic values of the coarse grid in each time step of the fine grid simulation. For the fine nodes that are between the blue nodes not coinciding with the coarse grid, the macroscopic values of the fine grid are estimated through interpolation of the coarse grid macroscopics (\(\rho, u_{\alpha}, \sigma_{\alpha\beta}\)). The adopted scheme can be found in Lagrava et al.[1]. Using these values, the populations are reconstructed. The fine grid solution must update the coarse grid boundary. Through the overlapping of grids, the macroscopics at orange coarse grid nodes are updated using the values from fine grid simulation.
Node alignment at a 2:1 interface. Fine nodes that coincide with coarse nodes have their populations reconstructed from the coarse-side macroscopics; the non-coincident fine nodes are filled by spatial interpolation.¶
Why C2F and F2C are treated differently
The two directions are not symmetric. Coarse-to-fine creates information the fine grid does not have: it must fill fine nodes that lie between coarse nodes in space and at the intermediate time level. This is why C2F uses cubic spatial interpolation (four-point in the bulk, three-point near a block border) plus three-point Lagrange interpolation in time. Fine-to-coarse goes the other way and only needs to coarsen data the fine grid already resolves, so it is a direct average of the fine macroscopics onto the coincident coarse node. Interpolating, rather than averaging, is reserved for the direction that genuinely lacks the data.
The estimative of the macroscopics between coarse grid nodes uses a cubic four-point interpolation performed on the coarse-to-fine grid interface plane through the following expression:
where \(g(x)\) is the macroscopic considered. An illustration is presented below:
For a node that’s located near the fine grid-block border a cubic three-point interpolation is adopted with the following equation:
A temporal interpolation of the populations at the boundaries is also performed since time-scale of fine grid is also different from coarse. We adopt a three-point Lagrangian scheme for that matter:
Evaluating the general formula at the intermediate time level \(t = 0.5\,\Delta t_c\) gives:
which simplifies to:
Conservative coupling¶
The interface coupling operator is selectable through models.multiblock.interface_coupling. The default value_interp scheme is the value-interpolation coupling described above (cubic coarse-to-fine prolongation, fine-to-coarse point injection). The conservative scheme replaces the transfer of the conserved fluid moments, density \(\rho\) and momentum \(\rho u_\alpha\), with a conservative restriction/prolongation pair on the same collocated 2:1 nodes. The non-equilibrium stress channel, its LES stress rescaling and the temporal interpolation are shared by both schemes.
Why a conservative operator
The cubic four-point prolongation carries a negative weight (\(-\tfrac{1}{16}\), Eq. (1)). Where the coarse-side density field is not smooth, that negative lobe lets the interpolated \(\rho\) overshoot below zero, which is unphysical and unrecoverable. A convex prolongation (non-negative weights that sum to one) keeps the interpolated value bounded by its neighbours, so a positive density stays positive. Pairing it with a fine-to-coarse average, rather than point injection, makes mass and momentum transfer continuous in both directions.
Coarse-to-fine prolongation. The conserved moments are interpolated with the convex two-point midpoint
evaluated on density and on momentum \(j_\alpha = \rho u_\alpha\) rather than on velocity directly. The receiving node recovers \(u_\alpha = j_\alpha / \rho\) from the interpolated momentum and density, which keeps the prolongation momentum-conserving. A bracketing node that is dry or outside the domain falls back to the other, the same treatment a domain border already receives.
Fine-to-coarse restriction. Each coarse node averages the \(2^D\) fine children that tile it,
so the coarse density and momentum are the exact mean of the fine children. This replaces the single-child point injection, removing the fine-scale aliasing that unfiltered injection folds onto the coarse grid.
The volumetric/mass-conservative lineage of this construction is Rohde et al.[2] and Chen et al.[3]; those schemes exchange per-cell particle mass on cell-centered grids, whereas the collocated form here operates on the existing 2:1 node layout and reuses the shared stress and temporal machinery.
Checkerboard stabilization¶
At near-inviscid relaxation (\(\omega \to 2\)) in strong turbulence, the refinement interface can excite a grid-scale (2dx) odd-even checkerboard mode. The mode is under-damped because the physical viscosity is vanishing, and it grows until the solution diverges. Adding subgrid viscosity globally (a larger Smagorinsky constant) suppresses it but over-dissipates the resolved flow. The optional stabilization (models.multiblock.interface_stabilization) instead adds dissipation only where the mode is present.
A per-node odd-even sensor is formed from the second difference over the total variation of the density and velocity, taken per axis and maximised over axes and carriers,
where \(q_{\alpha}^{\pm}\) are the neighbours along axis \(\alpha\). The sensor is \(0\) for a smooth field and approaches \(1\) for a pure grid-scale oscillation, so it separates the checkerboard from physical shear. Where \(s\) exceeds a threshold \(s_0\), a graded extra subgrid viscosity is added and the relaxation frequency is recomputed from the total viscosity,
with \(\kappa\) the configured strength. Recomputing \(\omega\) from the summed viscosity keeps the collision self-consistent (the added dissipation is a genuine viscosity, not an imposed relaxation-rate clamp, whose sign would work against the stress reconstruction near \(\omega \to 2\)). The sensor is evaluated on the fully updated neighbour field in the finite-difference pass and consumed in the following collision, so the stencil reads a synchronized state. Because \(s \approx 0\) in smooth flow, the extra viscosity vanishes there and the resolved solution is unchanged.