Controlling the namelists in HARMONIE

Introduction

IFS is largely driven by namelists and has thousands of options. For each configuration a number of namelists controlling different parts are read. To make the maintenance of the namelists manageable and to assure consistency in terms on e.g. name conventions for fields, packing accuracy, physics settings and parallel options all namelists are generated as they are needed during the run. All the basic settings are defined in a perl dictionary nam/harmonie_namelists.pm for IFS and nam/surfex_namelists.pm and nam/surfex_selected_output.pm for SURFEX. In future versions the commented namelists will be included and maintained as part of the code. The IFS dictionary is structured in several sections:

harmone_namelists.pm

  • Global settings

  • Technical settings

    • Host specific settings
    • MPP options
    • File settings
  • DYNAMICS SETTINGS

    • Main dynamics switches
    • Non-hydrostatic settings
    • Vertical finite element
    • DFI
  • Main physics options. NB! These may contain switches for dynamics as well

    • ALADIN
    • AROME
    • EDMFM switches, to be applied after AROME
    • Alaro
    • Old surface
    • SURFEX
    • DDH
  • E927 Interpolation settings

    • Main fullpos settings
    • E927
    • E927 nh
    • SURFEX initial file generation
    • Aladin e927
    • ALARO e927
    • Arome e927
  • General postprocessing switches

    • Default fullpos settings
    • NH postprocessing
    • Switches for postprocessing with surfex
    • Special cases for arome
  • Assimilation

    • Canari
      • Arome canari
    • Varbc_rad
    • Varbc_coldstart
    • Screening
      • Arome screening
      • Alaro screening
    • Minimization
      • Alaro minimization
    • 4DVAR
      • 4DVAR minimization
      • 4DVAR screening
      • 4DVAR trajectory
  • Climate generation

    • Climate generations (e923)
  • Misc

    • General namelist settings for Tangent-Linear and Adjoint tests
    • Extra Adjoint test options
    • Oulan
    • Bator

The final namelists are build through the rules given in scr/Get_namelist and are generated by nam/gen_namelists.pl. Note that in several cases environment variables are still parsed in the scripts.

surfex_namelists.pm

All possible SURFEX namelist setting are documented at the SURFEX web site. Use the search text area in the upper right corner to search for a specific namelist or namelist option. Please, keep in mind that the SURFEX web site documents the latest SURFEX version, i.e. SURFEXv8, while in cy40h SURFEXv7.3 is used. Therefore, some of the settings may be different or not available.

PGD

PGD represents in general the preparation of physiography data. The default PGD settings are listed here. Some modifications can be done for specific model configurations and will be specified as e.g. alaro_pgd or arome_pgd.

# 2 layer ISBA scheme
%isba_2L=(
 NAM_ISBA=>{
  CISBA          => '"2-L",',
  NGROUND_LAYER  => '2,',
 },
);

# 3 layer ISBA scheme
%isba_3L=(
 NAM_ISBA=>{
  CISBA          => '"3-L",',
  NGROUND_LAYER  => '3,',
 },
);

The section used here is decided by setting CISBA="3-L" (default) in config_exp.h.

%isba_pgd=(
 NAM_ISBA=>{
   YCLAY         => 'YCLAY,',
   YCLAYFILETYPE => '"DIRECT",' ,
   YSAND         => 'YSAND,',
   YSANDFILETYPE => '"DIRECT",'
 },
);

The clay/sand used is decided by setting SOIL_TEXTURE_VERSION=FAO (default) in config_exp.h. FAO corresponds to 10 km resolution clay/sand according to SURFEX Soil texture description. The 1 km HWSD_v2 is not used by default since is shows strange vales over Scandinavia.

