| | 1 | = PDAFomi_diag_CRPS = |
| | 2 | |
| | 3 | |
| | 4 | This page documents the routine `PDAFomi_diag_CRPS` of PDAF, which was introduced with PDAF V3.1. |
| | 5 | This is part of the [wiki:OMI_observation_diagnostics_PDAF3 PDAF-OMI observation diagnostics module]. |
| | 6 | |
| | 7 | 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]] |
| | 8 | Resolution can be computed by RESOL = UNCERT - pot_CRPS.[[BR]] |
| | 9 | A perfectly reliable system gives RELI=0.[[BR]] |
| | 10 | An informative system gives RESOL ~ UNCERT or pot_CRPS << UNCERT. |
| | 11 | |
| | 12 | The computation follows H. Hersbach, Weather and Forecasting, 15 (2000) 599-570. |
| | 13 | |
| | 14 | The routine returns a pointer to an array of the CRPS values for each observation type. |
| | 15 | |
| | 16 | Usually all PDAFomi_diag routines are called in `prepoststep_pdaf` where the observation information can be retrieved and analyzed. |
| | 17 | |
| | 18 | The 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 | |
| | 29 | Hints: |
| | 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 | |