|
PICurv 0.1.0
A Parallel Particle-In-Cell Solver for Curvilinear LES
|
This page documents the currently active implicit-style momentum strategy in PICurv: dual-time Picard iteration with RK4 pseudo-time smoothing.
The solver enforces the physical-time momentum equation by iterating a pseudo-time equation:
\[ \frac{\partial \mathbf{U}}{\partial \tau} = -\Big(R_{spatial}(\mathbf{U}) + R_{time}(\mathbf{U})\Big). \]
Implementation details from ComputeTotalResidual:
R_spatial comes from ComputeRHSR_time uses BDF1/BDF2-style terms from Ucont, Ucont_o, and Ucont_rm1,Per pseudo-iteration, the solver tracks:
Backtracking is triggered when residual and update growth indicate divergence (or NaN), then:
Pseudo-CFL is also adaptively ramped on successful steps and clamped by configured min/max bounds.
User-facing configuration (solver.yml) maps to:
strategy.momentum_solver -> -mom_solver_typetolerances.max_iterations -> -mom_max_pseudo_stepstolerances.absolute_tol -> -mom_atoltolerances.relative_tol -> -mom_rtoltolerances.step_tol -> -imp_stolmomentum_solver.dual_time_picard_rk4.pseudo_cfl.* -> pseudo-CFL flagsrk4_residual_noise_allowance_factor -> -mom_dt_rk4_residual_norm_noise_allowance_factorParsing and normalization are performed in scripts/picurv, with final option ingestion in function CreateSimulationContext during setup. Only the currently implemented momentum solver values are exposed; add new ones only when the parser and dispatcher are extended in the same change.
Common stability tuning order:
For many cases, robust Poisson settings and sane initialization matter as much as dual-time tolerances.
For contributor extension steps, see Modular Selector Extension Guide.
This page describes Dual-Time Picard RK4 Momentum Solver within the PICurv workflow. For CFD users, the most reliable reading strategy is to map the page content to a concrete run decision: what is configured, what runtime stage it influences, and which diagnostics should confirm expected behavior.
Treat this page as both a conceptual reference and a runbook. If you are debugging, pair the method/procedure described here with monitor output, generated runtime artifacts under runs/<run_id>/config, and the associated solver/post logs so numerical intent and implementation behavior stay aligned.