%pgd=(
 NAM_IO_OFFLINE=>{
  CSURF_FILETYPE => 'CSURF_FILETYPE,',
   CPGDFILE      => 'CPGDFILE,',
 },
 NAM_PGD_GRID=>{
   CGRID         => '"CONF PROJ",',
 },
 NAM_CONF_PROJ=>{
   XLAT0         => $ENV{LAT0},
   XLON0         => $ENV{LON0},
   XRPK          => $ENV{SINLAT0},
   XBETA         => 0.0,
 },
 NAM_CONF_PROJ_GRID=>{
   XLATCEN       => $ENV{LATC},
   XLONCEN       => $ENV{LONC},
   NIMAX         => 'BNIMAX,',
   NJMAX         => 'BNJMAX,',
   XDX           => 'BXDX,', 
   XDY           => 'BXDY,',
 },
 NAM_COVER=> {
   YCOVER        => 'YCOVER,',
   YCOVERFILETYPE=> '"DIRECT",',
   XRM_TM        => '0.00,',
 },
 NAM_ZS=>{
   YZS           => 'YTOPO,',
   YZSFILETYPE   => '"DIRECT",',
 },
 NAM_SEABATHY=>{
   XUNIF_SEABATHY=>'0.,', 
 },
 NAM_PGD_SCHEMES=>{
    CNATURE => '"ISBA ",',
    CSEA    => '"SEAFLX",',
    CWATER  => '"WATFLX",',
    CTOWN   => '"TEB ",',
 },
);

Most options here are specified in different scripts and are normally not supposed to be modified. Exceptions are e.g.

  • ECOCLIMAP version used (YCOVER) is decided by setting ECOCLIMAP_VERSION=2.2 (default) in config_exp.h. Available ECOCLIMAP versions provided via the SURFEX team are documented in SURFEX Land use description. Some of these can be available on your system, see your $HM_CLDATA setting.
  • Orography version used (YTOPO) is decided by setting TOPO_SOURCE=gmted2010 (default) in config_exp.h.
  • Option XRMTM in NAMCOVER is to remove tiny fractions of tiles. In XRMTM, the upper limit of fraction to remove should be given, for example XRMTM => '0.01,' will remove fractions of tiles (all of them) which are less then 1%. With XRM_TM => '0.00,' (which is the default now), no fractions are removed. (This option is needed to improve DA over different tiles, e.g. snow DA.)

PREP

PREP represents in general initialisation of prognostic variables. The default PREP settings are listed here. Some modifications can be done for specific model configurations and will be specified as e.g. alaro_prep or arome_prep.

%sice_prep=(
 NAM_SEAFLUXn=>{
    LHANDLE_SIC            =>'.TRUE.,',
    LSIC_FROM_FILE         =>'.TRUE.,',
    CSEA_ICE               =>'"SICE",',
    NICE_LAYER             =>'4,',
 },
 NAM_PREP_SEAFLUX=>{
    CFILE_SIC           =>'"CFILE_SIC",',
    CTYPE_SIC           =>'"GRIB  "',
 },
 NAM_SIMPLE_ICE=>{
    XICE_THICKNESS      =>'.75,',
    LICE_HAS_SNOW       =>'.FALSE.,',
    CICE_SNOW           =>'"S-D",',
    NICE_SNOW_NLAYERS   =>'4,',
    XICE_SNOW_HEIGHT    =>'.3,',
    LSIC_DRIVEN_THICKNESS=>'.FALSE.',
    XSIC_DRIVEN_MAX_THICKNESS=>'1.',
 },
 NAM_PREP_SIMPLE_ICE=>{
    LINIT_FROM_SST => '.TRUE.,',
 },
);
  • CSEA_ICE : selects preferred sea ice scheme.

    • NONE – use default SURFEX ICEFLUX diagnostic scheme
    • SICE – use SICE
  • LHANDLE_SIC : activates ice fraction handling

  • LSIC_FROM_FILE : ice fraction data from an external source

    • .TRUE. – use the externally provided ice fraction data
    • .FALSE. – assume that ice fraction data is encoded within SST field
  • NICE_LAYER : number of ice layers (2 < NICE_LAYER < 100)

  • CFILE_SIC : external data file that stores ice fraction data

  • CTYPE_SIC : type of external data source

  • XICE_THICKNESS : uniform thickness of the ice field

  • LICE_HAS_SNOW : snow upon the ice

    • .TRUE. – preform snow-enabled run
    • .FALSE. – use bare ice configuration
  • CICE_SNOW : snow scheme that used to parametrize snow upon the ice

    • S-D – test heat diffusion scheme
      • NICE_SNOW_NLAYERS : number of snow layers for S-D snow scheme
      • XICE_SNOW_HEIGHT : thickness of snow pack for S-D snow scheme
    • 3-L – use 3-L explicit snow scheme
  • LSIC_DRIVEN_THICKNESS : use ice fraction to estimate ice thickness. Untested, should be set to .FALSE.

  • XSIC_DRIVEN_MAX_THICKNESS : unused if LSIC_DRIVEN_THICKNESS == .FALSE.

  • LINIT_FROM_SST : use composite SST/SIST field to initialize sea ice temperatures

