GNU WOCSS (gwocss)  2.2.4-pre
GNU version of Winds On Critical Streamline Surfaces (WOCSS)
Functions/Subroutines
dopsig.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine dopsig (ICALL)
 

Function/Subroutine Documentation

subroutine dopsig (   ICALL)

Definition at line 3 of file dopsig.f.

Referenced by geosig().

3 C********************************************************************
4 C
5 C ASSIGN WND STA WIND PROFILES TO FLOW SURFACES.MISSING WINDS ARE
6 C DENOTED BY -9999. IF SOUNDING IS NOT COMPLETE THE LAST REPORTED WIND
7 C IS USED AT THE HIGHEST ALTITUDES. AFTER FLOW SURFACES ARE REDEFINED
8 C (RESIG), DOPSIG IS RECALLED (ICALL >1) AND THE SOUNDINGS ARE
9 C REINTERPOLATED TO THE SURFACES. TOPWIND AND BETWIN ARE RECALLED TO
10 C PROVIDE THE WINDS THAT ARE TO BE BALANCED. THE ORIGINAL VERSION OF
11 C THIS SUBROUTINE WAS WRITTEN BY R.M. ENDLICH, SRI INTN'L, MENLO PARK
12 C CA 94025.
13 C IT WAS LARGELY REWRITTEN BY LUDWIG IN NOV,1987. THIS VERSION
14 C INCLUDES CHANGES MADE IN APRIL, 1989.
15 C
16 C FURTHER MODIFIED MAY 1989 TO PROVIDE FOR A SECOND CALL WHERE WINDS
17 C ARE REINTERPOLATED TO THE NEWLY DEFINED FLOW SURFACES; DATA READING
18 C AND OTHER PARTS OF THE ROUTINE ARE SKIPPED -- F. LUDWIG
19 C
20 C
21  include 'NGRIDS.PAR'
22 C
23  include 'ANCHOR.CMM'
24  include 'FLOWER.CMM'
25  include 'LIMITS.CMM'
26  include 'STALOC.CMM'
27  include 'TSONDS.CMM'
28 C
29  REAL dpht(nsndht,nwsite), dpuc(nsndht,nwsite)
30  REAL dpvc(nsndht,nwsite),rhs1(nzgrd),sythyt(nwsite)
31  INTEGER levhi(nwsite)
32 C
33  DATA uvo/0.0/
34  SAVE
35 C
36 C VARIABLES ARE:
37 C DPUC=U COMPONENT OF WND STA WIND IN MPS
38 C DPVC=V COMPONENT OF WND STA WIND IN MPS
39 C NWHTS=NUMBER OF POINTS IN VERTICAL WIND PROFILE
40 C NLVL=NUMBER OF FLOW LEVELS
41 C RHS=HT OF FLOW SURFACES ABOVE TERRAIN (M)
42 C XG,YG=STA. DIST IN X,Y IN GRID UNITS FROM 0,0 (SW CORNER)
43 C Z0, UVO = ROUGHNESS HT AND ZERO-LEVEL WIND FOR INTERPOLATING
44 C SYTHYT(IS)=SFC ELEVATION FOR SITE IS
45 C LEVHI(IS)=HIGHEST FLOW SURFACE FOR WHICH WIND WAS OBSERVED AT SITE IS
46 C
47 C ON 1ST CALL AT EACH TIME, READ IN WIND PROFILES.
48 C
49  IF (icall .EQ. 1) THEN
50  DO 45 it=1,numdop
51 C
52 C ZERO VALUES ON FLOW SURFACES BEFORE CALCULATING
53 C
54  DO 11 ilev=1,nlvl
55  usig(it,ilev)=0.0
56  vsig(it,ilev)=0.0
57 11 CONTINUE
58 C
59 C SKIP BLANK LINE THEN READ COORDINATES OF SITE
60 C
61  READ (12,*)
62  READ (12,*) dopx,dopy,dopz
63  sythyt(it)=dopz
64 C
65 C LOCATE GRID POINT NEAREST THE SOUNDING (NOTE ORIGIN AT 1,1).
66 C
67  xdop(it)=1.0+(dopx-xorig)/dscrs
68  ydop(it)=1.0+(dopy-yorig)/dscrs
69  zdop(it)=dopz
70  ix=max(1,nint(xdop(it)))
71  jy=max(1,nint(ydop(it)))
72  ix=min(ix,ncol)
73  jy=min(jy,nrow)
74  zfix=sfcht(ix,jy)-sythyt(it)
75  READ (12,*) nwhts(it)
76 C
77 C SKIP COLUMN HEADING LINE
78 C
79  READ (12,*)
80  DO 15 ll=1,nwhts(it)
81  READ (12,*) zzht,zzwd,zzws
82 C
83  IF (ll .LT. nsndht) THEN
84  dpht(ll,it)=zzht-sythyt(it)
85  dpwd(ll)=zzwd
86  dpws(ll)=zzws
87  ELSE
88  dpht(nsndht,it)=zzht-sythyt(it)
89  dpwd(nsndht)=zzwd
90  dpws(nsndht)=zzws
91  END IF
92 15 CONTINUE
93  IF (nwhts(it) .GT. nsndht) nwhts(it)=nsndht
94 C
95 C CONVERT WIND MEASUREMENT HEIGHTS IN METERS (MSL) TO METERS (AGL)
96 C ADJUST FOR FACT THAT SOUNDING LOCATION NOT AT GRID PT.
97 C
98  DO 25 ll=1,nlvl
99  rhs1(ll)=rhs(ix,jy,ll)
100  zsigl(it,ll)=rhs1(ll)
101 25 CONTINUE
102 C
103 C
104 C CHANGE DIRECTION AND SPEED (MPS) TO U AND V; CHECK FOR MISSING DATA
105 C OR BELOW GROUND HEIGHTS (AFTER CONVERSION FROM MSL) ON 1ST CALL.
106 C
107  newll=0
108  DO 40 ll=1,nwhts(it)
109  IF (dpwd(ll).GT.-9998.9) THEN
110  IF (dpht(ll,it) .GT. z0) THEN
111  newll=newll+1
112  dpuc(newll,it)=
113  $ -dpws(ll)*sin(dpwd(ll)/57.295)
114  dpvc(newll,it)=
115  $ -dpws(ll)*cos(dpwd(ll)/57.295)
116  dpht(newll,it)=dpht(ll,it)
117  END IF
118  END IF
119 40 CONTINUE
120  nwhts(it)=newll
121 45 CONTINUE
122  END IF
123 C
124 C INTERPOLATE TO ORIGINAL, OR NEWLY DEFINED, FLOW SURFACE HEIGHTS
125 C AT LEVELS WHERE DATA ARE AVAILABLE
126 C
127  DO 150 it=1,numdop
128  ix=max(1,nint(xdop(it)))
129  jy=max(1,nint(ydop(it)))
130  ix=min(ix,ncol)
131  jy=min(jy,nrow)
132 C
133 C FIND HIGHEST FLOW SURFACE REACHED BY THIS SOUNDING. ALSO CHECK
134 C FOR HIGHEST SFC REACHED BY ANY SNDING
135 C
136  levhi(it)=0
137  DO 100 kl=1,nlvl
138  zlevkl=rhs(ix,jy,kl)
139  rhs1(kl)=zlevkl
140  zsigl(it,kl)=zlevkl
141  DO 96 iz=1,nwhts(it)
142  IF (dpht(iz,it).GT.zlevkl) levhi(it)=kl
143 96 CONTINUE
144 100 CONTINUE
145 C
146 C ASSIGNING OBSERVED WINDS TO FLOW SURFACE HEIGHTS UP TO TOP
147 C OF SONDE
148 C
149  DO 140 kl=1,levhi(it)
150  zf=rhs1(kl)
151 C
152  IF (zf .LE. z0) THEN
153 C
154 C ZERO WIND WHEN FLOW SFC BELOW ROUGHNESS HEIGHT.
155 C
156  usig(it,kl)=0.0
157  vsig(it,kl)=0.0
158  ELSE IF (zf.GT.z0 .AND. zf.LE. dpht(1,it)) THEN
159 C
160 C FLOW SFC BELOW 1ST OBSERVATION HT -- LOG INTERP TO FLOW SFC.
161 C
162  CALL lgntrp(usig(it,kl),z0,dpht(1,it),
163  $ zf,uvo,dpuc(1,it))
164  CALL lgntrp(vsig(it,kl),z0,dpht(1,it),
165  $ zf,uvo,dpvc(1,it))
166  ELSE
167 C
168 C FLOW SURFACE ABOVE LOWEST OB -- FIND WHICH OBS IT IS BETWEEN
169 C AND LOG INTERPOLATE.
170 C
171  DO 135 jht=1,nwhts(it)-1
172  zw1=dpht(jht,it)
173  zw2=dpht(jht+1,it)
174  IF (zf.GT.zw1 .AND. zf.LE.zw2) THEN
175 C
176 C FLOW SFC BETWEEN OBSERVATION HTS
177 C
178  CALL lgntrp(usig(it,kl),zw1,zw2,zf,
179  $ dpuc(jht,it),dpuc(jht+1,it))
180  CALL lgntrp(vsig(it,kl),zw1,zw2,zf,
181  $ dpvc(jht,it),dpvc(jht+1,it))
182  GO TO 140
183  END IF
184 135 CONTINUE
185 C
186  END IF
187 140 CONTINUE
188 150 CONTINUE
189 C
190 C FIND HIGHEST LEVEL REACHED BY ANY SONDE
191 C
192  levtop=0
193  DO 160 jsond=1,numdop
194  levtop=max(levtop,levhi(jsond))
195 160 CONTINUE
196 C
197 C ALL OBSERVED DATA INTERPOLATED VERTICALLY TO FLOW SURFACES. NOW,
198 C INTERPOLATE HORIZONTALLY UP TO TOP OBSERVATION WHERE REQUIRED
199 C
200  DO 200 jsond=1,numdop
201  xx=xdop(jsond)
202  yy=ydop(jsond)
203  DO 180 il=levhi(jsond)+1,levtop
204 C
205 C THIS ONE IS MISSING INTERPOLATE FROM OTHERS AVAILABLE AT THIS LEVEL
206 C
207  sumu=0.0
208  sumv=0.0
209  sumwt=0.0
210  DO 175 jd=1,numdop
211 C
212 C SKIP WHEN LOOKING AT SAME SOUNDING BEING INTERPOLATED FOR.
213 C
214  IF (jd.NE.jsond) THEN
215  IF (levhi(jd).GE.il) THEN
216  weight=wndwt(xx,yy,xdop(jd),ydop(jd))
217  sumwt=sumwt+weight
218  sumu=sumu+weight*usig(jd,il)
219  sumv=sumv+weight*vsig(jd,il)
220  END IF
221  END IF
222 175 CONTINUE
223 C
224  IF (sumwt.GT.0.0) THEN
225  usig(jsond,il)=sumu/sumwt
226  vsig(jsond,il)=sumv/sumwt
227  ELSE
228  WRITE (*,*) 'CHECK DOPSIG NEAR 180'
229  stop
230  END IF
231 180 CONTINUE
232 200 CONTINUE
233 C
234 C IF NO SOUNDING GOES AS HIGH AS UPPERMOST LEVEL, EXTRAPOLATE
235 C UPPERMOST VALUESTO TOP OF DOMAIN.
236 C
237  IF (levtop.LT.nlvl) THEN
238  DO 225 jsond=1,numdop
239  DO 220 il=levtop+1,nlvl
240  usig(jsond,il)=usig(jsond,levtop)
241  vsig(jsond,il)=vsig(jsond,levtop)
242 220 CONTINUE
243 225 CONTINUE
244  END IF
245 C
246 C ALL MISSING UPPER WIND DATA HAVE BEEN ESTIMATED.
247 C
248  RETURN
249 C
subroutine lgntrp(Y, X0, X1, X, Y0, Y1)
Definition: utils.f:198
real function wndwt(X, Y, XOBS, YOBS)
Definition: utils.f:216

Here is the call graph for this function:

Here is the caller graph for this function: