da_tp_to_qs_lin1.inc
References to this file elsewhere.
1 subroutine da_tp_to_qs_lin1( t, p, es, t_prime, p_prime, 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 implicit none
11
12 real, intent(in) :: t ! Temperature.
13 real, intent(in) :: p ! Pressure.
14 real, intent(in) :: es ! Sat. vapour pressure.
15 real, intent(in) :: t_prime ! Temperature increment.
16 real, intent(in) :: p_prime ! Pressure increment.
17 real, intent(out) :: qs_prime_over_qs ! qs~/qs.
18
19 real :: temp ! Temporary value.
20 real :: es_prime_over_es ! es~/es
21
22 if (trace_use_dull) call da_trace_entry("da_tp_to_qs_lin1")
23
24 !---------------------------------------------------------------------------
25 ! [1.0] initialise:
26 !---------------------------------------------------------------------------
27
28 temp = t + es_gammakelvin
29
30 !---------------------------------------------------------------------------
31 ! [2.0] Calculate saturation vapour pressure increment:
32 !---------------------------------------------------------------------------
33
34 es_prime_over_es = es_gammabeta * t_prime / ( temp * temp )
35
36 !---------------------------------------------------------------------------
37 ! [3.0] Calculate saturation specific humidity increment:
38 !---------------------------------------------------------------------------
39
40 qs_prime_over_qs = (p * es_prime_over_es - p_prime) / (p - rd_over_rv1 * es)
41
42 if (trace_use_dull) call da_trace_exit("da_tp_to_qs_lin1")
43
44
45 end subroutine da_tp_to_qs_lin1
46
47