SPPI: Stochastically perturbed parameterization inputs SPPI (I believe I'm sofar the only one who seriously suggested this other than Tim Palmer who mentioned that idea in a paper 20 years ago)
Let $V$ be any prognostic variable, and $r$ a random number following some distribution (sometimes people write 1+r with r symmetric around 0, but let's keep it general here), and some set of parameters $p_i$
SPPT:
$\partial_t V = Dynamics(V) + r*Physics(V, p_i)$
$r$ is usually the same for all $V$, but space/time dependent with some autocorrelation time/length scale. Ideally, one would want r to be independent of height (to only perturb fluxes), but for stability reasons that used to be tricky, hence ECMWF did some tapering in the planetary boundary layer / stratosphere.
SPP: $\partial_t V = Dynamics(V) + Physics(V, r*p_i)$
Here, every parameter $p_i$ gets its own $r$, but the pattern generation is similar to SPPT. Not sure about vertical depedency.
SPPI: $\partial_t V = Dynamics(V) + Physics(V_r, p_i)$
Here, the physical parameterizations are evaluated from a perturbed state $V_r$ that's obtained similar to SPPT: $V_r = V(t-\Delta t) + \Delta t (Dynamics(V) + rPhysics(V, p_i))$. This has the advantage that any flux inconsistencies are immediately resolved and the SPPT idea to perturb those physics tendencies the strongest that are also the largest is retained. How exactly to do that, we'll have to see, but I believe that can be done without any additional computational burden within parameterization_tendencies! (tendencies from previous time steps are still available and one can do a simple, cheap time stepping to obtain a perturbed state)
What that means for SpeedyWeather.jl:
Fortran-SPEEDY computes things in the following order:
$P = Physics(V,p_i)$ (grid-point space)
$P$ += $Dynamics(V)$ (+= in grid-point space)
convert $P$ to $P_s$ in spectral space ($P$ is not overwritten)
time stepping in spectral space with $P_s$
Sofar I didn't have the intention to change that, but maybe we have to:
For SPPT not many changes would be needed other than holding $r$ in spectral space as a field, evolve it as AR1 and on every time step transform to grid-point space to be used in $Physics(V,p_i)$.
For SPP we want to think about a general structure how to hold the parameters (#86) such that when calling parameterization_tendencies! we can also call a perturb_parameters! function that does that either in-place or by creating a copy. In this case, we may want to be able to give parameters an uncertainty (e.g. run_speedy(param1=1.23±0.3) via Measurements.jl)
For SPPI we also need $r$ as for SPPT, but then would also need to think about mimicking SPPT-like time stepping in grid-point space (in spectral space the backtransforms would be too expensive to make it attractive I think).
Several classes of stochastic parameterizations with multiplicative noise that are currently in use/proposed
Let $V$ be any prognostic variable, and $r$ a random number following some distribution (sometimes people write 1+r with r symmetric around 0, but let's keep it general here), and some set of parameters $p_i$
$r$ is usually the same for all $V$, but space/time dependent with some autocorrelation time/length scale. Ideally, one would want r to be independent of height (to only perturb fluxes), but for stability reasons that used to be tricky, hence ECMWF did some tapering in the planetary boundary layer / stratosphere.
Here, every parameter $p_i$ gets its own $r$, but the pattern generation is similar to SPPT. Not sure about vertical depedency.
Here, the physical parameterizations are evaluated from a perturbed state $V_r$ that's obtained similar to SPPT: $V_r = V(t-\Delta t) + \Delta t (Dynamics(V) + rPhysics(V, p_i))$. This has the advantage that any flux inconsistencies are immediately resolved and the SPPT idea to perturb those physics tendencies the strongest that are also the largest is retained. How exactly to do that, we'll have to see, but I believe that can be done without any additional computational burden within
parameterization_tendencies!
(tendencies from previous time steps are still available and one can do a simple, cheap time stepping to obtain a perturbed state)What that means for SpeedyWeather.jl:
Fortran-SPEEDY computes things in the following order:
Sofar I didn't have the intention to change that, but maybe we have to:
parameterization_tendencies!
we can also call aperturb_parameters!
function that does that either in-place or by creating a copy. In this case, we may want to be able to give parameters an uncertainty (e.g.run_speedy(param1=1.23±0.3)
via Measurements.jl)@white-alistair @dmey @justinfocus12