bgckSSMIS_mod

link to source code

Dependency Diagrams:

bgckSSMIS_mod.svg

Direct Dependency Diagram

bgckSSMIS_mod_rev.svg

Reverse Dependency Diagram

Description

MODULE bgckSSMIS_mod (prefix=’ssbg’ category=’1. High-level functionality’)

Purpose

To perform background check and quality control for SSMIS radiance observations.

Quick access

Routines

bennartz(), check_stddev(), check_topo(), cld_filter_fweng(), compute_iwv_101(), copy1dimto2dimintegerarray(), copy1dimto2dimrealarray(), determ_clw(), determ_sea_ice(), determ_tpw(), f16tdr_remapping(), land_ice_mask_ssmis(), ssbg_bgcheckssmis(), ssbg_computessmissurfacetype(), ssbg_grossvaluecheck(), ssbg_init(), ssbg_inovqcssmis(), ssbg_readgeophysicfieldsandinterpolate(), ssbg_satqcssmis(), ssbg_updateobsspaceafterinovqc(), ssbg_updateobsspaceaftersatqc(), ssmi_ta2tb_fweng(), ssmi_ta2tb_fwentz(), ssmis_tb2ta(), wentz_sfctype_ssmis()

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

Variables

Subroutines and functions

subroutine  bgckssmis_mod/ssbg_init()
Purpose

This subroutine reads the namelist section NAMBGCK for the module.

Called from

ssbg_bgcheckssmis()

Call to

utl_abort()

subroutine  bgckssmis_mod/ssmis_tb2ta(numobstoprocess, grossrej, ztb, zta)
Purpose

Convert Tbs received from UKMO to Tas, by reversing Ta to Tb spillover correction applied in B. Bell’s pre-processing.

Arguments
  • numobstoprocess [integer ,in] :: Number of obs points to process

  • grossrej (*) [logical ,in] :: Gross rejection indicator

  • ztb (*) [real ,in] :: Tbs from input BURP file

  • zta (*) [real ,out] :: Tas after conversion

Called from

cld_filter_fweng()

subroutine  bgckssmis_mod/f16tdr_remapping(satid, ssmis_ta, remapped_ssmi_ta)
Purpose

Remap SSMIS imaging channel antenna temperature to SSMI Ta

Arguments
  • satid [integer ,in] :: Satellite ID

  • ssmis_ta (ssbg_maxnumchan) [real ,in] :: SSMIS antenna temperature

  • remapped_ssmi_ta (ssbg_maxnumchan) [real ,out] :: Remapped SSMI antenna temperature

Called from

cld_filter_fweng()

subroutine  bgckssmis_mod/ssmi_ta2tb_fweng(ta, tb)
Purpose

To convert antenna temperature(Ta) to brightness temperature(Tb).

Arguments
  • ta (24) [real ,in] :: Antenna temperature

  • tb (24) [real ,out] :: Brightness temperature

Called from

cld_filter_fweng()

subroutine  bgckssmis_mod/ssmi_ta2tb_fwentz(ta, tb)
Purpose

Convert antenna temperatures to brightness temperatures.

Arguments
  • ta (*) [real ,in] :: Antenna temperature

  • tb (*) [real ,out] :: Brightness temperature

Called from

cld_filter_fweng()

subroutine  bgckssmis_mod/compute_iwv_101(tb, iwv)
Purpose

Compute integrated water vapor from SSMI brightness temperatures.

Arguments
  • tb (24) [real ,in] :: Brightness temperature

  • iwv [real ,out] :: Integrated water vapor (kg/m**2)

Called from

cld_filter_fweng()

subroutine  bgckssmis_mod/determ_tpw(tb, stype, seaice, tpw)
Purpose

To calculate total precipitable water (in mm).

Arguments
  • tb (24) [real ,in] :: Brightness temperature

  • stype [integer ,in] :: Surface type

  • seaice [real ,in] :: Sea ice coverage

  • tpw [real ,out] :: Total precipitable water (mm)

Called from

determ_clw()

subroutine  bgckssmis_mod/determ_sea_ice(ocean, ta, stype, seaice, latitude)
Purpose

To calculate sea ice cover (in %).

Arguments
  • ocean [integer ,in] :: Ocean surface type index

  • ta (24) [real ,in] :: Antenna temperature

  • stype [integer ,in] :: Surface type

  • seaice [real ,out] :: Sea ice coverage

  • latitude [real ,in] :: Latitude of observation

Called from

determ_clw()

subroutine  bgckssmis_mod/determ_clw(algoption, ta, tb, stype, clw, iwv, latitude)
Purpose

