da_interp_lin_3d.inc

References to this file elsewhere.
1 subroutine da_interp_lin_3d(fm3d, xp, &
2                          i, j, dx, dy, dxm, dym, &
3                          fo3d, ml, zk, nl)
4 
5    !-----------------------------------------------------------------------
6    ! Purpose: TBD
7    ! Update :
8    !     01/24/2007    Syed RH Rizvi
9    !     Updated for "VERIFY"       
10    !-----------------------------------------------------------------------
11 
12    implicit none
13 
14    type (xpose_type),      intent(in)  :: xp    ! Dimensions and xpose buffers.
15    integer,                intent(in)  :: i, j
16    real,                   intent(in)  :: dx, dxm, dy, dym
17    real, dimension(xp%ims:xp%ime,xp%jms:xp%jme,xp%kms:xp%kme), &
18                            intent(in)  :: fm3d    ! Input variable
19    integer,                intent(in)  :: ml, nl                        
20    real,    dimension(ml), intent(inout) :: fo3d  ! Output variable 
21    real,    dimension(nl), intent(in)  :: zk
22 
23    integer                             :: kk, k
24    real                                :: dz, dzm
25    real, dimension(xp%kms:xp%kme)      :: fmz
26 
27    if (trace_use_frequent) call da_trace_entry("da_interp_lin_3d")
28 
29    fmz(:) = 0.0
30 
31    fmz(xp%kts:xp%kte) = dym*(dxm*fm3d(i  ,j  ,xp%kts:xp%kte) &
32                             +dx *fm3d(i+1,j  ,xp%kts:xp%kte)) &
33                       + dy *(dxm*fm3d(i  ,j+1,xp%kts:xp%kte) &
34                             +dx *fm3d(i+1,j+1,xp%kts:xp%kte))
35 
36    fo3d(:) = 0.0
37 
38    do kk = 1, nl
39       if (zk(kk) > 0.0 .or. anal_type_verify ) then
40          call da_togrid(zk(kk), xp%kts, xp%kte, k, dz, dzm)
41          fo3d(kk) = dzm*fmz(k) + dz*fmz(k+1)
42       end if
43    end do
44 
45    if (trace_use_frequent) call da_trace_exit("da_interp_lin_3d")
46 
47 end subroutine da_interp_lin_3d
48 
49