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