| 1 | = U_cvt = |
| 2 | |
| 3 | The page document the user-supplied call-back routine `U_cvt`. |
| 4 | |
| 5 | The routine `U_cvt` is a call-back routine that has to be provided by the user. In the simplified interface the predefined name of the routine is `cvt_pdaf`, but in the full interface, the user can choose the name of the routine. |
| 6 | |
| 7 | The routine is used with all 3D-Var methods. |
| 8 | The routine is called during the iterative optimization. It has to perform the control vector transform (preconditioning) which is usually a multiplication with the square-root of the background covariance matrix '''B'''. The routine is provided with a control vector and has to return a state vector. The routine allows a user to implement the control vector transform in form of covariance operators. |
| 9 | |
| 10 | The interface is the following: |
| 11 | |
| 12 | {{{ |
| 13 | SUBROUTINE cvt_pdaf(iter, dim_p, dim_cvec, cv_p, Vv_p) |
| 14 | |
| 15 | INTEGER, INTENT(in) :: iter ! Iteration of optimization |
| 16 | INTEGER, INTENT(in) :: dim_p ! PE-local observation dimension |
| 17 | INTEGER, INTENT(in) :: dim_cvec ! Dimension of control vector |
| 18 | REAL, INTENT(in) :: cv_p(dim_cvec) ! PE-local control vector |
| 19 | REAL, INTENT(inout) :: Vv_p(dim_p) ! PE-local result vector (state vector increment) |
| 20 | }}} |
| 21 | |
| 22 | Hints |
| 23 | * If the state vector is decomposed in case of parallelization one needs to take care that the application of the trasformation is complete. This usually requries a comminucation with MPI_Allreduce to obtain a global sun. |