31 | | - init_dim_obs initializes all variables holding the information about one observation type. The information about the observation type is stored in a data structure (Fortran derived type). |
32 | | - obs_op applies the observation operator to a state vector. One can call an observation operator routine provided by PDAF, or one can to implement a new operator. |
33 | | - init_dim_obs_l calls a PDAF-OMI routine to initialize the observation information corresponding to a local analysis domain. One can set localization parameters, like the localization radius, for each observation type. |
34 | | - localize_covar calls a PDAF-OMI routine to apply covariance localization. One can set localization parameters, like the localization radius, for each observation type. |
| 31 | - `init_dim_obs` initializes all variables holding the information about one observation type. The information about the observation type is stored in a data structure (Fortran derived type). |
| 32 | - `obs_op` applies the observation operator to a state vector. One can call an observation operator routine provided by PDAF, or one can to implement a new operator. |
| 33 | - `init_dim_obs_l` calls a PDAF-OMI routine to initialize the observation information corresponding to a local analysis domain. One can set localization parameters, like the localization radius, for each observation type. |
| 34 | - `localize_covar` calls a PDAF-OMI routine to apply covariance localization. One can set localization parameters, like the localization radius, for each observation type. |
| 180 | |
| 181 | |
| 182 | == Implementation hints for init_dim_obs_f == |
| 183 | |
| 184 | === `thisobs%doassim` === |
| 185 | |
| 186 | Set this variable to 1 to let the filter assimilate this observation. The setting is usually conditional on the value of `assim_TYPE` which is set in `init_pdaf`: |
| 187 | {{{ |
| 188 | IF (assim_TYPE) thisobs%doassim = 1 |
| 189 | }}} |
| 190 | |
| 191 | === `thisobs%ncoord` === |
| 192 | |
| 193 | This variable specifies the dimension of the distnace computations. Thus thisobs%ncoord=2 will lead to distance computations in 2 dimensions. |
| 194 | |
| 195 | |
| 196 | === `thisobs%disttype` === |
| 197 | |
| 198 | This variable specifies the type of distance computation. Possible choices are |
| 199 | - 0: Cartesian distance in ncoord dimension |
| 200 | - 1: Cartesian distance in ncoord dimensions with periodicity (Needs specification of thisobs%domainsize(ncoord)) |
| 201 | - 2: Approximate geographic distance in meters with horizontal coordinates in radians (latitude: -pi/2 to +pi/2; longitude -pi/+pi or 0 to 2pi) |
| 202 | - 3: Geographic distance computation in meters using haversine formula with horizontal coordinates in radians (latitude: -pi/2 to +pi/2; longitude -pi/+pi or 0 to 2pi) |
| 203 | |
| 204 | For 0 and 1 any distance unit can be used. The computed distance will be in the same unit. For 2 and 3 the input coordinates are in radians and the distance is computed in meters. |
| 205 | |
| 206 | See `/models/lorenz96_omi/` for an example using case 1 with periodicity in one dimension. |
| 207 | |
| 208 | === `thisobs%domainsize` === |
| 209 | |
| 210 | This array has to be allocated as |
| 211 | {{{ |
| 212 | ALLOCATE(thisobs%domainsize(thisobs%ncoord)) |
| 213 | }}} |
| 214 | Here one has to specify the size of the domain in each of its thisobs%ncoord dimensions. The information is used to compute the Cartesian distance with periodicity. |
| 215 | |
| 216 | Setting one dimension to 0 or a negative value indicates that there is no periodicity in this direction. |
| 217 | |
| 218 | |
| 219 | === `thisobs%id_obs_p` === |
| 220 | |
| 221 | This array is allocated as |
| 222 | {{{ |
| 223 | ALLOCATE(thisobs%id_obs_p(NROWS, dim_obs_p)) |
| 224 | }}} |
| 225 | For a fixed value of the second index the NROWS are the indices of the elements of the state vector that are treated in the observation operator. |
| 226 | The value of NROWS depends on the observation operator used for an observation. Examples: |
| 227 | - Using observations that are grid points values: |
| 228 | - NROWS=1 |
| 229 | - The entry is the index of a single element of the state vector |
| 230 | - Using observations that are determined by bi-linear interpolation of 4 grid points: |
| 231 | - NROWS=4 |
| 232 | - The entries are the indices of four elements of the state vector |
| 233 | |
| 234 | |
| 235 | === `thisobs%icoeff_p` === |
| 236 | |
| 237 | This array is allocate the in same way as `thisobs%id_obs_p`: |
| 238 | |
| 239 | {{{ |
| 240 | ALLOCATE(thisobs%icoeff_p(NROWS, dim_obs_p)) |
| 241 | }}} |
| 242 | The value of NROWS has to be the same as for `thisobs%id_obs_p`. For a fixed value of the second index the NROWS of the array hold the interpolation coefficients corresponding to the indices specified in `thisobs%id_obs_p`. |
| 243 | |
| 244 | Please see the [wiki:OMI_observation_operators documentation of OMI observation operators] for information on how to initialize the array `thisobs%icoeff_p` using functions provided by PDAF-OMI. |
| 245 | |
| 246 | |
| 247 | === `thisobs%obs_err_type` === |
| 248 | |
| 249 | The particle filter methods NETF, LNETF and PF can handle observations with non-Gaussian errors. PDAF-OMI supports the following two choices: |
| 250 | - 0: Gaussian errors (''default value'') |
| 251 | - 1: double-exponential (Laplace) errors |
| 252 | |
| 253 | |
| 254 | === `thisobs%use_global_obs` === |
| 255 | |
| 256 | |
| 257 | |
| 258 | |