PICurv 0.1.0
A Parallel Particle-In-Cell Solver for Curvilinear LES
Loading...
Searching...
No Matches
Pressure-Poisson, GMRES, and Multigrid

This page describes the pressure-correction solve path used by projection in PICurv.

1. Pressure-Correction Equation

The correction solve enforces incompressibility through:

\[ \nabla^2 \phi = \frac{1}{\Delta t}\nabla\cdot\mathbf{u}^*. \]

In code terms:

Null-space handling is explicitly configured for Neumann-like pressure systems via function PoissonNullSpaceFunction in the Poisson module.

2. Multigrid/KSP Stack In Code

PoissonSolver_MG currently:

  1. assembles per-level operators,
  2. configures KSP + PCMG,
  3. sets restriction/interpolation operators (MyRestriction and MyInterpolation plus solid-aware variants),
  4. applies level smoothers/coarse solve,
  5. solves finest-level system for Phi.

After Poisson solve:

2. File-Grid Configuration

From solver.yml via scripts/pic.flow:

  • pressure_solver.tolerance -> -poisson_tol
  • pressure_solver.multigrid.levels -> -mg_level
  • pressure_solver.multigrid.pre_sweeps -> -mg_pre_it
  • pressure_solver.multigrid.post_sweeps -> -mg_post_it
  • pressure_solver.multigrid.semi_coarsening.{i,j,k} -> -mg_i_semi, -mg_j_semi, -mg_k_semi
  • optional level solver keys -> -ps_mg_levels_*
  • petsc_passthrough_options -> raw PETSc flags

Final option parsing happens in function CreateSimulationContext during context creation.

4. Robustness Characteristics

Current implementation includes:

  • periodic-boundary pressure synchronization,
  • immersed-boundary-aware treatment paths (Nvert/solid checks),
  • optional Poisson monitor logging (-ps_ksp_pic_monitor_true_residual).

If pressure solve quality degrades, check first:

  1. BC consistency,
  2. MG level/smoother settings,
  3. grid metrics/orientation quality,
  4. solver tolerances vs timestep.

1. Reference Scales