3. Running EnKF

Input Data Required to Run EnKF

This chapter discusses the process of running EnKF cases. It includes:

  1. Discussions of the input data required to run EnKF.
  2. A detailed explanation of how to run both a regional and global EnKF with the released run scripts.
  3. Introduction to the files in a successful regional and global EnKF run directory

Input Data Required to Run EnKF

In most cases, three types of input data, ensemble mean and members, observations, and fixed files, must be available before running EnKF.
1. Ensemble mean and members
The ensemble members and ensemble mean of certain regional and global ensemble forecast systems are used as the background for the EnKF analysis. When this EnKF system is used for regional analysis with WRF ensembles, the ensemble members and ensemble mean follow the naming convention:
firstguess.mem001
firstguess.mem002
... ...
firstguess.ensmean

Please note that the number of allocated computer cores to run EnKF must be larger than the ensemble size. The ensemble members can be generated using various methods, such as:

  • Using global/regional ensemble forecasts.
  • Ensemble forecasts generated using multi-physics, multi-models, or adding random perturbations drawn from climatology.
  • In cycling assimilation, using ensemble forecasts initialized from previous ensemble analyses generated by EnKF.

This version EnKF can use any of the following ensemble files as the background:

  • ARW NetCDF forecast
  • NMM NetCDF forecast
  • GFS forecast files
2. Prepare observation ensemble priors (observation innovation)
In addition to the ensemble backgrounds on model grids, the ensemble priors of all observations (observation innovation for all ensemble members) are also needed to run EnKF. The observation ensemble priors are generated by running GSI observation forward operators with the ensemble members as backgrounds (without doing actual GSI analyses). In this release, the GSI v3.7 run script includes options for generating the observation ensemble priors (details in section 3.2). The observation ensemble priors files should follow the following naming conventions:
  • For conventional observations:

    diag_conv_ges.mem001
    diag_conv_ges.mem002
    ... ...
    diag_conv_ges.ensmean
    
  • For radiance observations:

    diag_instrument_Satellite.mem001 (e.g. diag_hirs4_n19.mem001)
    diag_ instrument_Satellite.mem002 (e.g. diag_hirs4_n19.mem002)
    ... ...
    diag_ instrument_Satellite.ensmean (e.g. diag_hirs4_n19.ensmean)
    

These diag files contain a lot of information about each observation. For more details on the content of diag files, please refer to the GSI Users Guide Appendix A.2. The preparation of observations for EnKF assimilation is done within GSI, including quality control of observations, selection of observation types for assimilation, and observation error tuning. In the default namelist situation, NO additional online quality control of observations is performed in the EnKF analysis step (although there is an option to do the similar quality control of observations as the GSI variational scheme.)

3. Fixed files
EnKF uses the the same fixed files as GSI to setup the analysis configurations. Detailed explanation of all fixed files provided in the community GSI system is in the GSI users Guide, Chapter 3. The following is a list of fixed files needed for EnKF analyses:
  • for observation control:

    convinfo - conventional data (prepufr) info file
    ozinfo - ozone retrieval info file
    satinfo - satellite channel info file
    
  • when satellite radiance data are assimilated, the following files are needed to do the adaptive radiance bias correction:

    satbias_in - satellite bias correction coefficient file
    satbias_pc - satellite bias correction coefficient file for passive channels
    

Note that this version EnKF uses adaptive bias correction. The bias correction coefficients are in a single file that combined satellite angle dependent and mass bias correction coefficients. See GSI Users Guide for more detail. When the namelist parameter readin_localization is set to true, file hybens_locinfo is needed, in which customized localization values varying by model level are contained.

EnKF and GSI Observer Run Scripts

In this release version, four sample run scripts for EnKF applications are under directory comGSIv3.7_EnKFv1.3/run:

  • ush/comgsi_run_regional.ksh for running regional GSI to generate the observation ensemble priors. Referred to as the GSI observer run scripts.
  • ush/comgsi_run_global.ksh is GSI observer run script for global applications (to generate the observation ensemble priors).
  • ush/comenkf_run_regional.ksh for running regional EnKF
  • ush/comenkf_run_global.ksh for running global EnKF

These run scripts are introduced in detail in the following sections. Also provided are three scripts for generating the GSI and EnKF namelist:

  • ush/comgsi_namelist.sh generates GSI namelist on the fly (called by GSI observer run scripts).
  • ush/comgsi_namelist_gfs.sh generates GSI namelist on the fly (called by GSI observer run scripts) for global GSI applications.
  • ush/comenkf_namelist.sh generates EnKF namelist on the fly (called by EnKF run script) for regional EnKF applications.

