C++ Module: igbmAtmDensity
Executive Summary
The IgbmAtmDensity module applies scalar inhomogeneous geometric Brownian motion (IGBM) noise to atmospheric
density by specializing InhomogeneousGeometricBrownianMotion. It scales
incoming atmospheric density by the stochastic multiplicative IGBM factor and republishes the perturbed atmosphere
message.
It is the multiplicative-noise counterpart to StochasticAtmDensity (which uses the additive-noise Ornstein-Uhlenbeck MeanRevertingNoise), and the perturbation size scales with the factor itself. The exact IGBM factor is positive, but an explicit integrator can occasionally drive it non-positive for a large step/increment, so the corrected density is clamped to be non-negative (a negative density is unphysical).
Message Interfaces
Msg Variable Name |
Msg Type |
Description |
|---|---|---|
atmoDensInMsg |
Input atmosphere properties message containing baseline |
|
atmoDensOutMsg |
Output atmosphere properties message with stochastic density correction applied to |
Module Description
The inherited IGBM state \(x\) evolves as
configured in stationary form (mean \(\mu\), time constant \(\tau\), stationary standard deviation \(\sigma_{st}\), with \(\sigma\) derived internally — see InhomogeneousGeometricBrownianMotion).
The output neutral density is
so setting the mean level \(\mu = 1\) gives a mean-preserving multiplicative correction. The \(\max(0,\cdot)\) guards against the rare non-positive \(x\) an explicit integrator can produce (a negative density is unphysical). All other atmospheric payload fields are passed through unchanged.
Because the diffusion \(\sigma x\) is multiplicative (state-dependent), a strong stochastic integrator (e.g. Euler-Maruyama or an SRI method) must be used.
-
class IgbmAtmDensity : public InhomogeneousGeometricBrownianMotion
- #include <igbmAtmDensity.h>
Applies an inhomogeneous geometric Brownian motion (IGBM) correction to atmospheric density.
Derives from InhomogeneousGeometricBrownianMotion. Scales the incoming neutral density by the IGBM factor \(x\) maintained by the base class (mean-reverting to the level \(\mu\)); setting \(\mu = 1\) gives a mean-preserving multiplicative perturbation. The exact IGBM process is positive, but an explicit integrator can occasionally drive \(x\) non-positive for a large step/increment, so the corrected density is clamped to be non-negative (a negative density is unphysical).
Public Members
-
ReadFunctor<AtmoPropsMsgPayload> atmoDensInMsg
Input atmospheric properties message.
This message is read each step to obtain the unperturbed atmospheric density and temperature before applying the stochastic correction.
-
Message<AtmoPropsMsgPayload> atmoDensOutMsg
Output atmospheric properties message.
This message is written each step with the corrected neutral density value.
Protected Functions
-
void writeOutput(uint64_t CurrentSimNanos, double x) override
Apply the IGBM correction factor and write output.
Called automatically by InhomogeneousGeometricBrownianMotion::UpdateState(), after the stochastic state has been updated and before the simulation advances.
- Parameters:
CurrentSimNanos – Current simulation time in nanoseconds.
x – Current value of the scalar multiplicative correction factor.
-
ReadFunctor<AtmoPropsMsgPayload> atmoDensInMsg