PDAFomi_diag_CRPS
This page documents the routine PDAFomi_diag_CRPS of PDAF, which was introduced with PDAF V3.1.
This is part of the PDAF-OMI observation diagnostics module.
This 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.
Resolution can be computed by RESOL = UNCERT - pot_CRPS.
A perfectly reliable system gives RELI=0.
An informative system gives RESOL ~ UNCERT or pot_CRPS << UNCERT.
The computation follows H. Hersbach, Weather and Forecasting, 15 (2000) 599-570.
The routine returns a pointer to an array of the CRPS values for each observation type.
Usually all PDAFomi_diag routines are called in prepoststep_pdaf where the observation information can be retrieved and analyzed.
The interface is:
SUBROUTINE PDAFomi_diag_crps(nobs, crps_ptr, perturb, verbose)
INTEGER, INTENT(inout) :: nobs ! Number of observation types
REAL, POINTER, INTENT(inout) :: crps_ptr(:,:) ! Pointer to vector of CRPS values
INTEGER, INTENT(in) :: perturb ! 1: add perturbations to observations;
! 0: use unperturbed observations
INTEGER, INTENT(in) :: verbose ! Verbosity flag, >0 for output
Hints:
- 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.
- In Fortran user code the pointer should be declared in the form
REAL, POINTER :: crps_ptr(:,:)
It does not need to be allocated. The target array has the length(4, nobs). - If the observation diagnostics have not been activated the pointer array will not be set and
nobs=0is returned. One can check this value before assessing the pointer array. - The routine uses a rather simple sorting algorithm. Accordingly, the performance is likely suboptimal for high-dimensional cases.