General Introduction to the Run Scripts

These run scripts provide the run time environment necessary for running the GSI and EnKF executables. They all have similar steps, as follows:

  1. Request computer resources to run GSI/EnKF.
  2. Set environmental variables for the machine architecture.
  3. Set experimental variables (such as experiment name, analysis time, background, and observation).
  4. Check the definitions of required variables. Generate a run directory for GSI/EnKF
  5. Copy the GSI/EnKF executable to the run directory.
  6. Copy/Link the background file/ensemble files to the run directory.
  7. Link observations to the run directory.
  8. Link fixed files (statistic, control, and coefficient files) to the run directory.
  9. Generate namelist for GSI/EnKF.
  10. Run the GSI/EnKF executable.
  11. Post-process: save analysis results, generate diagnostic files, clean run directory.

In the GSI Users Guide, three sections explain the first three steps in detail:

  • Section 3.2.2.1: Setting up the machine environment (step 1)
  • Section 3.2.2.2: Setting up the running environment (step 2)
  • Section 3.2.2.3: Setting up an analysis case (step 3)

For this documentation, the first 2 steps will be skipped and the 3rd step in the GSI observer and EnKF run scripts will be discussed. The community GSI analysis run script and the GSI observer run script are the same, with the GSI observer capability controlled by flags that turn off the minimization, select appropriate namelist options and enable looping through all the ensemble members to generate the ensemble observation priors for each member, including the ensemble mean.

GSI Observer Run Scripts

Setting up a case

This section discusses variables specific to the users case, such as analysis time, working directory, background and observation files, location of fixed files and CRTM coefficients, and the GSI executable file. The script looks like:

#####################################################
# case set up (users should change this part)
#####################################################
#
# ANAL_TIME= analysis time  (YYYYMMDDHH)
# WORK_ROOT= working directory, where GSI runs
# PREPBURF = path of PreBUFR conventional obs
# BK_FILE  = path and name of background file
# OBS_ROOT = path of observations files
# FIX_ROOT = path of fix files
# GSI_EXE  = path and name of the gsi executable
# ENS_ROOT = path where ensemble background files exist
  ANAL_TIME=2017051318
  JOB_DIR=the_job_directory
     #normally you put run scripts here and submit jobs form here,
     #require a copy of gsi.x at this directory
  RUN_NAME=a_descriptive_run_name_such_as_case05_3denvar_etc
  OBS_ROOT=the_directory_where_observation_files_are_located
  BK_ROOT=the_directory_where_background_files_are_located
  GSI_ROOT=the_comgsi_main directory where src/ ush/ fix/ etc are located
  CRTM_ROOT=the_CRTM_directory
  ENS_ROOT=the_directory_where_ensemble_backgrounds_are_located
      #ENS_ROOT is not required if not running hybrid EnVAR
  HH=`echo $ANAL_TIME | cut -c9-10`
  GSI_EXE=${JOB_DIR}/gsi.x  #assume you have a copy of gsi.x here
  WORK_ROOT=${JOB_DIR}/${RUN_NAME}
  FIX_ROOT=${GSI_ROOT}/fix
  GSI_NAMELIST=${GSI_ROOT}/ush/comgsi_namelist.sh
  PREPBUFR=${OBS_ROOT}/nam.t${HH}z.prepbufr.tm00
  BK_FILE=${BK_ROOT}/wrfinput_d01.${ANAL_TIME}

The options ANAL_TIME, WORK_ROOT, PREPBURF, BK_FILE, OBS_ROOT, FIX_ROOT, GSI_EXE are all the same settings as the GSI analysis configuration. Two options: BK_ROOT , GSI_ROOT, are the root directories for ensemble members and the GSI system. These exist to make links to the background and GSI system easy and shorter. The new option: GSI_NAMELIST is needed because the namelist section was taken out of the run scripts in this release as a separate file to improve the structure and readability of the run scripts. Users can find the namelist files for both GSI and EnKF in the same directory as the run scripts. Please note the option BK_FILE is pointing to the ensemble mean. The next part of this block has additional options to specify other important aspects of the GSI observer.

