= Using non-diagonal R matrices with OMI = [[PageOutline(2-3,Contents of this page)]] This feature was introduced with PDAF V2.3. The default mode of PDAF-OMI is to use a diagonal observation error covariance matrix **R** and specifying the observation error variances, i.e. the diagonalof **R** only. This is in line with the common choice in data assimilation to assume that observation errors are uncorrelated. However, there are also observation types with significant observation error correlations, which should be represented by a non-diagonal observation error covariance matrix. With PDAF V2.3 support for such nondiagonal **R** matrices was added to OMI. PDAF-OMI's support for nondiagonal **R**-matrices consists in given the user access to the routines that perform operations involve **R**. This differs with the filter type, e.g. in LESTKF and LETKF a produce of some matrix with the inverse of **R** ha sto be computed, while in the traditional, perturbed observations, EnKF the matrix **R** has to be added to some other matrix. For the particle filter and the NETF the computation of the likelihood involves **R**. == Routines to perform the analysis step == For using a nondiagonal **R** there is a modified variant of the PDAF-OMI routines `PDAFomi_assimilate_*` or `PDAFomi_put_state_*`. Compared to the case of a diagonal **R**, the routines are slightly less generic. Below we provide an overview of the routines including the links to the interface description of each. The last column gives the name of the additional routine(s) provided in the interface to implement the non-diagonal **R**-matrix. ||= '''Global Filter'' =||= **diagonal R** =||= **non-diagonal R** =||= **additional routine(s)** =|| ||= EnKF =|| [wiki:PDAFomi_assimilate_global][[BR]][wiki:PDAFomi_put_state_global] || [wiki:PDAFomi_assimilate_enkf_nondiagR][[BR]][wiki:PDAFomi_put_state_enkf_nondiagR] || add_obs_err_pdafomi [[BR]]init_obscovar_pdafomi || ||= ESTKF =|| [wiki:PDAFomi_assimilate_global][[BR]][wiki:PDAFomi_put_state_global] || [wiki:PDAFomi_assimilate_global_nondiagR][[BR]][wiki:PDAFomi_put_state_global_nondiagR] || prodRinvA_pdafomi || ||= ETKF =|| [wiki:PDAFomi_assimilate_global][[BR]][wiki:PDAFomi_put_state_global] || [wiki:PDAFomi_assimilate_global_nondiagR][[BR]][wiki:PDAFomi_put_state_global_nondiagR] || prodRinvA_pdafomi || ||= PF =|| [wiki:PDAFomi_assimilate_global][[BR]][wiki:PDAFomi_put_state_global] || [wiki:PDAFomi_assimilate_nonlin_nondiagR][[BR]][wiki:PDAFomi_put_state_nonlin_nondiagR] || likelihood_pdafomi || ||= NETF =|| [wiki:PDAFomi_assimilate_global][[BR]][wiki:PDAFomi_put_state_global] || [wiki:PDAFomi_assimilate_nonlin_nondiagR][[BR]][wiki:PDAFomi_put_state_nonlin_nondiagR] || likelihood_pdafomi || ||= SEIK =|| [wiki:PDAFomi_assimilate_global][[BR]][wiki:PDAFomi_put_state_global] || [wiki:PDAFomi_assimilate_global_nondiagR][[BR]][wiki:PDAFomi_put_state_global_nondiagR] || prodRinvA_pdafomi || [[BR]] ||= '''Local Filter'' =||= **diagonal R** =||= **non-diagonal R** =||= **additional routine(s)** =|| ||= LEnKF =|| [wiki:PDAFomi_assimilate_lenkf][[BR]][wiki:PDAFomi_put_state_lenkf] || [wiki:PDAFomi_assimilate_lenkf_nondiagR][[BR]][wiki:PDAFomi_put_state_lenkf_nondiagR] || add_obs_err_pdafomi [[BR]]init_obscovar_pdafomi || ||= LESTKF =|| [wiki:PDAFomi_assimilate_local][[BR]][wiki:PDAFomi_put_state_local] || [wiki:PDAFomi_assimilate_local_nondiagR][[BR]][wiki:PDAFomi_put_state_local_nondiagR] || prodRinvA_l_pdafomi || ||= LETKF =|| [wiki:PDAFomi_assimilate_local][[BR]][wiki:PDAFomi_put_state_local] || [wiki:PDAFomi_assimilate_local_nondiagR][[BR]][wiki:PDAFomi_put_state_local_nondiagR] || prodRinvA_l_pdafomi || ||= LSEIK =|| [wiki:PDAFomi_assimilate_local][[BR]][wiki:PDAFomi_put_state_local] || [wiki:PDAFomi_assimilate_local_nondiagR][[BR]][wiki:PDAFomi_put_state_local_nondiagR] || prodRinvA_l_pdafomi || ||= LNETF =|| [wiki:PDAFomi_assimilate_local][[BR]][wiki:PDAFomi_put_state_local] || [wiki:PDAFomi_assimilate_lnetf_nondiagR][[BR]][wiki:PDAFomi_put_state_lnetf_nondiagR] || likelihood_l_pdafomi || ||= LKNETF =|| [wiki:PDAFomi_assimilate_local][[BR]][wiki:PDAFomi_put_state_local] || [wiki:PDAFomi_assimilate_lknetf_nondiagR][[BR]][wiki:PDAFomi_put_state_lknetf_nondiagR] ||likelihood_l_pdafomi[[BR]]likelihood_hyb_l_pdafomi[[BR]] prodRinvA_l_pdafomi[[BR]] prodRinvA_hyb_l_pdafomi || [[BR]] ||= '''3D-Var'' =||= **diagonal R** =||= **non-diagonal R** =||= **additional routine(s)** =|| ||= 3DVar =|| [wiki:PDAFomi_assimilate_3dvar][[BR]][wiki:PDAFomi_assimilate_3dvar] || [wiki:PDAFomi_put_state_3dvar_nondiagR][[BR]][wiki:PDAFomi_put_state_3dvar_nondiagR ] || prodRinvA_pdafomi || ||= En3DVar ESTKF =|| [wiki:PDAFomi_assimilate_en3dvar_estkf][[BR]][wiki:PDAFomi_assimilate_en3dvar_estkf] || [wiki:PDAFomi_put_state_en3dvar_estkf_nondiagR][[BR]][wiki:PDAFomi_put_state_en3dvar_estkf_nondiagR] || prodRinvA_pdafomi || ||= En3DVar LESTKF =|| [wiki:PDAFomi_assimilate_en3dvar_lestkf][[BR]][wiki:PDAFomi_assimilate_en3dvar_lestkf] || [wiki:PDAFomi_put_state_en3dvar_lestkf_nondiagR][[BR]][wiki:PDAFomi_put_state_en3dvar_lestkf_nondiagR] || prodRinvA_l_pdafomi || ||= hyb3DVar ESTKF =|| [wiki:PDAFomi_assimilate_hyb3dvar_estkf][[BR]][wiki:PDAFomi_assimilate_hyb3dvar_estkf] || [wiki:PDAFomi_put_state_hyb3dvar_estkf_nondiagR][[BR]][wiki:PDAFomi_put_state_hyb3dvar_estkf_nondiagR] || prodRinvA_pdafomi || ||= hyb3DVar LESTKF =|| [wiki:PDAFomi_assimilate_hyb3dvar_lestkf][[BR]][wiki:PDAFomi_assimilate_hyb3dvar_lestkf] || [wiki:PDAFomi_put_state_hyb3dvar_lestkf_nondiagR][[BR]][wiki:PDAFomi_put_state_hyb3dvar_lestkf_nondiagR] || prodRinvA_l_pdafomi || == Call-back routines handling observations == For the different filters and 3D-Var variants,