The SPP implementation in IAL and HARMONIE
The Stochastically Perturbed Parameterizations scheme (SPP) introduces stochastic perturbations to values of chosen closure parameters representing efficiencies or rates of change in parameterized atmospheric (sub)processes. See here for more information. See the main SPP documentation for selection of settings.
Controling routines
The SPP data structure and logics is controlled by the following routines
Routine | Description |
---|---|
src/arpifs/module/spp_mod.F90 | Defines SPP scheme types TSPP_CONFIG_PAR and TSPP_CONFIG for the parameter config and the overall config respectively |
src/arpifs/module/spp_mod_type.F90 | Harmonie specific data types TSPP_CONFIG_TYPE , ATM_SPP_VARS , SFX_VARS , control and the methods CLEAR_SSP_TYPE , SET_SPP_TYPE , APPLY_SPP , APPLY_SPP_SURFEX , DIA_SPP , SET_ALL_ATM_SPP , SET_ALL_SFX_SPP , CLEAR_ALL_ATM_SPP , CLEAR_ALL_SFX_SPP |
src/surfex/SURFEX/modd_sfx_spp.F90 | SURFEX specific data types, control and methods CLEAR_SFX_SPP , SET_SFX_SPP , APPLY_SFX_SPP , CLEAR_ALL_SFX_SPP , SPP_MASK , SPP_DEMASK , PREP_SPP_SFX . Partly duplicates spp_mod_type.F90 |
src/arpifs/namelist/namspp.nam.h | The SPP namelist |
src/arpifs/setup/get_spp_conf.F90 | Setup defaults and read the SPP namelist. Initialises the SPG parameters |
src/arpifs/phys_dmn/ini_spp.F90 | Initialises the pattern used for SPP |
src/arpifs/phys_dmn/evolve_spp.F90 | Control routine for pattern propagation |
src/mse/internals/aroset_spp.F90 | Initialises the SURFEX part of SPP |
Note that the control routines shared with IFS will be totally rewritten, and much neater, with the introduction of CY49T1. See e.g. spp_def_mod.F90
, spp_gen_mod.F90
SPG routines
The pattern used for SPP within HARMONIE is SPG and the code for this is found under src/utilities/spg
. For the propagation of the pattern we find the routine EVOLVE_ARP_SPG
in src/arp/module/spectral_arp_mod.F90
Applying the patterns
In apl_arome.F90
the HARMONIE specific data types are initialised with SET_ALL_ATM_SPP
and SET_ALL_SFX_SPP
. These routine groups the different parameters and connects them to a pattern and a the correct diagnostic field EZDIAG
if requested.
Applying the patterns in the upper air part
In the routine were a specific parameter is used the pattern is applied by calling APPLY_SPP
. This is done for each parameter accoding to the table below.
Perturbation | Routine |
---|---|
RADGR | src/arpifs/phys_dmn/apl_arome.F90 |
RADSN | src/arpifs/phys_dmn/apl_arome.F90 |
RFAC_TWOC | src/arpifs/phys_dmn/vdfexcuhl.F90 |
RZC_H | src/arpifs/phys_dmn/vdfexcuhl.F90 |
RZL_INF | src/arpifs/phys_dmn/vdfexcuhl.F90 |
RZMFDRY | src/arpifs/phys_dmn/vdfhghtnhl.F90 |
RZMBCLOSURE | src/arpifs/phys_dmn/vdfhghtnhl.F90 |
CLDDPTHDP | src/arpifs/phys_dmn/vdfhghtnhl.F90 |
RLWINHF | src/arpifs/phys_radi/recmwf.F90 |
RSWINHF | src/arpifs/phys_radi/recmwf.F90 |
PSIGQSAT | src/mpa/micro/internals/condensation.F90 |
ICE_CLD_WGT | src/mpa/micro/internals/condensation.F90 |
ICENU | src/mpa/micro/internals/rain_ice_old.F90 |
KGN_ACON | src/mpa/micro/internals/rain_ice_old.F90 |
KGN_SBGR | src/mpa/micro/internals/rain_ice_old.F90 |
ALPHA | src/mpa/micro/internals/rain_ice_old.F90 |
RZNUC | src/mpa/micro/internals/rain_ice_old.F90 |
Applying the patterns in SURFEX
As SURFEX should have no dependencies to external modules the data is copied into the internalt SURFEX SPP data structure in AROSET_SPP
called from ARO_GROUND_PARAM
.
For SURFEX the parameter table looks like
Perturbation | Routine |
---|---|
CV | src/surfex/SURFEX/coupling_isban.F90 |
LAI | src/surfex/SURFEX/coupling_isban.F90 |
RSMIN | src/surfex/SURFEX/coupling_isban.F90 |
CD_COEFF | src/surfex/SURFEX/surface_cd.F90 |
CH_COEFF | src/surfex/SURFEX/surface_aero_cond.F90 |
In SURFEX we also have to pack/unpack the data arrays to only use the active points for a specific tile or patch. This is done in the SPP_MASK
and SPP_DEMASK
routines found in src/surfex/SURFEX/modd_sfx_spp.F90
and called from src/surfex/SURFEX/coupling_surf_atmn.F90
. At the time of writing returning the diagnostics of the pattern doesn't work satisfactory.
The additional code changes done for SPP in SURFEX can be viewed here