wiki:OMI_use_global_obs

Version 2 (modified by lnerger, 3 months ago) (diff)

--

Using thisobs%use_global_obs=0

In the domain-localized filters (LESTK, LETKF, LSEIK, LNETF) observations are assimilated that are located within the localization around some grid point. When a model uses parallelization with domain-decomposition some of these observations might belong to a different process-domain. In the default mode (thisobs%use_global_obs=1) PDAF-OMI gathers all globally available observations so that each process has access to all observations. It can be more efficient to restrict the observations on a process-domain to those observations that are located inside the domain or within the localization radius arond it. Then, in the local analyses a smaller number of observation have to be checked for their distance. Setting thisobs%use_global_obs=0 activates this feature. However, it needs additional preparations to make PDAF-OMI aware of the limiting coordinates of a process sub-domain.

In order to make use of the restricted observations, one has to provide PDAF-OMI with the limiting coordinates of a process-subdomain. There are two routines that can to this task:

  • PDAFomi_set_domain_limits
  • PDAFomi_get_domain_limits_unstrc

One of these routines should be called in init_pdaf to set the domain information.

PDAFomi_set_domain_limits

In this routine one provide the limiting coordinates of the process domain so that PDAF-OMI can store the information.

The interface is

  SUBROUTINE PDAFomi_set_domain_limits(lim_coords)

    REAL, INTENT(in) :: lim_coords(2,2)     !< coordinate array (1: longitude, 2: latitude)
                                            !< geographic range: longitude (-pi, pi), latitude (-pi/2, pi/2)
                                            !< Cartesian range: (x) coordinate grows from left to right; (y) from bottom to top

here lim_coords are

           (2,1)
   (:,1)+---------+
        |         |           - (1,1) coordinate of the western (or left) edge of the domain 
        |         |           - (1,2) coordinate of the eastern (or right) edge of the domain 
  (1,1) |         | (1,2)     - (2,1) coordinate of the northern (or upper) edge of the domain
        |         |           - (2,2) coordinate of the southern (or lower) edge of the domain
        |         |
        +---------+(:,2)
           (2,2)

thus, (:,1) specifies the north-western corner of the sub-domain and (:,2) the souther-estern corner. The first (x) coordinate grows from left to right, while the second coordinate (y) increases from bottom to the top.

If the model grid is not decomposed in cardinal directions, but e.g. rotated, the coordinates should specife the extrema. Thus, lim_coords(1,1) would be the coordinate of the northernmost grid point of a domain.

PDAFomi_get_domain_limits_unstrc

This routine is find the extreme coordinates for a model domain. The routine is provided with the coordinates of all grid pints of a domain and then find the limiting coordinates. It is designed for unstructured grid and we have only tested it with the ocean model FESOM. (The tricky part is when a process-domain crosses the date line).

The interface is

  SUBROUTINE PDAFomi_get_domain_limits_unstr(verbose, npoints_p, coords_p)

    INTEGER, INTENT(in) :: verbose          !< verbosity flag (1: write output)
    INTEGER, INTENT(in) :: npoints_p        !< number of process-local grid points
    REAL, INTENT(in) :: coords_p(:,:)       !< geographic coordinate array, dimension (2, npoints_p 
                                            !<   (row 1: longitude, 2: latitude)
                                            !<   ranges: longitude (-pi, pi), latitude (-pi/2, pi/2)

This function only supports geographic coordinates given in radians.