= 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 [wiki:OMI_observation_diagnostics_PDAF3 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.[[BR]] Resolution can be computed by RESOL = UNCERT - pot_CRPS.[[BR]] A perfectly reliable system gives RELI=0.[[BR]] 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[[BR]] `REAL, POINTER :: crps_ptr(:,:)`[[BR]] 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=0` is 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.