Changes between Version 7 and Version 8 of OMI_nondiagonal_observation_error_covariance_matrices


Ignore:
Timestamp:
Sep 9, 2024, 2:15:35 PM (2 months ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OMI_nondiagonal_observation_error_covariance_matrices

    v7 v8  
     1
    12= Using non-diagonal R matrices with OMI =
    23
     
    194195 * The observation vector `obs_l` is provided through the interface for cases where the observation error variance is relative to the actual value of the observations.
    195196 * For diagonal **R** PDAF-OMI uses the routine `PDAFomi_likelihood_l` in `/src/PDAFomi_obs_l.F90` as the routine that is called within the observation module. This routine can serve as a template for an implementation by the user.
     197
     198=== prodRinvA_hyb_l_pdafomi ===
     199
     200The interface for this routine is:
     201{{{
     202SUBROUTINE prodRinvA_hyb_l_pdafomi(domain_p, step, dim_obs_l, dim_ens, obs_l, gamma, A_l, C_l)
     203
     204  INTEGER, INTENT(in) :: domain_p             ! Current local analysis domain
     205  INTEGER, INTENT(in) :: step                 ! Current time step
     206  INTEGER, INTENT(in) :: dim_obs_l            ! Dimension of local observation vector
     207  INTEGER, INTENT(in) :: dim_ens              ! Ensemble size
     208  REAL, INTENT(in)    :: obs_l(dim_obs_l)     ! Local vector of observations
     209  REAL, INTENT(in)    :: gamma                ! Hybrid weight
     210  REAL, INTENT(inout) :: A_l(dim_obs_l, dim_ens) ! Input matrix from analysis routine
     211  REAL, INTENT(out)   :: C_l(dim_obs_l, dim_ens) ! Output matrix
     212}}}
     213
     214The routine is called during the loop over the local analysis domains. In the algorithm, the product of the inverse of the observation error covariance matrix with some matrix has to be computed. This matrix holds the observed part of the ensemble perturbations for the local analysis domain of index `domain_p`. The matrix is provided as `A_l`. The product has to be given as `C_l`.
     215
     216This routine is also the place to perform observation localization. To initialize a vector of weights, the routine `PDAF_local_weight` can be called. The procedure is used in the example implementation and also demonstrated in the template routine.
     217
     218The routine is analogous to `prodRinvA_l_pdafomi, but also has to apply the hybrid weight `gamma` of the hybrid filter LKNETF. This is a simple multiplication with the input value in the loop where `C_l` is initialized.
     219
     220Hints:
     221 * This routine is a simple extension of `prodRinvA_l_pdafomi`. One can implement the hybrid variant by copying this routine and adapting it. `gamma` is computed inside PDAF and provided to the routine.
     222 * Please see the further implementation hints for `prodRinvA_l_pdafomi`.
     223 * For diagonal **R** PDAF-OMI uses the routine `PDAFomi_prodRinvA_hyb_l` in `/src/PDAFomi_obs_l.F90` as the routine that is called within the observation module. This routine can serve as a template for an implementation by the user.
     224
     225=== likelihood_hyb_l_pdafomi ===
     226
     227The interface for this routine is:
     228{{{
     229SUBROUTINE likelihood_hyb_l_pdafomi(domain_p, step, dim_obs_l, obs_l, resid_l, gamma, likely_l)
     230
     231  INTEGER, INTENT(in) :: domain_p             ! Current local analysis domain
     232  INTEGER, INTENT(in) :: step                 ! Current time step
     233  INTEGER, INTENT(in) :: dim_obs_l            ! Dimension of local observation vector
     234  REAL, INTENT(in)    :: obs_l(dim_obs_l)     ! Local vector of observations
     235  REAL, INTENT(inout) :: resid_l(dim_obs_l)   ! Input vector holding the local residual y-Hx
     236  REAL, INTENT(in)    :: gamma                ! Hybrid weight
     237  REAL, INTENT(out)   :: likely_l(dim_obs_l)  ! Output value of the likelihood
     238}}}
     239
     240This routine is a variant for `U_likelihood_l_pdafomi`. See the description of this routine for its functionality. The routine is called during the loop over the local analysis domains. The likelihood of the local observations has to be computed for each ensemble member. The likelihood is computed from the observation-state residual according to the assumed observation error distribution. Commonly, the observation errors are assumed to be Gaussian distributed. In this case, the likelihood is '''exp(-0.5*(y-Hx)^T^*R^-1^*(y-Hx))'''.
     241
     242This routine is also the place to perform observation localization. To initialize a vector of weights, the routine `PDAF_local_weight` can be called. The procedure is used in the example implementation and also demonstrated in the template routine.
     243
     244The routine also has to apply the hybrid weight `gamma`. This is a simple multiplication with `1-gamma` in the loop where `Rinvresid_l` is initialized.
     245
     246Hints:
     247 * This routine is a simple extension of `U_likelihood_l. One can implement the hybrid variant by copying this routine and adapting it. `gamma` is computed inside PDAF and provided to the routine.
     248 * Please see the further implementation hints for `prodRinvA_l_pdafomi`.
     249 * For diagonal **R** PDAF-OMI uses the routine `PDAFomi_likelihood_hyb_l` in `/src/PDAFomi_obs_l.F90` as the routine that is called within the observation module. This routine can serve as a template for an implementation by the user.