17 REAL rhs1(ntsite,nzgrd),sythyt(ntsite),pmids(nsndht,ntsite)
18 INTEGER lowzee(ntsite,nzgrd),nxtzee(ntsite,nzgrd)
19 INTEGER levhi(ntsite),levtop,ixrass(2),iyrass(2)
23 DATA ixrass,iyrass /423,432,4497,4499/
26 WRITE (*,*)
'NO TEMP SONDE DATA -- CANNOT RUN'
32 DO 100 jtsond=1,numtmp
40 altmtr(i,jtsond)=-9999.
41 zmids(i,jtsond)=-9999.
42 pmids(i,jtsond)=-9999.
43 dptdzs(i,jtsond)=-9999.
44 potemp(i,jtsond)=-9999.
58 READ(12,*) xs,ys,sythyt(jtsond)
59 IF ((nint(xs) .EQ. ixrass(1) .AND. nint(ys).EQ.iyrass(1))
60 $ .OR. (nint(xs).EQ.ixrass(2)
61 $ .AND. nint(ys).EQ.iyrass(2)) )
THEN
66 xtmp(jtsond)=1.0+(xs-xorig)/dscrs
67 ytmp(jtsond)=1.0+(ys-yorig)/dscrs
68 READ(12,*) nthts(jtsond),ityp
75 IF (nhites .GT.0)
THEN
80 READ(12,*,end=186) z,t,p
81 IF(nint(z) .LE.-9999 .OR. nint(t).LE.-9999
82 $ .OR. nint(p) .LE.-9999 .OR.
83 $ z-sythyt(jtsond).LT. -1.0)
GO TO 10
90 IF (ityp .EQ. 3 ) z=0.3048*z
91 IF (i .LE. nsndht)
THEN
92 zsnd(i,jtsond)=z-sythyt(jtsond)
93 potemp(i,jtsond)=
tpot(p,t)
94 tsnd(i,jtsond)=t+273.13
96 altmtr(i,jtsond)=
altset(z,p)
97 IF (altmtr(i,jtsond).LT. 28.)
WRITE(*,*)
98 $ i,
' CHECK T-SONDE ',jtsond,z,p,
altset(z,p)
100 zsnd(nsndht,jtsond)=z-sythyt(jtsond)
101 potemp(nsndht,jtsond)=
tpot(p,t)
102 tsnd(nsndht,jtsond)=t+273.13
103 psnd(nsndht,jtsond)=p
104 altmtr(i,jtsond)=
altset(z,p)
105 IF (altmtr(i,jtsond).LT. 28.)
WRITE(*,*)
106 $ i,
' CHECK T-SONDE ',jtsond,z,p,
altset(z,p)
108 ELSE IF (ityp.EQ.1)
THEN
113 WRITE (*,*)
'TEMP SOUNDINGS MUST PROVIDE HEIGHT ',
114 $
'(M, TYP2 OR FT, TYP3), TEMP (DEG C) & ',
124 WRITE (*,*)
'TEMPERATURE SONDE ', jtsond,
' HAS NO OBS.'
133 idis2=(nint(xtmp(jtsond))-lowix(1))**2+
134 $ (nint(ytmp(jtsond))-lowiy(1))**2
137 id2here=(nint(xtmp(jtsond))-lowix(jd))**2+
138 $ (nint(ytmp(jtsond))-lowiy(jd))**2
139 IF (id2here .LT. idis2)
THEN
145 lllx=lowix(jnear(jtsond))
146 llly=lowiy(jnear(jtsond))
151 stoplev=zsnd(nthts(jtsond),jtsond)
153 zlevkl=rhs(lllx,llly,kl)
154 rhs1(jtsond,kl)=zlevkl
158 IF (stoplev .GE. zlevkl)
THEN
160 IF (kl .GT. levtop) levtop=kl
168 DO 45 kl=1,levhi(jtsond)
169 zlevkl=rhs1(jtsond,kl)
171 zbar=0.5*(zlevkl+rhs1(jtsond,kl+1))
172 ELSE IF (kl.EQ.nlvl)
THEN
173 zbar=zlevkl+0.5*(zlevkl-rhs1(jtsond,kl-1))
176 DO 40 iz=1,nthts(jtsond)-1
177 IF (abs(zbar-zsnd(iz,jtsond)).LT.close1)
THEN
178 close1=abs(zsnd(iz,jtsond)-zbar)
180 IF (nxtzee(jtsond,kl).EQ.
181 $ lowzee(jtsond,kl)) nxtzee(jtsond,kl)=iz+1
186 IF (kl .LT. nlvl)
THEN
187 lowzee(jtsond,kl+1)=iz
195 DO 70 kl=2,levhi(jtsond)
196 IF (zsnd(lowzee(jtsond,kl),jtsond) .GE.
197 $ rhs1(jtsond,kl) .AND. lowzee(jtsond,kl) .GT. 1)
THEN
201 DO 60 iz=lowzee(jtsond,kl),1,-1
202 zbar=0.5*(rhs1(jtsond,kl-1)+rhs1(jtsond,kl))
203 IF (zsnd(iz,jtsond) .LT. zbar)
THEN
214 IF (levhi(jtsond).LT.nlvl)
THEN
215 zbar=0.5*(rhs1(jtsond,levhi(jtsond))+
216 $ rhs1(jtsond,levhi(jtsond)+1))
217 IF (zsnd(nthts(jtsond),jtsond) .GE. zbar)
THEN
218 levhi(jtsond)=1+levhi(jtsond)
219 IF (levhi(jtsond).GT.levtop) levtop=levhi(jtsond)
220 lowzee(jtsond,levhi(jtsond))=
221 $ (lowzee(jtsond,levhi(jtsond)-1) +
222 $ nxtzee(jtsond,levhi(jtsond)-1))/2
223 nxtzee(jtsond,levhi(jtsond))=nthts(jtsond)
233 DO 170 jtsond=1,numtmp
234 DO 160 kl=levhi(jtsond),1,-1
242 zz0=zsnd(lowzee(jtsond,kl),jtsond)+sythyt(jtsond)
243 z1=zsnd(nxtzee(jtsond,kl),jtsond)+sythyt(jtsond)
244 zlvl=rhs1(jtsond,kl)+sythyt(jtsond)
245 aaa1=altmtr(nxtzee(jtsond,kl),jtsond)
246 aaa0=altmtr(lowzee(jtsond,kl),jtsond)
247 tt0=tsnd(lowzee(jtsond,kl),jtsond)
248 tt1=tsnd(nxtzee(jtsond,kl),jtsond)
249 pt0=potemp(lowzee(jtsond,kl),jtsond)
250 pt1=potemp(nxtzee(jtsond,kl),jtsond)
251 ptlaps(jtsond,kl)=(pt1-pt0)/(z1-zz0)
252 altsig(jtsond,kl)=
xlintr(aaa0,aaa1,zlvl,zz0,z1)
253 psigl(jtsond,kl)=
cvt2p(altsig(jtsond,kl),zlvl)
254 ptsigl(jtsond,kl)=
xlintr(pt0,pt1,zlvl,zz0,z1)
256 $
pt2t(psigl(jtsond,kl),ptsigl(jtsond,kl))
258 ELSE IF (kl.EQ.1)
THEN
262 z1=zsnd(2,jtsond)+sythyt(jtsond)
263 zz0=zsnd(1,jtsond)+sythyt(jtsond)
266 $ (potemp(2,jtsond)-potemp(1,jtsond))/(z1-zz0)
267 IF (abs(zlvl-zz0).LT.0.1)
THEN
268 altsig(jtsond,kl)=altmtr(1,jtsond)
269 ptsigl(jtsond,kl)=potemp(1,jtsond)
270 tsigl(jtsond,kl)=tsnd(1,jtsond)
271 psigl(jtsond,kl)=
cvt2p(altsig(jtsond,kl),zlvl)
272 ELSE IF (abs(zlvl-z1) .LT. 0.1)
THEN
273 altsig(jtsond,kl)=altmtr(2,jtsond)
274 ptsigl(jtsond,kl)=potemp(2,jtsond)
275 psigl(jtsond,kl)=
cvt2p(altsig(jtsond,kl),zlvl)
277 $
pt2t(psigl(jtsond,kl),ptsigl(jtsond,kl))
283 aaa1=altmtr(2,jtsond)
284 aaa0=altmtr(1,jtsond)
285 altsig(jtsond,kl)=
xlintr(aaa0,aaa1,zlvl,zz0,z1)
286 ptsigl(jtsond,kl)=
xlintr(pt0,pt1,zlvl,zz0,z1)
287 psigl(jtsond,kl)=
cvt2p(altsig(jtsond,kl),zlvl)
289 $
pt2t(psigl(jtsond,kl),ptsigl(jtsond,kl))
299 DO 250 jtsond=1,numtmp
300 IF (levhi(jtsond)+1.LE.levtop)
THEN
301 DO 240 kl=levhi(jtsond)+1,levtop
316 IF (jd.NE.jtsond .AND. levhi(jd).GE.kl)
THEN
317 weight=
wndwt(xx,yy,xtmp(jd),ytmp(jd))
319 sumdpt=sumdpt+weight*ptlaps(jd,kl)
320 sumpt=sumt+weight*ptsigl(jd,kl)
325 sumalt=sumalt+weight*altsig(jd,kl)
329 IF (sumwt.GT.0.0)
THEN
330 ptlaps(jtsond,kl)=sumdpt/sumwt
331 altsig(jtsond,kl)=sumalt/sumwt
332 ptsigl(jtsond,kl)=sumpt/sumwt
333 psigl(jtsond,kl)=
cvt2p(altsig(jtsond,kl),
334 $ rhs1(jtsond,kl)+sythyt(jtsond))
335 tsigl(jtsond,kl)=
pt2t(psigl(jtsond,kl),
340 IF (ptsigl(jtsond,kl).LT.ptsigl(jtsond,kl-1))
THEN
341 ptsigl(jtsond,kl)=ptsigl(jtsond,kl-1)
343 $
pt2t(psigl(jtsond,kl),ptsigl(jtsond,kl))
347 WRITE (*,*)
'CHECK STRAT NEAR 210'
358 IF (levtop.LT.nlvl)
THEN
359 DO 275 jtsond=1,numtmp
364 IF (levtop.LT.2)
THEN
365 ptlaps(jtsond,1)=0.005
368 padjust=altsig(jtsond,levtop)
371 DO 265 kl=levtop+1,nlvl
372 altsig(jtsond,kl)=altsig(jtsond,levtop)
373 psigl(jtsond,kl)=
cvt2p(altsig(jtsond,levtop),
374 $ rhs1(jtsond,kl)+sythyt(jtsond))
375 ptlaps(jtsond,kl)=ptlaps(jtsond,levtop)
379 IF (ptlaps(jtsond,kl).LT.0.0) ptlaps(jtsond,kl)=0.0
385 ptsigl(jtsond,kl)=ptsigl(jtsond,levtop) +
386 $ ((rhs1(jtsond,kl)-rhs1(jtsond,levtop))*
387 $ ptlaps(jtsond,levtop))
392 $
pt2t(psigl(jtsond,kl),ptsigl(jtsond,kl))
real function cvt2p(ALTIM, ELEV)
real function wndwt(X, Y, XOBS, YOBS)
real function xlintr(X0, X1, Z, ZZ0, Z1)
real function pt2t(PP, TT)
real function altset(Z, P)
real function tpot(PP, TT)