bgckMicrowave_mod

link to source code

Dependency Diagrams:

bgckMicrowave_mod.svg

Direct Dependency Diagram

bgckMicrowave_mod_rev.svg

Reverse Dependency Diagram

Description

MODULE bgckMicrowave_mod (prefix=’mwbg’ category=’1. High-level functionality’)

Purpose

Perform background check and quality control for all microwave satellite radiance observations: AMSU-A, AMSU-B/MHS, ATMS, MWHS2.

Quick access

Routines

amsuabtest10rttovrejectcheck(), amsuabtest11radiancegrossvaluecheck(), amsuabtest15channelselectionwithtovutil(), amsuabtest1topographycheck(), amsuabtest2landseaqualifiercheck(), amsuabtest3terraintypecheck(), amsuabtest4fieldofviewcheck(), amsuabtest5zenithanglecheck(), amsuabtest6zenangleandfovconsistencycheck(), amsuabtest7landseaqualifyerandmodellandseaconsistencycheck(), amsuabtest9uncorrectedtbcheck(), amsuatest12grodyclwcheck(), amsuatest13grodyscatteringindexcheck(), amsuatest14roguecheck(), amsuatest16excludeextremescattering(), amsubtest12drynessindexcheck(), amsubtest13bennartzscatteringindexcheck(), amsubtest14roguecheck(), atmsmwhs2landicemask(), atmsmwhs2test1flagbit7check(), atmsmwhs2test2topographycheck(), atmsmwhs2test3uncorrectedtbcheck(), atmsmwhs2test5channelselectionusingtovutil(), atmstest4roguecheck(), calcstatedepobserr(), extractparamforbennartzrun(), extractparamforgrodyrun(), grody(), iftovsexist(), mwbg_bgcheckmw(), mwbg_computemwhs2surfacetype(), mwbg_firstqccheckatms(), mwbg_firstqccheckmwhs2(), mwbg_flagdatausingnrlcritatms(), mwbg_flagdatausingnrlcritmwhs2(), mwbg_grossvaluecheck(), mwbg_init(), mwbg_nrlfilteratms(), mwbg_nrlfiltermwhs2(), mwbg_qcstats(), mwbg_readgeophysicfieldsandinterpolate(), mwbg_reviewallcritforfinalflagsatms(), mwbg_reviewallcritforfinalflagsmwhs2(), mwbg_tovcheckamsua(), mwbg_tovcheckamsub(), mwbg_tovcheckatms(), mwbg_tovcheckmwhs2(), mwhs2test4roguecheck(), resetqccases(), setterraintypetoseaice()

Needed modules

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

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

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

  • tovsnl_mod: MODULE tovsNL_mod (prefix=’tvs’ category=’5. Observation operators’)

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

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

Variables

Subroutines and functions

subroutine  bgckmicrowave_mod/mwbg_init()
Purpose

This subroutine reads the namelist section NAMBGCK for the module.

Called from

mwbg_computemwhs2surfacetype(), mwbg_bgcheckmw()

Call to

utl_abort()

subroutine  bgckmicrowave_mod/extractparamforgrodyrun(tb23, tb31, tb50, tb53, tb89, tb23fg, tb31fg, tb50fg, tb53fg, tb89fg, headerindex, sensorindex, obsspacedata)
Purpose

Compute Grody parameters by extracting tb for required channels: - 23 Ghz = AMSU-A 1 = channel #28 - 31 Ghz = AMSU-A 2 = channel #29 - 50 Ghz = AMSU-A 3 = channel #30 - 53 Ghz = AMSU-A 5 = channel #32 - 89 Ghz = AMSU-A15 = channel #42

Arguments
  • tb23 [real ,out] :: radiance frequence 23 Ghz

  • tb31 [real ,out] :: radiance frequence 31 Ghz

  • tb50 [real ,out] :: radiance frequence 50 Ghz

  • tb53 [real ,out] :: radiance frequence 53 Ghz

  • tb89 [real ,out] :: radiance frequence 89 Ghz

  • tb23fg [real ,out] :: radiance frequence 23 Ghz

  • tb31fg [real ,out] :: radiance frequence 31 Ghz

  • tb50fg [real ,out] :: radiance frequence 50 Ghz

  • tb53fg [real ,out] :: radiance frequence 53 Ghz

  • tb89fg [real ,out] :: radiance frequence 89 Ghz

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua()

Call to

obs_headelem_i(), obs_bodyelem_r()

subroutine  bgckmicrowave_mod/extractparamforbennartzrun(tb89, tb150, tb1831, tb1832, tb1833, tb89fg, tb150fg, tb89fgclear, tb150fgclear, headerindex, sensorindex, obsspacedata)
Purpose

Extract Parameters required to run bennaertz for required channels: - 89 Ghz = AMSU-B 1 = channel #43 - 150 Ghz = AMSU-B 2 = channel #44

Arguments
  • tb89 [real ,out] :: 89GHz radiance from observation

  • tb150 [real ,out] :: 150GHz radiance from observation

  • tb1831 [real ,out] :: 183GHz radiance from observation

  • tb1832 [real ,out] :: 183GHz radiance from observation

  • tb1833 [real ,out] :: 183GHz radiance from observation

  • tb89fg [real ,out] :: 89GHz radiance from background

  • tb150fg [real ,out] :: 150GHz radiance from background

  • tb89fgclear [real ,out] :: 89GHz clear-sky radiance from background

  • tb150fgclear [real ,out] :: 150GHz clear-sky radiance from background

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsub()

Call to

obs_headelem_i(), obs_bodyelem_r(), tvs_isinstrumallskyhuassim(), tvs_getinstrumentid(), codtyp_get_name()

subroutine  bgckmicrowave_mod/amsuabtest10rttovrejectcheck(sensorindex, resetqc, qcindicator, headerindex, obsspacedata)
Purpose

test 10: RTTOV reject check (single). Rejected datum flag has bit #9 on.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • resetqc [logical ,in] :: yes or not reset QC flag

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

