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