da_tp_to_qs_lin.inc

References to this file elsewhere.
1 subroutine da_tp_to_qs_lin( xb, xp, xa, 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 (xb_type), intent(in)    :: xb           ! First guess structure.
14    type (xpose_type), intent(in) :: xp           ! Dimensions and xpose buffers.
15    type (x_type), intent(inout)  :: xa           ! increment structure.
16    real, intent(out) :: qs_prime_over_qs(xp%its:xp%ite,xp%jts:xp%jte,xp%kts:xp%kte)
17 
18    integer                       :: is, ie       ! 1st dim. end points.
19    integer                       :: js, je       ! 2nd dim. end points.
20    integer                       :: ks, ke       ! 3rd dim. end points.
21    integer                       :: i, j, k      ! Loop counters.
22    real                          :: temp         ! Temporary array.
23    real                          :: es_prime_over_es ! Sat Vap pressure ratio.
24 
25    !---------------------------------------------------------------------------
26    ! [1.0] initialise:
27    !---------------------------------------------------------------------------
28 
29    is = xp%its; ie = xp%ite
30    js = xp%jts; je = xp%jte
31    ks = xp%kts; ke = xp%kte      
32 
33    do k = ks, ke
34       do j = js, je
35          do i = is, ie
36             temp = xb % t(i,j,k) + es_gammakelvin
37             !-----------------------------------------------------------------
38             ! [2.0] Calculate saturation vapour pressure increment:
39             !-----------------------------------------------------------------
40 
41             es_prime_over_es = es_gammabeta * xa % t(i,j,k) / ( temp * temp )
42 
43             !-----------------------------------------------------------------
44             ! [3.0] Calculate saturation specific humidity increment:
45             !-----------------------------------------------------------------
46 
47             qs_prime_over_qs(i,j,k) = ( xb % p(i,j,k) * es_prime_over_es - &
48                                         xa % p(i,j,k) ) / &
49                                       ( xb % p(i,j,k) - rd_over_rv1 * &
50                                         xb % es(i,j,k) )
51          end do
52       end do
53    end do
54 
55 end subroutine da_tp_to_qs_lin
56 
57