da_trh_to_td.inc

References to this file elsewhere.
1 subroutine da_trh_to_td (RH, T, TD, xp)
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. * EXP (L_over_Rv * (1./T - 1./TD))
17    !
18    !   inPUT:
19    !   -----
20    !      T_K:   TEMPERATURE       in K
21    !      RH:    RELAITVE 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 Bourgeois
43    ! 
44    !-------------------------------------------------------------------------
45 
46    implicit none
47 
48    type (xpose_type), intent(in)      :: xp    ! domain decomposition vars.
49 
50    real, dimension(xp%ims:xp%ime,xp%jms:xp%jme,xp%kms:xp%kme), &
51       intent(inout) :: rh ! Relative Humidity.
52    real, dimension(xp%ims:xp%ime,xp%jms:xp%jme,xp%kms:xp%kme), &
53       intent(in)    ::  t ! Temperature.
54    real, dimension(xp%ims:xp%ime,xp%jms:xp%jme,xp%kms:xp%kme), &
55       intent(out)   :: td ! Dew Point in K.
56 
57    integer :: I, J, K
58 
59    real    :: inVDifFTD, inVTD
60 
61    integer :: is,ie,js,je,ks,ke
62 
63    if (trace_use) call da_trace_entry("da_trh_to_td")
64 
65    is = xp%its
66    ie = xp%ite
67    js = xp%jts
68    je = xp%jte
69    ks = xp%kts
70    ke = xp%kte
71 
72    do j=js,je
73       do k=ks,ke
74          do i=is,ie
75             if (RH(i,j,k) < 10.0) then
76                RH(i,j,k) = 10.0
77             else if (RH(i,j,k) > 105.0) then
78                RH(i,j,k) = 105.0
79             end if
80 
81             inVDifFTD = LOG (RH(i,j,k)/100.) / L_over_Rv
82 
83             inVTD = 1/T(i,j,k)  - inVDifFTD
84 
85             TD(i,j,k)  = 1. / inVTD
86 
87             if (TD(i,j,k) > T(i,j,k)) &
88                TD(i,j,k) = T(i,j,k)
89          end do
90       end do
91    end do
92 
93    if (trace_use) call da_trace_exit("da_trh_to_td")
94 
95 end subroutine da_trh_to_td
96 
97