To calculate cloud liquid water for a single data point (in kg/m**2).

Arguments
  • algoption [character ,in] :: Algorithm option (fweng, fwentz or nsun)

  • ta (24) [real ,in] :: Antenna temperature

  • tb (24) [real ,in] :: Brightness temperature

  • stype [integer ,inout] :: Surface type

  • clw [real ,out] :: Cloud liquid water (in kg/m**2)

  • iwv [real ,inout] :: Integrated water vapor

  • latitude [real ,in] :: Latitude of observation

Called from

cld_filter_fweng()

Call to

determ_sea_ice(), determ_tpw()

subroutine  bgckssmis_mod/cld_filter_fweng(numobstoprocess, obstb, algoption, waterobs, grossrej, cloudobs, iwvreject, precipobs, rclw, riwv, isatid, obslatitude, numseaiceobs)
Purpose

Compute the cloud liquid water (CLW) from SSMIS channels using the regression algorithm of Fuzhong Weng and Ninghai Sun. Retrieve CLW path from F16 SSMIS TDR data

Arguments
  • numobstoprocess [integer ,in] :: Number of obs points to process

  • obstb (*) [real ,in] :: Brightness temperature of observations

  • algoption [character ,in] :: Algorithm option (fweng, fwentz or nsun)

  • waterobs (*) [logical ,inout] :: Open water identifier for each obs

  • grossrej (*) [logical ,in] :: Logical array of obs with gross error (obs to reject)

  • cloudobs (*) [logical ,inout] :: Logical array of obs for which CLW > 0.01 kg/m**2 or with precipitations

  • iwvreject (*) [logical ,inout] :: Logical array of obs for which IWV > 80 kg/m**2

  • precipobs (*) [logical ,inout] :: Logical array of obs with precipitations (CLW missing)

  • rclw (*) [real ,inout] :: Real array of CLW

  • riwv (*) [real ,inout] :: Real array of integrated water vapor (IWV)

  • isatid [integer ,in] :: Satellite identifier

  • obslatitude (*) [real ,in] :: Observation latitudes

  • numseaiceobs [integer ,inout] :: Number of observations with sea ice

Called from

ssbg_satqcssmis()

Call to

ssmis_tb2ta(), f16tdr_remapping(), ssmi_ta2tb_fweng(), ssmi_ta2tb_fwentz(), compute_iwv_101(), determ_clw()

subroutine  bgckssmis_mod/copy1dimto2dimrealarray(onedimarray, firstdim, seconddim, twodimarray)
Purpose

copy 1D real array into 2D real array given firstDim and secondDim

Arguments
  • onedimarray (firstdim*seconddim) [real ,in] :: 1D real array

  • firstdim [integer ,in,] :: First dimension

  • seconddim [integer ,in,] :: Second dimension

  • twodimarray (firstdim,seconddim) [real ,inout] :: 2D real array

subroutine  bgckssmis_mod/copy1dimto2dimintegerarray(onedimarray, firstdim, seconddim, twodimarray)
Purpose

copy 1D integer array into 2D Integer array given firstDim and secondDim

Arguments
  • onedimarray (firstdim*seconddim) [integer ,in] :: 1D integer array

  • firstdim [integer ,in,] :: First dimension

  • seconddim [integer ,in,] :: Second dimension

  • twodimarray (firstdim,seconddim) [integer ,inout] :: 2D integer array

subroutine  bgckssmis_mod/bennartz(ier, numobstoprocess, tb89, tb150, satzenithangle, landseaqualifier, scatl, scatw)
Purpose

Compute the following parameters using 2 AMSU-B channels: - scattering index (over land and ocean). The two channels used are: 89Ghz, 150Ghz.

REFERENCES: 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
  • ier (numobstoprocess) [integer ,out] :: Error return code

  • numobstoprocess [integer ,in] :: Number of obs points to process

  • tb89 (*) [real ,in] :: 89Ghz AMSU-B brightness temperature (K)

  • tb150 (*) [real ,in] :: 150Ghz AMSU-B brightness temperature (K)

  • satzenithangle (*) [real ,in] :: Satellite zenith angle (deg.)

  • landseaqualifier (*) [integer ,in] :: Land/sea indicator (0=land; 1=ocean)

  • scatl (*) [real ,out] :: Scattering index over land

  • scatw (*) [real ,out] :: Scattering index over water

Called from

mwbg_tovcheckamsub(), ssbg_satqcssmis()

