da_interp_lin_2d_adj_partial.inc

References to this file elsewhere.
1 subroutine da_interp_lin_2d_adj_partial(fm2d, info, k1,k2, fo2d)
2 
3    !-----------------------------------------------------------------------
4    ! Purpose: TBD
5    !-----------------------------------------------------------------------
6 
7    implicit none
8 
9    real,            intent(inout) :: fm2d(ims:ime,jms:jme,k1:k2) ! 'Input' variable modified by adjoint
10    type(infa_type), intent(in)    :: info
11    integer,         intent(in)    :: k1,k2                 ! Range of levels
12    real,            intent(in)    :: fo2d(k1:k2,info%n1:info%n2)           ! 'Output' variable unchanged by adjoint
13 
14    integer :: n,k
15 
16    if (trace_use) call da_trace_entry("da_interp_lin_2d_adj_partial")
17 
18    do n=info%n1,info%n2
19       do k=k1,k2
20          fm2d(info%i(k,n)  ,info%j(k,n),k)   = info%dym(k,n) * info%dxm(k,n) * fo2d(k,n) + fm2d(info%i(k,n)  ,info%j(k,n),k)
21          fm2d(info%i(k,n)+1,info%j(k,n),k)   = info%dym(k,n) * info%dx(k,n)  * fo2d(k,n) + fm2d(info%i(k,n)+1,info%j(k,n),k)
22          fm2d(info%i(k,n)  ,info%j(k,n)+1,k) = info%dy(k,n)  * info%dxm(k,n) * fo2d(k,n) + fm2d(info%i(k,n)  ,info%j(k,n)+1,k)
23          fm2d(info%i(k,n)+1,info%j(k,n)+1,k) = info%dy(k,n)  * info%dx(k,n)  * fo2d(k,n) + fm2d(info%i(k,n)+1,info%j(k,n)+1,k)
24       end do
25    end do
26 
27    if (trace_use) call da_trace_exit("da_interp_lin_2d_adj_partial")
28 
29 end subroutine da_interp_lin_2d_adj_partial
30 
31