@@ -34,6 +34,7 @@ SUBROUTINE read_openfoam_bdy_coords( whichbdy , fname )
34
34
!exec
35
35
36
36
ierr = 0
37
+ write (* ,* ) ' Processing body ' ,whichbdy,' : ' ,fname
37
38
IF ( wrf_dm_on_monitor()) THEN
38
39
OPEN ( 75 , file= TRIM (fname), form= " formatted" , status= " old" , err= 2222 )
39
40
! count up the number of lines in the file
@@ -89,6 +90,7 @@ SUBROUTINE precompute_openfoam_points(ibdy,xlat,xlong,ids,ide,jds,jde,ips,ipe,jp
89
90
LOGICAL incache
90
91
91
92
IF ( ALLOCATED(bdy(ibdy)%point) ) THEN
93
+ write (* ,* ) ' Precomputing points for body ' ,ibdy
92
94
incache= .TRUE.
93
95
WRITE (bdy_cache_name,' ("bdy_cache_",I1)' )ibdy
94
96
OPEN (75 ,file= TRIM (bdy_cache_name),form= " formatted" ,status= " old" ,ERR= 9911 )
@@ -163,19 +165,20 @@ SUBROUTINE check_inflow_on_boundary( ibdy, z,u,v, costheta,sintheta, is,ie,js,je
163
165
REAL :: lat_min,lat_max,lon_min,lon_max,delta_lat,delta_lon
164
166
REAL :: normal(3 )
165
167
LOGICAL :: check_column(is:ie,js:je)
168
+ INTEGER :: check_imin,check_imax,check_jmin,check_jmax
166
169
INTEGER :: cells_per_level(ks:ke), cells_checked_total
167
170
REAL :: unorm_mag, unorm_min, unorm_max, inflow_mean
168
- REAL :: ucorr, vcorr, wdir
171
+ REAL :: ucorr, vcorr, wmag, wdir
169
172
REAL , DIMENSION (ks:ke) :: unorm_mean, z_mean
170
173
REAL , DIMENSION (ks:ke) :: wind_mag, wind_dir
171
- REAL :: wind_dir_min, wind_dir_max
174
+ REAL , DIMENSION (ks:ke) :: wind_dir_min, wind_dir_max
172
175
CHARACTER (len= 20 ) :: fmtstr
173
176
174
177
lat_min = HUGE (lat_min)
175
178
lon_min = HUGE (lon_min)
176
179
lat_max = - HUGE (lat_max)
177
180
lon_max = - HUGE (lon_max)
178
- DO ipoint = 2 ,bdy(ibdy)%npoints
181
+ DO ipoint = 1 ,bdy(ibdy)%npoints
179
182
lat_min = MIN (lat_min, bdy(ibdy)%point(ipoint)%lat)
180
183
lon_min = MIN (lon_min, bdy(ibdy)%point(ipoint)%lon)
181
184
lat_max = MAX (lat_max, bdy(ibdy)%point(ipoint)%lat)
@@ -195,17 +198,25 @@ SUBROUTINE check_inflow_on_boundary( ibdy, z,u,v, costheta,sintheta, is,ie,js,je
195
198
196
199
! Identify cells that will be used for interpolating to OpenFOAM points
197
200
check_column(:,:) = .FALSE.
201
+ check_imin = HUGE (check_imin)
202
+ check_jmin = HUGE (check_jmin)
203
+ check_imax = - HUGE (check_imax)
204
+ check_jmax = - HUGE (check_jmax)
198
205
DO ipoint = 1 ,bdy(ibdy)%npoints
199
206
j = bdy(ibdy)%point(ipoint)%j ! precomputed jcoord of cell center corresponding to lat
200
207
i = bdy(ibdy)%point(ipoint)%i ! precomputed icoord of cell center corresponding to lon
201
208
check_column(i,j) = .TRUE.
209
+ check_imin = MIN (check_imin, i)
210
+ check_jmin = MIN (check_jmin, j)
211
+ check_imax = MAX (check_imax, i)
212
+ check_jmax = MAX (check_jmax, j)
202
213
END DO
203
214
204
215
! Check all identified cells
205
216
unorm_min = HUGE (unorm_min)
206
217
unorm_max = - HUGE (unorm_max)
207
- wind_dir_min = HUGE (wind_dir_min )
208
- wind_dir_max = - HUGE (wind_dir_max )
218
+ wind_dir_min(:) = HUGE (wind_dir )
219
+ wind_dir_max(:) = - HUGE (wind_dir )
209
220
inflow_mean = 0.0
210
221
z_mean(:) = 0.0
211
222
unorm_mean(:) = 0.0
@@ -223,10 +234,11 @@ SUBROUTINE check_inflow_on_boundary( ibdy, z,u,v, costheta,sintheta, is,ie,js,je
223
234
unorm_max = MAX (unorm_max, unorm_mag)
224
235
wdir = ATAN2 (vcorr,ucorr)
225
236
!wdir = 90.0 - wdir* 57.29577951308232 ! wind in + x (from west) is " 0 deg"
237
+ !IF ( wdir < 0.0 ) wdir = wdir + 360.0
226
238
wdir = 270.0 - wdir* 57.29577951308232 ! wind in + x (from west) is 270 deg
227
- wind_dir_min = MIN (wind_dir_min, wdir)
228
- wind_dir_max = MAX (wind_dir_max, wdir)
229
- IF ( wdir < 0 ) wdir = wdir + 360.0
239
+ wind_dir_min(k) = MIN (wind_dir_min(k) , wdir)
240
+ wind_dir_max(k) = MAX (wind_dir_max(k) , wdir)
241
+ IF ( wdir > = 360. 0 ) wdir = wdir - 360.0
230
242
z_mean(k) = z_mean(k) + z(i,j,k)
231
243
unorm_mean(k) = unorm_mean(k) + unorm_mag
232
244
wind_mag(k) = wind_mag(k) + SQRT (ucorr* ucorr + vcorr* vcorr)
@@ -243,8 +255,8 @@ SUBROUTINE check_inflow_on_boundary( ibdy, z,u,v, costheta,sintheta, is,ie,js,je
243
255
wind_mag(k) = wind_mag(k) / cells_per_level(k)
244
256
wind_dir(k) = wind_dir(k) / cells_per_level(k)
245
257
END DO
246
- IF ( wind_dir_min < 0 ) wind_dir_min = wind_dir_min + 360.0
247
- IF ( wind_dir_max < 0 ) wind_dir_max = wind_dir_max + 360.0
258
+ ! IF ( wind_dir_min < 0 ) wind_dir_min = wind_dir_min + 360.0
259
+ ! IF ( wind_dir_max < 0 ) wind_dir_max = wind_dir_max + 360.0
248
260
cells_checked_total = SUM ( cells_per_level )
249
261
inflow_mean = inflow_mean / cells_checked_total
250
262
WRITE (* ,' (a,3(f12.5,x))' ) ' inflow fraction, unorm min, unorm max=' ,inflow_mean,unorm_min,unorm_max
@@ -255,7 +267,10 @@ SUBROUTINE check_inflow_on_boundary( ibdy, z,u,v, costheta,sintheta, is,ie,js,je
255
267
WRITE (* ,fmtstr) ' unorm mean by height:' ,unorm_mean
256
268
WRITE (* ,fmtstr) ' wind mag by height:' ,wind_mag
257
269
WRITE (* ,fmtstr) ' wind dir by height:' ,wind_dir
258
- WRITE (* ,' (a,2(f12.5,x))' ) ' wind dir min,max=' ,wind_dir_min,wind_dir_max
270
+ WRITE (* ,' (a,2(f12.5,x))' ) ' wind dir min,max=' ,MINVAL (wind_dir_min),MAXVAL (wind_dir_max)
271
+ WRITE (* ,fmtstr) ' min wind dir by height:' ,wind_dir_min
272
+ WRITE (* ,fmtstr) ' max wind dir by height:' ,wind_dir_max
273
+ WRITE (* ,* ) ' checked range of cells in WRF i:' ,check_imin,check_imax,' j:' ,check_jmin,check_jmax
259
274
260
275
END SUBROUTINE check_inflow_on_boundary
261
276
0 commit comments