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