#------------------------------------------------
# bk_core= which WRF core is used as background (NMM or ARW or NMMB)
# bkcv_option= which background error covariance and parameter will be used
#              (GLOBAL or NAM)
# if_clean = clean  : delete temperal files in working directory (default)
#            no     : leave running directory as is (this is for debug only)
# if_observer = Yes  : only used as observation operater for enkf
# if_hybrid   = Yes  : Run GSI as 3D/4D EnVar
# if_4DEnVar  = Yes  : Run GSI as 4D EnVar
# if_nemsio = Yes    : The GFS background files are in NEMSIO format
# if_oneob  = Yes    : Do single observation test
  if_hybrid=No     # Yes, or, No -- case sensitive !
  if_4DEnVar=No    # Yes, or, No -- case sensitive (set if_hybrid=Yes first)!
  if_observer=No   # Yes, or, No -- case sensitive !
  if_nemsio=No     # Yes, or, No -- case sensitive !
  if_oneob=No      # Yes, or, No -- case sensitive !

  bk_core=ARW
  bkcv_option=NAM
  if_clean=clean
...
# The following two only apply when if_observer = Yes, i.e. run observation operator for EnKF
# no_member     number of ensemble members
# BK_FILE_mem   path and base for ensemble members
  no_member=20
  BK_FILE_mem=${BK_ROOT}/wrfarw.mem

The options bk_core, bkcv_option, and, if_clean are the same as in the GSI analysis run scripts. The new option if_observer indicates if this GSI run is for the generation of the observation ensemble priors or for a regular GSI run. The new option no_member specifies the number of ensemble members that are need to be calculated for the observation ensemble priors. This should also be the ensemble number in the EnKF analysis. Option BK_FILE_mem is the path and the name of the ensembles without the ensemble member ID appended. The scripts will add the ensemble member ID as a three digital number, such as 000, 001,….

Loop through ensemble members

As mentioned previously, the GSI ensemble observer run scripts are the same as the GSI analysis run scripts released with the community GSI. Since the observer only generates diag files, which includes useful information on the observation innovation, the GSI outer loop number for the observer should be set to 0 to skip all minimization iterations.

The contents of the run scripts can be divided into two parts, those before the following comments and those after:

#################################################
# start to calculate diag files for each member
#################################################

Before this comment, the scripts have the same functionality as when running a GSI analysis, except that the background options in the scripts for the observer funcationality are set for the ensemble mean. Additionally, the namelist is built with the two following options set, which skips the minimization and saves all observation processing from the ensemble mean:

if [ ${if_observer} = Yes ] ; then
  nummiter=0
  if_read_obs_save='.true.'
  if_read_obs_skip='.false.'
else

Please refer to the GSI users guide for detailed explanation of the remainder of this portion of the run scripts. The second portion of the script loops through each member to calculate the observation ensemble priors based on the GSI run environments setup by the first portion.

Listed below is an annotated version of the 2nd part of the GSI observer run script with explanations on each function block.

if [ ${if_observer} = Yes ] ; then

This 2nd part of the script only runs if option if_observer is set to “Yes”. The diag files from the ensemble mean need to be saved first with the following commands:

string=ges
for type in $listall; do
  count=0
  if [[ -f diag_${type}_${string}.${ANAL_TIME} ]]; then
     mv diag_${type}_${string}.${ANAL_TIME} diag_${type}_${string}.ensmean
  fi
done
mv wrf_inout wrf_inout_ensmean

The following section builds the namelist for ensemble members. Please note two options need to be set different between mean and members:

# Build the GSI namelist on-the-fly for each member
  nummiter=0
  if_read_obs_save='.false.'
  if_read_obs_skip='.true.'
. $GSI_NAMELIST

The option if_read_obs_save and if_read_obs_skip switch from “True” and “False”, respectively for the mean to “False” and “True”, respectively for the ensemble members.

This saves all observation processing information (including bias correction, thinning, etc) from the ensemble mean and save the same information for the ensemble members to keep observations constant.

The script loops through each ensemble member (from member 001 to no_member) to create the diag files for each member:

# Loop through each member
  loop="01"
  ensmem=1
  while [[ $ensmem -le $no_member ]];do

     rm pe0*

     print "\$ensmem is $ensmem"
     ensmemid=`printf %3.3i $ensmem`

After a member is processed, the script removes the old ensemble member and links to the new member before rerunning the calculation:

# get new background for each member
     if [[ -f wrf_inout ]]; then
       rm wrf_inout
     fi

     BK_FILE=${BK_FILE_mem}${ensmemid}
     echo $BK_FILE
     ln -s $BK_FILE wrf_inout

Run the GSI observer for this member:

#  run  GSI
     echo ' Run GSI with' ${bk_core} 'for member ', ${ensmemid}

     case $ARCH in
        'IBM_LSF')
           ${RUN_COMMAND} ./gsi.exe < gsiparm.anl > stdout_mem${ensmemid} 2>&1  ;;

        * )
           ${RUN_COMMAND} ./gsi.exe > stdout_mem${ensmemid} 2>&1 ;;
     esac

