| 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 | |