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