#  run time error check and save run time file status
     error=$?

     if [ ${error} -ne 0 ]; then
       echo "ERROR: ${GSI} crashed for member ${ensmemid} Exit status=${error}"
       exit ${error}
     fi

     ls -l * > list_run_directory_mem${ensmemid}

Generate diag files for this member:

# generate diag files

     for type in $listall; do
           count=`ls pe*${type}_${loop}* | wc -l`
        if [[ $count -gt 0 ]]; then
           cat pe*${type}_${loop}* > diag_${type}_${string}.mem${ensmemid}
        fi
     done

# next member
     (( ensmem += 1 ))

  done

fi

Since all members are using the same run directory, the run status of each member is overwriten by the following member. The stdout file and the file list in run directory are preserved with the ensemble member ID for debug.

Sample Regional EnKF Run Scripts

As described in section 3.2.1, the regional EnKF run scripts have been designed to have a similar structure to the GSI analysis and observer run scripts. Again, please refer to the GSI Users Guide section 3.2.2.1 and 3.2.2.2 for the first two steps.

The 3rd step is to setup the variables specific to the users case, such as analysis time, working directory, background and observation files, location of fixed files and CRTM coefficients, and the EnKF executable. Most of the options in this portion are the same as the 3rd step in the GSI observer run scripts, which is discussed in section 3.2.2 of this Users Guide. Users should setup most of the variables in this portion based on the options in the GSI observer run scripts as they are the variables to setup the same things for the GSI and EnKF. The following is a sample script with explanations:

#####################################################
# case set up (users should change this part)
#####################################################
#
# ANAL_TIME= analysis time  (YYYYMMDDHH)
# WORK_ROOT= working directory, where GSI runs
# PREPBURF = path of PreBUFR conventional obs
# OBS_ROOT = path of observations files
# FIX_ROOT = path of fix files
# ENKF_EXE  = path and name of the EnKF executable
  ANAL_TIME=2014021300  #used by comenkf_namelist.sh
  JOB_DIR=the_job_directory
     #normally you put run scripts here and submit jobs form here, require a copy of enkf_wrf.x at this directory
  RUN_NAME=a_descriptive_run_name_such_as_case05_3denvar_etc
  OBS_ROOT=the_directory_where_observation_files_are_located
  BK_ROOT=the_directory_where_background_files_are_located
  GSI_ROOT=the_comgsi_main directory where src/ ush/ fix/ etc are located
  CRTM_ROOT=the_CRTM_directory
  diag_ROOT=the_observer_directory_where_diag_files_exist
  ENKF_EXE=${JOB_DIR}/enkf_wrf.x
  WORK_ROOT=${JOB_DIR}/${RUN_NAME}
  FIX_ROOT=${GSI_ROOT}/fix
  ENKF_NAMELIST=${GSI_ROOT}/ush/comenkf_namelist.sh

Options ANAL_TIME, BK_ROOT, BK_FILE, GSI_ROOT, FIX_ROOT, CRTM_ROOT have the same meanings as the ensemble GSI observer run scripts and should be set to the same values as the ensemble GSI observer run scripts. The option WORK_ROOT is the working directory which should have enough space to hold the ensemble members and EnKF analysis results. The option diag_ROOT is pointing to the run directory of the GSI observer, where the diag files are generated as data input for the EnKF. The option ENKF_EXE points to the EnKF executable, which is under the GSI source code directory in this release. The option ENKF_NAMELIST is the path and the EnKF namelist file, which sits outside of the run script as a separate file like the GSI namelist. Users can find the namelist files for both GSI and the EnKF in the same directory as the run scripts.

The next part of this block includes several additional options that specify several aspects of the ensemble members.

# ensemble parameters
#
  NMEM_ENKF=20
  BK_FILE_mem=${BK_ROOT}/wrfarw
  NLONS=129
  NLATS=70
  NLEVS=50
  IF_ARW=.true.
  IF_NMM=.false.
  list="conv"
#  list="conv amsua_n18 mhs_n18 hirs4_n19"

Options NMEM_ENKF, BK_FILE_mem are also in the GSI observer run script and should be set to the same values as the GSI observer run script. Options NLONS, NLATS, and NLEVS specify 3 dimensions (XYZ ) of the ensemble grid. Options IF_ARW and IF_NMM indicates which background, ARW NetCDF ensemble or the NMM NetCDF ensemble, is used in this EnKF run. Option list is a list of the observation types that the EnKF will use in the analysis. This list should be based on the diag files generated by the ensemble GSI observer.

