- base_gradient_methodgreen-gaussGradient method used before Rhie-Chow has computed reconstructed gradients.
Default:green-gauss
C++ Type:GradientMethodName
Controllable:No
Description:Gradient method used before Rhie-Chow has computed reconstructed gradients.
- gradient_relaxation0.1Relaxation factor applied when updating the reconstructed pressure-coupling gradient.
Default:0.1
C++ Type:Real
Unit:(no unit assumed)
Range:0.0
Controllable:No
Description:Relaxation factor applied when updating the reconstructed pressure-coupling gradient.
FVReconstructedPressureGradient
Description
FVReconstructedPressureGradient implements the Aguerre face-flux reconstruction (Aguerre et al. (2018)) for the linear finite-volume segregated solver. On a collocated mesh, the pressure correction enforces continuity through conservative face fluxes, while the momentum equations are solved for cell-centered velocities. If the cell pressure gradient is not consistent with the corrected face flux, the face flux can be smooth and conservative while the cell velocity remains oscillatory. The reconstruction reduces this mismatch by finding the cell pressure gradient implied by the corrected face flux and the discrete momentum balance.
Reconstruction Algorithm
After each pressure corrector, RhieChowMassFlux provides the corrected conservative volumetric face flux together with the diagonal momentum-balance coefficients and used by its Rhie-Chow interpolation. For a cell with faces , let be the face area vector outward from , the vector from the cell centroid to the face centroid, and the corrected volumetric flux through , signed positive out of . The reconstruction proceeds as follows:
Freeze the velocity gradient. Before the pressure corrector changes the face flux, the current cell-centered velocity gradient is saved as a lagged reference, . This keeps the reconstruction from depending on the same velocity field it is trying to update. This saved field is computed using each velocity variable's "gradient_method", which defaults to
green-gauss; if a velocity variable selects another gradient method, that method supplies its lagged gradient instead. It is not computed using "base_gradient_method", which controls the pressure gradient used before a reconstructed coupling gradient exists. At an internal face, the lagged gradients of the two neighboring cells are averaged to a face value ; at a domain boundary, or at the edge of this method's block restriction, the owning cell's lagged gradient is used directly.Turn each corrected face flux into a face equation for the cell velocity. A first-order Taylor expansion of the velocity from the cell centroid to the face centroid gives
Replacing with the corrected face-normal velocity and moving the already-known Taylor term to the right-hand side gives, for every face of , one linear equation for the unknown cell velocity,
Project the face equations back to a cell velocity. A cell generally has more faces than spatial dimensions, so its face equations are combined in an area-weighted least-squares sense:
This normal-equation system is symmetric positive definite whenever the face normals of span the spatial dimension. Its solution is the cell velocity most consistent, in this least-squares sense, with every corrected face flux around the cell.
Invert the momentum balance for the pressure gradient. The discrete momentum balance used by the momentum predictor relates the cell velocity to the pressure gradient through the coefficients supplied by RhieChowMassFlux,
Substituting, for each spatial direction , the reconstructed velocity component found in step 3 and solving for the unknown gradient component gives
The pressure gradient found in step 4 is used immediately to update the cell velocity, so the velocity reported at cell centers stays consistent with the flux that satisfies continuity at faces. A relaxed blend of this reconstructed gradient and the previous coupling gradient is then carried forward to the next momentum predictor,
where is "gradient_relaxation". This relaxation controls the strength of the pressure-velocity feedback without changing the conservative face flux produced by the current pressure correction.
Behavior During PISO Correctors
PIMPLE can run several pressure correctors after one momentum predictor, without reassembling the momentum system between them, using the number of PISO iterations set by "num_piso_iterations". The momentum matrix and its and coefficients stay fixed for that entire PISO sequence; see PIMPLE for that part of the algorithm. The reconstruction, however, repeats steps 1-4 above once for every corrector, not once for the whole sequence:
Every corrector, including intermediate ones, recomputes the conservative face flux. An ordinary gradient method only needs the flux from the final corrector to advance the advection terms, but the reconstruction always needs the flux produced by its own pressure solve to build a new candidate, so this cost is paid at every corrector.
Index the velocity entering corrector by . Step 1 is repeated before every corrector and saves
where denotes the face interpolation described in step 1. For the first corrector, is the velocity from the momentum predictor; for each later corrector, is the velocity reconstructed by the preceding corrector.
Steps 2 through 4 then use the current corrector's flux together with the frozen gradient . In particular, the face equation becomes
The right-hand side contains , not . Therefore the reconstruction of is explicit rather than self-dependent. Its resulting pressure-gradient candidate is used immediately, unrelaxed, to update the cell velocity for that corrector.
The coupling gradient is also relaxed and updated after every corrector, blending in that corrector's own candidate. With correctors producing candidates in order, and the coupling gradient carried in from the previous momentum predictor, the value carried forward to the next momentum predictor is the sequential blend
so the candidate from the last corrector carries the most weight, but earlier correctors' candidates are not discarded.
Because the flux recomputation and the per-cell least-squares solve repeat at every corrector, using this gradient method with a nonzero "num_piso_iterations" costs more per momentum predictor than an ordinary gradient method does. In exchange, every corrector completes the same discrete consistency chain:
The corrected flux and frozen velocity gradient first determine the least-squares cell velocity. Inverting the fixed momentum balance then determines the unrelaxed reconstructed pressure-gradient candidate, and applying that same balance to the candidate reproduces the reconstructed cell velocity, up to solver roundoff. That cell velocity is therefore compatible both with the latest conservative face flux and with the candidate pressure gradient used to obtain it. Repeating this process after every pressure solve also gives the next corrector a cell velocity reconstructed from the immediately preceding flux; if reconstruction were deferred until the last corrector, the intermediate correctors would retain a cell velocity associated with an older face flux.
Here, "mutually consistent" refers to the cell velocity and the unrelaxed reconstructed candidate, not to the relaxed coupling gradient. The coupling gradient is the separate sequential blend defined above. It supplies stable pressure-gradient feedback to the next momentum predictor and, when , does not by itself reproduce the current reconstructed cell velocity exactly.
Initial and Transient Behavior
Before the first pressure correction, no reconstructed gradient exists, so the momentum predictor uses "base_gradient_method", which defaults to FVGreenGaussGradient. After a time step is accepted, its relaxed reconstructed gradient becomes the starting point for the next time step. A rejected time-step attempt restores the last accepted gradient, and restart data preserves the same accepted state. This avoids creating an artificial momentum imbalance merely by advancing, retrying, or restarting a converged solution.
The relaxation and initialization choices are described in Reconstructed Pressure Gradient.
Intended Use
This method is intended specifically for momentum-pressure coupling. Diffusion corrections, diagnostics, and unrelated equations should continue to use an ordinary gradient method. Use the same reconstructed pressure-gradient definition for every momentum component coupled to one pressure equation; independent flow systems should use separate definitions.
The pressure and velocity variables and their RhieChowMassFlux object must have identical block restrictions. Fields on independent flow regions should use separate variables and Rhie-Chow objects, or one Rhie-Chow object must span the complete flow domain.
Mesh quality is outside this gradient method's responsibility. When diagnosing reconstruction on a new mesh, use MeshDiagnosticsGenerator with check_local_jacobian = ERROR, examine_element_volumes = ERROR and examine_non_conformality = ERROR to detect degenerate element and side geometry.
Example Input File Syntax
The following block defines a FVReconstructedPressureGradient for the pressure variable in a linear finite-volume segregated solve:
[FVGradientMethods<<<{"href": "../../syntax/FVGradientMethods/index.html"}>>>]
[reconstructed]
type = FVReconstructedPressureGradient<<<{"description": "Reconstructs and relaxes the pressure gradient used for Rhie-Chow momentum coupling.", "href": "FVReconstructedPressureGradient.html"}>>>
base_gradient_method<<<{"description": "Gradient method used before Rhie-Chow has computed reconstructed gradients."}>>> = green-gauss
# This is the relaxation used by the reconstructed-gradient channel regression tests.
gradient_relaxation<<<{"description": "Relaxation factor applied when updating the reconstructed pressure-coupling gradient."}>>> = 0.1
[]
[](modules/navier_stokes/test/tests/finite_volume/ins/channel-flow/linear-segregated/2d/reconstructed-force-channel.i)The pressure variable then selects this gradient method by name:
[Variables<<<{"href": "../../syntax/Variables/index.html"}>>>]
[pressure]
type = MooseLinearVariableFVReal<<<{"description": "Base class for Moose variables. This should never be the terminal object type", "href": "../variables/MooseLinearVariableFV.html"}>>>
initial_condition<<<{"description": "Specifies a constant initial condition for this variable"}>>> = 0
solver_sys<<<{"description": "If this variable is a solver variable, this is the solver system to which it should be added."}>>> = pressure_system
gradient_method<<<{"description": "Default gradient computation method to register when a consumer requests gradients from this variable. This may be a built-in method name like 'green-gauss' or 'green-gauss-venkatakrishnan', or the name of an object in [FVGradientMethods]."}>>> = ${pressure_gradient_method}
[]
[](modules/navier_stokes/test/tests/finite_volume/ins/channel-flow/linear-segregated/2d/reconstructed-force-channel.i)Input Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:No
Description:Set the enabled status of the MooseObject.
Advanced Parameters
Input Files
- (modules/navier_stokes/test/tests/finite_volume/ins/channel-flow/linear-segregated/2d/2d-boussinesq-transient.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/channel-flow/linear-segregated/2d/reconstructed-gradient-partial-blocks.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/mms/linear-segregated/2d-symmetric-vortex-rz/2d-symmetric-vortex-rz.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/channel-flow/linear-segregated/2d/2d-velocity-pressure.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/block_restriction/linear-segregated/reconstructed-gradient.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/mms/linear-segregated/2d-symmetric-vortex/2d-symmetric-vortex.i)
- (modules/navier_stokes/test/tests/postprocessors/flow_rates/conservation_LinearFV.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/mms/linear-segregated/2d-vortex/2d-vortex.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/channel-flow/linear-segregated/2d/reconstructed-force-channel.i)
References
- Horacio J Aguerre, Cesar I Pairetti, Cesar M Venier, Santiago Márquez Damián, and Norberto M Nigro.
An oscillation-free flow solver based on flux reconstruction.
Journal of Computational Physics, 365:135–148, 2018.[Export]