This part represents settings connected to the Simple Sea-ice Scheme (SICE) by Yurii Batrak. Please note that SICE is not yet an official contribution to SURFEX and therefore you will not find any documentation of SICE via the SURFEX web site.

%isba_prep=(
 NAM_PREP_ISBA=>{
   LISBA_CANOPY  => '.TRUE.,',
   LEXTRAP_TG    => '.TRUE.,',
   LEXTRAP_WG    => '.TRUE.,',
   LEXTRAP_WGI   => '.TRUE.,',
   LEXTRAP_SN    => '.TRUE.,',
   NDIM_EXTRAP   => '20,',
 },
 NAM_PREP_ISBA_SNOW=>{
   LSWEMAX       => '.TRUE.,',
 },
 NAM_DIAG_ISBAn=>{
   LPATCH_BUDGET=>'.TRUE.,',
 },
);
  • LISBA_CANOPY : activates surface boundary multi layer scheme over vegetation
  • LEXTRAP_XX : extrapolate XX points where LSM < 0.5 (buffer only)
  • NDIM_EXTRAP : Size of search domain for extrapolation (not in official SURFEX)
  • LSWEMAX : logical switch to set an upper limit on initial snow water equivalent (set by XSWEMAX (=500 kg/m2 default) ).
%fullpos_prep=(
 NAM_FILE_NAMES=>{
   HPGDFILE      =>'"PGDFILE",',
   CINIFILE      =>'"SURFXINI",',
 },
);

%offline_prep=(
 NAM_IO_OFFLINE=>{
   CSURF_FILETYPE       => '"LFI   ",',
   CPREPFILE            => '"SURFXINI",',
   CPGDFILE             => '"PGD",',
 },
 NAM_PREP_SURF_ATM=>{
   CFILEPGD      =>'"PGD_host",',
   CFILEPGDTYPE  =>'"LFI",',
   CFILE      =>'"INFILE",',
   CFILETYPE  =>'CFILETYPE,',
   NYEAR      =>'NYEAR,',
   NMONTH     =>'NMONTH,',
   NDAY       =>'NDAY,',
   XTIME      =>'XTIME,',
 },
);

Most options here are specified in different scripts and are normally not supposed to be modified.

%arome_prep=(
 NAM_PREP_SEAFLUX=>{
   LSEA_SBL     => '.FALSE.,',
 },
 NAM_SEAFLUXn=>{
    CSEA_ICE               =>'"NONE",',
    LHANDLE_SIC            =>'.FALSE.,',
 },
);

Please note these special settings for the AROME model configuration.

FORECAST

FORECAST represents in general the namelist settings used during Forecast. The default FORECAST settings are listed here. Some modifications can be done for specific model configurations and will be specified as e.g. alaro_forecast or arome_forecast.

