da_interp_lin_3d.inc

References to this file elsewhere.
1 subroutine da_interp_lin_3d(fm3d, info, fo3d)
2 
3    !-----------------------------------------------------------------------
4    ! Purpose: TBD
5    !-----------------------------------------------------------------------
6 
7    implicit none
8 
9    real,            intent(in)    :: fm3d(ims:ime,jms:jme,kms:kme) ! Input variable 
10    type(infa_type), intent(in)    :: info       
11    real,            intent(inout) :: fo3d(1:info%max_lev,info%n1:info%n2)           ! Output variable 
12 
13    integer :: n, k
14    real    :: fmz(kms:kme)
15 
16    if (trace_use) call da_trace_entry("da_interp_lin_3d")
17 
18    fo3d(:,:) = 0.0
19 
20    do n=info%n1,info%n2
21       fmz(:)=0.0
22 
23       do k = kts,kte
24          fmz(k) = &
25               info%dym(k,n) * (info%dxm(k,n)*fm3d(info%i(k,n), info%j(k,n), k) &
26             + info%dx (k,n) * fm3d(info%i(k,n)+1,info%j(k,n), k)) &
27             + info%dy (k,n) * (info%dxm(k,n)*fm3d(info%i(k,n), info%j(k,n)+1, k) &
28             + info%dx (k,n) * fm3d(info%i(k,n)+1, info%j(k,n)+1, k))
29       end do
30       do k = 1, info%levels(n)
31          if (info%k(k,n) > 0) then
32             fo3d(k,n) = info%dzm(k,n)*fmz(info%k(k,n)) + info%dz(k,n)*fmz(info%k(k,n)+1)
33          end if
34       end do
35    end do
36 
37    if (trace_use) call da_trace_exit("da_interp_lin_3d")
38 
39 end subroutine da_interp_lin_3d
40 
41