midas_obsImpact

link to source code

Dependency Diagrams:

midas_obsImpact.svg

Direct Dependency Diagram

program  midas_obsimpact
Purpose

Main program for computing the Forecast Sensitivity to Observation Impact (FSOI)

Algorithm

FSOI partitions the forecast error reduction within the current system from assimilating the observations. The total forecast error reduction defined as:

\((e_{t}^{fa})^{T}*C*(e_{t}^{fa})-(e_{t}^{fb})^{T}*C*(e_{t}^{fb})\)

where \(e_{t}^{fa}=M(x_{0}^{a})-x_{t}^{a}\)

and \(e_{t}^{fb}=M(x_{0}^{b})-x_{t}^{a}\)

and C is the energy norm.

In this program, there are the hybrid FSOI approach (HFSOI) and the ensemble FSOI (EFSOI) approaches. The hybrid approach is appropriate for computing the impact of observations assimilated with 4D-EnVar. It combines the ensemble approach for propagating the sensitivities from forecast to analysis time and the variational approach for the adjoint of the assimilation procedure. The ensemble approach is appropriate for computing the impact of observations assimilated with the LETKF. It relies purely on analysis and forecast ensemble for the calculation.

More details on HFSOI can be found in the paper: HFSOI approach

More details on EFSOI can be found in the paper:EFSOI approach

File I/O

The required input files and produced output files are listed as follows.

Input and Output Files

Description of file

flnml

In - Main namelist file with parameters user may modify

trlm_$NN (e.g. trlm_01)

In - Background state (a.k.a. trial) files for each timestep

analysisgrid

In - File defining grid for computing the analysis increment

bgcov

In - Static (i.e. NMC) B matrix file for NWP fields

ensemble/$YYYYMMDDHH_006_$NNNN

In - Ensemble member files defining ensemble B matrix

ensemble/$YYYYMMDDHH_foradv

In - advection files

obsfiles_$FAM/obs$FAM_$NNNN_$NNNN

In - Observation file for each “family” and MPI task

obserr

In - Observation error statistics

forecasts/forecast_*

In - Global deterministic forecast from backgroud and analysis

forecasts/analysis

In - Verifying analysis

diafiles_$FAM.updated/obs$FAM_$NNNN_$NNNN

Out - Updated obs file for each “family” and MPI task in SQLite

Remainder are files related to radiance obs:

stats_$SENSOR_assim

In - Satellite radiance observation errors of difference sensors

stats_tovs

In - Satellite radiance observation errors

rtcoef_$PLATFORM_$SENSOR.**

In - RTTOV coefficient files

rttov_h2o_limits.dat

In - Min/Max humidity limits

stats_tovs_symmetricObsErr

In - user-defined symmetric TOVS errors for all sky

Cmat_$PLATFORM_$SENSOR.dat

In - Inter-channel observation-error correlations

Synopsis

Below is a summary of the obsImpact program calling sequence:

  • Initial setups:

    • Initialize FSOI module, read the namelist from fso_setup

    • Setup horizontal and vertical grid objects for “analysis grid” from analysisgrid file and for “trial grid” from first trial file: trlm_01.

    • Setup obsSpaceData object and read observations from files: inn_setupObs.

    • Setup columnData and gridStateVector modules (read list of analysis variables from namelist) and allocate column object for storing trial on analysis levels.

    • Setup the observation error statistics in obsSpaceData object: oer_setObsErrors.

    • Allocate a stateVector object on the trial grid and then read the trials: gio_readTrials.

    • Setup the B matrices: bmat_setup.

    • Setup the gridVariableTransforms.

  • Computation:

    • incdatr: Setup dateStamp(one extra timestamp: leadTime) for FSOI.

    • inn_computeInnovation: Compute innovation

    • calcFcstError: Read the forcasts from background and analysis, and

      the verifying analysis as well, calculate the forecast error norm defined as: \((C*(e_{t}^{fa}+e_{t}^{fb}))\).

    • bmat_sqrtBT: Compute the variable \(\hat{v}\) for minimization in HFSO mode.

      \(\hat{v}=B_{t}^{T/2}*C*(e_{t}^{fa}+e_{t}^{fb})\)

    • minimize: Do the minimization to apply the adjoint of the 4D-EnVar assimilation

      to \(\hat{v}\) with the result being \(\hat{a}\).

    • bmat_sqrt: Compute \(B^{1/2}*\hat{a}\) .

    • s2c_tl, oop_Htl: Apply the observation operators \(H*B^{1/2}*\hat{a}\) .

    • rmat_RsqrtInverseAllObs: Multiply by the inverse of the observation error variances

      \(R^{-1}*H*B^{1/2}*\hat{a}\)

    • obs_bodySet_r: Multiply the resulting sensitivity value by the innovation and put

      the result in the obsSpaceDate column OBS_FSO so it can be stored in the observation files

    • sumFSO: Print out the FSOI value, including total and the one from each obs family.

  • Final steps:

    • obsf_writeFiles: Write the final FSOI value in SQLite file.

