GNU WOCSS (gwocss)  2.2.4-pre
GNU version of Winds On Critical Streamline Surfaces (WOCSS)
richardson.f
Go to the documentation of this file.
1 C******************************************************************
2  SUBROUTINE getrich
3 C******************************************************************
4 C
5 C GETS NECESSARY WIND SHEAR AND POTENTIAL TEMPERATURE GRADIENTS AT
6 C EACH GRID POINT FROM DIFFERENCES AND INTERPOLATION ON EACH SURFACE.
7 C FROM THESE THE RICHARDSON NUMBER IS ESTIMATED. VALUES OF POTENT.
8 C TEMP. AND PRESSURE ARE ALSO ESTIMATED
9 C
10 C FLUDWIG 3/02
11 C
12  include 'NGRIDS.PAR'
13 C
14  include 'ANCHOR.CMM'
15  include 'FLOWER.CMM'
16  include 'LIMITS.CMM'
17  include 'STALOC.CMM'
18  include 'TSONDS.CMM'
19 C
20  REAL HTDIF,TMPDIF,TMPAVG,SQDIF
21 C
22 C WE NOW HAVE TOP AND BATTOM EVERYWHERE VALUES FOR ALTIMETER SETTING
23 C AND POTENTIAL TEMPERATURE. NOW FILL IN BETWEEN VALUES.
24 C
25  DO 180 ix=1,nxgrd
26  DO 160 iy=1,nygrd
27  DO 140 iz=1,nflat
28 C
29 C IDENTIFY GRID POINTS AT OR BELOW 20 M ABOVE SFC AND FLAG HEIGHT
30 C DIFFERENCE AS NEGATIVE FOR FUTURE SKIPPING. GET DIFFERENCE IN
31 C HEIGHT BETWEEN SURFACES TO BE USED FOR CALCULATING BRUNT VAISALA
32 C AND RICHARDSON VALUES
33 C
34  zblow=100.0
35  zatxy=sfcht(ix,iy)+2.0*z10
36  IF (iz.EQ.1) THEN
37  htdif=-9.0
38  ELSE IF (iz.EQ.2) THEN
39  zblow=zchooz(2)
40  htdif=zchooz(3)-zchooz(2)
41  ELSE IF (iz.GT.2 .AND. iz.LT.nflat) THEN
42  zblow=zchooz(iz-1)
43  htdif=zchooz(iz+1)-zchooz(iz-1)
44  ELSE IF (iz.EQ.nflat) THEN
45  zblow=zchooz(nflat-1)
46  htdif=zchooz(nflat)-zchooz(nflat-1)
47  END IF
48 C
49 C FLAG SFC BELOW GROUND
50 C
51  IF (doflat .AND. zblow .LT. zatxy) htdif=-9.
52 C
53 C GRADIENTS UNRELIABLE AT ANEMOMETER LEVEL. SET BULK RICHARDSON
54 C NUMBER & BRUNT VAISALA PERIOD AS MISSING WHEN FLAGGED HTDIF < 0.
55 C
56  IF (htdif .LT. 2.0*z10) THEN
57  irngrf(ix,iy,iz)=-2
58  ibvgrf(ix,iy,iz)=0
59  ELSE
60  IF (iz.EQ.nflat) THEN
61  tmpdif=0.1*float(iptgrf(ix,iy,nflat)-
62  $ iptgrf(ix,iy,nflat-1))
63  tmpavg=0.05*float(iptgrf(ix,iy,nflat)+
64  $ iptgrf(ix,iy,nflat-1))
65  iudif=iugraf(ix,iy,nflat)-iugraf(ix,iy,nflat-1)
66  ivdif=ivgraf(ix,iy,nflat)-ivgraf(ix,iy,nflat-1)
67  ELSE IF (iz.EQ.2) THEN
68  tmpdif=0.1*float(iptgrf(ix,iy,3)-
69  $ iptgrf(ix,iy,2))
70  tmpavg=0.05*float(iptgrf(ix,iy,3)+
71  $ iptgrf(ix,iy,2))
72  iudif=iugraf(ix,iy,3)-iugraf(ix,iy,2)
73  ivdif=ivgraf(ix,iy,3)-ivgraf(ix,iy,2)
74 
75  ELSE
76  tmpdif=0.1*float(iptgrf(ix,iy,iz+1)-
77  $ iptgrf(ix,iy,iz-1))
78  tmpavg=0.05*float(iptgrf(ix,iy,iz+1)+
79  $ iptgrf(ix,iy,iz-1))
80  iudif=iugraf(ix,iy,iz+1)-iugraf(ix,iy,iz-1)
81  ivdif=ivgraf(ix,iy,iz+1)-ivgraf(ix,iy,iz-1)
82  END IF
83 C
84 C SQUARE SPEED DIFFERENCE & CONVERT FROM (CM/S)**2 TO (M/S)**2
85 C
86  sqdif=float(iudif**2)+float(ivdif**2)
87  sqdif=1.0e-4*sqdif
88 C
89 C NOW GET BRUNT VAISALA PERIOD AND BULK RICHARDSON NUMBER
90 C
91  ibvgrf(ix,iy,iz)=nint(bvperd(htdif,tmpdif,tmpavg))
92  IF (ibvgrf(ix,iy,iz) .GT. 900)
93  $ ibvgrf(ix,iy,iz)=900
94  irngrf(ix,iy,iz)=
95  $ nint(1000.0*bulkri(htdif,tmpdif,tmpavg,sqdif))
96  END IF
97 C
98 140 CONTINUE
99 160 CONTINUE
100 180 CONTINUE
101 C
102  RETURN
103 C
104  END
105 C
106 C******************************************************************
107  REAL FUNCTION bvperd (HTDIF,TMPDIF,TMPAVG)
108 C******************************************************************
109 C
110 C RETURNS INVERSE OF BRUNT-VASALA FREQUENCY, CALCULATED FROM
111 C
112 C TMPAVG = AVERAGE POTENT. TEMP IN LAYER
113 C TMPDIF = POTENTIAL TEMPERATURE DIFFERENCE OVER HTDIF
114 C HTDIF = THICKNESS OF LAYER
115 C GRAV = GRAVITATIONAL ACCELERATION
116 C
117 C POTENTIAL TEMP DIFFERENCE MUST BE > 0. IF LESS, SET PERIOD
118 C TO 999 SEC.
119 C
120 C FLUDWIG 10/02
121 C
122  parameter(grav=9.8)
123 C
124  REAL HTDIF,TMPDIF,TMPAVG,BV2
125 C
126  IF (tmpdif.GT. 0.0) THEN
127  bv2=htdif*tmpavg/(grav*tmpdif)
128  bvperd=sqrt(bv2)
129  ELSE
130  bvperd=999.
131  END IF
132 C
133  RETURN
134 C
135  END
136 C
137 C******************************************************************
138  REAL FUNCTION bulkri(HTDIF,TMPDIF,TMPAVG,SQDIF)
139 C******************************************************************
140 C
141 C RETURNS BULK RICHARDSON NUMBER, CALCULATED FROM
142 C
143 C TMPAVG = AVERAGE POTENT. TEMP IN LAYER
144 C SQDIF = DU**2 + DV**2 -- SQUAREDWND DIFFERENCE OVER HTDIF
145 C TMPDIF = POTENTIAL TEMPERATURE DIFFERENCE OVER HTDIF
146 C HTDIF = THICKNESS OF LAYER
147 C GRAV = GRAVITATIONAL ACCELERATION
148 C
149 C -0.99 RETURNED FOR ZERO WIND SHEAR.
150 C
151 C FLUDWIG 10/02
152 C
153  parameter(grav=9.8)
154 C
155  REAL HTDIF,TMPDIF,TMPAVG,SQDIF
156 C
157  IF (tmpavg*sqdif .GT. 0.0) THEN
158  bulkri=(grav*tmpdif*htdif)/(tmpavg*sqdif)
159  IF (bulkri .GT. 99.0) bulkri=99.0
160  ELSE
161  bulkri=-0.002
162  END IF
163 C
164  RETURN
165 C
166  END
167 
subroutine getrich
Definition: richardson.f:3
real function bvperd(HTDIF, TMPDIF, TMPAVG)
Definition: richardson.f:108
real function bulkri(HTDIF, TMPDIF, TMPAVG, SQDIF)
Definition: richardson.f:139