module_pbl_driver.F
References to this file elsewhere.
1 !WRF:MEDIATION_LAYER:PHYSICS
2 !
3
4 MODULE module_pbl_driver
5 CONTAINS
6
7 !------------------------------------------------------------------
8 SUBROUTINE pbl_driver( &
9 itimestep,dt,u_frame,v_frame &
10 ,rublten,rvblten,rthblten &
11 ,tsk,xland,znt,ht &
12 ,ust,pblh,hfx,qfx,grdflx &
13 ,u_phy,v_phy,th_phy,rho &
14 ,p_phy,pi_phy,p8w,t_phy,dz8w,z &
15 ,tke_myj,el_myj,exch_h,akhs,akms &
16 ,thz0,qz0,uz0,vz0,qsfc &
17 ,lowlyr &
18 ,psim,psih,gz1oz0, wspd,br,chklowq &
19 ,bl_pbl_physics, ra_lw_physics, dx &
20 ,stepbl,warm_rain &
21 ,kpbl,ct,lh,snow,xice &
22 ,ids,ide, jds,jde, kds,kde &
23 ,ims,ime, jms,jme, kms,kme &
24 ,i_start,i_end, j_start,j_end, kts,kte, num_tiles &
25 ! Optional
26 ,hol, mol, regime &
27 ! Optional moisture tracers
28 ,qv_curr, qc_curr, qr_curr &
29 ,qi_curr, qs_curr, qg_curr &
30 ,rqvblten,rqcblten,rqiblten &
31 ,rqrblten,rqsblten,rqgblten &
32 ! Optional moisture tracer flags
33 ,f_qv,f_qc,f_qr &
34 ,f_qi,f_qs,f_qg &
35 )
36 !------------------------------------------------------------------
37 USE module_state_description, ONLY : &
38 YSUSCHEME,MRFSCHEME,GFSSCHEME,MYJPBLSCHEME
39
40 USE module_model_constants
41
42 ! *** add new modules of schemes here
43
44 USE module_bl_myjpbl
45 USE module_bl_ysu
46 USE module_bl_mrf
47 USE module_bl_gfs
48
49 ! This driver calls subroutines for the PBL parameterizations.
50 !
51 ! pbl scheme:
52 ! 1. ysupbl
53 ! 2. myjpbl
54 ! 99. mrfpbl
55 !
56 !------------------------------------------------------------------
57 IMPLICIT NONE
58 !======================================================================
59 ! Grid structure in physics part of WRF
60 !----------------------------------------------------------------------
61 ! The horizontal velocities used in the physics are unstaggered
62 ! relative to temperature/moisture variables. All predicted
63 ! variables are carried at half levels except w, which is at full
64 ! levels. Some arrays with names (*8w) are at w (full) levels.
65 !
66 !----------------------------------------------------------------------
67 ! In WRF, kms (smallest number) is the bottom level and kme (largest
68 ! number) is the top level. In your scheme, if 1 is at the top level,
69 ! then you have to reverse the order in the k direction.
70 !
71 ! kme - half level (no data at this level)
72 ! kme ----- full level
73 ! kme-1 - half level
74 ! kme-1 ----- full level
75 ! .
76 ! .
77 ! .
78 ! kms+2 - half level
79 ! kms+2 ----- full level
80 ! kms+1 - half level
81 ! kms+1 ----- full level
82 ! kms - half level
83 ! kms ----- full level
84 !
85 !======================================================================
86 ! Definitions
87 !-----------
88 ! Rho_d dry density (kg/m^3)
89 ! Theta_m moist potential temperature (K)
90 ! Qv water vapor mixing ratio (kg/kg)
91 ! Qc cloud water mixing ratio (kg/kg)
92 ! Qr rain water mixing ratio (kg/kg)
93 ! Qi cloud ice mixing ratio (kg/kg)
94 ! Qs snow mixing ratio (kg/kg)
95 !-----------------------------------------------------------------
96 !-- RUBLTEN U tendency due to
97 ! PBL parameterization (m/s^2)
98 !-- RVBLTEN V tendency due to
99 ! PBL parameterization (m/s^2)
100 !-- RTHBLTEN Theta tendency due to
101 ! PBL parameterization (K/s)
102 !-- RQVBLTEN Qv tendency due to
103 ! PBL parameterization (kg/kg/s)
104 !-- RQCBLTEN Qc tendency due to
105 ! PBL parameterization (kg/kg/s)
106 !-- RQIBLTEN Qi tendency due to
107 ! PBL parameterization (kg/kg/s)
108 !-- itimestep number of time steps
109 !-- GLW downward long wave flux at ground surface (W/m^2)
110 !-- GSW downward short wave flux at ground surface (W/m^2)
111 !-- EMISS surface emissivity (between 0 and 1)
112 !-- TSK surface temperature (K)
113 !-- TMN soil temperature at lower boundary (K)
114 !-- XLAND land mask (1 for land, 2 for water)
115 !-- ZNT roughness length (m)
116 !-- MAVAIL surface moisture availability (between 0 and 1)
117 !-- UST u* in similarity theory (m/s)
118 !-- MOL T* (similarity theory) (K)
119 !-- HOL PBL height over Monin-Obukhov length
120 !-- PBLH PBL height (m)
121 !-- CAPG heat capacity for soil (J/K/m^3)
122 !-- THC thermal inertia (Cal/cm/K/s^0.5)
123 !-- SNOWC flag indicating snow coverage (1 for snow cover)
124 !-- HFX upward heat flux at the surface (W/m^2)
125 !-- QFX upward moisture flux at the surface (kg/m^2/s)
126 !-- REGIME flag indicating PBL regime (stable, unstable, etc.)
127 !-- tke_myj turbulence kinetic energy from Mellor-Yamada-Janjic (MYJ) (m^2/s^2)
128 !-- el_myj mixing length from Mellor-Yamada-Janjic (MYJ) (m)
129 !-- akhs sfc exchange coefficient of heat/moisture from MYJ
130 !-- akms sfc exchange coefficient of momentum from MYJ
131 !-- thz0 potential temperature at roughness length (K)
132 !-- uz0 u wind component at roughness length (m/s)
133 !-- vz0 v wind component at roughness length (m/s)
134 !-- qsfc specific humidity at lower boundary (kg/kg)
135 !-- th2 diagnostic 2-m theta from surface layer and lsm
136 !-- t2 diagnostic 2-m temperature from surface layer and lsm
137 !-- q2 diagnostic 2-m mixing ratio from surface layer and lsm
138 !-- lowlyr index of lowest model layer above ground
139 !-- rr dry air density (kg/m^3)
140 !-- u_phy u-velocity interpolated to theta points (m/s)
141 !-- v_phy v-velocity interpolated to theta points (m/s)
142 !-- th_phy potential temperature (K)
143 !-- p_phy pressure (Pa)
144 !-- pi_phy exner function (dimensionless)
145 !-- p8w pressure at full levels (Pa)
146 !-- t_phy temperature (K)
147 !-- dz8w dz between full levels (m)
148 !-- z height above sea level (m)
149 !-- DX horizontal space interval (m)
150 !-- DT time step (second)
151 !-- n_moist number of moisture species
152 !-- PSFC pressure at the surface (Pa)
153 !-- TSLB
154 !-- ZS
155 !-- DZS
156 !-- num_soil_layers number of soil layer
157 !-- IFSNOW ifsnow=1 for snow-cover effects
158 !
159 !-- P_QV species index for water vapor
160 !-- P_QC species index for cloud water
161 !-- P_QR species index for rain water
162 !-- P_QI species index for cloud ice
163 !-- P_QS species index for snow
164 !-- P_QG species index for graupel
165 !-- ids start index for i in domain
166 !-- ide end index for i in domain
167 !-- jds start index for j in domain
168 !-- jde end index for j in domain
169 !-- kds start index for k in domain
170 !-- kde end index for k in domain
171 !-- ims start index for i in memory
172 !-- ime end index for i in memory
173 !-- jms start index for j in memory
174 !-- jme end index for j in memory
175 !-- kms start index for k in memory
176 !-- kme end index for k in memory
177 !-- jts start index for j in tile
178 !-- jte end index for j in tile
179 !-- kts start index for k in tile
180 !-- kte end index for k in tile
181 !
182 !******************************************************************
183 !------------------------------------------------------------------
184 !
185
186
187 INTEGER, INTENT(IN ) :: bl_pbl_physics, ra_lw_physics
188
189 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
190 ims,ime, jms,jme, kms,kme, &
191 kts,kte, num_tiles
192
193 INTEGER, DIMENSION(num_tiles), INTENT(IN) :: &
194 & i_start,i_end,j_start,j_end
195
196 INTEGER, INTENT(IN ) :: itimestep,STEPBL
197 INTEGER, DIMENSION( ims:ime , jms:jme ), &
198 INTENT(IN ) :: LOWLYR
199 !
200 LOGICAL, INTENT(IN ) :: warm_rain
201 !
202 REAL, INTENT(IN ) :: DT,DX
203
204
205 !
206 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
207 INTENT(IN ) :: p_phy, &
208 pi_phy, &
209 p8w, &
210 rho, &
211 t_phy, &
212 u_phy, &
213 v_phy, &
214 dz8w, &
215 z, &
216 th_phy
217 !
218 !
219 REAL, DIMENSION( ims:ime , jms:jme ), &
220 INTENT(IN ) :: XLAND, &
221 HT, &
222 PSIM, &
223 PSIH, &
224 GZ1OZ0, &
225 BR, &
226 CHKLOWQ
227 !
228 REAL, DIMENSION( ims:ime, jms:jme ) , &
229 INTENT(INOUT) :: TSK, &
230 UST, &
231 PBLH, &
232 HFX, &
233 QFX, &
234 ZNT, &
235 QSFC, &
236 AKHS, &
237 AKMS, &
238 QZ0, &
239 THZ0, &
240 UZ0, &
241 VZ0, &
242 CT, &
243 GRDFLX , &
244 WSPD
245
246 !
247 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
248 INTENT(INOUT) :: RUBLTEN, &
249 RVBLTEN, &
250 RTHBLTEN, &
251 EXCH_H,TKE_MYJ
252 !
253 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
254 INTENT(OUT) :: EL_MYJ
255
256 REAL , INTENT(IN ) :: u_frame, &
257 v_frame
258 !
259
260 INTEGER, DIMENSION( ims:ime , jms:jme ), &
261 INTENT(INOUT) :: KPBL
262
263 REAL, DIMENSION( ims:ime , jms:jme ), &
264 INTENT(IN) :: XICE, SNOW, LH
265
266 !
267 ! Optional
268 !
269 !
270 ! Flags relating to the optional tendency arrays declared above
271 ! Models that carry the optional tendencies will provdide the
272 ! optional arguments at compile time; these flags all the model
273 ! to determine at run-time whether a particular tracer is in
274 ! use or not.
275 !
276 LOGICAL, INTENT(IN), OPTIONAL :: &
277 f_qv &
278 ,f_qc &
279 ,f_qr &
280 ,f_qi &
281 ,f_qs &
282 ,f_qg
283
284 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
285 OPTIONAL, INTENT(INOUT) :: &
286 ! optional moisture tracers
287 ! 2 time levels; if only one then use CURR
288 qv_curr, qc_curr, qr_curr &
289 ,qi_curr, qs_curr, qg_curr &
290 ,rqvblten,rqcblten,rqrblten &
291 ,rqiblten,rqsblten,rqgblten
292
293 REAL, DIMENSION( ims:ime, jms:jme ) , &
294 OPTIONAL , &
295 INTENT(INOUT) :: HOL, &
296 MOL, &
297 REGIME
298
299 ! LOCAL VAR
300
301 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) ::v_phytmp
302 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) ::u_phytmp
303
304 REAL, DIMENSION( ims:ime, jms:jme ) :: TSKOLD, &
305 USTOLD, &
306 ZNTOLD, &
307 ZOL, &
308 PSFC
309
310 !
311
312 REAL :: DTMIN,DTBL
313 !
314 INTEGER :: i,J,K,NK,jj,ij,its,ite,jts,jte
315 LOGICAL :: radiation
316 LOGICAL :: flag_qv, flag_qc, flag_qr, flag_qi, flag_qs, flag_qg
317 CHARACTER*256 :: message
318
319 !------------------------------------------------------------------
320 !
321
322 flag_qv = .FALSE. ; IF ( PRESENT( F_QV ) ) flag_qv = F_QV
323 flag_qc = .FALSE. ; IF ( PRESENT( F_QC ) ) flag_qc = F_QC
324 flag_qr = .FALSE. ; IF ( PRESENT( F_QR ) ) flag_qr = F_QR
325 flag_qi = .FALSE. ; IF ( PRESENT( F_QI ) ) flag_qi = F_QI
326 flag_qs = .FALSE. ; IF ( PRESENT( F_QS ) ) flag_qs = F_QS
327 flag_qg = .FALSE. ; IF ( PRESENT( F_QG ) ) flag_qg = F_QG
328
329 !print *,flag_qv, flag_qc, flag_qr, flag_qi, flag_qs, flag_qg,' flag_qv, flag_qc, flag_qr, flag_qi, flag_qs, flag_qg'
330 !print *,f_qv, f_qc, f_qr, f_qi, f_qs, f_qg,' f_qv, f_qc, f_qr, f_qi, f_qs, f_qg'
331
332 if (bl_pbl_physics .eq. 0) return
333 ! RAINBL in mm (Accumulation between PBL calls)
334
335
336 IF (itimestep .eq. 1 .or. mod(itimestep,STEPBL) .eq. 0) THEN
337
338 radiation = .false.
339 IF (ra_lw_physics .gt. 0) radiation = .true.
340
341 !----
342 ! CALCULATE CONSTANT
343
344 DTMIN=DT/60.
345 ! PBL schemes need PBL time step for updates
346 DTBL=DT*STEPBL
347
348 ! SAVE OLD VALUES
349
350 !$OMP PARALLEL DO &
351 !$OMP PRIVATE ( ij,i,j,k )
352 DO ij = 1 , num_tiles
353 DO j=j_start(ij),j_end(ij)
354 DO i=i_start(ij),i_end(ij)
355 TSKOLD(i,j)=TSK(i,j)
356 USTOLD(i,j)=UST(i,j)
357 ZNTOLD(i,j)=ZNT(i,j)
358
359 ! REVERSE ORDER IN THE VERTICAL DIRECTION
360
361 ! testing change later
362
363 DO k=kts,kte
364 v_phytmp(i,k,j)=v_phy(i,k,j)+v_frame
365 u_phytmp(i,k,j)=u_phy(i,k,j)+u_frame
366 ENDDO
367
368 ! PSFC : in Pa
369
370 PSFC(I,J)=p8w(I,kms,J)
371
372 DO k=kts,min(kte+1,kde)
373 RTHBLTEN(I,K,J)=0.
374 RUBLTEN(I,K,J)=0.
375 RVBLTEN(I,K,J)=0.
376 IF ( PRESENT( RQCBLTEN )) RQCBLTEN(I,K,J)=0.
377 IF ( PRESENT( RQVBLTEN )) RQVBLTEN(I,K,J)=0.
378 ENDDO
379
380 IF (flag_QI .AND. PRESENT(RQIBLTEN) ) THEN
381 DO k=kts,min(kte+1,kde)
382 RQIBLTEN(I,K,J)=0.
383 ENDDO
384 ENDIF
385 ENDDO
386 ENDDO
387
388 ENDDO
389 !$OMP END PARALLEL DO
390 !
391 !$OMP PARALLEL DO &
392 !$OMP PRIVATE ( ij, i,j,k, its, ite, jts, jte )
393 DO ij = 1 , num_tiles
394
395 its = i_start(ij)
396 ite = i_end(ij)
397 jts = j_start(ij)
398 jte = j_end(ij)
399
400 pbl_select: SELECT CASE(bl_pbl_physics)
401
402 CASE (YSUSCHEME)
403 CALL wrf_debug(100,'in YSU PBL')
404 IF ( PRESENT( qv_curr ) .AND. PRESENT( qc_curr ) .AND. &
405 PRESENT( qi_curr ) .AND. &
406 PRESENT( rqvblten ) .AND. PRESENT( rqcblten ) .AND. &
407 PRESENT( rqiblten ) .AND. &
408 PRESENT( hol ) ) THEN
409 CALL ysu( &
410 U3D=u_phytmp,V3D=v_phytmp,TH3D=th_phy,T3D=t_phy &
411 ,QV3D=qv_curr,QC3D=qc_curr,QI3D=qi_curr &
412 ,P3D=p_phy,PI3D=pi_phy &
413 ,RUBLTEN=rublten,RVBLTEN=rvblten &
414 ,RTHBLTEN=rthblten,RQVBLTEN=rqvblten &
415 ,RQCBLTEN=rqcblten,RQIBLTEN=rqiblten &
416 ,FLAG_QI=flag_qi &
417 ,CP=cp,G=g,ROVCP=rcp,RD=r_D,ROVG=rovg &
418 ,DZ8W=dz8w,Z=z,XLV=XLV,RV=r_v,PSFC=PSFC &
419 ,ZNT=znt,UST=ust,ZOL=zol,HOL=hol,HPBL=pblh &
420 ,PSIM=psim,PSIH=psih,XLAND=xland &
421 ,HFX=hfx,QFX=qfx,TSK=tskold,GZ1OZ0=gz1oz0 &
422 ,WSPD=wspd,BR=br,DT=dtbl,DTMIN=dtmin,KPBL2D=kpbl &
423 ,SVP1=svp1,SVP2=svp2,SVP3=svp3,SVPT0=svpt0 &
424 ,EP1=ep_1,EP2=ep_2,KARMAN=karman,EOMEG=eomeg &
425 ,STBOLT=stbolt,EXCH_H=exch_h,REGIME=regime &
426 ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
427 ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
428 ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
429 )
430 ELSE
431 CALL wrf_error_fatal('Lack arguments to call YSU pbl')
432 ENDIF
433
434 CASE (MRFSCHEME)
435 IF ( PRESENT( qv_curr ) .AND. PRESENT( qc_curr ) .AND. &
436 PRESENT( rqvblten ) .AND. PRESENT( rqcblten ) .AND. &
437 PRESENT( hol ) .AND. &
438 .TRUE. ) THEN
439
440 CALL wrf_debug(100,'in MRF')
441 CALL mrf( &
442 U3D=u_phytmp,V3D=v_phytmp,TH3D=th_phy,T3D=t_phy &
443 ,QV3D=qv_curr &
444 ,QC3D=qc_curr &
445 ,QI3D=qi_curr &
446 ,P3D=p_phy,PI3D=pi_phy &
447 ,RUBLTEN=rublten,RVBLTEN=rvblten &
448 ,RTHBLTEN=rthblten,RQVBLTEN=rqvblten &
449 ,RQCBLTEN=rqcblten,RQIBLTEN=rqiblten &
450 ,CP=cp,G=g,ROVCP=rcp,R=r_d,ROVG=rovg &
451 ,DZ8W=dz8w,Z=z,XLV=xlv,RV=r_v,PSFC=psfc &
452 ,ZNT=znt,UST=ust,ZOL=zol,HOL=hol &
453 ,PBL=pblh,PSIM=psim,PSIH=psih &
454 ,XLAND=xland,HFX=hfx,QFX=qfx,TSK=tskold &
455 ,GZ1OZ0=gz1oz0,WSPD=wspd,BR=br &
456 ,DT=dtbl,DTMIN=dtmin,KPBL2D=kpbl &
457 ,SVP1=svp1,SVP2=svp2,SVP3=svp3,SVPT0=svpt0 &
458 ,EP1=ep_1,EP2=ep_2,KARMAN=karman,EOMEG=eomeg &
459 ,STBOLT=stbolt,REGIME=regime &
460 ,FLAG_QI=flag_qi &
461 ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
462 ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
463 ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
464 )
465 ELSE
466 CALL wrf_error_fatal('Lack arguments to call MRF pbl')
467 ENDIF
468
469 CASE (GFSSCHEME)
470 IF ( PRESENT( qv_curr ) .AND. PRESENT( qc_curr ) .AND. &
471 PRESENT( rqvblten ) .AND. PRESENT( rqcblten ) .AND. &
472 .TRUE. ) THEN
473 CALL wrf_debug(100,'in GFS')
474 CALL bl_gfs( &
475 U3D=u_phytmp,V3D=v_phytmp &
476 ,TH3D=th_phy,T3D=t_phy &
477 ,QV3D=qv_curr,QC3D=qc_curr,QI3D=qi_curr &
478 ,P3D=p_phy,PI3D=pi_phy &
479 ,RUBLTEN=rublten,RVBLTEN=rvblten,RTHBLTEN=rthblten &
480 ,RQVBLTEN=rqvblten,RQCBLTEN=rqcblten &
481 ,RQIBLTEN=rqiblten &
482 ,CP=cp,G=g,ROVCP=rcp,R=r_d,ROVG=rovg,FLAG_QI=flag_qi &
483 ,DZ8W=dz8w,z=z,PSFC=psfc &
484 ,UST=ust,PBL=pblh,PSIM=psim,PSIH=psih &
485 ,HFX=hfx,QFX=qfx,TSK=tskold,GZ1OZ0=gz1oz0 &
486 ,WSPD=wspd,BR=br &
487 ,DT=dtbl,KPBL2D=kpbl,EP1=ep_1,KARMAN=karman &
488 ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
489 ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
490 ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
491 )
492 ELSE
493 CALL wrf_error_fatal('Lack arguments to call GFS pbl')
494 ENDIF
495
496 CASE (MYJPBLSCHEME)
497 IF ( PRESENT( qv_curr ) .AND. PRESENT( qc_curr ) .AND. &
498 PRESENT( rqvblten ) .AND. PRESENT( rqcblten ) .AND. &
499 .TRUE. ) THEN
500
501 CALL wrf_debug(100,'in MYJPBL')
502 CALL myjpbl( &
503 DT=dt,STEPBL=stepbl,HT=ht,DZ=dz8w &
504 ,PMID=p_phy,PINT=p8w,TH=th_phy,T=t_phy,EXNER=pi_phy &
505 ,QV=qv_curr, CWM=qc_curr &
506 ,U=u_phy,V=v_phy,RHO=rho &
507 ,TSK=tsk,QSFC=qsfc,CHKLOWQ=chklowq,THZ0=thz0 &
508 ,QZ0=qz0,UZ0=uz0,VZ0=vz0 &
509 ,LOWLYR=lowlyr &
510 ,XLAND=xland,SICE=xice,SNOW=snow &
511 ,TKE_MYJ=tke_myj,EXCH_H=exch_h,USTAR=ust,ZNT=znt &
512 ,EL_MYJ=el_myj,PBLH=pblh,KPBL=kpbl,CT=ct &
513 ,AKHS=akhs,AKMS=akms,ELFLX=lh &
514 ,RUBLTEN=rublten,RVBLTEN=rvblten,RTHBLTEN=rthblten &
515 ,RQVBLTEN=rqvblten,RQCBLTEN=rqcblten &
516 ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
517 ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
518 ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
519 )
520 ELSE
521 CALL wrf_error_fatal('Lack arguments to call MYJ pbl')
522 ENDIF
523
524 CASE DEFAULT
525
526 WRITE( message , * ) 'The pbl option does not exist: bl_pbl_physics = ', bl_pbl_physics
527 CALL wrf_error_fatal ( message )
528
529 END SELECT pbl_select
530
531 ENDDO
532 !$OMP END PARALLEL DO
533
534 ENDIF
535 !
536 END SUBROUTINE pbl_driver
537 END MODULE module_pbl_driver