Physics Processes
StochParticles.PhysicsProcess — Type
abstract type PhysicsProcessBase 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_drift — Function
provides_drift(proc::PhysicsProcess) -> BoolDoes this process contribute an ODE drift term? Default: false.
StochParticles.CondensationProcess — Type
CondensationProcess{I} <: PhysicsProcessODE 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_drift — Function
apply_drift(proc::PhysicsProcess, μ, sys, t) -> SVectorCompute 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) -> SVectorCompute the condensation drift for particle state μ.
StochParticles.CoagulationProcess — Type
CoagulationProcess{K, S} <: PhysicsProcessStochastic 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.EmissionProcess — Type
EmissionProcess{S<:Function} <: PhysicsProcessParticle 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.DilutionProcess — Type
DilutionProcess{L<:Function, B<:Function} <: PhysicsProcessDilution via independent death (particle loss) and birth (background entrainment).
Constructor
DilutionProcess(dilution_rate_fn, background_sampler_fn)dilution_rate_fn::L— λ_dil(t) -> Float64background_sampler_fn::B— sampler(t) -> SVector{A, Float64}, returns a background particle
Contributes two ConstantRateJumps: death and birth.
StochParticles.make_ode_func — Function
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_jump — Function
make_emission_jump(proc::EmissionProcess) -> ConstantRateJumpCreate a jump that adds a new particle sampled from the emission distribution.
StochParticles.dilution_death_affect! — Function
dilution_death_affect!(integrator, proc)Remove one random active particle via swap-delete. Rate: λdil(t) × nactive
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_jumps — Function
make_dilution_jumps(proc::DilutionProcess) -> (ConstantRateJump, ConstantRateJump)Create death and birth jumps for dilution.