da_tp_to_qs_lin.inc
References to this file elsewhere.
1 subroutine da_tp_to_qs_lin(grid, qs_prime_over_qs )
2
3 !---------------------------------------------------------------------------
4 ! Purpose: Convert es/p/es_prime to saturation specific humidity increment.
5 !
6 ! Method: qs~ = qs * ( p es'/es - p' ) / ( p - (1-rd_over_rv) es ).
7 ! use Rogers & Yau (1989) formula: es = a exp( bTc / (T_c + c) ).
8
9 !---------------------------------------------------------------------------
10
11 implicit none
12
13 type (domain), intent(inout) :: grid
14 real, intent(out) :: qs_prime_over_qs(its:ite,jts:jte,kts:kte)
15
16 integer :: i, j, k ! Loop counters.
17 real :: temp ! Temporary array.
18 real :: es_prime_over_es ! Sat Vap pressure ratio.
19
20 if (trace_use_dull) call da_trace_entry("da_tp_to_qs_lin")
21
22 do k = kts, kte
23 do j = jts, jte
24 do i = its, ite
25 temp = grid%xb % t(i,j,k) + es_gammakelvin
26 !-----------------------------------------------------------------
27 ! [2.0] Calculate saturation vapour pressure increment:
28 !-----------------------------------------------------------------
29
30 es_prime_over_es = es_gammabeta * grid%xa % t(i,j,k) / ( temp * temp )
31
32 !-----------------------------------------------------------------
33 ! [3.0] Calculate saturation specific humidity increment:
34 !-----------------------------------------------------------------
35
36 qs_prime_over_qs(i,j,k) = ( grid%xb % p(i,j,k) * es_prime_over_es - &
37 grid%xa % p(i,j,k) ) / &
38 ( grid%xb % p(i,j,k) - rd_over_rv1 * &
39 grid%xb % es(i,j,k) )
40 end do
41 end do
42 end do
43
44 if (trace_use_dull) call da_trace_exit("da_tp_to_qs_lin")
45
46 end subroutine da_tp_to_qs_lin
47
48