midas_var1D

link to source code

Dependency Diagrams:

midas_var1D.svg

Direct Dependency Diagram

program  midas_var1d
Purpose

Main program for one dimensional variational minimization

Algorithm

This program performs a similar data assimilation procedure as the var program, except without taking into account the horizontal or temporal dimensions. The assimilation is performed separately at each horizontal location and time where observations are present. The B matrix can be either an explicit representation of the covariances produced by the program extractBmatrixFor1Dvar or from an ensemble (controlled by the namelists). The resulting analysis and analysis increment at the observation locations/times are output in standard files on a “Y” grid.

File I/O

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

Input and Output Files (NWP application)

Description of file

flnml

In - Main namelist file with parameters user may modify

flnml_static

In - The “static” namelist that should not be modified

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

Bmatrix_sea.bin

In - 1DVar Bmatrix file over sea (output from extractBmatrixFor1DVar)

Bmatrix_land.bin

In - 1DVar Bmatrix file over land (output from extractBmatrixFor1DVar)

obsfiles_$FAM/obs$FAM_$NNNN_$NNNN

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

obserr

In - Observation error statistics

rttov_h2o_limits.dat

In - minimum and maximum humidity profile to clip analysis

pm1q

In/Out - Preconditioning file (Hessian of the cost function)

rebm_$MMMm (e.g. rebm_180m)

Out - Analysis increment on Y grid

anlm_$MMMm

Out - Analysis on Y grid

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

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

Remainder are files related to radiance obs:

stats_tovs

In - Observation error file for radiances

stats_tovs_symmetricObsErr

In - user-defined symmetric TOVS errors for all sky

Cmat_$PLATFORM_$SENSOR.dat

In - Inter-channel observation-error correlations

rtcoef_$PLATFORM_$SENSOR.H5

In - RTTOV coefficient file HDF-5 format

rtcoef_$PLATFORM_$SENSOR.dat

In - RTTOV coefficient file ASCII format

ozoneclim98

In - ozone climatology standard file (Fortuin and Kelder)

Synopsis

Below is a summary of the var1D program calling sequence:

  • Initial setups:

    • Initialize temporal grid

    • Initialize observation file names and set date stamp

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

    • Setup obsSpaceData object and read observations from files: inn_setupObs

    • Setup columnData module

    • Setup the observation error statistics in obsSpaceData object: oer_setObsErrors

    • Setup the gridStateVector module (initialize list of analyzed variables)

    • Get horizontal and vertical grid descriptors from trial fields: inn_getHcoVcoFromTrlmFile, and allocate a gridStateVector objects

    • Read the trials: gio_readTrials

    • Setup the 1DVar B matrix: bmat1D_bsetup

    • Setup the gridVariableTransforms and minimization modules

    • Horizontally interpolate high-resolution stateVectorUpdate to trial columns: inn_setupColumnsOnTrlLev

    • Interpolate trial columns to analysis levels and setup for linearized H: inn_setupColumnsOnAnlIncLev

    • Compute observation innovations and prepare obsSpaceData for minimization: inn_computeInnovation

  • Minimization:

    • Do the minimization min_minimize to obtain controlVectorIncr

    • Get 1DVar increment from controlVectorIncr to columnAnlInc: bmat1D_get1DvarIncrement

    • Transfer increment to stateVectorIncr: var1D_transferColumnToYGrid

    • Write increment to file: inc_writeIncrement

  • Final step:

    • Release resources

    • Write hessian if requested to: min_writeHessian

    • Write updated observation files: obsf_writeFiles

Options

List of namelist blocks that can affect the var1D program.

  • The B matrix used by the var1D program is controlled by the namelist block &nambmat1D of module bmatrix1DVar_mod

    • scaleFactorHI scaling factors for HI variances

    • scaleFactorHIHumidity scaling factors for HI humidity variances

    • scaleFactorENs scaling factors for Ens variances

    • scaleFactorEnsHumidity scaling factors for Ens humidity variances

    • nEns number of ensemble members for the ensemble part of B matrix (negative means no ensemble)

    • vLocalize vertical localization length scale for the ensemble part of B matrix

    • includeAnlVar list of variable for the B matrix

    • numIncludeAnlVar number of variables in includeAnlVar (to be removed later)

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’)

  • 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’)

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

  • controlvector_mod: MODULE controlVector_mod (prefix=’cvm’ category=’6. High-level data objects’)

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

  • minimization_mod: MODULE minimization_mod (prefix=’min’ category=’1. High-level functionality’)

  • 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’)

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

  • increment_mod: MODULE increment_mod (prefix=’inc’ category=’1. High-level functionality’)

  • biascorrectionsat_mod: MODULE biasCorrectionSat_mod (prefix=’bcs’ category=’1. High-level functionality’)

  • var1d_mod: MODULE var1D_mod (prefix=’var1D’ category=’4. Data Object transformations’)

  • bmatrix1dvar_mod: MODULE bMatrix1DVar_mod (prefix=’bmat1D’ category=’2. B and R matrices’)

Routines called

ver_printnameandversion(), mmpi_initialize(), utl_tmg_start(), ram_setup(), tim_setup(), obsf_setup(), tim_getdatestamp(), tim_setdatestamp(), utl_abort(), mpc_printconstants(), hco_setupfromfile(), vco_setupfromfile(), col_setvco(), inn_setupobs(), col_setup(), col_allocate(), obs_numheader(), oer_setobserrors(), gsv_setup(), inn_gethcovcofromtrlmfile(), gsv_allocate(), gsv_zero(), gio_readtrials(), bmat1d_bsetup(), gvt_setup(), min_setup(), inn_setupcolumnsontrllev(), inn_setupcolumnsonanlinclev(), inn_computeinnovation(), min_minimize(), bcs_writebias(), col_getvco(), col_getnumcol(), col_zero(), bmat1d_get1dvarincrement(), var1d_transfercolumntoygrid(), inc_writeincrement(), gsv_add(), inc_writeanalysis(), var1d_finalize(), gsv_deallocate(), min_writehessian(), bcs_finalize(), obsf_filessplit(), obs_expandtompiglobal(), obsf_writefiles(), obs_mpiredistribute(), obs_finalize(), utl_tmg_stop()