Skip to content

Commit e9c8031

Browse files
committedApr 5, 2018
Update wind direction estimation during WRF extraction
1 parent 9b2609d commit e9c8031

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed
 

‎tools/WRFextraction/module_openfoam_bc.F

+26-11
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ SUBROUTINE read_openfoam_bdy_coords( whichbdy , fname )
3434
!exec
3535

3636
ierr = 0
37+
write(*,*) 'Processing body ',whichbdy,' : ',fname
3738
IF ( wrf_dm_on_monitor()) THEN
3839
OPEN ( 75, file=TRIM(fname), form="formatted", status="old", err=2222 )
3940
! 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
8990
LOGICAL incache
9091

9192
IF ( ALLOCATED(bdy(ibdy)%point) ) THEN
93+
write(*,*) 'Precomputing points for body ',ibdy
9294
incache=.TRUE.
9395
WRITE(bdy_cache_name,'("bdy_cache_",I1)')ibdy
9496
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
163165
REAL :: lat_min,lat_max,lon_min,lon_max,delta_lat,delta_lon
164166
REAL :: normal(3)
165167
LOGICAL :: check_column(is:ie,js:je)
168+
INTEGER :: check_imin,check_imax,check_jmin,check_jmax
166169
INTEGER :: cells_per_level(ks:ke), cells_checked_total
167170
REAL :: unorm_mag, unorm_min, unorm_max, inflow_mean
168-
REAL :: ucorr, vcorr, wdir
171+
REAL :: ucorr, vcorr, wmag, wdir
169172
REAL, DIMENSION(ks:ke) :: unorm_mean, z_mean
170173
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
172175
CHARACTER(len=20) :: fmtstr
173176

174177
lat_min = HUGE(lat_min)
175178
lon_min = HUGE(lon_min)
176179
lat_max = -HUGE(lat_max)
177180
lon_max = -HUGE(lon_max)
178-
DO ipoint = 2,bdy(ibdy)%npoints
181+
DO ipoint = 1,bdy(ibdy)%npoints
179182
lat_min = MIN(lat_min, bdy(ibdy)%point(ipoint)%lat)
180183
lon_min = MIN(lon_min, bdy(ibdy)%point(ipoint)%lon)
181184
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
195198

196199
! Identify cells that will be used for interpolating to OpenFOAM points
197200
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)
198205
DO ipoint = 1,bdy(ibdy)%npoints
199206
j = bdy(ibdy)%point(ipoint)%j ! precomputed jcoord of cell center corresponding to lat
200207
i = bdy(ibdy)%point(ipoint)%i ! precomputed icoord of cell center corresponding to lon
201208
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)
202213
END DO
203214

204215
! Check all identified cells
205216
unorm_min = HUGE(unorm_min)
206217
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)
209220
inflow_mean = 0.0
210221
z_mean(:) = 0.0
211222
unorm_mean(:) = 0.0
@@ -223,10 +234,11 @@ SUBROUTINE check_inflow_on_boundary( ibdy, z,u,v, costheta,sintheta, is,ie,js,je
223234
unorm_max = MAX(unorm_max, unorm_mag)
224235
wdir = ATAN2(vcorr,ucorr)
225236
!wdir = 90.0 - wdir*57.29577951308232 ! wind in +x (from west) is "0 deg"
237+
!IF ( wdir < 0.0 ) wdir = wdir + 360.0
226238
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
230242
z_mean(k) = z_mean(k) + z(i,j,k)
231243
unorm_mean(k) = unorm_mean(k) + unorm_mag
232244
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
243255
wind_mag(k) = wind_mag(k) / cells_per_level(k)
244256
wind_dir(k) = wind_dir(k) / cells_per_level(k)
245257
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
248260
cells_checked_total = SUM( cells_per_level )
249261
inflow_mean = inflow_mean / cells_checked_total
250262
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
255267
WRITE(*,fmtstr) ' unorm mean by height:',unorm_mean
256268
WRITE(*,fmtstr) ' wind mag by height:',wind_mag
257269
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
259274

260275
END SUBROUTINE check_inflow_on_boundary
261276

‎tools/WRFextraction/wrftoof.F

+4
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ PROGRAM toof
271271
zcol = 0.
272272
hfx = 0.
273273

274+
write(*,*) 'Getting variables from solution file'
274275
CALL getvar_real(ctrl,ncid,nfiles,'PH' ,ph ,it,3,ips,ipe-1,jps,jpe-1,kps,kpe )
275276
CALL getvar_real(ctrl,ncid,nfiles,'PHB',phb,it,3,ips,ipe-1,jps,jpe-1,kps,kpe )
276277
CALL getvar_real(ctrl,ncid,nfiles,'W' ,w ,it,3,ips,ipe-1,jps,jpe-1,kps,kpe )
@@ -283,6 +284,7 @@ PROGRAM toof
283284

284285
have_hfx = .FALSE. ! false value going in says this field is required
285286
CALL getvar_real(have_hfx,ncid,nfiles,'HFX',hfx,it,3,ips,ipe-1,jps,jpe-1,1,1)
287+
write(*,*) 'Have heat flux: ',have_hfx
286288

287289
zz = (ph + phb )/g
288290
z = (zz(:,:,kps:kpe-1) + zz(:,:,kps+1:kpe))*0.5
@@ -451,6 +453,8 @@ PROGRAM toof
451453
ENDIF
452454
ENDDO
453455

456+
write(*,*) 'End.'
457+
454458
END PROGRAM toof
455459

456460
REAL FUNCTION finterp( f, zcol, lat, lon, kz, of_lat, of_lon, of_lz, i, j, is,ie,js,je,ks,ke,ims,ime,jms,jme )

0 commit comments

Comments
 (0)
Please sign in to comment.