Changes between Initial Version and Version 1 of PDAFomi_diag_crps


Ignore:
Timestamp:
Mar 27, 2026, 6:17:57 PM (4 days ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • PDAFomi_diag_crps

    v1 v1  
     1= PDAFomi_diag_CRPS =
     2
     3
     4This page documents the routine `PDAFomi_diag_CRPS` of PDAF, which was introduced with PDAF V3.1.
     5This is part of the [wiki:OMI_observation_diagnostics_PDAF3 PDAF-OMI observation diagnostics module].
     6
     7This routine computes the continuous ranked probability score (CRPS) and its decomposition into reliability and potential CRPS : CRPS = RELI + pot_CRPS. In addition the uncertainty is computed.[[BR]]
     8Resolution can be computed by RESOL = UNCERT - pot_CRPS.[[BR]]
     9A perfectly reliable system gives RELI=0.[[BR]]
     10An informative system gives RESOL ~ UNCERT or pot_CRPS << UNCERT.
     11
     12The computation follows H. Hersbach, Weather and Forecasting, 15 (2000) 599-570.
     13
     14The routine returns a pointer to an array of the CRPS values for each observation type.
     15
     16Usually all PDAFomi_diag routines are called in `prepoststep_pdaf` where the observation information can be retrieved and analyzed.
     17
     18The interface is:
     19{{{
     20  SUBROUTINE PDAFomi_diag_crps(nobs, crps_ptr, perturb, verbose)
     21
     22    INTEGER, INTENT(inout) :: nobs                   ! Number of observation types
     23    REAL, POINTER, INTENT(inout) :: crps_ptr(:,:)    ! Pointer to vector of CRPS values
     24    INTEGER, INTENT(in) :: perturb                   ! 1: add perturbations to observations;
     25                                                     ! 0: use unperturbed observations
     26    INTEGER, INTENT(in) :: verbose                   ! Verbosity flag, >0 for output
     27}}}
     28
     29Hints:
     30 * The computed CRPS is for the global model domain. Thus, in case of a parallelized model, all process sub-domains are taken into account and calling the routine will return the same value for all processes.
     31 * In Fortran user code the pointer should be declared in the form[[BR]] `REAL, POINTER :: crps_ptr(:,:)`[[BR]] It does not need to be allocated. The target array has the length `(4, nobs)`.
     32 * If the observation diagnostics have not been activated the pointer array will not be set and `nobs=0` is returned. One can check this value before assessing the pointer array.
     33 * The routine uses a rather simple sorting algorithm. Accordingly, the performance is likely suboptimal for high-dimensional cases.
     34