%sice_forecast=(
 NAM_SEAFLUXn=>{
    LHANDLE_SIC            =>'.TRUE.,',
    LSIC_FROM_FILE         =>'.TRUE.,',
    CSEA_ICE               =>'"SICE",',
    NICE_LAYER             =>'4,',
 },
 NAM_SIMPLE_ICE=>{
    XICE_THICKNESS            => '.75,',
    LICE_HAS_SNOW             => '.FALSE.,',
    CICE_SNOW                 => '"S-D",',
    NICE_SNOW_NLAYERS         => '4,',
    XICE_SNOW_HEIGHT          => '.3,',
    LSIC_DRIVEN_THICKNESS     => '.FALSE.',
    XSIC_DRIVEN_MAX_THICKNESS => '1.',
 },
 NAM_DIAG_SURFn=>{
   LCOEF             => '.TRUE.,',
   LSURF_VARS        => '.TRUE.,',
 },
);

This part represents settings connected to the Simple Sea-ice Scheme (SICE) by Yurii Batrak. Please note that SICE is not yet an official contribution to SURFEX and therefore you will not find any documentation of SICE via the SURFEX web site.

%isba_forecast=(
 NAM_ISBAn=>{
   CROUGH        => '"NONE",',
 },
 NAM_DIAG_ISBAn=>{
   LPGD     => '.TRUE.,',
   LSURF_MISC_BUDGET=> '.TRUE.,',
 },
);

%forecast=(
 NAM_IO_OFFLINE=>{
  'CSURF_FILETYPE'      => '"LFI    ",',
  'CFORCING_FILETYPE'   => '"ASCII",',
  'CTIMESERIES_FILETYPE'=> '"LFI",',
  'XTSTEP_SURF'         => $ENV{TSTEP}.",",
  'XTSTEP_OUTPUT'       => '3600.,',
  'LRESTART'            => '.TRUE.,',
  'CPREPFILE'           => '"PREP",',
  'CPGDFILE'            => '"PGD",',
 },
 NAM_SURF_ATM=>{
   XRIMAX=>'0.0,',
 },
 NAM_DIAG_SURFn=>{
   LSURF_BUDGET      => '.TRUE.,',
   N2M      =>'2,',
 },
 NAM_DIAG_SURF_ATMn=>{
   LT2MMW            => '.TRUE.,',
 },
 NAM_DIAG_ISBAn=>{
   LPATCH_BUDGET  => '.TRUE.,',
 },
 NAM_SSOn=>{
   CROUGH   => "'".$ENV{CROUGH}."'",
   XFRACZ0  => '15.,',
 },
 NAM_SEAFLUXn=>{
  CSEA_FLUX => '"ECUME",',
  LPWG      => '.FALSE.,',
  LPRECIP   => '.FALSE.,',
  LPWEBB    => '.FALSE.,',
  CSEA_ICE    =>'"NONE",',
  LHANDLE_SIC =>'.FALSE.,',
  LPERTFLUX   => 'LPERTSURF,',
 },
 NAM_ISBAn=>{
  LCANOPY_DRAG => '.TRUE.,',
  XCDRAG       => '0.01,',
  LPERTSURF    => 'LPERTSURF,',
 },
);
  • XRIMAX: limitation of Richardson number in drag computation (=0 default).
  • N2M : flag to compute surface boundary layer characteristics (=0 default). N2M=2 computes temperature at 2 m, specific humidity at 2 m, relative humidity, zonal and meridian wind at 10 m, and Richardson number. 2m and 10m quantities are calculated interpolating between atmospheric forcing variables and surface temperature and humidity. Please note that if the surface boundary multi layer scheme is activated over any tile (as with LISBA_CANOPY=T over land) it overrides the diagnostic N2M method.
  • LT2MMW : Alternative weighting of grid average T2M giving more weight to the land tile (=FALSE default).
  • CROUGH: type of orographic roughness length. CROUGH is decided by setting CROUGH="NONE" in config_exp.h which means that no orographic treatment is applied.
  • XFRACZ0 : Z0=Min(Z0, Href/XFRACZ0). Not applied here since CROUGH="NONE".
  • LPERTFLUX: multiplicative perturbation of Ecume fluxes for ensemble forecasting. In HARMONIE this is set in a number of scripts under scr.
  • LPERTSURF: if .True. modification of surface fluxes for ensemble forecasting. In HARMONIE this is set in a number of scripts under scr.
  • LCANOPY_DRAG: drag activated in SBL scheme within the canopy.
  • XCDRAG: drag coefficient in canopy (=0.15 default in SURFEX).

