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

igbmAtmDensity module input and output messages

Module I/O Messages

Msg Variable Name

Msg Type

Description

atmoDensInMsg

AtmoPropsMsgPayload

Input atmosphere properties message containing baseline neutralDensity and other atmospheric fields.

atmoDensOutMsg

AtmoPropsMsgPayload

Output atmosphere properties message with stochastic density correction applied to neutralDensity.

Module Description

The inherited IGBM state \(x\) evolves as

\[\text{d}x = \frac{1}{\tau}\,(\mu - x)\,\text{d}t + \sigma\,x\,\text{d}W\]

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

\[\rho_\text{out} = \max\!\left(0,\; \rho_\text{in}\,x\right)\]

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.