At this point, users should be able to run the EnKF for simple cases without changing the rest of the script. However, some advanced users may need to change some of the following blocks for special applications.

#####################################################
# Users should NOT change script after this point
#####################################################

The next block sets the run command to run EnKF on multiple platforms. The ARCH is set at the beginning of the script.

case $ARCH in
   'IBM_LSF')
      ###### IBM LSF (Load Sharing Facility)
      RUN_COMMAND="mpirun.lsf " ;;

   'LINUX')
      if [ $GSIPROC = 1 ]; then
         #### Linux workstation - single processor
         RUN_COMMAND=""
      else
         ###### Linux workstation -  mpi run
        RUN_COMMAND="mpirun -np ${GSIPROC} -machinefile ~/mach "
      fi ;;

   'LINUX_LSF')
      ###### LINUX LSF (Load Sharing Facility)
      RUN_COMMAND="mpirun.lsf " ;;

   'LINUX_PBS')
      #### Linux cluster PBS (Portable Batch System)
#      RUN_COMMAND="mpirun -np ${GSIPROC} " ;;
      RUN_COMMAND="mpiexec_mpt -n ${GSIPROC} " ;;

   'DARWIN_PGI')
      ### Mac - mpi run
      if [ $GSIPROC = 1 ]; then
         #### Mac workstation - single processor
         RUN_COMMAND=""
      else
         ###### Mac workstation -  mpi run
         RUN_COMMAND="mpirun -np ${GSIPROC} -machinefile ~/mach "
      fi ;;

   * )
     print "error: $ARCH is not a supported platform configuration."
     exit 1 ;;
esac

The following block sets up fixed files and some analysis-time related values:

# Given the analysis date, compute the date from which the
# first guess comes.  Extract cycle and set prefix and suffix
# for guess and observation data files
# gdate=`$ndate -06 $adate`
gdate=$ANAL_TIME
YYYYMMDD=`echo $adate | cut -c1-8`
HH=`echo $adate | cut -c9-10`

# Fixed files
# CONVINFO=${FIX_ROOT}/global_convinfo.txt
# SATINFO=${FIX_ROOT}/global_satinfo.txt
# SCANINFO=${FIX_ROOT}/global_scaninfo.txt
# OZINFO=${FIX_ROOT}/global_ozinfo.txt
CONVINFO=${diag_ROOT}/convinfo
SATINFO=${diag_ROOT}/satinfo
SCANINFO=${diag_ROOT}/scaninfo
OZINFO=${diag_ROOT}/ozinfo
# LOCINFO=${FIX_ROOT}/global_hybens_locinfo.l64.txt

The next block creates a working directory (workdir) in which EnKF will run. The directory should have enough disk space to hold all the files needed for this run. This directory is cleaned before each run, therefore, save all the files needed from the previous run before rerunning EnKF.

# Set up workdir
rm -rf $WORK_ROOT
mkdir -p $WORK_ROOT
cd $WORK_ROOT

After creating a working directory, copy or link the EnKF executable, ensembles, diag files (observations), bias correction coefficients, and fixed files into the working directory.

cp $ENKF_EXE        ./enkf.x

cp $CONVINFO        ./convinfo
cp $SATINFO         ./satinfo
cp $SCANINFO        ./scaninfo
cp $OZINFO          ./ozinfo
# cp $LOCINFO         ./hybens_locinfo

cp $diag_ROOT/satbias_in ./satbias_in
cp $diag_ROOT/satbias_pc ./satbias_pc

# get mean
ln -s ${BK_FILE_mem}.ensmean ./firstguess.ensmean
for type in $list; do
   ln -s $diag_ROOT/diag_${type}_ges.ensmean .
done

# get each member
imem=1
while [[ $imem -le $NMEM_ENKF ]]; do
   member="mem"`printf %03i $imem`
   ln -s ${BK_FILE_mem}.${member} ./firstguess.${member}
   for type in $list; do
      ln -s $diag_ROOT/diag_${type}_ges.${member} .
   done
   (( imem = $imem + 1 ))
done

The following script is used to generate the EnKF namelist called enkf.nml in the working directory. Some namelist variables are explained in detail in Section 4.3. Appendix A gives a full list of namelist options.

# Build the GSI namelist on-the-fly
. $ENKF_NAMELIST
cat << EOF > enkf.nml

 $enkf_namelist

EOF

Copy the ensemble background files to the working directory and rename them as "analysis.${member}". The EnKF will update those files as the analysis results.

