bgckMicrowave_mod¶
Dependency Diagrams:
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
- Call to
- 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
- Call to
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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:
topography reject,
invalid land/sea qualifier,
invalid terrain type,
invalid field of view number,
satellite zenith angle out of range,
inconsistent field of view and sat. zenith angle,
inconsistent land/sea qualifier and model mask,
inconsistent terrain type and model ice, (NOT USED)
uncorrected radiance,
rejected by RTTOV,
radiance gross check failure,
cloud liquid water reject,
scattering index reject,
radiance residual rogue check failure,
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
- 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:
topography reject,
invalid land/sea qualifier,
invalid terrain type,
invalid field of view number,
satellite zenith angle out of range,
inconsistent field of view and sat. zenith angle,
inconsistent land/sea qualifier and model mask,
inconsistent terrain type and model ice
uncorrected radiance,
rejected by RTTOV,
radiance gross check failure,
drynes index reject
scattering index reject,
radiance residual rogue check failure,
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
- 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
- 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
- subroutine bgckmicrowave_mod/setterraintypetoseaice(modelinterpseaice, headerindex, obsspacedata)¶
- Purpose
- Dans les conditions suivantes:
l’indicateur terre/mer indique l’ocean (landQualifierIndice=1),
le “terrain type” est manquant (terrainTypeIndice=-1),
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
- Call to
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Call to
- 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
- subroutine bgckmicrowave_mod/mwbg_computemwhs2surfacetype(obsspacedata)¶
- Purpose
Compute surface type element and update obsSpaceData.
- Arguments
obsspacedata [struct_obs ,inout] :: ObsSpaceData object
- Called from
- 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
- Call to
- 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:
Invalid land/sea qualifier or terrain type,
Invalid field of view number,
Satellite zenith angle missing or out of range, (> 75 deg),
lat,lon check (lat,lon = O(-90.), 0(-180.))
Change in (computed) calcLandQualifierIndice,calcTerrainTypeIndice from (input)
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
- 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:
Invalid land/sea qualifier or terrain type,
Invalid field of view number,
Satellite zenith angle missing or out of range, (> 75 deg),
lat,lon check (lat,lon = O(-90.), 0(-180.))
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
- Call to
- 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
- Call to
- 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
- Call to
- 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
- 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
- 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
- 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
- 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
- Call to
- 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
- 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()