subroutine  bgckssmis_mod/ssbg_readgeophysicfieldsandinterpolate(obslatitude, obslongitude, modelinterpter)
Purpose

Reads geophysical model variable (GZ) and saves for the first time. GZ is geopotential height (GZ at surface = surface height in dam). Then interpolates those variables to observation location.

Arguments
  • obslatitude (*) [real ,in] :: Observation latitudes

  • obslongitude (*) [real ,in] :: Observation longitudes

  • modelinterpter (*) [real ,out,allocatable] :: Filtered and interpolated topography (in m)

Called from

ssbg_inovqcssmis()

Call to

utl_abort()

subroutine  bgckssmis_mod/land_ice_mask_ssmis(numobstoprocess, obslatitude, obslongitude, landseaqualifier, terraintype, waterobs)
Purpose

Determine for each observation point the ice mask value from the binary file copied to the local work directory.

Arguments
  • numobstoprocess [integer ,in] :: Number of obs points to process

  • obslatitude (*) [real ,in] :: Observation latitudes

  • obslongitude (*) [real ,in] :: Observation longitudes

  • landseaqualifier (*) [integer ,inout] :: Land/sea indicator (0=land; 1=ocean)

  • terraintype (*) [integer ,out,allocatable] :: Terrain type qualifier

  • waterobs (*) [logical ,out,allocatable] :: Open water identifier for each obs

Called from

ssbg_satqcssmis()

Call to

utl_abort()

subroutine  bgckssmis_mod/wentz_sfctype_ssmis(numobstoprocess, obslatitude, obslongitude, landseaqualifier)
Purpose

Determine for each observation point the wentz surface value from the FST file wentz_surf.std.

Arguments
  • numobstoprocess [integer ,in] :: Number of obs points to process

  • obslatitude (*) [real ,in] :: Observation latitudes

  • obslongitude (*) [real ,in] :: Observation longitudes

  • landseaqualifier (*) [integer ,out,allocatable] :: Land/sea indicator (0=land; 1=ocean)

Called from

ssbg_computessmissurfacetype()

Call to

utl_abort()