# make analysis files
cp firstguess.ensmean analysis.ensmean
# get each member
imem=1
while [[ $imem -le $NMEM_ENKF ]]; do
   member="mem"`printf %03i $imem`
   cp firstguess.${member} analysis.${member}
   (( imem = $imem + 1 ))
done

The following block runs EnKF and checks if the EnKF has successfully completed.

###################################################
#  run  EnKF
###################################################
echo ' Run EnKF'

${RUN_COMMAND} ./enkf.x < enkf.nml > stdout 2>&1

##################################################################
#  run time error check
##################################################################
error=$?

if [ ${error} -ne 0 ]; then
  echo "ERROR: ${ENKF_EXE} crashed  Exit status=${error}"
  exit ${error}
fi

If this point is reached, the EnKF successfully finishes and exits with 0:

exit

Understanding Resulting Files in GSI Observer and EnKF Run Directory

To check if the GSI observer and EnKF runs have been successfully finished, it is important to understand the meaning of each file in the run directory.

The GSI Observer Run Directory

After customizing the GSI observer run script to your personal environment, it may be submitted to the batch system just as any other job. Following a successful run, the majority of the files in the GSI observer run directory will be the same as those in a sucessful GSI analysis run directory. The difference for the observer run is that the GSI observer generates more diag and stdout files related to each ensemble member. Below is an example of the files generated in the run directory from a GSI observer run:

