Physics Processes

StochParticles.PhysicsProcessType
abstract type PhysicsProcess

Base trait for all physics processes (coagulation, condensation, etc.). Each concrete subtype declares what it contributes to the PDMP via provides_drift and provides_jumps.

StochParticles.provides_driftFunction
provides_drift(proc::PhysicsProcess) -> Bool

Does this process contribute an ODE drift term? Default: false.

StochParticles.CondensationProcessType
CondensationProcess{I} <: PhysicsProcess

ODE drift process: dμ/dt = flux(μ, g(t), t). Provides drift only (no jumps).

Fields

  • flux::I — function (μ::SVector, g, t) -> SVector, returning condensation flux
StochParticles.apply_driftFunction
apply_drift(proc::PhysicsProcess, μ, sys, t) -> SVector

Compute the ODE drift contribution from proc for particle state μ at time t, given the particle system sys.

Only called when provides_drift(proc) == true.

Implementation contract

Concrete subtypes of PhysicsProcess that declare provides_drift must implement this method.

apply_drift(proc::CondensationProcess, μ, sys, t) -> SVector

Compute the condensation drift for particle state μ.

StochParticles.CoagulationProcessType
CoagulationProcess{K, S} <: PhysicsProcess

Stochastic coagulation process that merges particle pairs via Majorant/Null-event sampling.

Fields

  • kernel::K — coagulation rate kernel (e.g. BrownianKernel)
  • sampling::S — pair-selection strategy (e.g. GlobalMajorant)
StochParticles.EmissionProcessType
EmissionProcess{S<:Function} <: PhysicsProcess

Particle emission via Poisson point process.

Constructor

EmissionProcess(total_rate, sampler)
  • total_rate::Float64 — Λemit = V × ∫ ṅemit(μ, t) dμ (user-precomputed or time-varying)
  • sampler::S — function sampler(t) -> SVector{A, Float64}, returns a new particle state

Contributes a ConstantRateJump (V1 simplification: constant total rate).

StochParticles.DilutionProcessType
DilutionProcess{L<:Function, B<:Function} <: PhysicsProcess

Dilution via independent death (particle loss) and birth (background entrainment).

Constructor

DilutionProcess(dilution_rate_fn, background_sampler_fn)
  • dilution_rate_fn::L — λ_dil(t) -> Float64
  • background_sampler_fn::B — sampler(t) -> SVector{A, Float64}, returns a background particle

Contributes two ConstantRateJumps: death and birth.

StochParticles.make_ode_funcFunction
make_ode_func(processes::Tuple)

Create the ODE right-hand side function for SciML's ODEProblem. Iterates over active particles, applies drift from all drift-providing processes. The returned closure captures the concrete process tuple type for full specialization.

StochParticles.make_emission_jumpFunction
make_emission_jump(proc::EmissionProcess) -> ConstantRateJump

Create a jump that adds a new particle sampled from the emission distribution.

StochParticles.dilution_birth_affect!Function
dilution_birth_affect!(integrator, proc)

Add a background particle sampled from the background distribution. Rate: λdil(t) × V(t) × ∫ nback(μ) dμ (simplified to user-provided rate)

StochParticles.make_dilution_jumpsFunction
make_dilution_jumps(proc::DilutionProcess) -> (ConstantRateJump, ConstantRateJump)

Create death and birth jumps for dilution.