da_tv_profile_tl.inc

References to this file elsewhere.
1 subroutine da_tv_profile_tl(xp,xa,xb,i,j,dx,dxm,dy,dym,             &
2            pre_ma,tv_ma,TGL_pre_ma,TGL_tv_ma)
3 
4    !--------------------------------------------------------------------------
5    ! Purpose: tangent-linear routine for da_tv_profile
6    !--------------------------------------------------------------------------
7 
8    implicit none
9 
10    type (x_type),  intent(in)     :: xa       ! gridded analysis increment.
11    type (xb_type),  intent(in)    :: xb       ! first guess state.
12    type (xpose_type), intent(in)  :: xp       ! Dimensions and xpose buffers.
13    integer, intent(in)            :: i, j     ! OBS location
14    real, intent(in)               :: dx, dxm  ! interpolation weights.
15    real, intent(in)               :: dy, dym  ! interpolation weights.
16    real, dimension(xp%kts-1:xp%kte+1),intent(out)      :: TGL_pre_ma,TGL_tv_ma
17    real, dimension(xp%kts-1:xp%kte+1),intent(out)      :: pre_ma,tv_ma
18 
19    integer                        :: ii,jj,ks,ke
20    real, dimension(2,2,xp%kts:xp%kte)       :: tv_m,TGL_tv_m
21 
22    ks = xp%kts
23    ke = xp%kte
24 
25    do ii=i,i+1
26       do jj=j,j+1
27          TGL_tv_m(ii-i+1,jj-j+1,ks:ke) = xa%t(ii,jj,ks:ke)*(1.+0.61*xb%q(ii,jj,ks:ke)) +  &
28                                       0.61*xb%t(ii,jj,ks:ke)*xa%q(ii,jj,ks:ke)
29          tv_m(ii-i+1,jj-j+1,ks:ke)     = xb%t(ii,jj,ks:ke)*(1.+0.61*xb%q(ii,jj,ks:ke))
30       end do
31    end do
32  
33    TGL_pre_ma(ks:ke) = dym* ( dxm * xa%p(i,j,ks:ke) + dx * xa%p(i+1,j,ks:ke) ) + &
34                        dy * ( dxm * xa%p(i,j+1,ks:ke) + dx * xa%p(i+1,j+1,ks:ke) )
35    TGL_tv_ma (ks:ke) = dym* ( dxm * TGL_tv_m(1,1,ks:ke) + dx * TGL_tv_m(2,1,ks:ke) ) + &
36                        dy * ( dxm * TGL_tv_m(1,2,ks:ke) + dx * TGL_tv_m(2,2,ks:ke) )
37    pre_ma(ks:ke) = dym* ( dxm * xb%p(i,j,ks:ke) + dx * xb%p(i+1,j,ks:ke) ) + &
38                    dy * ( dxm * xb%p(i,j+1,ks:ke) + dx * xb%p(i+1,j+1,ks:ke) )
39    tv_ma (ks:ke) = dym* ( dxm * tv_m (1,1,ks:ke) + dx * tv_m (2,1,ks:ke) ) + &
40                    dy * ( dxm * tv_m (1,2,ks:ke) + dx * tv_m (2,2,ks:ke) )
41  
42 end subroutine da_tv_profile_tl
43 
44