amsuabufr                       diag_amsua_n18_ges.mem010       fit_t1.2014021300          mhsbufr
amsubbufr                       diag_amsua_n18_ges.mem011       fit_w1.2014021300          obs_input.0001
anavinfo                        diag_amsua_n18_ges.mem012       fort.201                   obs_input.0002
berror_stats                    diag_amsua_n18_ges.mem013       fort.202                   obs_input.0003
convinfo                        diag_amsua_n18_ges.mem014       fort.203                   obs_input.0004
diag_amsua_metop-a_ges.ensmean  diag_amsua_n18_ges.mem015       fort.204                   obs_input.0006
diag_amsua_metop-a_ges.mem001   diag_amsua_n18_ges.mem016       fort.205                   obs_input.0010
diag_amsua_metop-a_ges.mem002   diag_amsua_n18_ges.mem017       fort.206                   obs_input.0019
diag_amsua_metop-a_ges.mem003   diag_amsua_n18_ges.mem018       fort.207                   obs_input.0021
diag_amsua_metop-a_ges.mem004   diag_amsua_n18_ges.mem019       fort.208                   obs_input.0022
diag_amsua_metop-a_ges.mem005   diag_amsua_n18_ges.mem020       fort.209                   obs_input.0026
diag_amsua_metop-a_ges.mem006   diag_conv_ges.ensmean           fort.210                   obs_input.0027
diag_amsua_metop-a_ges.mem007   diag_conv_ges.mem001            fort.211                   obs_input.0028
diag_amsua_metop-a_ges.mem008   diag_conv_ges.mem002            fort.212                   obs_input.0029
diag_amsua_metop-a_ges.mem009   diag_conv_ges.mem003            fort.213                   obs_input.0030
diag_amsua_metop-a_ges.mem010   diag_conv_ges.mem004            fort.214                   obs_input.common
diag_amsua_metop-a_ges.mem011   diag_conv_ges.mem005            fort.215                   ozinfo
diag_amsua_metop-a_ges.mem012   diag_conv_ges.mem006            fort.217                   pcpbias_out
diag_amsua_metop-a_ges.mem013   diag_conv_ges.mem007            fort.218                   pcpinfo
diag_amsua_metop-a_ges.mem014   diag_conv_ges.mem008            fort.219                   prepbufr
diag_amsua_metop-a_ges.mem015   diag_conv_ges.mem009            fort.220                   prepobs_prep.bufrtable
diag_amsua_metop-a_ges.mem016   diag_conv_ges.mem010            fort.221                   satbias_ang.out
diag_amsua_metop-a_ges.mem017   diag_conv_ges.mem011            fort.223                   satbias_in
diag_amsua_metop-a_ges.mem018   diag_conv_ges.mem012            fort.224                   satbias_out
diag_amsua_metop-a_ges.mem019   diag_conv_ges.mem013            fort.225                   satbias_out.int
diag_amsua_metop-a_ges.mem020   diag_conv_ges.mem014            fort.226                   satbias_pc
diag_amsua_n15_ges.ensmean      diag_conv_ges.mem015            fort.227                   satbias_pc.out
diag_amsua_n15_ges.mem001       diag_conv_ges.mem016            fort.228                   satinfo
diag_amsua_n15_ges.mem002       diag_conv_ges.mem017            fort.229                   sigf03
diag_amsua_n15_ges.mem003       diag_conv_ges.mem018            fort.230                   stdout
diag_amsua_n15_ges.mem004       diag_conv_ges.mem019            gpsrobufr                  stdout.anl.2014021300
diag_amsua_n15_ges.mem005       diag_conv_ges.mem020            gsi.exe                    stdout_mem001
diag_amsua_n15_ges.mem006       diag_hirs4_metop-a_ges.ensmean  gsiparm.anl                stdout_mem002
diag_amsua_n15_ges.mem007       diag_hirs4_metop-a_ges.mem001   hirs3bufr                  stdout_mem003
diag_amsua_n15_ges.mem008       diag_hirs4_metop-a_ges.mem002   hirs4bufr                  stdout_mem004
diag_amsua_n15_ges.mem009       diag_hirs4_metop-a_ges.mem003   l2rwbufr                   stdout_mem005
diag_amsua_n15_ges.mem010       diag_hirs4_metop-a_ges.mem004   list_run_directory         stdout_mem006
diag_amsua_n15_ges.mem011       diag_hirs4_metop-a_ges.mem005   list_run_directory_mem001  stdout_mem007
diag_amsua_n15_ges.mem012       diag_hirs4_metop-a_ges.mem006   list_run_directory_mem002  stdout_mem008
diag_amsua_n15_ges.mem013       diag_hirs4_metop-a_ges.mem007   list_run_directory_mem003  stdout_mem009
diag_amsua_n15_ges.mem014       diag_hirs4_metop-a_ges.mem008   list_run_directory_mem004  stdout_mem010
diag_amsua_n15_ges.mem015       diag_hirs4_metop-a_ges.mem009   list_run_directory_mem005  stdout_mem011
diag_amsua_n15_ges.mem016       diag_hirs4_metop-a_ges.mem010   list_run_directory_mem006  stdout_mem012
diag_amsua_n15_ges.mem017       diag_hirs4_metop-a_ges.mem011   list_run_directory_mem007  stdout_mem013
diag_amsua_n15_ges.mem018       diag_hirs4_metop-a_ges.mem012   list_run_directory_mem008  stdout_mem014
diag_amsua_n15_ges.mem019       diag_hirs4_metop-a_ges.mem013   list_run_directory_mem009  stdout_mem015
diag_amsua_n15_ges.mem020       diag_hirs4_metop-a_ges.mem014   list_run_directory_mem010  stdout_mem016
diag_amsua_n18_ges.ensmean      diag_hirs4_metop-a_ges.mem015   list_run_directory_mem011  stdout_mem017
diag_amsua_n18_ges.mem001       diag_hirs4_metop-a_ges.mem016   list_run_directory_mem012  stdout_mem018
diag_amsua_n18_ges.mem002       diag_hirs4_metop-a_ges.mem017   list_run_directory_mem013  stdout_mem019
diag_amsua_n18_ges.mem003       diag_hirs4_metop-a_ges.mem018   list_run_directory_mem014  stdout_mem020
diag_amsua_n18_ges.mem004       diag_hirs4_metop-a_ges.mem019   list_run_directory_mem015  wrfanl.2014021300
diag_amsua_n18_ges.mem005       diag_hirs4_metop-a_ges.mem020   list_run_directory_mem016  wrf_inout
diag_amsua_n18_ges.mem006       errtable                        list_run_directory_mem017  wrf_inout_ensmean
diag_amsua_n18_ges.mem007       fit_p1.2014021300               list_run_directory_mem018
diag_amsua_n18_ges.mem008       fit_q1.2014021300               list_run_directory_mem019
diag_amsua_n18_ges.mem009       fit_rad1.2014021300             list_run_directory_mem020

This case was a regional analysis with WRF/ARW NetCDF backgrounds. In this case, 20 ensemble members are used to generate the diag files. A brief introduction of the additional files in the GSI observer runs is given below:

  • diag_conv_ges.mem??? - Diag files of conventional observations for ensemble member ???.
  • diag_conv_ges.ensmean - Diag files of satellite radiance observation for ensemble mean.
  • stdout_mem??? - Standard output from GSI observer run for ensemble member ???.
  • list_run_directory_mem??? - The list of the files in the run directory after the GSI observer is finished for ensemble member ???.

Files in the EnKF Run Directory

After customizing the EnKF run script to your personal environment, it may be submitted to the batch system just as any other job. Upon successful assimilation, the ensemble analyses (both members and ensemble mean), covariance inflation factor to the ensemble analyses, and updated satellite bias correction coefficients (if requested) are output in the run directory. Below is an example of the files generated in the run directory from one of the EnKF regional test cases:

