UPP  001
All Data Structures Files Functions Pages
WETBULB.f
1  SUBROUTINE wetbulb(T,Q,PMID,HTM,KARR,TWET)
2 !
3 ! FILE: WETBULB.f
4 ! WRITTEN: 10 SEPTEMBER 1993, MICHAEL BALDWIN
5 ! REVISIONS:
6 ! CONVERSION TO 2-D: 12 JUNE 1998 (T BLACK)
7 ! MPI VERSION: 04 Jan 2000 ( JIM TUCCILLO )
8 ! MODIFIED FOR HYBRID: OCT 2001, H CHUANG
9 ! 02-01-15 MIKE BALDWIN - WRF VERSION
10 ! 21-07-26 Wen Meng - Restrict compuation from undefined grids
11 !
12 !-----------------------------------------------------------------------
13 ! ROUTINE TO COMPUTE WET BULB TEMPERATURES USING THE LOOK UP TABLE
14 ! APPROACH THAT IS USED IN CUCNVC
15 !
16 ! FOR A GIVEN POINT K AND LAYER L:
17 ! THETA E IS COMPUTED FROM THETA AND Q BY LIFTING THE PARCEL TO
18 ! ITS SATURATION POINT.
19 ! THEN THE WET BULB TEMPERATURE IS FOUND BY FOLLOWING THE THETA E
20 ! DOWN TO THE ORIGINAL PRESSURE LEVEL (USING SUBROUTINE TTBLEX).
21 !
22 !
23  use lookup_mod, only: thl, rdth, jtb, qs0, sqs, rdq, itb, ptbl, plq, ttbl,&
24  pl, rdp, the0, sthe, rdthe, ttblq, itbq, jtbq, rdpq, the0q, stheq,&
25  rdtheq
26  use ctlblk_mod, only: jsta, jend, im, jsta_2l, jend_2u, lm, spval
27  use cuparm_mod, only: h10e5, capa, epsq, d00, elocp
28 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
29  implicit none
30 !
31 !-----------------------------------------------------------------------
32 ! LIST OF VARIABLES NEEDED
33 ! PARAMETERS:
34 ! INCLUDED IN "cuparm" AND "parm.tbl"
35 ! INPUT:
36 ! T,Q,HTM,PMID(3-D),KARR (2-D)
37 ! OUTPUT:
38 ! TWET (3-D)
39 ! SUBROUTINES CALLED:
40 ! TTBLEX
41 !
42  real,dimension(IM,jsta_2l:jend_2u,LM),intent(in) :: t,q, &
43  pmid,htm
44  integer,dimension(IM,jsta:jend), intent(in) :: karr
45  real,dimension(IM,jsta_2l:jend_2u,LM),intent(out) :: twet
46 
47 
48  real, dimension(im,jsta:jend) :: thesp, qq, pp
49  integer, dimension(im,jsta:jend) :: klres,khres,iptb,ithtb
50 !
51  integer i,j,l,ittb1,ittbk,iqtbk,it,knuml,knumh,iq
52  real tbtk,qbtk,apebtk,tthbtk,tthk,qqk,bqs00k,sqs00k,bqs10k, &
53  sqs10k,bqk,sqk,tqk,ppk,tpspk,apespk,prespk,p00k,p10k,p01k, &
54  p11k,presk
55 !
56 !--------------COMPUTE WET BULB TEMPERATURES----------------------------
57 !!$omp parallel do
58 !!$omp& private(apebtk,apespk,bqk,bqs00k,bqs10k,iq,iqtbk,it,ittb1,ittbk,
59 !!$omp& karr,khres,klres,knumh,knuml,p00k,p01k,p10k,p11k,ppk,
60 !!$omp& presk,qbtk,qqk,sqk,sqs00k,sqs10k,tbtk,thesp,tpspk,
61 !!$omp& tqk,tthbtk,tthk)
62 !-----------------------------------------------------------------------
63  DO 300 l=1,lm
64  DO 125 j=jsta,jend
65  DO 125 i=1,im
66  IF (htm(i,j,l)<1.0) THEN
67  thesp(i,j)=273.15
68  cycle
69  ENDIF
70  IF(t(i,j,l)<spval)THEN
71  tbtk =t(i,j,l)
72  qbtk =q(i,j,l)
73  presk =pmid(i,j,l)
74  apebtk=(h10e5/presk)**capa
75  IF(qbtk<epsq) qbtk=htm(i,j,l)*epsq
76 !--------------SCALING POTENTIAL TEMPERATURE & TABLE INDEX--------------
77  tthbtk =tbtk*apebtk
78  tthk =(tthbtk-thl)*rdth
79  qqk =tthk-aint(tthk)
80  ittb1 =int(tthk)+1
81 !--------------KEEPING INDICES WITHIN THE TABLE-------------------------
82  IF(ittb1<1) THEN
83  ittb1 =1
84  qqk =d00
85  ENDIF
86 !
87  IF(ittb1>=jtb) THEN
88  ittb1 =jtb-1
89  qqk =d00
90  ENDIF
91 !--------------BASE AND SCALING FACTOR FOR SPEC. HUMIDITY---------------
92  ittbk=ittb1
93  bqs00k=qs0(ittbk)
94  sqs00k=sqs(ittbk)
95  bqs10k=qs0(ittbk+1)
96  sqs10k=sqs(ittbk+1)
97 !--------------SCALING SPEC. HUMIDITY & TABLE INDEX---------------------
98  bqk=(bqs10k-bqs00k)*qqk+bqs00k
99  sqk=(sqs10k-sqs00k)*qqk+sqs00k
100  tqk=(qbtk-bqk)/sqk*rdq
101  ppk=tqk-aint(tqk)
102  iqtbk=int(tqk)+1
103 !--------------KEEPING INDICES WITHIN THE TABLE-------------------------
104  IF(iqtbk<1) THEN
105  iqtbk =1
106  ppk =d00
107  ENDIF
108 !
109  IF(iqtbk>=itb) THEN
110  iqtbk=itb-1
111  ppk =d00
112  ENDIF
113 !--------------SATURATION PRESSURE AT FOUR SURROUNDING TABLE PTS.-------
114  iq=iqtbk
115  it=ittb1
116  p00k=ptbl(iq ,it )
117  p10k=ptbl(iq+1,it )
118  p01k=ptbl(iq ,it+1)
119  p11k=ptbl(iq+1,it+1)
120 !--------------SATURATION POINT VARIABLES AT THE BOTTOM-----------------
121  tpspk=p00k+(p10k-p00k)*ppk+(p01k-p00k)*qqk &
122  +(p00k-p10k-p01k+p11k)*ppk*qqk
123  apespk=(h10e5/tpspk)**capa
124  thesp(i,j)=tthbtk*exp(elocp*qbtk*apespk/tthbtk)
125  ELSE
126  thesp(i,j)=spval
127  ENDIF !end t(i,j,l)<spval
128 ! ENDIF
129  125 CONTINUE
130 !--------------SCALING PRESSURE & TT TABLE INDEX------------------------
131  knuml=0
132  knumh=0
133 !
134  DO 280 j=jsta,jend
135  DO 280 i=1,im
136  klres(i,j)=0
137  khres(i,j)=0
138 !
139 ! IF(KARR(I,J)>0)THEN
140  IF(pmid(i,j,l)==spval)cycle
141  presk=pmid(i,j,l)
142 !
143  IF(presk<plq)THEN
144  knuml=knuml+1
145  klres(i,j)=1
146  ELSE
147  knumh=knumh+1
148  khres(i,j)=1
149  ENDIF
150 ! ENDIF
151  280 CONTINUE
152 !***
153 !*** COMPUTE PARCEL TEMPERATURE ALONG MOIST ADIABAT FOR PRESSURE<PL
154 !**
155  IF(knuml>0)THEN
156  CALL ttblex(twet(1,jsta_2l,l),ttbl,itb,jtb,klres &
157  ,pmid(1,jsta_2l,l),pl,qq,pp,rdp,the0,sthe &
158  ,rdthe,thesp,iptb,ithtb)
159  ENDIF
160 !***
161 !*** COMPUTE PARCEL TEMPERATURE ALONG MOIST ADIABAT FOR PRESSURE>PL
162 !**
163  IF(knumh>0)THEN
164  CALL ttblex(twet(1,jsta_2l,l),ttblq,itbq,jtbq,khres &
165  ,pmid(1,jsta_2l,l),plq,qq,pp,rdpq,the0q,stheq &
166  ,rdtheq,thesp,iptb,ithtb)
167  ENDIF
168 !-----------------------------------------------------------------------
169 !-----------------------------------------------------------------------
170  300 CONTINUE
171  RETURN
172  END