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