ASSIMILATION

ASSIMILATION represents in general the surface assimilation namelist settings used for CANARI and SURFEX. The default ASSIMILATION settings are listed here. The SURFEX assimilation method used (OI or EKF) is decided by setting ANASURF=CANARI_OI_MAIN in config_exp.h. OI is default and EKF is still experimental.

%sice_assim=(
 NAM_SEAFLUXn=>{
    LHANDLE_SIC            =>'.TRUE.,',
    LSIC_FROM_FILE         =>'.TRUE.,',
    CSEA_ICE               =>'"SICE",',
    NICE_LAYER             =>'4,',
 },
 NAM_SIMPLE_ICE=>{
   LICE_HAS_SNOW       =>'.FALSE.,',
   XICE_THICKNESS      =>'.75,',
   CICE_SNOW           =>'"S-D",',
   NICE_SNOW_NLAYERS   =>'4,',
   XICE_SNOW_HEIGHT    =>'.3,',
   LSIC_DRIVEN_THICKNESS      =>'.FALSE.',
   XSIC_DRIVEN_MAX_THICKNESS  =>'1.',
 
},
 NAM_PREP_SEAFLUX=>{
    CFILE_SIC          => 'CFILE_SIC,',
    CTYPE_SIC          => '"GRIB  "',
    LSEA_SBL           => '.FALSE.',
 },
 NAM_PREP_SIMPLE_ICE=>{
    LINIT_FROM_SST             =>'.TRUE.,',
    LPREP_ONLY_NEW_ICE         =>'.TRUE.,',
    LEXTRAPOLATE_FROM_FORECAST =>'.TRUE.,',
    CFORECAST_GRIB             =>'CFORECAST_GRIB',
 },
);
  • LPREP_ONLY_NEW_ICE : perform prep in current grid cell only if ice state is undefined
  • LEXTRAPOLATE_FROM_FORECAST : use previous forecast to fill areas with new ice. If LINIT_FROM_SST == .TRUE. .AND. LEXTRAPOLATE_FROM_FORECAST == .TRUE. option LINIT_FROM_SST is forced to .FALSE.
  • CFORECAST_GRIB : previous forecast in GRIB format

This part represents settings connected to the Simple Sea-ice Scheme (SICE) by Yurii Batrak. Please note that SICE is not yet an official contribution to SURFEX and therefore you will not find any documentation of SICE via the SURFEX web site.

%assim_surfex=(
 NAM_NACVEG=>{
   NECHGU      => ''.$ENV{FCINT}.',',
   RCLIMCA     => '0.,',
   RCLISST     => '0.05,',
   SIGH2MO     => '0.10,',
   SIGT2MO     => '1.0,',
   LOBS2M      => '.TRUE.,',
   LOBSWG      => '.FALSE.,',
 },
 NAM_IO_OFFLINE=>{
   CSURF_FILETYPE       => 'CSURF_FILETYPE,',
   CTIMESERIES_FILETYPE => '"LFI ",',
   CFORCING_FILETYPE    => '"ASCII",',
   LRESTART             => '.TRUE.,',
   XTSTEP_SURF          => '3600.,',
   XTSTEP_OUTPUT        => '3600.,',
 },
 NAM_ASSIM=>{
   LASSIM              => '.TRUE.,',
   LEXTRAP_WATER       => '.TRUE.,',
   LEXTRAP_SEA         => '.FALSE.,',
   LEXTRAP_NATURE      => '.FALSE.',
   LREAD_SST_FROM_FILE => '.TRUE.,',
   LWATERTG2           => '.TRUE.,',
   LAESNM              => 'LAESNM,',
   LECSST              => 'LECSST,',
   LAROME              => 'LAROME,',
   NPRINTLEV           => '1,',
 },
);

