| 20 | There are no particular options for the observation generation functionality. So for `filter_param_i` one just has to specify the mandatory values of the state dimension and the ensemble size. For `filter_param_r` one has to specify the mandatory values of the forgetting factor (even though, this value is ignored for the observation generation) |
| 21 | |
| 22 | == Observation Generation Step == |
| 23 | |
| 24 | This step replaces the analysis step. However, the implementation is analogous to implementing the analysis step as described on the [wiki:ImplementationofAnalysisStep page on implementing the analysis step]. |
| 25 | |
| 26 | == `PDAF_generate_obs` == |
| 27 | |
| 28 | This routine is used in the same way as the filter specific routines `PDAF_assimilate_*`. Thus the general aspect have been described on the page [ModifyModelforEnsembleIntegration Modification of the model code for the ensemble integration] and its sub-page on [InsertAnalysisStep inserting the analysis step]. The routine `PDAF_generate_obs` is used in the fully-parallel implementation variant of the data assimilation system. When the 'flexible' implementation variant is used, the routines `PDAF_put_state_generate_obs' is used as described further below. Here, we list once more the full interface. Subsequently, the full set of user-supplied routines specified in the call to `PDAF_generate_obs` is explained. |
| 29 | |
| 30 | {{{ |
| 31 | SUBROUTINE PDAF_generate_obs(U_collect_state, U_distribute_state, & |
| 32 | U_init_dim_obs_f, U_obs_op_f, U_get_obs_f, U_init_obserr_f, & |
| 33 | U_prepoststep, U_next_observation, status_pdaf) |
| 34 | }}} |
| 35 | with the following arguments: |
| 36 | * `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 [ModifyModelforEnsembleIntegration#PDAF_get_state PDAF_get_state] |
| 37 | * `U_distribute_state`: The name of a user supplied routine that initializes the model fields from the array holding the ensemble of model state vectors. |
| 38 | * `U_init_dim_obs_f`: The name of the user-supplied routine that provides the size of the full observation vector |
| 39 | * `U_obs_op_f`: The name of the user-supplied routine that acts as the full observation operator on some state vector |
| 40 | * `U_get_obs_f`: The name of the user-supplied routine that receives the full vector of generated synthetic observations from PDAF |
| 41 | * `U_init_obserr_f`: The name of the user-supplied routine that initializes the vector of observations error standard deviations for for full observation vector |
| 42 | * `U_prepoststep`: The name of the pre/poststep routine as in `PDAF_get_state` |
| 43 | * `U_next_observation`: The name of a user supplied routine that initializes the variables `nsteps`, `timenow`, and `doexit`. The same routine is also used in `PDAF_get_state`. |
| 44 | * `status_pdaf`: The integer status flag. It is zero, if `PDAF_assimilate_lestkf` is exited without errors. |
| 45 | |
| 46 | |
| 47 | == `PDAF_put_state_generate_obs` == |
| 48 | |
| 49 | When the 'flexible' implementation variant is chosen for the assimilation system, the routine `PDAF_put_state_generate_obs` has to be used instead of `PDAF_generate_obs`. The general aspects of the filter specific routines `PDAF_put_state_*` have been described on the page [ModifyModelforEnsembleIntegration Modification of the model code for the ensemble integration]. The interface of the routine is identical with that of `PDAF_generate_obs` with the exception the specification of the user-supplied routines `U_distribute_state` and `U_next_observation` are missing. |
| 50 | |
| 51 | The interface is the following: |
| 52 | {{{ |
| 53 | SUBROUTINE PDAF_put_state_generate_obs(U_collect_state, U_init_dim_obs_f, U_obs_op_f, U_get_obs_f, & |
| 54 | U_init_obserr_f, U_prepoststep, status_pdaf) |
| 55 | }}} |
| 56 | |
| 57 | |
| 58 | |