Changes between Initial Version and Version 1 of PDAF_diag_CRPS_mpi


Ignore:
Timestamp:
Mar 26, 2025, 2:44:22 PM (7 days ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TabularUnified PDAF_diag_CRPS_mpi

    v1 v1  
     1= PDAF_diag_CRPS_mpi =
     2
     3
     4This page documents the routine `PDAF_diag_CRPS_mpi` of PDAF, which was introduced with PDAF V2.2.1.
     5
     6This routine computes the Continuous Ranked Probability Score (CRPS) and its decomposition into resolution and reliability. The CRPS provide information about the statistical consistency of the ensemble with the observations. In toy models, the CRPS can also be computed with regard to the true state.
     7
     8With parallelization, the computation for the CRPS, reliability, etc. are performed over the global state vector utilizing appropriate MPI operations.
     9
     10Inputs are an array holding the observed ensemble and a corresponding vector of observations.
     11
     12The routine can be called in the pre/poststep routine of PDAF both before and after the analysis step to compute the CRPS.
     13
     14The interface is:
     15{{{
     16SUBROUTINE PDAF_diag_crps_mpi(dim_p, dim_ens, element, oens, obs, &
     17    COMM_filter, mype_filter, npes_filter, &
     18    CRPS, reli, pot_CRPS, uncert, status)
     19
     20  INTEGER, INTENT(in) :: dim_p                ! PE-local state dimension
     21  INTEGER, INTENT(in) :: dim_ens              ! Ensemble size
     22  INTEGER, INTENT(in) :: element              ! index of element in full state vector
     23       !< If element=0, mean values over dim_p grid points/cases are computed
     24  INTEGER, INTENT(in) :: COMM_filter          ! MPI communicator for filter
     25  INTEGER, INTENT(in) :: mype_filter          ! rank of MPI communicator
     26  INTEGER, INTENT(in) :: npes_filter          ! size of MPI communicator
     27  REAL, INTENT(in)    :: oens(dim_p, dim_ens) ! State ensemble
     28  REAL, INTENT(in)    :: obs(dim_p)           ! Observation / truth
     29  REAL, INTENT(out)   :: CRPS                 ! CRPS
     30  REAL, INTENT(out)   :: reli                 ! Reliability
     31  REAL, INTENT(out)   :: pot_CRPS             ! potential CRPS (resolution)
     32  REAL, INTENT(out)   :: uncert               ! uncertainty
     33  INTEGER, INTENT(out) :: status              ! Status flag (0=success)
     34}}}
     35
     36Hints:
     37 * using `element` one can select a since element of the observation vector for which the CRPS is computed (by multiple computations, it allows to computed a CRPS individually for each entry of the state vector). For `element=0` the CRPS over all elements is computed
     38 * A perfectly reliable system gives `reli=0`. An informative system gives `resol << uncert`.
     39 * Compared to Hersbach (2000), `resol` here is equivalent to `CPRS_pot`.
     40 * The routine uses parallelization utilizing the parallelization variables given as aguments (`COMM_filter`, `mype_filter`, `npes_filter`). With these specifications, the routine can be used also when PDAF was not initialized by calling `PDAF_init`.
     41 * The routine uses a rather simple sorting algorithm. Accordingly, the performance is likely suboptimal for high-dimensional cases.
     42