subroutine  bgckssmis_mod/ssbg_computessmissurfacetype(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(), obs_headelem_r(), wentz_sfctype_ssmis(), obs_headset_i()

subroutine  bgckssmis_mod/ssbg_grossvaluecheck(numobstoprocess, obstb, obstbmin, obstbmax, grossrej)
Purpose

Check obsTb for values that are missing or outside physical limits.

Arguments
  • numobstoprocess [integer ,in] :: Number of obs points to process

  • obstb (*) [real ,in] :: Brightness temperature of observations

  • obstbmin [real ,in] :: Min(obsTb) threshold for rejection

  • obstbmax [real ,in] :: Max(obsTb) threshold for rejection

  • grossrej (*) [logical ,out,allocatable] :: Logical array of obs with gross error (obs to reject)

Called from

ssbg_satqcssmis()

subroutine  bgckssmis_mod/ssbg_satqcssmis(obsspacedata, headerindex, obstoreject)
Purpose

This program is applied as a first stage of processing to SSMIS data after it is received from UK MetOffice and organized into boxes by a program of Jose Garcia. The processing applied in this program includes:

– interpolate Wentz surface land mask to each obs pt

(nearest neighbour) to define land/sea qualifier (008012)

– interpolate binary ice mask to each obs pt (nearest

neighbour) to define terrain-type element (013039) where 0 = sea ice and 1 = snow-covered land

– interpolate model MG and LG fields to a grid surrounding each obs

pt to identify obs that are over open water, far from coast/ice

– identify those obs for which the UKMO rain marker

is ON (ie. 020029 = 1) indicating poor quality

– apply a cloud filter to identify those obs in cloudy regions;

write CLW and IWV (over ocean) to output BURP file

– re-write data to output BURP file while modifying flags

for those obs which are not over open water, or have been identified in rain/cloud areas, or are of poor quality

– define satellite zenith angle element (007024) and add

this and land/sea qualifier and terrain-type elements to the output file

Arguments
  • obsspacedata [struct_obs ,inout] :: ObsSpaceData object

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

  • obstoreject (*) [logical ,out,allocatable] :: Observations that will be rejected

Called from

ssbg_bgcheckssmis()

Call to

obs_headelem_i(), tvs_isidburpinst(), tvs_mapsat(), tvs_mapinstrum(), utl_abort(), obs_elem_c(), obs_headelem_r(), obs_bodyelem_r(), land_ice_mask_ssmis(), ssbg_grossvaluecheck(), cld_filter_fweng(), bennartz(), obs_headset_i(), obs_numheader()

subroutine  bgckssmis_mod/ssbg_updateobsspaceaftersatqc(obsspacedata, headerindex, obstoreject)
Purpose

Update obspacedata variables (obstTB and obs flags) after QC

Arguments
  • obsspacedata [struct_obs ,inout] :: ObsSpaceData object

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

  • obstoreject (*) [logical ,in] :: Observations that will be rejected

Called from

ssbg_bgcheckssmis()

Call to

obs_headelem_i(), tvs_mapsat(), tvs_mapinstrum(), utl_abort(), obs_bodyelem_r(), obs_bodyelem_i(), obs_headset_i(), obs_bodyset_i()

subroutine  bgckssmis_mod/ssbg_inovqcssmis(obsspacedata, headerindex, flagsinovqc)
Purpose

Identify those observations in SSMIS data that have O-P values greater than a threshold proportional to known standard deviations (computed when the bias correction coefficients were derived). The flags of these observations are adjusted accordingly (ie bit 9 switched ON). Also,

– flag channels for systematic rejection based on UTIL

value in stats_*_errtot file or because flag bit 6 OFF (uncorrected data)

– reject sets of AMSU-like channels based on O-P for

a single channel

– reject selected AMSU-like channels over land when

model surface height exceeds a specified limit (topography check)

Arguments
  • obsspacedata [struct_obs ,inout] :: ObsSpaceData object

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

  • flagsinovqc (*) [integer ,out,allocatable] :: Flags for assimilation/rejection of obs

Called from

ssbg_bgcheckssmis()

Call to

obs_headelem_i(), tvs_isidburpinst(), tvs_mapsat(), tvs_mapinstrum(), utl_abort(), obs_elem_c(), obs_headelem_r(), obs_bodyelem_r(), obs_bodyelem_i(), ssbg_readgeophysicfieldsandinterpolate(), check_stddev(), check_topo()

subroutine  bgckssmis_mod/check_stddev(obschannels, omptb, flagsinovqc, actualnumchannel, numobstoprocess, sensorindex, burpfilesatid, obsflags)
Purpose

Perform quality control on the radiances by analysing the magnitude of the residuals.

Arguments
  • obschannels (*) [integer ,in] :: Channel numbers

  • omptb (*) [real ,in] :: Radiance residuals

  • flagsinovqc (*) [integer ,out] :: Flags for assimilation/rejection of obs

  • actualnumchannel [integer ,in] :: Number of channels

  • numobstoprocess [integer ,in] :: Number of obs points to process

  • sensorindex [integer ,in] :: Identification number of satellite

  • burpfilesatid [character ,in] :: Satellite identification in BURP file

  • obsflags (*) [integer ,in] :: Radiance data flags

Called from

ssbg_inovqcssmis()

subroutine  bgckssmis_mod/check_topo(modelinterpter, flagsinovqc, actualnumchannel, numobstoprocess)
Arguments
  • modelinterpter (*) [real ,in] :: Model surface height (m) for each obs

  • flagsinovqc (*) [integer ,inout] :: Flags for assimilation/rejection of obs

  • actualnumchannel [integer ,in] :: Number of channels

  • numobstoprocess [integer ,in] :: Number of obs points to process

Called from

ssbg_inovqcssmis()

subroutine  bgckssmis_mod/ssbg_updateobsspaceafterinovqc(obsspacedata, headerindex, flagsinovqc)
Purpose

Update obspacedata variables (obstTB and obs flags) after QC

Arguments
  • obsspacedata [struct_obs ,inout] :: ObsSpaceData object

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

  • flagsinovqc (*) [integer ,in] :: Flags for assimilation/rejection of obs

Called from

ssbg_bgcheckssmis()

Call to

obs_headelem_i(), tvs_mapsat(), tvs_mapinstrum(), utl_abort(), obs_bodyelem_r(), obs_bodyelem_i(), obs_headset_i(), obs_bodyset_i()

subroutine  bgckssmis_mod/ssbg_bgcheckssmis(obsspacedata)
Purpose

Do the background check for SSMIS data (satQC and inovQC).

Arguments

obsspacedata [struct_obs ,inout] :: ObsSpaceData object

Called from

midas_obsselection

Call to

utl_tmg_start(), obs_getheaderindex(), obs_headelem_i(), tvs_isidburpinst(), utl_abort(), ssbg_init(), ssbg_satqcssmis(), ssbg_updateobsspaceaftersatqc(), ssbg_inovqcssmis(), ssbg_updateobsspaceafterinovqc(), utl_tmg_stop()