Impact Of a Single Observation from IASI


The vertical profile of analysis increments from assimilating a single AHI CSR channel observation had complicated structure. For example when a channel observation whose weighting function was mostly in lower troposphere was assimilated the resulting analysis increments were not confined vertically to the peak of the weighting function. To better understand vertical spreading of analysis increments a single-observation test using IASI channel obs is attempted. As the weighting functions of IASI channels peak sharply the analysis increments should be more confined vertically.

Experimental Set-up

Following set of configurations were used for this test,

  • 3DVAR
  • non-hybrid and no ensemble cycles
  • Resolution of PFM is N108
  • no VarBC

Note 1. N108 PFM resolution differs from the screen 3DVAR resolution

Experiment was done using suite ID u-am568 (copy of u-aj730/trunk@40220). I made following modifications to progressively arrive at the target configuration outlined above,

  1. Ensemble and hybrid VAR are switched off (glu_var_anal_n108 job 01)
  1. Turned off VarBC (glu_var_anal_n108 job 02)
  1. Set up 3DVAR task
    1. copied screen 3DVAR app config file then made following changes
      • point to locations of LS, varobs and varcx
      • turned on 3DVAR - it appears all observations supplied are used, so this is FGAT 3DVAR (glu_var_anal_n108 job 03)
  1. Selected a single FOV which passed to VAR
    1. following the changes in u-aj977 Ops_ExtractAndProcess for AHI CSR selected smaller number of IASI observations
    2. turned on SatRad NetCDF write: using this selected a FOV that passed to VAR
    3. then a single FOV was selected using extractcontrolnl: this passed QC and thinning and was the only FOVS in varobs; the FOV had a coordinates of 83.77021 degE, -28.4431 degN (N.B. SatRad 1DVAR identified a cloud with CTP=686 hPa)
  1. Assimlated the single FOV using 3DVAR
    1. following the changes in the Var_AnalysePF tasks of u-aj977 assimilated a single IASI FOV
    2. a gridpoint nearest the FOV was selected: cubes[2].coord('longitude').points[148]=83.53125 and cubes[2].coord('latitude').points[164]=-28.3125
    3. the max in the vertical profile of analysis increment for theta and u occurs near the model top; for qT it is below tropopause
  1. Selected a single channel observation
    1. changed /home/548/jtl548/da/suite/nwp_input/ops_var/Data/SatRad_coeffs/bom/users/u-am568/aps3_r00_my00.default@38138/ to allow only MetDB channel 70 to be selected (glu_ops_process_background_iasi job 14)
    2. ran 3DVAR: minimsation stopped after only 2 iterations as gradJ was small enough (job 8)
  1. Selected a single channel observation by adding channel selection in
    1. this is easier as I don't need to run OPS task
    2. chose IASI MetDB ch70 (temp Jacobian peaks at 143.84 hPa); there is a slight difference in resulting anal increment (why?) (glu_var_anal_n108 job 09)
    3. chose ch123 (temp Jacobian peaks at 610.60 hPa) (glu_var_anal_n108 job 11); the channel obs was not used by VAR (too close to the cloudtop?)
  1. As the chosen FOV above had 91 used channels decided to pick another FOV with more used channels
    1. lon[44340]=82.8507 and lat[44340]=-32.026001
    2. chanstovar[:,44340] has 182 used channels
    3. cloudfrac[44340]=0.0
    4. now using &FilterObs namelist group to select the FOV above

N.B. There's a bug in Ops_SatRad_FilterObs.f90 which meant incorrect message was written out giving misleading information about a single observation (see Appendix below)

Appendix: bug in Ops_SatRad_FilterObs.f90

  • the following code segment reports the observation which has minimum angular separation squared from a nominated observation,
IF (smin(1) == sminsave) THEN
  Obs % ReportFlags(closest) = IBCLR (Obs % ReportFlags(closest), FinalRejectReport)
  Obs % ReportFlags(closest) = IBCLR (Obs % ReportFlags(closest), PermRejectReport)
  Obs % QCFlags(closest) = IBCLR (Obs % QCFlags(closest), QC_mask)

! 6) Output messages

IF (ProcessMode >= DiagnosticMode) THEN

  WRITE (Messages(2), '(A,2F8.2)') 'Requested nearest valid observation to lat,long', Latitude, Longitude
  WRITE (Messages(3), '(A,2F8.2)') 'Nearest one found is', Obs % Latitude(closest) % value, &
                                   Obs % Longitude(closest) % value
  WRITE (Messages(4), '(A,I8)') 'Observation ID of selected ob:', Obs % Id(closest)
  CALL gen_message (RoutineName, &


sminsave holds local (i.e. each PE) angular separation squared and smin(1) holds the minimum angular separation squared across all PE's. So the code under ! 6) Output messages is output for each PE and that may not be the minimum in all the PE's resulting in misleading message.


  • Under [namelist:var_minimisenl] of gl_var_anal_low app maxiterations is 20. Perhpas this needs to be increased to 40 as in 4DVAR (?)
Last modified 4 years ago Last modified on Aug 2, 2017 4:42:44 PM