PICurv 0.1.0
A Parallel Particle-In-Cell Solver for Curvilinear LES
Loading...
Searching...
No Matches
Code Architecture

This page is the developer-oriented map of the current PICurv C codebase.

1. Executable Entry Points

Both rely on shared setup/context infrastructure from setup.c, io.c, and variables.h.

2. Solver Runtime Flow (picsolver.c)

High-level stages:

  1. PetscInitialize
  2. CreateSimulationContext (setup.c) parses control/options and initializes defaults
  3. SetupSimulationEnvironment configures run directories and environment-dependent logging setup
  4. Setup stack:
    • SetupGridAndSolvers
    • SetupBoundaryConditions
    • SetupDomainRankInfo
    • InitializeEulerianState
    • InitializeParticleSwarm (if particles enabled)
  5. Time integration via AdvanceSimulation
  6. Finalization via profiling teardown + FinalizeSimulation + PetscFinalize

3. Postprocessor Runtime Flow (postprocessor.c)

  • Parse post recipe (post.run) into PostProcessParams
  • Load requested Eulerian/particle fields by timestep
  • Execute configured Eulerian/Lagrangian/statistics pipelines
  • Write VTK outputs (.vts, .vtp) and statistics CSV outputs

4. Core Context Objects

4.1 SimCtx

  • Declared in include/variables.h
  • Holds global run configuration and top-level handles
  • Populated mainly in CreateSimulationContext

4.2 UserCtx

  • Block/grid-level state container (DM, vectors, metrics, block-local geometry)
  • Used throughout grid, solver, BC, and post kernels
  • Finest-level block arrays are central runtime work objects

5. Module Responsibilities

6. Configuration Ingestion Boundaries

Primary ingestion sites:

  • setup.c: PETSc option parsing for solver/post shared runtime controls
  • io.c: grid read/generation inputs, restart/data IO, post recipe parsing
  • logging path includes environment variable ingress (LOG_LEVEL)

Not all option consumption is explicit PetscOptionsGet*; PETSc dynamic ingestion also occurs through calls like KSPSetFromOptions in poisson.c.

7. Extensibility Status

9. Next Steps