obs_elem_c(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuabtest1topographycheck(sensorindex, modelinterpterrain, channelfortopofilter, altitudefortopofilter, qcindicator, headerindex, obsspacedata)
Purpose

test 1: Topography check (partial) Channel 6 is rejected for topography > 250m. Channel 7 is rejected for topography > 2000m.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • modelinterpterrain [real ,in] :: topo aux point d’obs

  • channelfortopofilter (*) [integer ,in] :: channel list for filter

  • altitudefortopofilter (*) [real ,in] :: altitude threshold

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

utl_abort(), obs_elem_c(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuabtest2landseaqualifiercheck(sensorindex, qcindicator, headerindex, obsspacedata)
Purpose

test 2: “Land/sea qualifier” code check (full) allowed values are: 0 land, 1 sea, 2 coast.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuabtest3terraintypecheck(sensorindex, qcindicator, headerindex, obsspacedata)
Purpose

test 3: “Terrain type” code check (full) allowed values are: -1 missing, 0 sea-ice, 1 snow on land.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

obs_elem_c(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuabtest4fieldofviewcheck(sensorindex, maxscanangleamsu, qcindicator, headerindex, obsspacedata)
Purpose

test 4: Field of view number check (full) Field of view acceptable range is [1,maxScanAngleAMSU] for AMSU footprints.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • maxscanangleamsu [integer ,in] :: max scan angle

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuabtest5zenithanglecheck(sensorindex, qcindicator, headerindex, obsspacedata)
Purpose

test 5: Satellite zenith angle check (full) Satellite zenith angle acceptable range is [0.,60.].

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

obs_headelem_r(), obs_elem_c(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuabtest6zenangleandfovconsistencycheck(sensorindex, zangl, maxscanangleamsu, qcindicator, headerindex, obsspacedata)
Purpose

test 6: “Sat. zenith angle”/”field of view” consistency check. (full) Acceptable difference between “Satellite zenith angle” and “approximate angle computed from field of view number” is 1.8 degrees.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • zangl [real ,in] :: satellite constant param

  • maxscanangleamsu [integer ,in] :: max scan angle

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

obs_headelem_r(), obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuabtest7landseaqualifyerandmodellandseaconsistencycheck(sensorindex, modelinterplandfrac, qcindicator, headerindex, obsspacedata)
Purpose

test 7: “Land/sea qual.”/”model land/sea” consistency check (full). Acceptable conditions are:

  • both over ocean (landQualifierIndice=1; mg<0.01), new threshold 0.20, jh dec 2000,

  • both over land (landQualifierIndice=0; mg>0.80), new threshold 0.50, jh dec 2000.

All other conditions are unacceptable.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • modelinterplandfrac [real ,in] :: model interpolated land fraction

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuabtest9uncorrectedtbcheck(sensorindex, resetqc, qcindicator, headerindex, obsspacedata)
Purpose

test 9: Uncorrected Tb check (single). Uncorrected datum (flag bit #6 off). In this case switch bit 11 ON.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • resetqc [logical ,in] :: yes or not reset QC flag

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua()

Call to

obs_elem_c(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuabtest11radiancegrossvaluecheck(sensorindex, grossmin, grossmax, qcindicator, headerindex, obsspacedata)
Purpose

test 11: Radiance observation “Gross” check (single). Change this test from full to single. jh nov 2000.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • grossmin (*) [real ,in] :: Gross val min

  • grossmax (*) [real ,in] :: Gross val max

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

obs_elem_c(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuatest12grodyclwcheck(sensorindex, iclwrej, qcindicator, headerindex, obsspacedata)
Purpose

test 12: Grody cloud liquid water check (partial).

For Cloud Liquid Water > clwQcThreshold, reject AMSUA-A channels 1-5 and 15.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • iclwrej (*) [integer ,in] :: rejection channel list

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua()

Call to

obs_headelem_r(), obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsubtest12drynessindexcheck(sensorindex, tb1831, tb1833, modelinterpseaice, qcindicator, headerindex, obsspacedata[, skiptestarr_opt])
Purpose

test 12: Dryness index check. The difference between channels AMSUB-3 and AMSUB-5 is used as an indicator of “dryness” of the atmosphere. In extreme dry conditions, channels AMSUB-3 4 and 5 are sensitive to the surface. Therefore, various thresholds are used to reject channels AMSUB-3 4 and 5 over land and ice

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • tb1831 [real ,in] :: tb for channel

  • tb1833 [real ,in] :: tb for channel

  • modelinterpseaice [real ,in] :: topo interpolated to obs point

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Options

skiptestarr_opt (*) [logical ,in,] :: array to set to skip the test

Called from

mwbg_tovcheckamsub()

Call to

obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuatest13grodyscatteringindexcheck(sensorindex, iscatrej, qcindicator, headerindex, obsspacedata)
Purpose

test 13: Grody scattering index check (partial).

For Scattering Index > 9, reject AMSUA-A channels 1-6 and 15.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • iscatrej (*) [integer ,in] :: rejection channel list

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua()

Call to

obs_headelem_r(), obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsubtest13bennartzscatteringindexcheck(sensorindex, scatindexoverlandobs, modelinterpseaice, qcindicator, chanignoreinallskygencoeff, headerindex, obsspacedata[, skiptestarr_opt])
Purpose

test 13: Bennartz scattering index check (full). For Scattering Index:

  • > 40 sea ice,

  • > 15 sea,

  • > 0 land reject all AMSUB Channels

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • scatindexoverlandobs [real ,in] :: scattering index over land

  • modelinterpseaice [real ,in] :: glace de mer

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • chanignoreinallskygencoeff (*) [integer ,in] :: channels to exclude from genCoeff

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Options

skiptestarr_opt (*) [logical ,in,] :: array to set to skip the test

Called from

mwbg_tovcheckamsub()

Call to

obs_headelem_r(), obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuatest14roguecheck(sensorindex, roguefac, isfcrej, qcindicator, headerindex, obsspacedata)
Purpose

test 14: “Rogue check” for (O-P) Tb residuals out of range. (single/full). Les observations, dont le residu (O-P) depasse par un facteur (roguefac) l’erreur totale des TOVS.

N.B.: a reject by any of the 3 surface channels produces the rejection of AMSUA-A channels 1-5 and 15.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • roguefac (*) [real ,in] :: rogue factor

  • isfcrej (*) [integer ,in] :: rejection channel list

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua()

Call to

obs_headelem_r(), obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), calcstatedepobserr(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsubtest14roguecheck(sensorindex, roguefac, ich2omprej, qcindicator, headerindex, obsspacedata[, skiptestarr_opt])
Purpose

test 14: “Rogue check” for (O-P) Tb residuals out of range. (single) Also, remove CH2,3,4,5 if CH2 |O-P|>5K (partial)

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • roguefac (*) [real ,in] :: rogue factor

  • ich2omprej (*) [integer ,in] :: rejection channel list

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Options

skiptestarr_opt (*) [logical ,in,] :: array to set to skip the test

Called from

mwbg_tovcheckamsub()

Call to

obs_headelem_i(), obs_headelem_r(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), calcstatedepobserr(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuabtest15channelselectionwithtovutil(sensorindex, modelinterpseaice, isfcrej2, qcindicator, headerindex, obsspacedata)
Purpose
test 15: Channel Selection using array oer_tovutil(chan,sat):
  • = 0 blacklisted,

  • = 1 assmilate,

  • = 2 assimilate over open water only

We set QC flag bits 7 and 9 ON for channels with oer_tovutil=2 over land or sea-ice.

We set QC flag bits 7 and 9 ON for channels 1-3, 15 over land or sea-ice REGARDLESS of oer_tovutil value (but oer_tovutil=0 always for these unassimilated channels).

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • modelinterpseaice [real ,in] :: gl

  • isfcrej2 (*) [integer ,in] :: rejection channel list

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/amsuatest16excludeextremescattering(sensorindex, qcindicator, headerindex, obsspacedata)
Purpose

Exclude radiances affected extreme scattering in deep convective region. For channel 5, if BT_cld-BT_clr < -0.5 OR O-BT_clr < -0.5, reject channels 4-5.

Arguments
  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua()

Call to

obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), tvs_isinstrumallskyttassim(), tvs_getinstrumentid(), codtyp_get_name(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/mwbg_tovcheckamsua(qcindicator, sensorindex, modelinterplandfrac, modelinterpterrain, modelinterpseaice, resetqc, headerindex, obsspacedata)
Purpose

Effectuer le controle de qualite des radiances tovs.

Quinze tests sont effectues menant aux erreurs suivantes:
    1. topography reject,

    1. invalid land/sea qualifier,

    1. invalid terrain type,

    1. invalid field of view number,

    1. satellite zenith angle out of range,

    1. inconsistent field of view and sat. zenith angle,

    1. inconsistent land/sea qualifier and model mask,

    1. inconsistent terrain type and model ice, (NOT USED)

    1. uncorrected radiance,

    1. rejected by RTTOV,

    1. radiance gross check failure,

    1. cloud liquid water reject,

    1. scattering index reject,

    1. radiance residual rogue check failure,

    1. channel reject (channel selection).

  • **) set terrain type to sea ice given certain conditions

Arguments
  • qcindicator (*) [integer ,out,allocatable] :: indicateur controle de qualite tovs par canal (=0 ok, >0 rejet)

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • modelinterplandfrac [real ,in] :: masque terre/mer du modele

  • modelinterpterrain [real ,in] :: topographie du modele

  • modelinterpseaice [real ,in] :: etendue de glace du modele

  • resetqc [logical ,in] :: reset du controle de qualite?

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_bgcheckmw()

Call to

obs_headelem_i(), obs_bodyset_i(), extractparamforgrodyrun(), grody(), amsuabtest10rttovrejectcheck(), amsuabtest1topographycheck(), amsuabtest2landseaqualifiercheck(), amsuabtest3terraintypecheck(), amsuabtest4fieldofviewcheck(), amsuabtest5zenithanglecheck(), amsuabtest6zenangleandfovconsistencycheck(), amsuabtest7landseaqualifyerandmodellandseaconsistencycheck(), amsuabtest9uncorrectedtbcheck(), amsuabtest11radiancegrossvaluecheck(), amsuatest12grodyclwcheck(), amsuatest13grodyscatteringindexcheck(), amsuatest14roguecheck(), amsuabtest15channelselectionwithtovutil(), amsuatest16excludeextremescattering(), resetqccases(), obs_headset_i(), setterraintypetoseaice()

subroutine  bgckmicrowave_mod/mwbg_tovcheckamsub(qcindicator, sensorindex, modelinterplandfrac, modelinterpterrain, modelinterpseaice, resetqc, headerindex, obsspacedata)
Purpose

Effectuer le controle de qualite des radiances tovs.

Quinze tests sont effectues menant aux erreurs suivantes:
    1. topography reject,

    1. invalid land/sea qualifier,

    1. invalid terrain type,

    1. invalid field of view number,

    1. satellite zenith angle out of range,

    1. inconsistent field of view and sat. zenith angle,

    1. inconsistent land/sea qualifier and model mask,

    1. inconsistent terrain type and model ice

    1. uncorrected radiance,

    1. rejected by RTTOV,

    1. radiance gross check failure,

    1. drynes index reject

    1. scattering index reject,

    1. radiance residual rogue check failure,

    1. channel reject (channel selection).

  • **) set terrain type to sea ice given certain conditions

Arguments
  • qcindicator (*) [integer ,out,allocatable] :: indicateur controle de qualite tovs par canal (=0 ok, >0 rejet)

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • modelinterplandfrac [real ,in] :: masque terre/mer du modele

  • modelinterpterrain [real ,in] :: topographie du modele

  • modelinterpseaice [real ,in] :: etendue de glace du modele

  • resetqc [logical ,in] :: reset du controle de qualite?

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_bgcheckmw()

Call to

obs_headelem_i(), obs_bodyset_i(), extractparamforbennartzrun(), bennartz(), amsuabtest10rttovrejectcheck(), amsuabtest1topographycheck(), amsuabtest2landseaqualifiercheck(), amsuabtest3terraintypecheck(), amsuabtest4fieldofviewcheck(), amsuabtest5zenithanglecheck(), amsuabtest6zenangleandfovconsistencycheck(), amsuabtest7landseaqualifyerandmodellandseaconsistencycheck(), amsuabtest11radiancegrossvaluecheck(), amsubtest12drynessindexcheck(), amsubtest13bennartzscatteringindexcheck(), amsubtest14roguecheck(), amsuabtest15channelselectionwithtovutil(), resetqccases(), obs_headset_i(), setterraintypetoseaice()

subroutine  bgckmicrowave_mod/mwbg_qcstats(instname, qcindicator, sensorindex, satelliteid, ldprint)
Purpose

Cumuler ou imprimer des statistiques decriptives des rejets tovs.

Arguments
  • instname [character ,in] :: Instrument Name

  • qcindicator (*) [integer ,in] :: indicateur controle de qualite tovs par canal (=0 ok, >0 rejet)

  • sensorindex [integer ,in] :: numero d’identificateur du satellite

  • satelliteid (*) [character ,in] :: identificateur du satellite

  • ldprint [logical ,in] :: mode: imprimer ou cumuler?

Called from

mwbg_bgcheckmw()

subroutine  bgckmicrowave_mod/resetqccases(resetqc, kchkprf, headerindex, obsspacedata)
Purpose

allumer la bit (6) indiquant que l’observation a un element rejete par le controle de qualite de l’AO.

N.B.: si on est en mode resetqc, on remet le marqueur global a sa valeur de defaut, soit 1024, avant de faire la mise a jour.

Arguments
  • resetqc [logical ,in] :: reset the quality control flags before adding the new ones ?

  • kchkprf [integer ,in] :: indicateur global controle de qualite tovs. Code:

  • headerindex [integer ,in] :: current header index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub(), mwbg_tovcheckatms(), mwbg_tovcheckmwhs2()

Call to

obs_headelem_i(), obs_headset_i()

subroutine  bgckmicrowave_mod/setterraintypetoseaice(modelinterpseaice, headerindex, obsspacedata)
Purpose
Dans les conditions suivantes:
  1. l’indicateur terre/mer indique l’ocean (landQualifierIndice=1),

  2. le “terrain type” est manquant (terrainTypeIndice=-1),

  3. le modele indique de la glace (gl >= 0.01),

on specifie “sea ice” pour le “terrain type” (terrainTypeIndice=0).

Arguments
  • modelinterpseaice [real ,in] :: sea ice

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua(), mwbg_tovcheckamsub()

Call to

obs_headelem_i(), obs_headset_i()

subroutine  bgckmicrowave_mod/grody(tb23, tb31, tb50, tb53, tb89, tb23fg, tb31fg, ice, tpw, rain, snow, scatindexoverlandobs, headerindex, obsspacedata)
Purpose
Compute the following parameters using 5 AMSU-A channels:
  • sea ice,

  • total precipitable water,

  • cloud liquid water,

  • ocean/land rain,

  • <snow> cover/glacial ice,

  • scattering index (sur la terre et sur l’eau).

The four channels used are: 23Ghz, 31Ghz, 50Ghz and 89Ghz. REGERENCES N. Grody, NOAA/NESDIS, ….

Arguments
  • tb23 [real ,in] :: 23Ghz brightness temperature (K)

  • tb31 [real ,in] :: 31Ghz brightness temperature (K)

  • tb50 [real ,in] :: 50Ghz brightness temperature (K)

  • tb53 [real ,in] :: 53Ghz brightness temperature (K)

  • tb89 [real ,in] :: 89Ghz brightness temperature (K)

  • tb23fg [real ,in] :: 23Ghz brightness temperature from background (K)

  • tb31fg [real ,in] :: 31Ghz brightness temperature from background (K)

  • ice [real ,out] :: sea ice concentration (0-100%)

  • tpw [real ,out] :: total precipitable water (0-70mm)

  • rain [integer ,out] :: rain identification (0=no rain; 1=rain)

  • snow [integer ,out] :: snow cover and glacial ice id: 0=no snow; 1=snow; 2=glacial ice

  • scatindexoverlandobs [real ,out] :: scattering index over land

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckamsua()

Call to

obs_headelem_r(), obs_headelem_i(), tvs_isinstrumallskyttassim(), tvs_getinstrumentid(), codtyp_get_name()

subroutine  bgckmicrowave_mod/bennartz(tb89, tb150, tb89fg, tb150fg, tb89fgclear, tb150fgclear, scatindexoverlandobs, headerindex, obsspacedata)
Purpose
Compute the following parameters using 2 AMSU-B channels:
  • scattering index (over land and ocean).

The two channels used are: 89Ghz, 150Ghz.

REGERENCES: Bennartz, R., A. Thoss, A. Dybbroe and D. B. Michelson, 1999: Precipitation Analysis from AMSU, Nowcasting SAF, Swedish Meteorologicali and Hydrological Institute, Visiting Scientist Report, November 1999.

Arguments
  • tb89 [real ,in]

  • tb150 [real ,in]

  • tb89fg [real ,in]

  • tb150fg [real ,in]

  • tb89fgclear [real ,in]

  • tb150fgclear [real ,in]

  • scatindexoverlandobs [real ,out]

  • headerindex [integer ,in]

  • obsspacedata [struct_obs ,inout]

Call to

obs_headelem_i(), obs_headelem_r(), tvs_isinstrumallskyttassim(), tvs_getinstrumentid(), codtyp_get_name(), tvs_isinstrumallskyhuassim()

subroutine  bgckmicrowave_mod/atmsmwhs2test1flagbit7check(itest, sensorindex, qcindicator, b7chck, headerindex, obsspacedata)
Purpose

test 1: Check flag bit 7 on from the first bgckAtms/bgckMwhs2 program Includes observations flagged for cloud liquid water, scattering index, dryness index plus failure of several QC checks.

Arguments
  • itest (*) [integer ,in] :: test number

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • b7chck (*) [integer ,inout] :: bit=7 of channel is on (=1) or off(=0)

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms(), mwbg_tovcheckmwhs2()

Call to

obs_elem_c(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/atmsmwhs2test2topographycheck(itest, sensorindex, modelinterpterrain, ichtopo, zcrit, b7chck, qcindicator, headerindex, obsspacedata)
Purpose

test 2: Topography check (partial)

Arguments
  • itest (*) [integer ,in] :: test number

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • modelinterpterrain [real ,in] :: topo aux point d’obs

  • ichtopo (*) [integer ,in] :: rejection channel list

  • zcrit (*) [real ,in] :: criteria for topo check

  • b7chck (*) [integer ,inout] :: bit=7 of channel is on (=1) or off(=0)

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms(), mwbg_tovcheckmwhs2()

Call to

obs_elem_c(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/atmsmwhs2test3uncorrectedtbcheck(itest, sensorindex, resetqc, b7chck, qcindicator, headerindex, obsspacedata)
Purpose

Test 3: Uncorrected Tb check (single) Uncorrected datum (flag bit #6 off). In this case switch bit 11 ON.

Arguments
  • itest (*) [integer ,in] :: test number

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • resetqc [logical ,in] :: resetqc logical

  • b7chck (*) [integer ,inout] :: bit=7 of channel is on (=1) or off(=0)

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms(), mwbg_tovcheckmwhs2()

Call to

obs_elem_c(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/atmstest4roguecheck(itest, sensorindex, roguefac, waterobs, isfcrej, ich2omprej, b7chck, qcindicator, headerindex, obsspacedata)
Purpose

test 4: “Rogue check” for (O-P) Tb residuals out of range (single/full). Also, over WATER remove CH.17-22 if CH.17 |O-P|>5K (partial) Les observations, dont le residu (O-P) depasse par un facteur (roguefac) l’erreur totale des TOVS.

N.B.: a reject by any of the 3 amsua surface channels 1-3 produces the rejection of ATMS sfc/tropospheric channels 1-6 and 16-17.

OVER OPEN WATER ch. 17 Abs(O-P) > 5K produces rejection of all ATMS amsub channels 17-22.

Arguments
  • itest (*) [integer ,in] :: test number

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • roguefac (*) [real ,in] :: rogue factor

  • waterobs [logical ,in] :: open water obs

  • isfcrej (*) [integer ,in] :: rejection surface channel list

  • ich2omprej (*) [integer ,in] :: rejection channel list

  • b7chck (*) [integer ,inout] :: bit=7 of channel is on (=1) or off(=0)

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms()

Call to

obs_headelem_i(), obs_headelem_r(), obs_elem_c(), obs_bodyelem_r(), calcstatedepobserr(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/mwhs2test4roguecheck(itest, sensorindex, roguefac, waterobs, ich2omprej, b7chck, qcindicator, headerindex, obsspacedata)
Purpose

test 4: “Rogue check” for (O-P) Tb residuals out of range (single/full). Also, over WATER remove CH.10-15 if CH.10 |O-P|>5K (full) Les observations, dont le residu (O-P) depasse par un facteur (roguefac) l’erreur totale des TOVS.

OVER OPEN WATER ch. 10 Abs(O-P) > 5K produces rejection of all ATMS amsub channels 10-15.

Arguments
  • itest (*) [integer ,in] :: test number

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • roguefac (*) [real ,in] :: rogue factor

  • waterobs [logical ,in] :: open water obs

  • ich2omprej (*) [integer ,in] :: rejection channel list

  • b7chck (*) [integer ,inout] :: bit=7 of channel is on (=1) or off(=0)

  • qcindicator (*) [integer ,inout] :: indicateur du QC par canal

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckmwhs2()

Call to

obs_headelem_i(), obs_headelem_r(), obs_elem_c(), obs_bodyelem_r(), calcstatedepobserr(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/atmsmwhs2test5channelselectionusingtovutil(itest, sensorindex, headerindex, obsspacedata)
Purpose

test 5: Channel selection using array oer_tovutil(chan,sat): - = 0 blacklisted, - = 1 assmilate

Arguments
  • itest (*) [integer ,in] :: test number

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms(), mwbg_tovcheckmwhs2()

Call to

obs_headelem_i(), obs_elem_c(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i()

subroutine  bgckmicrowave_mod/mwbg_tovcheckatms(qcindicator, sensorindex, modelinterpterrain, resetqc, headerindex, obsspacedata)
Purpose

Effectuer le controle de qualite des radiances tovs.

Arguments
  • qcindicator (*) [integer ,out,allocatable] :: indicateur controle de qualite tovs par canal (=0 ok, >0 rejet)

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • modelinterpterrain [real ,in] :: topographie du modele

  • resetqc [logical ,in] :: reset du controle de qualite?

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_bgcheckmw()

Call to

obs_headelem_i(), atmsmwhs2landicemask(), mwbg_grossvaluecheck(), mwbg_firstqccheckatms(), mwbg_nrlfilteratms(), mwbg_flagdatausingnrlcritatms(), mwbg_reviewallcritforfinalflagsatms(), obs_bodyset_i(), atmsmwhs2test1flagbit7check(), atmsmwhs2test2topographycheck(), atmsmwhs2test3uncorrectedtbcheck(), atmstest4roguecheck(), atmsmwhs2test5channelselectionusingtovutil(), resetqccases()

subroutine  bgckmicrowave_mod/mwbg_tovcheckmwhs2(qcindicator, sensorindex, modelinterpterrain, resetqc, modlsq, lastheader, headerindex, obsspacedata)
Purpose

Effectuer le controle de qualite des radiances tovs.

Arguments
  • qcindicator (*) [integer ,out,allocatable] :: indicateur controle de qualite tovs par canal (=0 ok, >0 rejet)

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • modelinterpterrain [real ,in] :: topographie du modele as being over land/ice, cloudy, bad IWV

  • resetqc [logical ,in] :: reset du controle de qualite?

  • modlsq [logical ,in] :: If active, recalculate land/sea qualifier and terrain type based on LG/MG

  • lastheader [logical ,in] :: active if last header

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_bgcheckmw()

Call to

obs_headelem_i(), atmsmwhs2landicemask(), mwbg_grossvaluecheck(), mwbg_firstqccheckmwhs2(), mwbg_nrlfiltermwhs2(), mwbg_flagdatausingnrlcritmwhs2(), mwbg_reviewallcritforfinalflagsmwhs2(), obs_bodyset_i(), atmsmwhs2test1flagbit7check(), atmsmwhs2test2topographycheck(), atmsmwhs2test3uncorrectedtbcheck(), mwhs2test4roguecheck(), atmsmwhs2test5channelselectionusingtovutil(), resetqccases()

subroutine  bgckmicrowave_mod/mwbg_readgeophysicfieldsandinterpolate(instname, modelinterpterrain, modelinterplandfrac, modelinterpseaice, headerindex, obsspacedata)
Purpose

Reads Modele Geophysical variables and save for the first time TOPOGRAPHIE (MF ou MX):

  • MF est la topographie filtree avec unites en metres (filtered ME).

  • MX est la topographie filtree avec unites en m2/s2 (geopotential topography).

  • Glace de Mer (GL)

  • Masque Terre-Mer (MG)

Then Interpolate Those variables to observation location

Arguments
  • instname [character ,in] :: Instrument Name

  • modelinterpterrain [real ,out] :: topographie filtree (en metres) et interpolees

  • modelinterplandfrac [real ,out] :: model interpolated land fraction.

  • modelinterpseaice [real ,out] :: Glace de mer interpolees au pt d’obs.

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_bgcheckmw()

Call to

obs_headelem_r(), utl_abort()

subroutine  bgckmicrowave_mod/atmsmwhs2landicemask(calclandqualifierindice, calcterraintypeindice, waterobs, ilsmopt, headerindex, obsspacedata)
Purpose

This routine sets waterobs array by performing a land/ice proximity check using using analysis MG and LG (or GL) fields used by the model which produces the trial field. The purpose of this check is to remove obs that reside close to coasts or ice, and so whose TBs may be contaminated. The GEM Global (glbhyb2) analysis contains MG and LG fields (on different grids). Adapted from: land_ice_mask_ssmis.ftn90 of mwbg_ssmis (D. Anselmo, S. Macpherson)

NOTE: The 0.1 deg binary ice field check from land_ice_mask_ssmis.ftn90 was removed. The land/sea qualifier (calcLandQualifierIndice) and terrain type (calcTerrainTypeIndice) are modified to indicate proximity to land and sea-ice but are NOT changed in output BURP file.

In the application of this check, a 5x5 mesh, with spacing defined by rlat_km and rlon_km, is positioned with its center over an obs pt (2 grid pts on either side of the obs pt; size of mesh is equal to 4*rlat_km x 4*rlon_km). The values of MG and LG are evaluated at the grid points of this mesh. For ilsmOpt=1 (or 3), the maximum (or average) determines whether the obs pt is too close to ice or land to be retained. For ilsmOpt=2, the value at the central mesh point is used. **NOTE: the threshold value for MG has a very strong effect on the distance

from land that is permitted for an obs to be retained

Maximum FOV x—x—x—x—x ^

= 75km x 75km | | | | | | for Meso-sphere CHs x—x—x—x—x | = 74km x 47km | | | | | | for 19 GHz x—x—o—x—x | = 4*rlat_km

| | | | | = 4*40 km

^ x—x—x—x—x | = 160 km = 80 km north & south

rlat_km | | | | | | |
v x—x—x—x—x v

<—>

rlon_km

<—————>

= 4*rlon_km = 4*40 km = 160 km = 80 km east & west

MG value = 1.0 ==> LAND MG value = 0.0 ==> OCEAN LG value = 1.0 ==> ICE LG value = 0.0 ==> NO ICE

  • mxlat : internal- number of grid pts in lat. direction for mesh

  • mxlon : internal- number of grid pts in lon. direction for mesh

  • rlat_kminternal- spacing desired between mesh grid points in km

    along lat. direction

  • rlon_kminternal- spacing desired between mesh grid points in km

    along lon. direction

  • dlatinternal- spacing between mesh grid points along lon. direction

    in degrees computed from rlat_km

  • dloninternal- spacing between mesh grid points along lon. direction

    in degrees computed from rlon_km

  • rkm_per_deginternal- distance in km per degree

    = Earth radius * PI/180.0 = 6371.01 km * PI/180.0 = 111.195 km

  • nlat,nlon : internal- used to define the lat/lon of the grid pts of mesh

  • zlatbox : internal- lat values at all grid pts of mesh for all obs pts

  • zlonbox : internal- lon values at all grid pts of mesh for all obs pts

  • latmesh : internal- lat values at all grid pts of mesh for 1 obs pt

  • lonmesh : internal- lon values at all grid pts of mesh for 1 obs pt

  • mgintob : internal- interpolated MG values at all grid pts of mesh for 1 obs pt

  • lgintob : internal- interpolated LG values at all grid pts of mesh for 1 obs pt

  • mgintrp : internal- max. interpolated MG value on mesh for all obs pts

  • lgintrp : internal- max. interpolated LG value on mesh for all obs pts

  • MGthresh : internal- maximum allowable land fraction for obs to be kept

  • LGthresh : internal- maximum allowable ice fraction for obs to be kept

Arguments
  • calclandqualifierindice [integer ,out] :: land/sea qualifier (0 = land, 1 = sea)

  • calcterraintypeindice [integer ,out] :: terrain-type (-1 land/open water, 0 = ice)

  • waterobs [logical ,out] :: if obs over open water, far from coast/ice

  • ilsmopt [integer ,in] :: option for “interpolated” value of MG, LG at each location, 1 = use MAX value taken from all mesh grid points, 2 = use CENTRAL mesh point value (value at obs location), 3 = use AVG value of all mesh grid points

  • headerindex [integer ,in] :: current header Index

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms(), mwbg_tovcheckmwhs2(), mwbg_computemwhs2surfacetype()

Call to

obs_headelem_r(), utl_abort()

subroutine  bgckmicrowave_mod/mwbg_computemwhs2surfacetype(obsspacedata)
Purpose

Compute surface type element and update obsSpaceData.

Arguments

obsspacedata [struct_obs ,inout] :: ObsSpaceData object

Called from

midas_obsselection

Call to

obs_getheaderindex(), obs_headelem_i(), tvs_isidburpinst(), mwbg_init(), atmsmwhs2landicemask(), obs_headset_i()

subroutine  bgckmicrowave_mod/mwbg_grossvaluecheck(ztbthresholdmin, ztbthresholdmax, grossrej, headerindex, sensorindex, obsspacedata)
Purpose

Check Tbs for values that are missing or outside physical limits. REJECT ALL CHANNELS OF ONE IS FOUND TO BE BAD.

Arguments
  • ztbthresholdmin [real ,in] :: ztb threshold for rejection

  • ztbthresholdmax [real ,in] :: ztb threshold for rejection

  • grossrej [logical ,out] :: logical array defining which obs are to be rejected

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms(), mwbg_tovcheckmwhs2()

Call to

obs_headelem_i(), obs_bodyelem_r()

subroutine  bgckmicrowave_mod/mwbg_firstqccheckatms(qcrejectlogic, grossrej, calclandqualifierindice, calcterraintypeindice, reporthasmissingtb, headerindex, sensorindex, obsspacedata)
Purpose

This routine performs basic quality control checks on the data. It sets array qcRejectLogic(actualNumChannel) elements to .true. to flag data with failed checks.

The 6 QC checks are:
    1. Invalid land/sea qualifier or terrain type,

    1. Invalid field of view number,

    1. Satellite zenith angle missing or out of range, (> 75 deg),

    1. lat,lon check (lat,lon = O(-90.), 0(-180.))

    1. Change in (computed) calcLandQualifierIndice,calcTerrainTypeIndice from (input)

    1. ATMS quality flag check (qual. flag elements 33078,33079,33080,33081)

landQualifierIndice,terrainTypeIndice (from MG,LG fields).

landQualifierIndice= 0,1 (from hi-res land/sea mask interpolated to obs point [CMDA])

terrainTypeIndice=-1,0 (from hi-res ice analysis interpolated to obs point [CMDA])

calcLandQualifierIndice= 0,1 (from max interp MG (0.0 to 1.0) in box surrounding obs point)

calcTerrainTypeIndice=-1,0 (from max interp LG (0.0 to 1.0) in box surrounding obs point)

In most cases, qcRejectLogic(actualNumChannel) is set to .true. for all channels at point ii if the check detects a problem. In addition, Tb (obsTb) is set to missing_value for checks 3 and 4 fails.

Arguments
  • qcrejectlogic (*) [logical ,out,allocatable] :: qcRejectLogic = .false. on input

  • grossrej [logical ,in] ::

  • calclandqualifierindice [integer ,in] :: land/sea qualifier (0 = land, 1 = sea)

  • calcterraintypeindice [integer ,in] :: terrain-type (-1 land/open water, 0 = ice)

  • reporthasmissingtb [logical ,out] :: .true. if Tb(obsTb) are set to missing_value

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms()

Call to

obs_headelem_i(), obs_headelem_r(), obs_bodyelem_r(), obs_bodyelem_i()

subroutine  bgckmicrowave_mod/mwbg_firstqccheckmwhs2(qcrejectlogic, calclandqualifierindice, calcterraintypeindice, reporthasmissingtb, modlsq, headerindex, sensorindex, obsspacedata)
Purpose

This routine performs basic quality control checks on the data. It sets array qcRejectLogic(actualNumChannel) elements to .true. to flag data with failed checks. Check 1 (for landQualifierIndice,terrainTypeIndice) and check 5 are skipped if modlsqtt=.true., as the original values will be replaced in output file by calcLandQualifierIndice,calcTerrainTypeIndice.

The 5 QC checks are:
    1. Invalid land/sea qualifier or terrain type,

    1. Invalid field of view number,

    1. Satellite zenith angle missing or out of range, (> 75 deg),

    1. lat,lon check (lat,lon = O(-90.), 0(-180.))

    1. Change in (computed) calcLandQualifierIndice,calcTerrainTypeIndice

from (input) landQualifierIndice,terrainTypeIndice (from MG,LG fields).

landQualifierIndice= 0,1 (from hi-res land/sea mask interpolated to obs point [CMDA])

terrainTypeIndice=-1,0 (from hi-res ice analysis interpolated to obs point [CMDA])

calcLandQualifierIndice= 0,1 (from max interp MG (0.0 to 1.0) in box surrounding obs point)

calcTerrainTypeIndice=-1,0 (from max interp LG (0.0 to 1.0) in box surrounding obs point)

In most cases, qcRejectLogic(ii,actualNumChannel) is set to .true. for all channels at point ii if the check detects a problem. In addition, Tb (obsTb) is set to missing_value for checks 3 and 4 fails.

Arguments
  • qcrejectlogic (*) [logical ,inout,allocatable] :: qcRejectLogic = .false. on input

  • calclandqualifierindice [integer ,in] :: land/sea qualifier (0 = land, 1 = sea)

  • calcterraintypeindice [integer ,in] :: terrain-type (-1 land/open water, 0 = ice)

  • reporthasmissingtb [logical ,out] :: true if Tb(obsTb) are set to missing_value

  • modlsq [logical ,in] :: If active, recalculate land/sea qualifier and terrain type based on LG/MG

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckmwhs2()

Call to

obs_headelem_i(), obs_headelem_r()

subroutine  bgckmicrowave_mod/mwbg_nrlfilteratms(calclandqualifierindice, calcterraintypeindice, waterobs, grossrej, si_ecmwf, si_bg, inumseaice, irej, seaice, headerindex, sensorindex, obsspacedata)
Purpose
Compute the following parameters using 5 ATMS channels:
  • sea ice,

  • cloud liquid water from observation (cloudLiquidWaterPathObs),

  • cloud liquid water from first guess (cloudLiquidWaterPathFG),

  • 2 scattering indices (si) (ECMWF, Bennartz-Grody)

The five channels used are: 23Ghz, 31Ghz, 50Ghz, 89Ghz, and 165Ghz.

NOTES:
  • open water points are converted to sea-ice points if sea ice concentration >= 0.55 and <calcTerrainTypeIndice> (terrainTypeIndice or terrain type) is changed accordingly

  • <cloudLiquidWaterPathObs> are missing when out-of-range parameters/Tb detected or grossrej = .true.

  • <cloudLiquidWaterPathObs> and si only computed over open water away from coasts and sea-ice

  • <cloudLiquidWaterPathObs> and si = mwbg_realMissing where value cannot be computed.

REFERENCES: Ben Ruston, NRL Monterey JCSDA Seminar 12/12/12: Impact of NPP Satellite Assimilation in the U.S. Navy Global Modeling System

Notes: In the case where an output parameter cannot be calculated, the value of this parameter is set to mwbg_realMissing

Arguments
  • calclandqualifierindice [integer ,in] :: land/sea indicator (0=land, 1=ocean)

  • calcterraintypeindice [integer ,inout] :: terrain type (0=ice, -1 otherwise)

  • waterobs [logical ,inout] :: .true. if open water point (away from coasts and sea-ice)

  • grossrej [logical ,in] :: .true. if any channel had a gross error from mwbg_grossValueCheck

  • si_ecmwf [real ,out]

  • si_bg [real ,out] :: Bennartz-Grody scattering index from tb89 & tb165

  • inumseaice [integer ,out] :: counter for number open water points with sea-ice detected (from algorithm)

  • irej [integer ,out] :: counter for number locations with bad satZenithAngle, obsLat, calcLandQualifierIndice, or with grossrej=true

  • seaice [real ,out]

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms()

Call to

obs_headelem_i(), obs_headelem_r(), obs_bodyelem_r()

subroutine  bgckmicrowave_mod/mwbg_nrlfiltermwhs2(calclandqualifierindice, calcterraintypeindice, waterobs, grossrej, si_ecmwf, si_bg, inumseaice, irej, seaice, headerindex, sensorindex, obsspacedata)
Purpose
Compute the following parameters using 2 MWHS2 channels:
  • sea ice,

  • cloud liquid water from observation (cloudLiquidWaterPathObs),

  • cloud liquid water from first guess (cloudLiquidWaterPathFG),

  • 2 scattering indices (si) (ECMWF, Bennartz-Grody)

The two channels used are: 89Ghz, and 165Ghz.

NOTES:
  • open water points are converted to sea-ice points if sea ice concentration >= 0.55 and calcTerrainTypeIndice (terrainTypeIndice or terrain type) is changed accordingly

  • <cloudLiquidWaterPathObs> are missing when out-of-range parameters/Tb detected or grossrej = .true.

  • <cloudLiquidWaterPathObs> and <si_ecmwf> only computed over open water away from coasts and sea-ice

  • <si_bg> is computed for all points

  • <cloudLiquidWaterPathObs> and si = mwbg_realMissing where value cannot be computed.

REFERENCES: Ben Ruston, NRL Monterey JCSDA Seminar 12/12/12: Impact of NPP Satellite Assimilation in the U.S. Navy Global Modeling System

Notes: In the case where an output parameter cannot be calculated, the value of this parameter is set to mwbg_realMissing

Arguments
  • calclandqualifierindice [integer ,in] :: land/sea indicator (0=land, 1=ocean)

  • calcterraintypeindice [integer ,inout] :: terrain type (0=ice, -1 otherwise)

  • waterobs [logical ,inout] :: .true. if open water point (away from coasts and sea-ice)

  • grossrej [logical ,in] :: .true. if any channel had a gross error from mwbg_grossValueCheck

  • si_ecmwf [real ,out]

  • si_bg [real ,out] :: Bennartz-Grody scattering index from tb89 & tb165

  • inumseaice [integer ,out] :: running counter for number of open water points with sea-ice detected (from algorithm)

  • irej [integer ,out] :: running counter for number of locations with bad satZenithAngle, obsLat, calcLandQualifierIndice, or with grossrej=true

  • seaice [real ,out]

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckmwhs2()

Call to

obs_headelem_i(), obs_headelem_r(), obs_bodyelem_r()

subroutine  bgckmicrowave_mod/mwbg_flagdatausingnrlcritatms(scatec, scatbg, seaice, grossrej, waterobs, useunbiasedobsforclw, iwvreject, cloudobs, precipobs, cldcnt, riwv, zdi, headerindex, sensorindex, obsspacedata)
Purpose

Set the Information flag (newInformationFlag) values (new BURP element 025174 in header). BIT Meaning:

  • 0 off=land or sea-ice, on=open water away from coast

  • 1 Mean 183 Ghz [ch. 18-22] is missing

  • 2 CLW is missing (over water)

  • 3 CLW > clw_atms_nrl_LTrej (0.175 kg/m2) (cloudobs)

  • 4 scatec/scatbg > Lower Troposphere limit 9/10 (precipobs)

  • 5 Mean 183 Ghz [ch. 18-22] Tb < 240K

  • 6 CLW > clw_atms_nrl_UTrej (0.200 kg/m2)

  • 7 Dryness Index rejection (for ch. 22)

  • 8 scatec/scatbg > Upper Troposphere limit 18/15

  • 9 Dryness Index rejection (for ch. 21)

  • 10 Sea ice > 0.55 detected

  • 11 Gross error in Tb (any chan.) (all channels rejected)

Arguments
  • scatec [real ,in]

  • scatbg [real ,in] :: Bennartz-Grody scattering index from tb89 & tb165

  • seaice [real ,in]

  • grossrej [logical ,in] :: .true. if any channel had a gross error from mwbg_grossValueCheck

  • waterobs [logical ,in] :: if obs over open-water

  • useunbiasedobsforclw [logical ,in] :: use unbiased Tb for CLW calculation

  • iwvreject [logical ,out] :: .true. if Mean 183 Ghz [ch. 18-22] Tb < 240K (too dry for ch.20-22 over land)

  • cloudobs [logical ,out] :: .true. if CLW > clw_atms_nrl_LTrej (0.175) or precipobs

  • precipobs [logical ,out] :: .true. if precip. detected through NRL scattering indices

  • cldcnt [integer ,inout] :: Number of water point covered by cloud

  • riwv [real ,out] :: Mean 183 Ghz [ch. 18-22] Tb

  • zdi [real ,out] :: simple AMSU-B Dryness Index Tb(ch.3)-Tb(ch.5)

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms()

Call to

obs_headelem_i(), obs_headelem_r(), obs_bodyelem_r(), obs_headset_i()

subroutine  bgckmicrowave_mod/mwbg_flagdatausingnrlcritmwhs2(scatec, seaice, grossrej, waterobs, useunbiasedobsforclw, iwvreject, cloudobs, precipobs, cldcnt, riwv, zdi, headerindex, sensorindex, obsspacedata)
Purpose

Set the Information flag (newInformationFlag) values (new BURP element 025174 in header). BIT Meaning:

  • 0 off=land or sea-ice, on=open water away from coast

  • 1 Mean 183 Ghz [ch. 18-22] is missing

  • 2 CLW is missing (over water)

  • 3 CLW > clw_mwhs2_nrl_LTrej (0.175 kg/m2) (cloudobs)

  • 4 scatec > Lower Troposphere limit 9/10 (precipobs)

  • 5 Mean 183 Ghz [ch. 18-22] Tb < 240K

  • 6 CLW > clw_mwhs2_nrl_UTrej (0.200 kg/m2)

  • 10 Sea ice > 0.55 detected

  • 11 Gross error in Tb (any chan.) (all channels rejected)

Arguments
  • scatec [real ,in]

  • seaice [real ,in] :: computed sea-ice fraction from tb23 & tb50

  • grossrej [logical ,in] :: .true. if any channel had a gross error from mwbg_grossValueCheck

  • waterobs [logical ,in] :: if obs over open-water

  • useunbiasedobsforclw [logical ,in] :: use unbiased Tb for CLW calculation

  • iwvreject [logical ,out] :: .true. if Mean 183 Ghz [ch. 18-22] Tb < 240K (too dry for ch.20-22 over land)

  • cloudobs [logical ,out] :: .true. if CLW > clw_atms_nrl_LTrej (0.175) or precipobs

  • precipobs [logical ,out] :: .true. if precip. detected through NRL scattering indices

  • cldcnt [integer ,inout] :: Number of water point covered by cloud

  • riwv [real ,out] :: Mean 183 Ghz [ch. 18-22] Tb

  • zdi [real ,out] :: simple AMSU-B Dryness Index Tb(ch.3)-Tb(ch.5)

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckmwhs2()

Call to

obs_headelem_i(), obs_headelem_r(), obs_bodyelem_r(), obs_headset_i()

subroutine  bgckmicrowave_mod/mwbg_reviewallcritforfinalflagsatms(qcrejectlogic, grossrej, waterobs, precipobs, scatec, scatbg, iwvreject, riwv, zdi, drycnt, landcnt, rejcnt, iwvcnt, pcpcnt, flgcnt, chanignoreinallskygencoeff, headerindex, sensorindex, obsspacedata)
Purpose

Review all the checks previously made to determine which obs are to be accepted for assimilation and which are to be flagged for exclusion (lflagchn).

  • <grossrej> = .true. if any channel had a gross error at the point

  • <cloudobs> = .true. if CLW > clw_atms_nrl_LTrej (0.175) or precipobs

  • <precipobs> = .true. if precip. detected through NRL scattering indices

  • <waterobs> = .true. if open water point

  • <iwvreject> = .true. if Mean 183 Ghz [ch. 18-22] Tb < 240K (too dry for ch.20-22 over land)

Arguments
  • qcrejectlogic (*) [logical ,in] :: .true. if channel is rejected

  • grossrej [logical ,in] :: .true. if any channel had a gross error from mwbg_grossValueCheck

  • waterobs [logical ,in] :: if obs over open-water

  • precipobs [logical ,in] :: .true. if precip. detected through NRL scattering indices

  • scatec [real ,in] :: ECMWF scattering index from tb89 & tb165

  • scatbg [real ,in]

  • iwvreject [logical ,in] :: .true. if Mean 183 Ghz [ch. 18-22] Tb < 240K (too dry for ch.20-22 over land)

  • riwv [real ,in] :: Mean 183 Ghz [ch. 18-22] Tb

  • zdi [real ,in] :: simple AMSU-B Dryness Index Tb(ch.3)-Tb(ch.5)

  • drycnt [integer ,inout] :: Number of pts flagged for AMSU-B Dryness Index

  • landcnt [integer ,inout] :: Number of obs pts found over land/ice

  • rejcnt [integer ,inout] :: Number of rejected obs (Tb err, QCfail)

  • iwvcnt [integer ,inout] :: Number of pts with Mean 183 Ghz Tb < 240K

  • pcpcnt [integer ,inout] :: Number of scatter/precip obs

  • flgcnt [integer ,inout] :: Total number of filtered obs

  • chanignoreinallskygencoeff (*) [integer ,in] :: Channels excluded from gen_bias_corr in all-sky mode

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckatms()

Call to

obs_headelem_r(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i(), obs_headset_i(), tvs_isinstrumallskyhuassim(), tvs_getinstrumentid(), codtyp_get_name()

subroutine  bgckmicrowave_mod/mwbg_reviewallcritforfinalflagsmwhs2(qcrejectlogic, grossrej, calcterraintypeindice, waterobs, precipobs, scatec, scatbg, iwvreject, riwv, zdi, allcnt, drycnt, landcnt, rejcnt, iwvcnt, pcpcnt, flgcnt, chanignoreinallskygencoeff, headerindex, sensorindex, obsspacedata)
Purpose

Review all the checks previously made to determine which obs are to be accepted for assimilation and which are to be flagged for exclusion (lflagchn).

  • <grossrej> = .true. if any channel had a gross error at the point

  • <cloudobs> = .true. if CLW > clw_mwhs2_nrl_LTrej (0.175) or precipobs

  • <precipobs> = .true. if precip. detected through NRL scattering indices

  • <waterobs> = .true. if open water point

  • <iwvreject> = .true. if Mean 183 Ghz [ch. 18-22] Tb < 240K (too dry for ch.20-22 over land)

Arguments
  • qcrejectlogic (*) [logical ,in] :: .true. if channel is rejected

  • grossrej [logical ,in] :: .true. if any channel had a gross error from mwbg_grossValueCheck

  • calcterraintypeindice [integer ,inout] :: terrain type (0=ice, -1 otherwise)

  • waterobs [logical ,in] :: if obs over open-water

  • precipobs [logical ,in] :: .true. if precip. detected through NRL scattering indices

  • scatec [real ,in]

  • scatbg [real ,in] :: Bennartz-Grody scattering index from tb89 & tb165

  • iwvreject [logical ,in] :: .true. if Mean 183 Ghz [ch. 18-22] Tb < 240K (too dry for ch.20-22 over land)

  • riwv [real ,in] :: Mean 183 Ghz [ch. 18-22] Tb

  • zdi [real ,in] :: simple AMSU-B Dryness Index Tb(ch.3)-Tb(ch.5)

  • allcnt [integer ,inout] :: total number of obs

  • drycnt [integer ,inout] :: Number of pts flagged for AMSU-B Dryness Index

  • landcnt [integer ,inout] :: Number of obs pts found over land/ice

  • rejcnt [integer ,inout] :: Number of rejected obs (Tb err, QCfail)

  • iwvcnt [integer ,inout] :: Number of pts with Mean 183 Ghz Tb < 240K

  • pcpcnt [integer ,inout] :: Number of scatter/precip obs

  • flgcnt [integer ,inout] :: Total number of filtered obs

  • chanignoreinallskygencoeff (*) [integer ,in] :: Channels excluded from gen_bias_corr in all-sky mode

  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,in] :: numero de satellite (i.e. indice)

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

mwbg_tovcheckmwhs2()

Call to

obs_headelem_r(), obs_headelem_i(), obs_bodyelem_r(), obs_bodyelem_i(), obs_bodyset_i(), obs_headset_i(), tvs_isinstrumallskyhuassim(), tvs_getinstrumentid(), codtyp_get_name()

function  bgckmicrowave_mod/calcstatedepobserr(cldpredthresh1, cldpredthresh2, errthresh1, errthresh2, cldpredused)
Purpose

Calculate single-precision state-dependent observation error.

Arguments
  • cldpredthresh1 [real ,in] :: first cloud predictor threshold

  • cldpredthresh2 [real ,in] :: second cloud predictor threshold

  • errthresh1 [real ,in] :: sigmaO corresponding to first cloud predictor threshold

  • errthresh2 [real ,in] :: sigmaO corresponding to second cloud predictor threshold

  • cldpredused [real ,in] :: cloud predictor for the obs

Return

sigmaobserrused [real ] :: estimated sigmaO for the obs

Called from

amsuatest14roguecheck(), amsubtest14roguecheck(), atmstest4roguecheck(), mwhs2test4roguecheck(), oer_fillobserrors()

function  bgckmicrowave_mod/iftovsexist(headerindex, sensorindex, obsspacedata)
Purpose

Check obs is among the sensors.

Arguments
  • headerindex [integer ,in] :: current header Index

  • sensorindex [integer ,out] :: find tvs_sensor index corresponding to current obs

  • obsspacedata [struct_obs ,inout] :: obspaceData Object

Return

sensorindexfound [logical ]

Called from

mwbg_bgcheckmw()

Call to

obs_headelem_i(), tvs_mapsat(), tvs_mapinstrum()

subroutine  bgckmicrowave_mod/mwbg_bgcheckmw(obsspacedata)
Purpose

Do the quality control for ATMS, AMSUA, AMSUB and MWHS2

Arguments

obsspacedata [struct_obs ,inout] :: obspaceData Object

Called from

midas_obsselection

Call to

utl_tmg_start(), obs_getheaderindex(), obs_headelem_i(), tvs_isidburpinst(), mwbg_init(), obs_numheader(), iftovsexist(), utl_abort(), mwbg_readgeophysicfieldsandinterpolate(), mwbg_tovcheckamsua(), mwbg_tovcheckamsub(), mwbg_tovcheckatms(), mwbg_tovcheckmwhs2(), mwbg_qcstats(), utl_tmg_stop()