da_trh_to_td.inc

References to this file elsewhere.
1 subroutine da_trh_to_td (rh, t, td)
2 
3    !---------------------------------------------------------------------
4    !
5    !                       function f_td_from_rh
6    !                     **************************
7    !
8    !  purpose:
9    !  -------
10    !     compute dew point from temperature and relative humidity
11    !
12    !   method:
13    !   ------
14    !     invert the relation
15    !
16    !     rh = 100.0 * exp (l_over_rv * (1.0/t - 1.0/td))
17    !
18    !   input:
19    !   -----
20    !      t_k:   temperature       in k
21    !      rh:    relative humidity in %
22    !
23    !   output:
24    !   ------
25    !      td:    dew point in k
26    !
27    !   references:
28    !   -----------
29    !    R. R. Rogers and M. K. Yau, 1989: a short course in cloud physics,
30    !                                   3nd edition, pergamon press, page 14-19.
31    !
32    !   verification set:
33    !   -----------------
34    !    t_k  = 268.15 k,  
35    !    td_k = 262.55 k
36    !    rh   = 65 %, 
37    !    p_pa = 80000  pa, 
38    !    qv   = 2.11e-03 kg/kg,
39    !
40    !  modifications:
41    !   ------------
42    !    parallel implementation. -al bourgeoits
43    ! 
44    !-------------------------------------------------------------------------
45 
46    implicit none
47 
48    real, dimension(ims:ime,jms:jme,kms:kme), &
49       intent(inout) :: rh ! relative humidity.
50    real, dimension(ims:ime,jms:jme,kms:kme), &
51       intent(in)    ::  t ! temperature.
52    real, dimension(ims:ime,jms:jme,kms:kme), &
53       intent(out)   :: td ! dew point in k.
54 
55    integer :: i, j, k
56 
57    real    :: invdifftd, invtd
58 
59    if (trace_use_dull) call da_trace_entry("da_trh_to_td")
60 
61    do j=jts,jte
62       do k=kts,kte
63          do i=its,ite
64             if (rh(i,j,k) < 10.0) then
65                rh(i,j,k) = 10.0
66             else if (rh(i,j,k) > 105.0) then
67                rh(i,j,k) = 105.0
68             end if
69 
70             invdifftd = log (rh(i,j,k)/100.0) / l_over_rv
71 
72             invtd = 1/t(i,j,k)  - invdifftd
73 
74             td(i,j,k)  = 1.0 / invtd
75 
76             if (td(i,j,k) > t(i,j,k)) &
77                td(i,j,k) = t(i,j,k)
78          end do
79       end do
80    end do
81 
82    if (trace_use_dull) call da_trace_exit("da_trh_to_td")
83 
84 end subroutine da_trh_to_td
85 
86