%oi_main=(
 NAM_ASSIM=>{
   CASSIM_ISBA         => '"OI",',
 },
);

surfex_selected_output.pm

The output from SURFEX to the .sfx fa-files (e.g. ICMSHHARM+0002.sfx) is in general decided by SURFEX NAM_DIAG namelist settings. These settings activate or deactivate groups of variables in output files. When one or more such groups are activated it is possible to limit the output to a specific list of variables by the use of the LSELECT/CSELECT options in SURFEX. This way of specifying output from SURFEX is the default way in cy40h. The setting is SURFEX_LSELECT="yes" in config_exp.h. When SURFEX_LSELECT="yes" the namelist nam/surfex_selected_output.pm is used to specify the output variables. The style of surfex_selected_output.pm is

%surfex_output=(
 NAM_WRITE_DIAG_SURFn=>{
   NSTEP_DUMP_STATE => 'NSTEP_DUMP_STATE,',
   LSELECT     => '.TRUE.,',
   CSELECT     => '
"Z0",
"RNC",
"HC",


"T2M_P",
"T2MMIN_P",
"T2MMAX_P",'
 },);

Please note the " ' " character at the end of the last variable line "T2MMAX_P",'. Don't miss it, it is very important! The naming convention for variables in this file follows the SURFEX naming convention which is not exactly how they appear in fa-files. A fa-file output example from a .sfx file may look:

SFX.SST         > 001:011-  000-102@20160301_15:00+002h00m tri:000 000 SST
SFX.TS_WATER    > 001:011-  770-105@20160301_15:00+002h00m tri:000 000 TS_WATER
X001TG1         >                   20160301_15:00+002h00m         000
X001TG2         >                   20160301_15:00+002h00m         000
X001WG1         >                   20160301_15:00+002h00m         000
X001WG2         >                   20160301_15:00+002h00m         000
SFX.TROAD1      >                   20160301_15:00+002h00m         000
SFX.WS_ROAD     > 001:024-  950-105@20160301_15:00+002h00m tri:000 000 WS_ROAD

You get the corresponding SURFEX names by removing "SFX." or "X001" at the beginning of these fa-names.

The .sfx files are used as first guess for next forecast. However, the first guess needs ALL SURFEX variables and not only a subset as defined by LSELECT/CSELECT. Therefore, a full .sfx file (e.g. ICMSHFULL+0003.sfx) is created for each assimilation cycle hour in addition to the corresponding limited file ICMSHHARM+0003.sfx. The output frequency of full files is defined by SURFEX_DUMP_STATE_STEPS="" in config_exp.h.

The content of the FULL-files can be used to identify additional variables to add to surfex_selected_output.pm.

Change your namelists

There are several ways of changing namelists generated from the dictionary.

  • Copy the harmonie_namelist.pm file to your local experiment directory and change the right section like for any source or script modification.

  • If you feel uncertain where to change in the dictionary you can copy the actual namelist used in your run. Every namelist used is listed in the logfile so copy it from there and put it under the nam directory in your local experiment. Make sure you give it a unique name. You must then also change the script(s) using this namelist like in the Forecast script scr/Forecast.

#  Get namelist name
#NAMELIST=$WRK/$WDIR/namelist_forecast
#Get_namelist forecast $NAMELIST
NAMELIST=$HM_LIB/nam/namelist_forecast_with_a_unique_name

For namelists not present in the dictionary you just copy them to you local nam directory.

There is also a description on how to generate new namelist dictionaries here.