wiki:PDAFomi_get_interp_coeff_lin

PDAFomi_get_interp_coeff_lin

This page documents the routine PDAFomi_get_interp_coeff_lin of PDAF-OMI.

The routine is called in init_dim_obs_OBSTYPE of an obseration module to initialize interpolation coefficients in 1, 2, or 3 dimensions. It is used if the observation operator performs linear interpolation (usually PDAFomi_obs_op_interp_lin`).

See the page describing PDAF-OMI observation operators for a general overview.

The interface is:

  SUBROUTINE PDAFomi_get_interp_coeff_lin(num_gp, n_dim, gcoords, ocoord, icoeff)

    INTEGER, INTENT(in) :: num_gp         ! Length of icoeff
    INTEGER, INTENT(in) :: n_dim          ! Number of dimensions in interpolation
    REAL, INTENT(in)    :: gcoords(:,:)   ! Coordinates of grid points
    REAL, INTENT(in)    :: ocoord(:)      ! Coordinates of observation
    REAL, INTENT(inout) :: icoeff(:)      ! Interpolation coefficients (num_gp)

Notes:

  • It is required that num_gp=2 for n_dim=1; num_gp=4 for n_dim=2; num_gp=8 for n_dim=3.
  • In the array gcoords, the first index specifies the grid point while the second specifies the coordinate. Thus, gcoords(1,1) is the first coordinate for grid point 1, gcoords(1,2) is the second coordiate for grid point 1, while gcoords(2,1) is the first coordiate for grid point 2. The coordinates need to be consistent with the indices specified in thisobs%id_obs_p since these specify the elements of the state vector that are interpolated. Only the first n_dim entries of ocoord will be used for the interpolation.
  • ocoord(:,i) holds the list of the coordinates for the observation with index i (different from the use in gcoords)
  • The order of the coordinates and coefficients is the following:
                           (7)------(8) 
                           /|       /|    with
                         (5)+-----(6)|       - column 1
                          | |      | |       / column 2
                          |(3)-----+(4)      | column 3
                          |/       |/
                         (1) ---- (2)
    
       thus gcoords(1,1)/=gcoords(2,1),        but  gcoords(1,1)=gcoords(3,1)=gcoords(5,1),
            gcoords(1,2)/=gcoords(3,2),             gcoords(1,2)=gcoords(2,2)=gcoords(5,2), 
            gcoords(1,3)/=gcoords(5,3)              gcoords(1,3)=gcoords(2,3)=gcoords(3,3)
    
  • For 1D linear interpolation (n_dim=1) only the coordinates for grid points 1 and 2 are used to compute the coefficients
  • For bi-linear interpolation (n_dim=2) only the coordinates for grid points 1, 2, and 3 are used to compute the coefficients
  • For tri-linear interpolation (n_dim=3) only the coordinates for grid points 1, 2, 3, and 5 are used to compute the coefficients
Last modified 3 years ago Last modified on Dec 18, 2021, 1:57:57 PM