midas_analysisErrorOI

link to source code

Dependency Diagrams:

midas_analysisErrorOI.svg

Direct Dependency Diagram

program  midas_analysiserroroi
Purpose

Calculate analysis-error standard deviation given new assimilated observations. It only works for sea ice variables and uses a simple OI approach.

Algorithm

The Optimal Interpolation (OI) is a data assimilation approach where both the state and its estimated error are computed using observations while taking into account the specified uncertainties for both the observations and the background state (i.e. the R and B covariance matrices, respectively). The computations are done independently at each analysis grid point with only local observations, those that have a significant influence on the analysis at the grid point location. Here the code only implements the calculation to update the diagonal of the B covariance matrix.

Input and Output Files

Description of file

flnml

In - Main namelist file with parameters user may modify

trlm_01

In - Background-error standard deviation

analysisgrid

In - File defining grid for computing the analysis error

sea_ice_obs-err

In - Observation error statistics

bgstddev

In - Static background-error statistics

bgSeaIceConc

In - Background sea ice concentration

obsfiles_$FAM/obs$FAM_0001_0001

In - Observation file for each “family” (only 1 MPI task)

anlm_000m

Out - Analysis-error on the analysis grid

obsfiles_$FAM.updated/obs$FAM_0001_0001

Out - Updated obs file for each “family” (only 1 MPI task)

Synopsis

Below is a summary of the analysisErrorOI program calling sequence:

  • Initial setups:

    • Setup horizontal and vertical grid objects for “analysis grid” from trlm_01 file.

    • 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.

    • Filter out observations from satellites not specified in the name list: filt_iceConcentration.

    • Filter scatterometer backscatter anisotropy observations where wind speed is too small: filt_backScatAnisIce.

    • Setup observation-error for scatterometer backscatter anisotropy observations: oer_setErrBackScatAnisIce.

  • Main calculation:

    • Compute the analysis-error: aer_analysisError.

    • Update the Days Since Last Obs: aer_daysSinceLastObs.

    • Update the observation files: obsf_writeFiles.

Options

List of namelist blocks that can affect the analysisErrorOI program.

  • The relevant namelist blocks used to configure the analysis-error calculation 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

columndata_mod

NAMSTATE

name of the analysis variable (RPN nomvar, 4-character long), only sea ice concentration (GL) is allowed for now

gridstatevector_mod

obsspacedata_mod

NAMDIMO

specify the maximum number of header and body elements

obsfilter_mod

NAMFILT

list of varno to use and bit flags (13-bit#) for filtering

obsfilter_mod

namPlatformIce

list of observation platforms to assimilate

sqliteread_mod

NAMSQLgl

list of varno to read from SQLite files for sea ice

sqliteread_mod

namSQLUpdate

list of elements to update in SQLite files

sqliteread_mod

namSQLInsert

place holder, could be empty

analysisErrorOI_mod

NAMAER

set the maximum analysis-error std dev. allowed

Needed modules

  • version_mod: MODULE version_mod (prefix=’ver’ 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’)

  • message_mod: MODULE message_mod (prefix=’msg’ 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’)

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

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

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

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

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

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

  • obsfilter_mod: MODULE obsFilter_mod (prefix=’filt’ category=’5. Observation operators’)

  • analysiserroroi_mod: MODULE analysisErrorOI_mod (prefix=’aer’ category=’1. High-level functionality’)

Routines called

ver_printnameandversion(), mmpi_initialize(), utl_tmg_start(), ram_setup(), tim_setup(), utl_abort(), obsf_setup(), tim_getdatestamp(), tim_setdatestamp(), mpc_printconstants(), gsv_setup(), msg_memusage(), msg(), hco_setupfromfile(), vco_setupfromfile(), col_setvco(), inn_setupobs(), col_setup(), col_allocate(), obs_numheader(), oer_setobserrors(), obs_famexist(), filt_iceconcentration(), filt_backscatanisice(), oer_seterrbackscatanisice(), aer_analysiserror(), obsf_filessplit(), obs_expandtompiglobal(), obsf_writefiles(), obs_mpiredistribute(), obs_finalize(), utl_tmg_stop()