da_interp_lin_3d_new.inc

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