da_interp_lin_3d_adj_new.inc

References to this file elsewhere.
1 subroutine da_interp_lin_3d_adj_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,num
13    integer,                intent(in)    :: i(num), j(num), k(nl,num)
14    real,                   intent(in)    :: dx(num), dxm(num)
15    real,                   intent(in)    :: dy(num), dym(num)
16    real,                   intent(in)    :: dz(nl,num), dzm(nl,num)
17    real,                   intent(in)    :: fo3d(nl,num) 
18    real, dimension(xp%ims:xp%ime,xp%jms:xp%jme,xp%kms:xp%kme), &
19                            intent(inout) :: fm3d    ! Input/Output variable
20 
21    integer                :: point,kk
22    real                   :: fmz(xp%kms:xp%kme)
23 
24    if (trace_use) call da_trace_entry("da_interp_lin_3d_adj_new")
25 
26    do point=1,num
27       fmz = 0.0
28       do kk = 1, nl
29          if (k(kk,point) > 0) then
30             fmz(k(kk,point))   = dzm(kk,point)*fo3d(kk,point) + fmz(k(kk,point))
31             fmz(k(kk,point)+1) = dz(kk,point) *fo3d(kk,point) + fmz(k(kk,point)+1)
32          end if
33       end do
34 
35       fm3d(i(point)  ,j(point)  ,xp%kts:xp%kte) = dym(point)*dxm(point)*fmz(xp%kts:xp%kte) &
36                                   + fm3d(i(point)  ,j(point)  ,xp%kts:xp%kte)
37       fm3d(i(point)+1,j(point)  ,xp%kts:xp%kte) = dym(point)*dx(point) *fmz(xp%kts:xp%kte) &
38                                   + fm3d(i(point)+1,j(point)  ,xp%kts:xp%kte)
39       fm3d(i(point)  ,j(point)+1,xp%kts:xp%kte) = dy(point) *dxm(point)*fmz(xp%kts:xp%kte) &
40                                   + fm3d(i(point)  ,j(point)+1,xp%kts:xp%kte)
41       fm3d(i(point)+1,j(point)+1,xp%kts:xp%kte) = dy(point) *dx(point) *fmz(xp%kts:xp%kte) &
42                                   + fm3d(i(point)+1,j(point)+1,xp%kts:xp%kte)
43    end do
44 
45    if (trace_use) call da_trace_exit("da_interp_lin_3d_adj_new")
46 
47 end subroutine da_interp_lin_3d_adj_new
48 
49