da_thickness_tl.inc
References to this file elsewhere.
1 subroutine da_thickness_tl(pre_ma,tv_ma,ks,ke,tv1,tv2,layer1,layer2,pre1,pre2, &
2 TGL_pre_ma,TGL_tv_ma,TGL_tv1,TGL_tv2,TGL_thk)
3
4 !-----------------------------------------------------------------------
5 ! Purpose: tangent-linear routine for thickness
6 !-----------------------------------------------------------------------
7
8 implicit none
9
10 integer, intent(in) :: layer1,layer2
11 integer, intent(in) :: ks,ke
12 real, intent(in) :: pre_ma(ks-1:ke+1)
13 real, intent(in) :: tv_ma(ks-1:ke+1)
14 real, intent(in) :: TGL_pre_ma(ks-1:ke+1)
15 real, intent(in) :: TGL_tv_ma(ks-1:ke+1)
16 real, intent(in) :: tv1,tv2
17 real, intent(in) :: TGL_tv1,TGL_tv2
18 real, intent(in) :: pre1,pre2
19 real, intent(out) :: TGL_thk
20
21 integer :: k
22 real :: p_tmp(ks-1:ke+1)
23 real :: TGL_p_tmp(ks-1:ke+1)
24
25 if (trace_use_dull) call da_trace_entry("da_thickness_tl")
26
27 TGL_thk = TGL_tv1*log(pre_ma(layer1-1)/pre1) + &
28 TGL_pre_ma(layer1-1)*tv1/pre_ma(layer1-1) + &
29 TGL_tv2*log(pre2/pre_ma(layer2)) - &
30 TGL_pre_ma(layer2)*tv2/pre_ma(layer2)
31 TGL_thk = 0.5 * gas_constant/gravity * TGL_thk
32
33 TGL_p_tmp(layer1) = 0.0
34 p_tmp(layer1) = pre1
35 TGL_p_tmp(layer2-1) = 0.0
36 p_tmp(layer2-1) = pre2
37
38 do k=layer2,layer1-1
39 TGL_p_tmp(k) = TGL_pre_ma(k)
40 p_tmp(k) = pre_ma(k)
41 end do
42
43 ! Vertical integration of the virtual temperature
44
45 do k=layer2,layer1-1
46 TGL_thk = TGL_thk + 0.5 * gas_constant/gravity * ( &
47 TGL_tv_ma(k)*log(p_tmp(k-1)/p_tmp(k+1)) + &
48 TGL_p_tmp(k-1)*tv_ma(k)/p_tmp(k-1) - &
49 TGL_p_tmp(k+1)*tv_ma(k)/p_tmp(k+1) )
50 end do
51
52 if (trace_use_dull) call da_trace_exit("da_thickness_tl")
53
54 end subroutine da_thickness_tl
55
56