77 | | There is a separate routine `PDAF_put_state_*` for each of the filter algorithms. The name of the routine includes the name of the filter at its end. The purpose of the `PDAF_put_state_*` routines is to write back the forecast model fields into the array holding the ensemble of model state vectors. In addition, the routine checks if the current forecast phase is completed. If not, the routine is exited and the next cycle of the ensemble loop is performed. If the current forecast phase is completed, the routine executes the analysis step of the chosen filter algorithm. The interface to each put-state routine is specific for each filter algorithm, because the names of several user-supplied routines have to be specified, which are specific for each filter algorithm. For example, the interface when using the SEIK filter is the following: |
| 77 | There is a separate routine `PDAF_put_state_*` for each of the filter algorithms. The name of the routine includes the name of the filter at its end. The purpose of the `PDAF_put_state_*` routines is to write back the forecast model fields into the array holding the ensemble of model state vectors. In addition, the routine checks if the current forecast phase is completed. If not, the routine is exited and the next cycle of the ensemble loop is performed. If the current forecast phase is completed, the routine executes the analysis step of the chosen filter algorithm. The interface to each put-state routine is specific for each filter algorithm, because the names of several user-supplied routines have to be specified, which are specific for each filter algorithm. However, at the stage of implementing the ensemble integration only the first and last arguments of the routines are relevant. |
| 78 | |
| 79 | For example, the interface when using the SEIK filter is the following: |
82 | | with the following arguments: |
83 | | * `U_collect_state`: The name of the user-supplied routine that initializes a state vector from the array holding the ensembel of model states from the model fields. This is basically the inverse operation to `U_distribute_state` used in `PDAF_get_state` |
84 | | * `U_init_dim_obs`: The name of the user-supplied routine that provides the size of observation vector |
85 | | * `U_obs_op`: The name of the user-supplied routine that acts as the observation operator on some state vector |
86 | | * `U_init_obs`: The name of the user-supplied routine that initializes the vector of observations |
87 | | * `U_prepoststep`: The name of the pre/poststep routine as in `PDAF_get_state` |
88 | | * `U_prodRinvA`: The name of the user-supplied routine that computes the product of the inverse of the observation error covariance matrix with some matrix provided to the routine by PDAF. This operation occurs during the analysis step of the SEIK filter. |
89 | | * `U_init_obsvar`: The name of the user-supplied routine that provides a mean observation error variance to PDAF (This routine will only be executed, if an adaptive forgetting factor is used) |
| 84 | At this state of the implementation only these arguments are relevant: |
| 85 | * [#U_collect_statecollect_state.F90 U_collect_state]: The name of the user-supplied routine that initializes a state vector from the array holding the ensemble of model states from the model fields. This is basically the inverse operation to `U_distribute_state` used in `PDAF_get_state` |