Changes between Version 3 and Version 4 of ImplementAnalysisenkf
- Timestamp:
- Sep 15, 2011, 3:29:21 PM (13 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ImplementAnalysisenkf
v3 v4 45 45 }}} 46 46 with the following arguments: 47 * [#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`48 * [#U_init_dim_obsinit_dim_obs .F90 U_init_dim_obs]: The name of the user-supplied routine that provides the size of observation vector49 * [#U_obs_opobs_op .F90 U_obs_op]: The name of the user-supplied routine that acts as the observation operator on some state vector50 * [#U_init_obsinit_obs .F90 U_init_obs]: The name of the user-supplied routine that initializes the vector of observations51 * [#U_prepoststepprepoststep_seik .F90 U_prepoststep]: The name of the pre/poststep routine as in `PDAF_get_state`52 * [#U_add_obs_erradd_obs_err .F90 U_add_obs_err]: The name of the user-supplied routine that adds the observation error covariance matrix to the ensemble covariance matrix projected onto the observation space.53 * [#U_init_obscovarinit_obscovar .F90 U_init_obscovar]: The name of the user-supplied routine that initializes the observation error covariance matrix.47 * [#U_collect_statecollect_state_pdaf.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` 48 * [#U_init_dim_obsinit_dim_obs_pdaf.F90 U_init_dim_obs]: The name of the user-supplied routine that provides the size of observation vector 49 * [#U_obs_opobs_op_pdaf.F90 U_obs_op]: The name of the user-supplied routine that acts as the observation operator on some state vector 50 * [#U_init_obsinit_obs_pdaf.F90 U_init_obs]: The name of the user-supplied routine that initializes the vector of observations 51 * [#U_prepoststepprepoststep_seik_pdaf.F90 U_prepoststep]: The name of the pre/poststep routine as in `PDAF_get_state` 52 * [#U_add_obs_erradd_obs_err_pdaf.F90 U_add_obs_err]: The name of the user-supplied routine that adds the observation error covariance matrix to the ensemble covariance matrix projected onto the observation space. 53 * [#U_init_obscovarinit_obscovar_pdaf.F90 U_init_obscovar]: The name of the user-supplied routine that initializes the observation error covariance matrix. 54 54 * `status`: The integer status flag. It is zero, if `PDAF_put_state_enkf` is exited without errors. 55 55 … … 59 59 Here all user-supplied routines are described that are required in the call to `PDAF_put_state_enkf`. For some of the generic routines, we link to the page on [ModifyModelforEnsembleIntegration modifying the model code for the ensemble integration]. 60 60 61 To indicate user-supplied routines we use the prefix `U_`. In the template directory `templates/` these routines are provided in files with the routine's name without this prefix. In the example implementation in `testsuite/src/dummymodel_1D`, the routines exist without the prefix, but with the extension `_ dummy_D.F90`. In the section titles below we provide the name of the template file in parentheses.61 To indicate user-supplied routines we use the prefix `U_`. In the template directory `templates/` these routines are provided in files with the routine's name without this prefix. In the example implementation in `testsuite/src/dummymodel_1D`, the routines exist without the prefix, but with the extension `_pdaf.F90`. In the section titles below we provide the name of the template file in parentheses. 62 62 63 63 In the subroutine interfaces some variables appear with the suffix `_p`. This suffix indicates that the variable is particular to a model sub-domain, if a domain decomposed model is used. Thus, the value(s) in the variable will be different for different model sub-domains. 64 64 65 65 66 === `U_collect_state` (collect_state .F90) ===66 === `U_collect_state` (collect_state_pdaf.F90) === 67 67 68 68 This routine is independent of the filter algorithm used. 69 See the page [ModifyModelforEnsembleIntegration#U_collect_statecollect_state .F90 modifying the model code for the ensemble integration] for the description of this routine.70 71 72 === `U_init_dim_obs` (init_dim_obs .F90) ===69 See the page [ModifyModelforEnsembleIntegration#U_collect_statecollect_state_pdaf.F90 modifying the model code for the ensemble integration] for the description of this routine. 70 71 72 === `U_init_dim_obs` (init_dim_obs_pdaf.F90) === 73 73 74 74 This routine is used by all global filter algorithms (SEEK, SEIK, EnKF, ETKF). … … 88 88 89 89 90 === `U_obs_op` (obs_op .F90) ===90 === `U_obs_op` (obs_op_pdaf.F90) === 91 91 92 92 This routine is used by all global filter algorithms (SEEK, SEIK, EnKF, ETKF). … … 111 111 112 112 113 === `U_init_obs` (init_obs .F90) ===113 === `U_init_obs` (init_obs_pdaf.F90) === 114 114 115 115 This routine is used by all global filter algorithms (SEEK, SEIK, EnKF, ETKF). … … 130 130 131 131 132 === `U_prepoststep` (prepoststep_enkf .F90) ===132 === `U_prepoststep` (prepoststep_enkf_pdaf.F90) === 133 133 134 134 The general aspects of this routines have already been described on the [ModifyModelforEnsembleIntegration#U_prepoststepprepoststep_seik.F90 page on modifying the model code for the ensemble integration] for the SEIK filter. For completeness, the description is repeated specifically for the EnKF: … … 166 166 167 167 168 === `U_add_obs_err` (add_obs_err .F90) ===168 === `U_add_obs_err` (add_obs_err_pdaf.F90) === 169 169 170 170 This routine is only used for the EnKF. … … 189 189 190 190 191 === `U_init_obscovar` (init_obscovar .F90) ===191 === `U_init_obscovar` (init_obscovar_pdaf.F90) === 192 192 193 193 This routine is only used for the EnKF. … … 219 219 220 220 Before the analysis step is called the following routine is executed: 221 1. [#U_collect_statecollect_state .F90 U_collect_state]221 1. [#U_collect_statecollect_state_pdaf.F90 U_collect_state] 222 222 223 223 The analysis step is executed when the ensemble integration of the forecast is completed. During the analysis step the following routines are executed in the given order: 224 1. [#U_prepoststepprepoststep_seik .F90 U_prepoststep] (Call to act on the forecast ensemble, called with negative value of the time step)225 1. [#U_init_dim_obsinit_dim_obs .F90 U_init_dim_obs]226 1. [#U_obs_opobs_op .F90 U_obs_op] (`dim_ens` calls: one call for each ensemble member)227 1. [#U_add_obs_erradd_obs_err .F90 U_add_obs_err]228 1. [#U_init_obsinit_obs .F90 U_init_obs]229 1. [#U_init_obscovarinit_obscovar .F90 U_init_obscovar]230 1. [#U_obs_opobs_op .F90 U_obs_op] (`dim_ens` calls: one call for each ensemble member, repeated to reduce storage)231 1. [#U_prepoststepprepoststep_seik .F90 U_prepoststep] (Call to act on the analysis ensemble, called with (positive) value of the time step)232 224 1. [#U_prepoststepprepoststep_seik_pdaf.F90 U_prepoststep] (Call to act on the forecast ensemble, called with negative value of the time step) 225 1. [#U_init_dim_obsinit_dim_obs_pdaf.F90 U_init_dim_obs] 226 1. [#U_obs_opobs_op_pdaf.F90 U_obs_op] (`dim_ens` calls: one call for each ensemble member) 227 1. [#U_add_obs_erradd_obs_err_pdaf.F90 U_add_obs_err] 228 1. [#U_init_obsinit_obs_pdaf.F90 U_init_obs] 229 1. [#U_init_obscovarinit_obscovar_pdaf.F90 U_init_obscovar] 230 1. [#U_obs_opobs_op_pdaf.F90 U_obs_op] (`dim_ens` calls: one call for each ensemble member, repeated to reduce storage) 231 1. [#U_prepoststepprepoststep_seik_pdaf.F90 U_prepoststep] (Call to act on the analysis ensemble, called with (positive) value of the time step) 232