69 | | * [#U_collect_state_pdafcollect_state_pdaf.F90 collect_state_pdaf]: 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 `distribute_state` used in `PDAF_init_forecast` as well as here. |
70 | | * [#U_distribute_state_pdafdistribute_state_pdaf.F90 distribute_state_pdaf]: The name of a user supplied routine that initializes the model fields from the array holding the ensemble of model state vectors. |
71 | | * [#U_init_dim_obs_pdafomicallback_obs_pdafomi.F90 init_dim_obs_pdafomi]: The name of the user-supplied routine that initializes the observation information and provides the size of observation vector |
72 | | * [#U_obs_op_pdafomicallback_obs_pdafomi.F90 obs_op_pdafomi]: The name of the user-supplied routine that acts as the observation operator on some state vector |
73 | | * [#U_cvt_ens_pdafcvt_ens_pdaf.F90 cvt_ens_pdaf]: The name of the user-supplied routine that applies the ensemble control-vector transformation (square-root of the B-matrix) on some control vector to obtain a state vector. |
74 | | * [#U_cvt_adj_ens_pdafcvt_adj_ens_pdaf.F90 cvt_adj_ens_pdaf]: The name of the user-supplied routine that applies the adjoint ensemble control-vector transformation (with square-root of the B-matrix) on some state vector to obtain the control vector. |
75 | | * [#U_cvt_pdafcvt_pdaf.F90 cvt_pdaf]: The name of the user-supplied routine that applies the control-vector transformation (square-root of the B-matrix) on some control vector to obtain a state vector. |
76 | | * [#U_cvt_adj_pdafcvt_adj_pdaf.F90 cvt_adj_pdaf]: The name of the user-supplied routine that applies the adjoint control-vector transformation (with square-root of the B-matrix) on some state vector to obtain the control vector. |
77 | | * [#U_obs_op_pdafomicallback_obs_pdafomi.F90 obs_op_lin_pdafomi]: The name of the user-supplied routine that acts as the linearized observation operator on some state vector |
78 | | * [#U_obs_op_pdafomicallback_obs_pdafomi.F90 obs_op_lin_pdafomi]: The name of the user-supplied routine that acts as the adjoint observation operator on some state vector |
79 | | * [#U_init_n_domains_pdafinit_n_domains_pdaf.F90 init_n_domains_pdaf]: The name of the routine that provides the number of local analysis domains |
80 | | * [#U_init_dim_l_pdafinit_dim_l_pdaf.F90 init_dim_l_pdaf]: The name of the routine that provides the state dimension for a local analysis domain |
81 | | * [#U_init_dim_obs_l_pdafomicallback_obs_pdafomi.F90 init_dim_obs_l_pdafomi]: The name of the routine that initializes the size of the observation vector for a local analysis domain |
82 | | * [#U_prepoststep_pdafprepoststep_ens_pdaf.F90 prepoststep_pdaf]: The name of the pre/poststep routine as in `PDAF_init_forecast` |
83 | | * [#U_next_observation_pdafnext_observation.F90 next_observation_pdaf]: The name of a user supplied routine that initializes the variables `nsteps`, `timenow`, and `doexit`. The same routine is also used in `PDAF_init_forecast`. |
| 69 | * [#collect_state_pdafcollect_state_pdaf.F90 collect_state_pdaf]: 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 `distribute_state` used in `PDAF_init_forecast` as well as here. |
| 70 | * [#distribute_state_pdafdistribute_state_pdaf.F90 distribute_state_pdaf]: The name of a user supplied routine that initializes the model fields from the array holding the ensemble of model state vectors. |
| 71 | * [#init_dim_obs_pdafomicallback_obs_pdafomi.F90 init_dim_obs_pdafomi]: The name of the user-supplied routine that initializes the observation information and provides the size of observation vector |
| 72 | * [#obs_op_pdafomicallback_obs_pdafomi.F90 obs_op_pdafomi]: The name of the user-supplied routine that acts as the observation operator on some state vector |
| 73 | * [#cvt_ens_pdafcvt_ens_pdaf.F90 cvt_ens_pdaf]: The name of the user-supplied routine that applies the ensemble control-vector transformation (square-root of the B-matrix) on some control vector to obtain a state vector. |
| 74 | * [#cvt_adj_ens_pdafcvt_adj_ens_pdaf.F90 cvt_adj_ens_pdaf]: The name of the user-supplied routine that applies the adjoint ensemble control-vector transformation (with square-root of the B-matrix) on some state vector to obtain the control vector. |
| 75 | * [#cvt_pdafcvt_pdaf.F90 cvt_pdaf]: The name of the user-supplied routine that applies the control-vector transformation (square-root of the B-matrix) on some control vector to obtain a state vector. |
| 76 | * [#cvt_adj_pdafcvt_adj_pdaf.F90 cvt_adj_pdaf]: The name of the user-supplied routine that applies the adjoint control-vector transformation (with square-root of the B-matrix) on some state vector to obtain the control vector. |
| 77 | * [#obs_op_pdafomicallback_obs_pdafomi.F90 obs_op_lin_pdafomi]: The name of the user-supplied routine that acts as the linearized observation operator on some state vector |
| 78 | * [#obs_op_pdafomicallback_obs_pdafomi.F90 obs_op_lin_pdafomi]: The name of the user-supplied routine that acts as the adjoint observation operator on some state vector |
| 79 | * [#init_n_domains_pdafinit_n_domains_pdaf.F90 init_n_domains_pdaf]: The name of the routine that provides the number of local analysis domains |
| 80 | * [#init_dim_l_pdafinit_dim_l_pdaf.F90 init_dim_l_pdaf]: The name of the routine that provides the state dimension for a local analysis domain |
| 81 | * [#init_dim_obs_l_pdafomicallback_obs_pdafomi.F90 init_dim_obs_l_pdafomi]: The name of the routine that initializes the size of the observation vector for a local analysis domain |
| 82 | * [#prepoststep_pdafprepoststep_ens_pdaf.F90 prepoststep_pdaf]: The name of the pre/poststep routine as in `PDAF_init_forecast` |
| 83 | * [#next_observation_pdafnext_observation.F90 next_observation_pdaf]: The name of a user supplied routine that initializes the variables `nsteps`, `timenow`, and `doexit`. The same routine is also used in `PDAF_init_forecast`. |
143 | | See the page on [InsertAnalysisStep#U_distribute_statedistribute_state_pdaf.F90 inserting the analysis step] for the description of this routine. |
144 | | |
145 | | |
146 | | === `U_init_dim_obs_pdafomi` (callback_obs_pdafomi.F90) === |
147 | | |
148 | | This is a call-back routine for PDAF-OMI initializing the observation information. The routine just calls a routine from the observation module for each observation type. |
149 | | |
150 | | See the [wiki:OMI_Callback_obs_pdafomi documentation on callback_obs_pdafomi.F90] for more information. |
151 | | |
152 | | |
153 | | |
154 | | === `U_obs_op_pdafomi` (callback_obs_pdafomi.F90) === |
155 | | |
156 | | This is a call-back routine for PDAF-OMI applying the observation operator to the state vector. The routine calls a routine from the observation module for each observation type. |
157 | | |
158 | | See the [wiki:OMI_Callback_obs_pdafomi documentation on callback_obs_pdafomi.F90] for more information. |
159 | | |
160 | | |
161 | | |
162 | | |
163 | | === `U_cvt_ens` (cvt_ens_pdaf.F90) === |
| 142 | See the page on [ModifyModelforEnsembleIntegration#distribute_state_pdafdistribute_state_pdaf.F90 modifying the model code for the ensemble integration] for the description of this routine. |
| 143 | |
| 144 | |
| 145 | |
| 146 | === `init_dim_obs_pdafomi` (callback_obs_pdafomi.F90) === |
| 147 | |
| 148 | This is a call-back routine initializing the observation information. The routine just calls a routine from the observation module for each observation type. |
| 149 | |
| 150 | See the [wiki:OMI_Callback_obs_pdafomi documentation on callback_obs_pdafomi.F90] for more information. |
| 151 | |
| 152 | |
| 153 | |
| 154 | === `obs_op_pdafomi` (callback_obs_pdafomi.F90) === |
| 155 | |
| 156 | This is a call-back routine applying the observation operator to the state vector. The routine calls a routine from the observation module for each observation type. |
| 157 | |
| 158 | See the [wiki:OMI_Callback_obs_pdafomi documentation on callback_obs_pdafomi.F90] for more information. |
| 159 | |
| 160 | |
| 161 | |
| 162 | === `cvt_ens_pdaf` (cvt_ens_pdaf.F90) === |
275 | | * As a simple case, if the localization is only performed horizontally, the local analysis domains can be single vertical columns of the model grid. In this case, `n_domains_p` is simply the number of vertical columns in the local model sub-domain. |
276 | | |
277 | | |
278 | | |
279 | | |
280 | | === `U_init_dim_l` (init_dim_l_pdaf.F90) === |
281 | | |
282 | | The interface for this routine is: |
283 | | {{{ |
284 | | SUBROUTINE init_dim_l(step, domain_p, dim_l) |
| 273 | * As a simple case, if the localization is only performed horizontally, the local analysis domains can be single vertical columns of the model grid. In this case, `n_domains_p` is simply the number of vertical columns in the process-local model sub-domain. |
| 274 | |
| 275 | |
| 276 | === `init_dim_l_pdaf` (init_dim_l_pdaf.F90) === |
| 277 | |
| 278 | This routine is only used for localization. |
| 279 | |
| 280 | The interface for this routine is: |
| 281 | {{{ |
| 282 | SUBROUTINE init_dim_l_pdaf(step, domain_p, dim_l) |
292 | | For PDAF it has to provide in `dim_l` the dimension of the state vector for the local analysis domain with index `domain_p`. |
293 | | |
294 | | In addition, for PDAFlocal the routine has to provide the index array containing the indices of the elements of the local state vector in the global (or domain-decomposed) state vector to PDAFlocal by calling `PDAFlocal_set_indices`. (in the template files, this array is called `id_lstate_in_pstate`) |
| 290 | |
| 291 | It provides in `dim_l` the dimension of the state vector for the local analysis domain with index `domain_p` to PDAF. |
| 292 | |
| 293 | In the recommended implementation shown in the tutorial and template codes, there are two further initializations: |
| 294 | 1. The routine has initialize the index array `id_lstate_in_pstate` containing the indices of the elements of the local state vector in the global (or domain-decomposed) state vector. Then it has to provide this array to PDAF by calling `PDAFlocal_set_indices` (see below). |
| 295 | 2. The routine initializes an array `coords_l` containing the coordinates of the local analysis domain. This is shared with `U_init_dim_obs_l_pdafomi` via the module `mod_assimilation`. |
355 | | 1. [#U_cvtcvt_pdaf.F90 U_cvt] |
356 | | 1. [#U_cvt_enscvt_ens_pdaf.F90 U_cvt_ens] |
357 | | 1. [#U_obs_op_lin_pdafomicallback_obs_pdafomi.F90 U_obs_op_lin_pdafomi] |
358 | | 1. [#U_obs_op_adj_pdafomicallback_obs_pdafomi.F90 U_obs_op_adj_pdafomi] |
359 | | 1. [#U_cvt_adjcvt_adj_pdaf.F90 U_cvt_adj] |
360 | | 1. [#U_cvt_adj_enscvt_adj_ens_pdaf.F90 U_cvt_adj_ens] |
| 354 | 1. [#cvt_pdafcvt_pdaf.F90 cvt_pdaf] |
| 355 | 1. [#cvt_ens_pdafcvt_ens_pdaf.F90 cvt_ens_pdaf] |
| 356 | 1. [#obs_op_lin_pdafomicallback_obs_pdafomi.F90 U_obs_op_lin_pdafomi] |
| 357 | 1. [#obs_op_adj_pdafomicallback_obs_pdafomi.F90 U_obs_op_adj_pdafomi] |
| 358 | 1. [#cvt_adj_pdafcvt_adj_pdaf.F90 cvt_adj_pdaf] |
| 359 | 1. [#cvt_adj_ens_pdafcvt_adj_ens_pdaf.F90 cvt_adj_ens_pdaf] |
363 | | 1. [#U_cvt_enscvt_pdaf.F90 U_cvt] (Call to the parameterized part of the control vector transform to compute the final state vector increment) |
364 | | 1. [#U_cvt_enscvt_ens_pdaf.F90 U_cvt_ens] (Call to the eensemble-part of the control vector transform to compute the final state vector increment) |
365 | | 1. [#U_prepoststepprepoststep_ens_pdaf.F90 U_prepoststep] (Call to act on the analysis ensemble, called with (positive) value of the time step) |
366 | | |
367 | | The iterative optimization abovve computes an updated ensemble mean state. Subsequently, the ensemble perturbations are updated using the LESTKF or ESTKF. The execution of the routines for these filters is described for the LESTKF on the [wiki:ImplementAnalysisLocal page on implementing the local filter analysis step] and for the ESTKF on the [wiki:ImplementAnalysisGlobal page on implementing the global filter analysis step]. |
368 | | |
369 | | In case of the routine `PDAFomi_assimilate_*`, the following routines are executed after the analysis step: |
370 | | 1. [#U_distribute_statedistribute_state_pdaf.F90 U_distribute_state] |
371 | | 1. [#U_next_observationnext_observation_pdaf.F90 U_next_observation] |
| 362 | 1. [#cvt_enscvt_pdaf.F90 U_cvt] (Call to the parameterized part of the control vector transform to compute the final state vector increment) |
| 363 | 1. [#cvt_enscvt_ens_pdaf.F90 U_cvt_ens] (Call to the eensemble-part of the control vector transform to compute the final state vector increment) |
| 364 | 1. [#prepoststepprepoststep_ens_pdaf.F90 U_prepoststep] (Call to act on the analysis ensemble, called with (positive) value of the time step) |
| 365 | |
| 366 | The iterative optimization abovve computes an updated ensemble mean state. Subsequently, the ensemble perturbations are updated using the LESTKF or ESTKF. The execution of the routines for these filters is described on the [wiki:ImplementAnalysisPDAF3Universal page on implementing the local filter analysis step] . |
| 367 | |
| 368 | In case of the routine `PDAF3_assimilate_3dvar_all`, the following routines are executed after the analysis step: |
| 369 | 1. [#distribute_state_pdafdistribute_state_pdaf.F90 distribute_state_pdaf] |
| 370 | 1. [#next_observation_pdafnext_observation_pdaf.F90 next_observation_pdaf] |