analysis.ensmean            diag_amsua_n18_ges.mem003  diag_conv_ges.mem008           firstguess.mem002
analysis.mem001             diag_amsua_n18_ges.mem004  diag_conv_ges.mem009           firstguess.mem003
analysis.mem002             diag_amsua_n18_ges.mem005  diag_conv_ges.mem010           firstguess.mem004
analysis.mem003             diag_amsua_n18_ges.mem006  diag_conv_ges.mem011           firstguess.mem005
analysis.mem004             diag_amsua_n18_ges.mem007  diag_conv_ges.mem012           firstguess.mem006
analysis.mem005             diag_amsua_n18_ges.mem008  diag_conv_ges.mem013           firstguess.mem007
analysis.mem006             diag_amsua_n18_ges.mem009  diag_conv_ges.mem014           firstguess.mem008
analysis.mem007             diag_amsua_n18_ges.mem010  diag_conv_ges.mem015           firstguess.mem009
analysis.mem008             diag_amsua_n18_ges.mem011  diag_conv_ges.mem016           firstguess.mem010
analysis.mem009             diag_amsua_n18_ges.mem012  diag_conv_ges.mem017           firstguess.mem011
analysis.mem010             diag_amsua_n18_ges.mem013  diag_conv_ges.mem018           firstguess.mem012
analysis.mem011             diag_amsua_n18_ges.mem014  diag_conv_ges.mem019           firstguess.mem013
analysis.mem012             diag_amsua_n18_ges.mem015  diag_conv_ges.mem020           firstguess.mem014
analysis.mem013             diag_amsua_n18_ges.mem016  diag_gome_metop-a_ges.ensmean  firstguess.mem015
analysis.mem014             diag_amsua_n18_ges.mem017  diag_gome_metop-b_ges.ensmean  firstguess.mem016
analysis.mem015             diag_amsua_n18_ges.mem018  diag_omi_aura_ges.ensmean      firstguess.mem017
analysis.mem016             diag_amsua_n18_ges.mem019  diag_sbuv2_n16_ges.ensmean     firstguess.mem018
analysis.mem017             diag_amsua_n18_ges.mem020  diag_sbuv2_n17_ges.ensmean     firstguess.mem019
analysis.mem018             diag_conv_ges.ensmean      diag_sbuv2_n18_ges.ensmean     firstguess.mem020
analysis.mem019             diag_conv_ges.mem001       diag_sbuv2_n19_ges.ensmean     ozinfo
analysis.mem020             diag_conv_ges.mem002       diff.nc                        satbias_ang.out
anavinfo                    diag_conv_ges.mem003       enkf.log                       satbias_in
convinfo                    diag_conv_ges.mem004       enkf.nml                       satbias_out.int
diag_amsua_n18_ges.ensmean  diag_conv_ges.mem005       enkf.x                         satbias_pc
diag_amsua_n18_ges.mem001   diag_conv_ges.mem006       firstguess.ensmean             satinfo
diag_amsua_n18_ges.mem002   diag_conv_ges.mem007       firstguess.mem001              stdout

This case was a regional analysis with WRF/ARW NetCDF backgrounds. In this case, 20 ensemble members are used to estimate ensemble covariance, and both conventional observations (prepbufr) and radiance observations (AMSU-A) are assimilated.

A brief introduction of the files is given in the table below:

stdout A text output file. This is the most commonly used file to check the analysis processes as well as basic and important information about the analyses. The contents of stdout are explained in detail in Chapter 4 and users are encouraged to read this file to become familiar with the order of EnKF analysis processing.
firstguess. mem001-0?? ensemble members of WRF background, in NetCDF format. This is in the same format as the WRF forecast. The ensemble background of the analysis variables are extracted from the files.
firstguess.ensmean ensemble mean of WRF background, in NetCDF format.
analysis.mem001-0?? ensemble analysis if EnKF completes successfully. The format is the same as the background file.
analysis.ensmean ensemble mean of analyses, in NetCDF format.
diag_conv_ges.mem001-0?? diag files in binary for conventional and GPS RO observations, which contain the observations and their priors.
covinflate.dat Three-dimensional multiplicative inflation factor fields (from function inflate_ens in module inflation). These inflation fields can be visualized using plotting software.
*info (convinfo, satinfo,…) info files that control data usage. Please see GSI User guide Chapter 4 for details.
satbias_in the input coefficients of bias correction for satellite radiance observations.
satbias_pc the input coefficients of satellite radiance bias correction for passive channels.

[ch3_table]