Temperature from prepbufr (setupt)
setupt includes forward operators for virtual, sensible temperature, T2m and PBL pseudo surface observations
General workflow:
- surface temperature correction based on terrain (gsd_terrain_match_surfTobs.f90)
- buddy check (for regional 2DVar): compares innovations of all obs within some radius with the mean innovation (buddycheck_mod.f90)
- handle multiple reported data at station (choose one of the reports)
- throw out the observations that are outside of the time window
- bias correction for aircraft data
- compute innovations
- gross checks (compare innovation/obs error with some threshold)
- (opt) generate PBL pseudo surface observations.
- save data
QC methods from setupt generally can be divided into methods that use only observation data (+ some configs):
- handle multiple reports
- observations out of time window
- also thinning in readprepbufr.f90
and methods that require state information:
- gross check
- buddy check
Note: gross checks potentially can use ensemble spread information.
AOD from bufr (setupaod.f90)
AOD bufr created from HDF files, different HDF formats for MODIS, VIIRS. Also ABI GOES-R possible to implement
General workflow
- assign which channels to use based on a list in aeroinfo.txt,
- initialize CRTM for a given satellite and type of observation (e.g. obstype='modis_aod', call init_crtm(...)),
- read AODs at different wavelengths (channels) for a chosen satellite (MODIS Aqua+ Terra, VIIRS, namelist, only high quality data in bufr files),
- check if within window,
- calculate error based on surface type/retrieval algorithm,
- calculate layer model AODs and Jacobians using CRTM (call call_crtm(...), horizontal interpolation in call_crtm),
- reject if crtm returns error(?), select channels for processing (only 550nm now),
- accept/reject AODs depending on quality data from Deep Blue algorithm (MODIS),
- calculate innovations,
- save innovations, Jacobians, errors etc. in my_head list,
- save accepted and rejected in my_diag list,
- write diagnostics to a file (e.g. for EnKF),
- quality control largely done before creating bufr files.
Radiance (setuprad.f90)
Interface:
General flow:
Initialization:
Initialize variables and constants.
Initialize logical flags for satellite platform
Determine whether or not cloud radiance: lcw4crtm
Parameters for the observation error model when lcw4crtm=true
Initialize channel related information: predchan; iuse_rad;passive_bc;...
Set error instrument channels
Logic to turn off print of reading coefficients if not first interation or not mype_diaghdr or not init_pass
Initialize radiative transfer and pointers to values in data_s
call init_crtm(init_pass,iwrmype,mype,nchanl,isis,obstype)
Get indexes of variables in jacobian to handle exceptions down below
Initialize ozone jacobian flags to .false. (retain ozone jacobian)
If SSM/I, check for non-use of 85GHz channel, for QC workaround set no85GHz true if any 85GHz is not used, and other freq channel is used no85GHz = .false.
Setup for diagnostic
- Find number of channels written to diag file
- Set number of extra pieces of information to write to diagnostic file. For most satellite sensors there is no extra information. However, for GOES Imager data we write additional information.
- Allocate array to hold channel information for diagnostic file and/or lobsdiagsave option
- If diagnostic file requested, open unit to file and write header.
- Initialize/write parameters for satellite diagnostic file on
- Load data array for current satellite
read(lunin) data_s,luse,ioid
PROCESSING OF SATELLITE DATA: Loop over data in this block
do n = 1,nobs
Extract analysis relative observation time.
If desired recompute 10meter wind factor
Set land/sea, snow, ice percentages and flags (no time interpolation)
Count data of different surface types
Set relative weight value
Interpolate model fields to observation location, call crtm and create jacobians. Output both tsim and tsim_clr for allsky
radiance operator
1 2 3 4 5 6 7 8 9 10 11 12 13 | if (lcw4crtm) then call call_crtm(obstype,dtime,data_s(:,n),nchanl,nreal,ich, & tvp,qvp,clw_guess,prsltmp,prsitmp, & trop5,tzbgr,dtsavg,sfc_speed, & tsim,emissivity,ptau5,ts,emissivity_k, & temp,wmix,jacobian,error_status,tsim_clr=tsim_clr) else call call_crtm(obstype,dtime,data_s(:,n),nchanl,nreal,ich, & tvp,qvp,clw_guess,prsltmp,prsitmp, & trop5,tzbgr,dtsavg,sfc_speed, & tsim,emissivity,ptau5,ts,emissivity_k, & temp,wmix,jacobian,error_status) endif |
If the CRTM returns an error flag, do not assimilate any channels for this ob and set the QC flag to ifail_crtm_qc.
For SST retrieval, use interpolated NCEP SST analysis
If using adaptive angle dependent bias correction, update the predictors for this part of bias correction. The AMSUA cloud liquid water algorithm uses total angle dependent bias correction for channels 1 and 2
Compute microwave cloud liquid water or graupel water path for bias correction and QC.
COMPUTE AND APPLY BIAS CORRECTION TO SIMULATED VALUES
- Construct predictors for 1B radiance bias correction.
- Apply bias correction
- emissivity sensitivity bias predictor
- Apply SST dependent bias correction with cubic spline
- Compute retrieved microwave cloud liquid water and assign cld_rbc_idx for bias correction in allsky conditions
Calculate cloud effect for QC
QC OBSERVATIONS BASED ON VARIOUS CRITERIA: Separate blocks for various instruments.
Only process observations to be assimilated (fill in radhead, radtail)
At the end of analysis, prepare for bias correction for monitored channels.
Only "good monitoring" obs are included in J_passive calculation.
summation of observation number
Write diagnostics to output file: diagbuf; diagbufex; diagbufchan
End of n-loop over obs
- release memory