Options

List of namelist blocks that can affect the obsImpact program.

  • The use of obsImpact program is controlled mainly by the namelist block &NAMFSO read by the fso_mod module.

  • Some of the other relevant namelist blocks used to configure FSOI are listed in the following table:

Module

Namelist

Description of what is controlled

timeCoord_mod

NAMTIME

assimilation time window length, temporal resolution of the background state and increment

bMatrixEnsemble_mod

NAMBEN

weight and other parameters for ensemble-based B matrix component

Needed modules

  • version_mod: MODULE version_mod (prefix=’ver’ category=’8. Low-level utilities and constants’)

  • codeprecision_mod: MODULE codePrecision_mod (prefix=’pre’ category=’8. Low-level utilities and constants’)

  • ramdisk_mod: MODULE ramDisk_mod (prefix=’ram’ category=’8. Low-level utilities and constants’)

  • utilities_mod: MODULE utilities_mod (prefix=’utl’ category=’8. Low-level utilities and constants’)

  • midasmpi_mod: MODULE midasMpi_mod (prefix=’mmpi’ category=’8. Low-level utilities and constants’)

  • mathphysconstants_mod: MODULE mathPhysConstants_mod (prefix=’mpc’ category=’8. Low-level utilities and constants’)

  • horizontalcoord_mod: MODULE horizontalCoord_mod (prefix=’hco’ category=’7. Low-level data objects’)

  • verticalcoord_mod: MODULE verticalCoord_mod (prefix=’vco’ category=’7. Low-level data objects’)

  • timecoord_mod: MODULE timeCoord_mod (prefix=’tim’ category=’7. Low-level data objects’)

  • columndata_mod: MODULE columnData_mod (prefix=’col’ category=’6. High-level data objects’)

  • obsspacedata_mod: MODULE obsSpaceData_mod (prefix=’obs’ category=’6. High-level data objects’)

  • gridstatevector_mod: MODULE gridStateVector_mod (prefix=’gsv’ category=’6. High-level data objects’)

  • gridstatevectorfileio_mod: MODULE gridStateVectorFileIO_mod (prefix=’gio’ category=’4. Data Object transformations’)

  • bmatrix_mod: MODULE bMatrix_mod (prefix=’bmat’ category=’2. B and R matrices’)

  • innovation_mod: MODULE innovation_mod (prefix=’inn’ category=’1. High-level functionality’)

  • obsfiles_mod: MODULE obsFiles_mod (prefix=’obsf’ category=’3. Observation input/output’)

  • obserrors_mod: MODULE obsErrors_mod (prefix=’oer’ category=’2. B and R matrices’)

  • gridvariabletransforms_mod: MODULE gridVariableTransforms_mod (prefix=’gvt’ category=’4. Data Object transformations’)

  • fsoi_mod: MODULE fsoi_mod (prefix=’fso’ category=’1. High-level functionality’)

Routines called

ver_printnameandversion(), mmpi_initialize(), utl_tmg_start(), utl_writestatus(), ram_setup(), tim_setup(), obsf_setup(), tim_getdatestamp(), tim_setdatestamp(), utl_abort(), mpc_printconstants(), pre_printprecisions(), gsv_setup(), hco_setupfromfile(), fso_setup(), vco_setupfromfile(), col_setvco(), inn_setupobs(), col_setup(), col_allocate(), obs_numheader(), oer_setobserrors(), inn_gethcovcofromtrlmfile(), gsv_allocate(), gsv_zero(), gio_readtrials(), inn_setupcolumnsontrllev(), bmat_setup(), gvt_setup(), gvt_setupreffromtrialfiles(), inn_setupcolumnsonanlinclev(), inn_computeinnovation(), fso_ensemble(), bmat_finalize(), obsf_filessplit(), obs_expandtompiglobal(), obsf_writefiles(), obs_mpiredistribute(), obs_finalize(), utl_tmg_stop()