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

RoutineDescription
src/arpifs/module/spp_mod.F90Defines SPP scheme types TSPP_CONFIG_PAR and TSPP_CONFIG for the parameter config and the overall config respectively
src/arpifs/module/spp_mod_type.F90Harmonie 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.F90SURFEX 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.hThe SPP namelist
src/arpifs/setup/get_spp_conf.F90Setup defaults and read the SPP namelist. Initialises the SPG parameters
src/arpifs/phys_dmn/ini_spp.F90Initialises the pattern used for SPP
src/arpifs/phys_dmn/evolve_spp.F90Control routine for pattern propagation
src/mse/internals/aroset_spp.F90Initialises 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.

PerturbationRoutine
RADGRsrc/arpifs/phys_dmn/apl_arome.F90
RADSNsrc/arpifs/phys_dmn/apl_arome.F90
RFAC_TWOCsrc/arpifs/phys_dmn/vdfexcuhl.F90
RZC_Hsrc/arpifs/phys_dmn/vdfexcuhl.F90
RZL_INFsrc/arpifs/phys_dmn/vdfexcuhl.F90
RZMFDRYsrc/arpifs/phys_dmn/vdfhghtnhl.F90
RZMBCLOSUREsrc/arpifs/phys_dmn/vdfhghtnhl.F90
CLDDPTHDPsrc/arpifs/phys_dmn/vdfhghtnhl.F90
RLWINHFsrc/arpifs/phys_radi/recmwf.F90
RSWINHFsrc/arpifs/phys_radi/recmwf.F90
PSIGQSATsrc/mpa/micro/internals/condensation.F90
ICE_CLD_WGTsrc/mpa/micro/internals/condensation.F90
ICENUsrc/mpa/micro/internals/rain_ice_old.F90
KGN_ACONsrc/mpa/micro/internals/rain_ice_old.F90
KGN_SBGRsrc/mpa/micro/internals/rain_ice_old.F90
ALPHAsrc/mpa/micro/internals/rain_ice_old.F90
RZNUCsrc/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

PerturbationRoutine
CVsrc/surfex/SURFEX/coupling_isban.F90
LAIsrc/surfex/SURFEX/coupling_isban.F90
RSMINsrc/surfex/SURFEX/coupling_isban.F90
CD_COEFFsrc/surfex/SURFEX/surface_cd.F90
CH_COEFFsrc/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