|
PICurv 0.1.0
A Parallel Particle-In-Cell Solver for Curvilinear LES
|
For the full commented template, see:
# ==============================================================================
# PICurv Master Solver Configuration Template
# ==============================================================================
#
# PURPOSE:
# This file defines the NUMERICAL STRATEGY for the simulation. It is divided
# into user-friendly structured sections for common settings, and a flexible
# 'petsc_passthrough_options' section for advanced users to inject any valid
# PETSc command-line flag.
#
# ==============================================================================
# ==============================================================================
# 1. SOLVER OPERATION MODE
# ==============================================================================
operation_mode:
# 'solve': (Default) Compute the fluid dynamics equations.
# 'load': Load pre-computed field data from disk.
eulerian_field_source: "solve" # -> -euler_field_source
# Optional analytical solution selector used when eulerian_field_source = "analytical".
# Supported values today: "TGV3D", "ZERO_FLOW", "UNIFORM_FLOW".
# TGV3D currently requires case.yml to use grid.mode: programmatic_c.
# ZERO_FLOW and UNIFORM_FLOW also support file-based grid ingestion.
analytical_type: "TGV3D" # -> -analytical_type
# Parameters for analytical_type: "UNIFORM_FLOW".
# Uncomment this block only when analytical_type = "UNIFORM_FLOW".
# uniform_flow:
# u: 0.0 # -> -analytical_uniform_u
# v: 0.0 # -> -analytical_uniform_v
# w: 0.0 # -> -analytical_uniform_w
# Verification-only source overrides.
# Use these only when ordinary end-to-end setup cannot expose the behavior you need to test.
# New verification-pathway source injections must be implemented in
# include/verification_sources.h and src/verification_sources.c.
# verification:
# sources:
# diffusivity:
# mode: "analytical" # Verification-only selector; currently fixed to analytical
# profile: "LINEAR_X" # Supported today: LINEAR_X
# gamma0: 1.0e-3 # -> -verification_diffusivity_gamma0
# slope_x: 2.0e-4 # -> -verification_diffusivity_slope_x
#
# scalar:
# mode: "analytical" # Verification-only selector; currently fixed to analytical
# profile: "CONSTANT" # Supported: CONSTANT, LINEAR_X, SIN_PRODUCT
# value: 1.0 # CONSTANT -> -verification_scalar_value
# # phi0: 0.0 # LINEAR_X -> -verification_scalar_phi0
# # slope_x: 1.0 # LINEAR_X -> -verification_scalar_slope_x
# # amplitude: 1.0 # SIN_PRODUCT -> -verification_scalar_amplitude
# # kx: 3.141592653589793 # SIN_PRODUCT -> -verification_scalar_kx
# # ky: 3.141592653589793 # SIN_PRODUCT -> -verification_scalar_ky
# # kz: 3.141592653589793 # SIN_PRODUCT -> -verification_scalar_kz
#
# Scalar verification is intended for runtime diagnostics such as
# logs/scatter_metrics.csv. It bypasses only the particle Psi evolution path and
# reuses the production scatter operator.
# ==============================================================================
# 2. PRIMARY SOLVER STRATEGY & TOLERANCES
# ==============================================================================
# --- Main Time-Stepping Scheme ---
strategy:
momentum_solver: "Dual Time Picard RK4" # -> -mom_solver_type. Options: "Explicit RK4", "Dual Time Picard RK4"
central_diff: false # [true/false] -> -central
# --- Convergence Criteria for the Momentum Solver ---
tolerances:
max_iterations: 50 # [Integer] -> -mom_max_pseudo_steps
absolute_tol: 1.0e-8 # [Float] -> -mom_atol
relative_tol: 1.0e-5 # [Float] -> -mom_rtol
step_tol: 1.0e-8 # [Float] -> -imp_stol
# --- Advanced Momentum Solver Controls (optional) ---
# This section exposes newer dual-time controls directly (no passthrough needed).
momentum_solver:
# Solver-specific controls for Dual Time Picard RK4.
dual_time_picard_rk4:
max_pseudo_steps: 50 # -> -mom_max_pseudo_steps
absolute_tol: 1.0e-8 # -> -mom_atol
relative_tol: 1.0e-5 # -> -mom_rtol
step_tol: 1.0e-8 # -> -imp_stol
pseudo_cfl:
initial: 0.1 # -> -pseudo_cfl
minimum: 0.001 # -> -min_pseudo_cfl
maximum: 1.0 # -> -max_pseudo_cfl
growth_factor: 1.0 # -> -pseudo_cfl_growth_factor
reduction_factor: 1.0 # -> -pseudo_cfl_reduction_factor
rk4_residual_noise_allowance_factor: 1.05 # -> -mom_dt_rk4_residual_norm_noise_allowance_factor
# ==============================================================================
# 3. PRESSURE-POISSON SOLVER CONFIGURATION
# ==============================================================================
pressure_solver:
# --- Main Tolerance ---
tolerance: 1.0e-9 # [Float] -> -poisson_tol
# --- Geometric Multigrid (PCMG) Settings ---
multigrid:
levels: 3 # [Integer] -> -mg_level
pre_sweeps: 2 # [Integer] -> -mg_pre_it
post_sweeps: 2 # [Integer] -> -mg_post_it
semi_coarsening:
i: false # [true/false] -> -mg_i_semi
j: false # [true/false] -> -mg_j_semi
k: true # [true/false] -> -mg_k_semi
# --- CONVENIENCE: Smoother Configuration Per Level ---
# This section sets the KSP (solver) type for the smoother on each MG level.
# NOTE: The C-code hardcodes the preconditioner (PC) for each smoother to
# Block Jacobi (PCBJACOBI). You can only set the KSP type here.
# Level 0 is the finest grid.
level_solvers:
level_0:
ksp_type: "richardson" # -> -ps_mg_levels_0_ksp_type "richardson"
level_1:
ksp_type: "chebyshev" # -> -ps_mg_levels_1_ksp_type "chebyshev"
level_2:
# The coarsest level often uses a more robust solver.
ksp_type: "gmres" # -> -ps_mg_levels_2_ksp_type "gmres"
# ==============================================================================
# 4. INTERPOLATION
# Controls grid-to-particle interpolation numerics.
# ==============================================================================
interpolation:
# Method for interpolating Eulerian fields to particle positions.
# Options:
# - "Trilinear" (default) Direct trilinear from 8 nearest cell centers.
# Second-order on both uniform and curvilinear grids.
# - "CornerAveraged" Legacy two-stage: center->corner average, then trilinear
# from corners. Second-order only on uniform Cartesian grids.
method: "Trilinear" # -> -interpolation_method
# ==============================================================================
# 5. PETSC PASSTHROUGH OPTIONS (FOR ADVANCED USERS)
# ==============================================================================
petsc_passthrough_options:
# --- Top-level KSP settings ---
-ps_ksp_type: "fgmres"
-ps_ksp_rtol: 1.0e-11
-ps_ksp_max_it: 50
# --- PC (Preconditioner) Settings ---
# The C-code forces the top-level PC to be 'mg'. This line is for clarity.
-ps_pc_type: "mg"
# --- Additional Momentum Controls (if you prefer passthrough style) ---
# -pseudo_cfl: 0.1
# -max_pseudo_cfl: 1.0
# -min_pseudo_cfl: 0.001
# -pseudo_cfl_growth_factor: 1.0
# -pseudo_cfl_reduction_factor: 1.0
# --- Redundant/Ineffective Flag Example ---
# You could add the following line here, but the C-code's hardcoded
# PCSetType(subpc, PCBJACOBI) call would override it. It will have no effect.
# -ps_mg_levels_1_pc_type: "sor"
solver.yml controls numerical strategy and solver internals.
Mappings:
eulerian_field_source -> -euler_field_source (solve, load, analytical)analytical_type -> -analytical_typeuniform_flow.u/v/w -> -analytical_uniform_u/-analytical_uniform_v/-analytical_uniform_w when analytical_type: "UNIFORM_FLOW"uniform_flow is only valid when analytical_type: "UNIFORM_FLOW".
Mappings:
momentum_solver -> -mom_solver_type (picurv accepts Explicit RK4 or Dual Time Picard RK4)central_diff -> -centralOlder boolean toggles are not supported; use strategy.momentum_solver. Only implemented momentum solver values are accepted by picurv and the C runtime.
Mappings:
max_iterations -> -mom_max_pseudo_stepsabsolute_tol -> -mom_atolrelative_tol -> -mom_rtolstep_tol -> -imp_stolMappings include:
-pseudo_cfl, -min_pseudo_cfl, -max_pseudo_cfl-pseudo_cfl_growth_factor, -pseudo_cfl_reduction_factor-mom_dt_rk4_residual_norm_noise_allowance_factorRule: solver-specific blocks must match selected momentum solver type.
Mappings:
tolerance -> -poisson_tolmultigrid.levels -> -mg_levelmultigrid.pre_sweeps -> -mg_pre_itmultigrid.post_sweeps -> -mg_post_itmultigrid.semi_coarsening.i/j/k -> -mg_i_semi/-mg_j_semi/-mg_k_semiMappings:
method -> -interpolation_method (Trilinear = 0, CornerAveraged = 1)The Trilinear method (default) performs direct trilinear interpolation from the 8 nearest cell centers, providing second-order accuracy on both uniform and curvilinear grids. The CornerAveraged method is the legacy two-stage path (center-to-corner average, then trilinear from corners), which is second-order only on uniform Cartesian grids.
See Trilinear Interpolation and Particle-Grid Projection for algorithmic details.
Mappings:
verification.sources.diffusivity.mode -> -verification_diffusivity_modeverification.sources.diffusivity.profile -> -verification_diffusivity_profileverification.sources.diffusivity.gamma0 -> -verification_diffusivity_gamma0verification.sources.diffusivity.slope_x -> -verification_diffusivity_slope_xverification.sources.scalar.mode -> -verification_scalar_modeverification.sources.scalar.profile -> -verification_scalar_profileverification.sources.scalar.value -> -verification_scalar_valueverification.sources.scalar.phi0 -> -verification_scalar_phi0verification.sources.scalar.slope_x -> -verification_scalar_slope_xverification.sources.scalar.amplitude -> -verification_scalar_amplitudeverification.sources.scalar.kx/ky/kz -> -verification_scalar_kx/-verification_scalar_ky/-verification_scalar_kzRules:
operation_mode.eulerian_field_source: "analytical"verification.sources.scalar prescribes particle Psi from analytical truth and enables the runtime diagnostic logs/scatter_metrics.csvCONSTANT, LINEAR_X, and SIN_PRODUCTinclude/verification_sources.h and src/verification_sources.cAdvanced escape hatch for raw PETSc flags:
These are passed into PETSc options DB and consumed by runtime calls like KSPSetFromOptions.
Proceed to Configuration Reference: Monitor YAML.
For mapping and extension workflows:
This page describes Configuration Reference: Solver YAML 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.