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,u10,v10 &
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 U10, &
245 V10, &
246 WSPD
247
248 !
249 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
250 INTENT(INOUT) :: RUBLTEN, &
251 RVBLTEN, &
252 RTHBLTEN, &
253 EXCH_H,TKE_MYJ
254 !
255 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
256 INTENT(OUT) :: EL_MYJ
257
258 REAL , INTENT(IN ) :: u_frame, &
259 v_frame
260 !
261
262 INTEGER, DIMENSION( ims:ime , jms:jme ), &
263 INTENT(INOUT) :: KPBL
264
265 REAL, DIMENSION( ims:ime , jms:jme ), &
266 INTENT(IN) :: XICE, SNOW, LH
267
268 !
269 ! Optional
270 !
271 !
272 ! Flags relating to the optional tendency arrays declared above
273 ! Models that carry the optional tendencies will provdide the
274 ! optional arguments at compile time; these flags all the model
275 ! to determine at run-time whether a particular tracer is in
276 ! use or not.
277 !
278 LOGICAL, INTENT(IN), OPTIONAL :: &
279 f_qv &
280 ,f_qc &
281 ,f_qr &
282 ,f_qi &
283 ,f_qs &
284 ,f_qg
285
286 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
287 OPTIONAL, INTENT(INOUT) :: &
288 ! optional moisture tracers
289 ! 2 time levels; if only one then use CURR
290 qv_curr, qc_curr, qr_curr &
291 ,qi_curr, qs_curr, qg_curr &
292 ,rqvblten,rqcblten,rqrblten &
293 ,rqiblten,rqsblten,rqgblten
294
295 REAL, DIMENSION( ims:ime, jms:jme ) , &
296 OPTIONAL , &
297 INTENT(INOUT) :: HOL, &
298 MOL, &
299 REGIME
300
301 ! LOCAL VAR
302
303 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) ::v_phytmp
304 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) ::u_phytmp
305
306 REAL, DIMENSION( ims:ime, jms:jme ) :: TSKOLD, &
307 USTOLD, &
308 ZNTOLD, &
309 ZOL, &
310 PSFC
311
312 !
313
314 REAL :: DTMIN,DTBL
315 !
316 INTEGER :: i,J,K,NK,jj,ij,its,ite,jts,jte
317 LOGICAL :: radiation
318 LOGICAL :: flag_qv, flag_qc, flag_qr, flag_qi, flag_qs, flag_qg
319 CHARACTER*256 :: message
320
321 !------------------------------------------------------------------
322 !
323
324 flag_qv = .FALSE. ; IF ( PRESENT( F_QV ) ) flag_qv = F_QV
325 flag_qc = .FALSE. ; IF ( PRESENT( F_QC ) ) flag_qc = F_QC
326 flag_qr = .FALSE. ; IF ( PRESENT( F_QR ) ) flag_qr = F_QR
327 flag_qi = .FALSE. ; IF ( PRESENT( F_QI ) ) flag_qi = F_QI
328 flag_qs = .FALSE. ; IF ( PRESENT( F_QS ) ) flag_qs = F_QS
329 flag_qg = .FALSE. ; IF ( PRESENT( F_QG ) ) flag_qg = F_QG
330
331 !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'
332 !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'
333
334 if (bl_pbl_physics .eq. 0) return
335 ! RAINBL in mm (Accumulation between PBL calls)
336
337
338 IF (itimestep .eq. 1 .or. mod(itimestep,STEPBL) .eq. 0) THEN
339
340 radiation = .false.
341 IF (ra_lw_physics .gt. 0) radiation = .true.
342
343 !----
344 ! CALCULATE CONSTANT
345
346 DTMIN=DT/60.
347 ! PBL schemes need PBL time step for updates
348 DTBL=DT*STEPBL
349
350 ! SAVE OLD VALUES
351
352 !$OMP PARALLEL DO &
353 !$OMP PRIVATE ( ij,i,j,k )
354 DO ij = 1 , num_tiles
355 DO j=j_start(ij),j_end(ij)
356 DO i=i_start(ij),i_end(ij)
357 TSKOLD(i,j)=TSK(i,j)
358 USTOLD(i,j)=UST(i,j)
359 ZNTOLD(i,j)=ZNT(i,j)
360
361 ! REVERSE ORDER IN THE VERTICAL DIRECTION
362
363 ! testing change later
364
365 DO k=kts,kte
366 v_phytmp(i,k,j)=v_phy(i,k,j)+v_frame
367 u_phytmp(i,k,j)=u_phy(i,k,j)+u_frame
368 ENDDO
369
370 ! PSFC : in Pa
371
372 PSFC(I,J)=p8w(I,kms,J)
373
374 DO k=kts,min(kte+1,kde)
375 RTHBLTEN(I,K,J)=0.
376 RUBLTEN(I,K,J)=0.
377 RVBLTEN(I,K,J)=0.
378 IF ( PRESENT( RQCBLTEN )) RQCBLTEN(I,K,J)=0.
379 IF ( PRESENT( RQVBLTEN )) RQVBLTEN(I,K,J)=0.
380 ENDDO
381
382 IF (flag_QI .AND. PRESENT(RQIBLTEN) ) THEN
383 DO k=kts,min(kte+1,kde)
384 RQIBLTEN(I,K,J)=0.
385 ENDDO
386 ENDIF
387 ENDDO
388 ENDDO
389
390 ENDDO
391 !$OMP END PARALLEL DO
392 !
393 !$OMP PARALLEL DO &
394 !$OMP PRIVATE ( ij, i,j,k, its, ite, jts, jte )
395 DO ij = 1 , num_tiles
396
397 its = i_start(ij)
398 ite = i_end(ij)
399 jts = j_start(ij)
400 jte = j_end(ij)
401
402 pbl_select: SELECT CASE(bl_pbl_physics)
403
404 CASE (YSUSCHEME)
405 CALL wrf_debug(100,'in YSU PBL')
406 IF ( PRESENT( qv_curr ) .AND. PRESENT( qc_curr ) .AND. &
407 PRESENT( qi_curr ) .AND. &
408 PRESENT( rqvblten ) .AND. PRESENT( rqcblten ) .AND. &
409 PRESENT( rqiblten ) .AND. &
410 PRESENT( hol ) ) THEN
411 CALL ysu( &
412 U3D=u_phytmp,V3D=v_phytmp,TH3D=th_phy,T3D=t_phy &
413 ,QV3D=qv_curr,QC3D=qc_curr,QI3D=qi_curr &
414 ,P3D=p_phy,P3DI=p8w,PI3D=pi_phy &
415 ,RUBLTEN=rublten,RVBLTEN=rvblten &
416 ,RTHBLTEN=rthblten,RQVBLTEN=rqvblten &
417 ,RQCBLTEN=rqcblten,RQIBLTEN=rqiblten &
418 ,FLAG_QI=flag_qi &
419 ,CP=cp,G=g,ROVCP=rcp,RD=r_D,ROVG=rovg &
420 ,DZ8W=dz8w,Z=z,XLV=XLV,RV=r_v,PSFC=PSFC &
421 ,ZNT=znt,UST=ust,ZOL=zol,HOL=hol,HPBL=pblh &
422 ,PSIM=psim,PSIH=psih,XLAND=xland &
423 ,HFX=hfx,QFX=qfx,TSK=tskold,GZ1OZ0=gz1oz0 &
424 ,U10=u10,V10=v10 &
425 ,WSPD=wspd,BR=br,DT=dtbl,DTMIN=dtmin,KPBL2D=kpbl &
426 ,SVP1=svp1,SVP2=svp2,SVP3=svp3,SVPT0=svpt0 &
427 ,EP1=ep_1,EP2=ep_2,KARMAN=karman,EOMEG=eomeg &
428 ,STBOLT=stbolt,EXCH_H=exch_h,REGIME=regime &
429 ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
430 ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
431 ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
432 )
433 ELSE
434 CALL wrf_error_fatal('Lack arguments to call YSU pbl')
435 ENDIF
436
437 CASE (MRFSCHEME)
438 IF ( PRESENT( qv_curr ) .AND. PRESENT( qc_curr ) .AND. &
439 PRESENT( rqvblten ) .AND. PRESENT( rqcblten ) .AND. &
440 PRESENT( hol ) .AND. &
441 .TRUE. ) THEN
442
443 CALL wrf_debug(100,'in MRF')
444 CALL mrf( &
445 U3D=u_phytmp,V3D=v_phytmp,TH3D=th_phy,T3D=t_phy &
446 ,QV3D=qv_curr &
447 ,QC3D=qc_curr &
448 ,QI3D=qi_curr &
449 ,P3D=p_phy,PI3D=pi_phy &
450 ,RUBLTEN=rublten,RVBLTEN=rvblten &
451 ,RTHBLTEN=rthblten,RQVBLTEN=rqvblten &
452 ,RQCBLTEN=rqcblten,RQIBLTEN=rqiblten &
453 ,CP=cp,G=g,ROVCP=rcp,R=r_d,ROVG=rovg &
454 ,DZ8W=dz8w,Z=z,XLV=xlv,RV=r_v,PSFC=psfc &
455 ,P1000MB=p1000mb &
456 ,ZNT=znt,UST=ust,ZOL=zol,HOL=hol &
457 ,PBL=pblh,PSIM=psim,PSIH=psih &
458 ,XLAND=xland,HFX=hfx,QFX=qfx,TSK=tskold &
459 ,GZ1OZ0=gz1oz0,WSPD=wspd,BR=br &
460 ,DT=dtbl,DTMIN=dtmin,KPBL2D=kpbl &
461 ,SVP1=svp1,SVP2=svp2,SVP3=svp3,SVPT0=svpt0 &
462 ,EP1=ep_1,EP2=ep_2,KARMAN=karman,EOMEG=eomeg &
463 ,STBOLT=stbolt,REGIME=regime &
464 ,FLAG_QI=flag_qi &
465 ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
466 ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
467 ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
468 )
469 ELSE
470 CALL wrf_error_fatal('Lack arguments to call MRF pbl')
471 ENDIF
472
473 CASE (GFSSCHEME)
474 IF ( PRESENT( qv_curr ) .AND. PRESENT( qc_curr ) .AND. &
475 PRESENT( rqvblten ) .AND. PRESENT( rqcblten ) .AND. &
476 .TRUE. ) THEN
477 CALL wrf_debug(100,'in GFS')
478 CALL bl_gfs( &
479 U3D=u_phytmp,V3D=v_phytmp &
480 ,TH3D=th_phy,T3D=t_phy &
481 ,QV3D=qv_curr,QC3D=qc_curr,QI3D=qi_curr &
482 ,P3D=p_phy,PI3D=pi_phy &
483 ,RUBLTEN=rublten,RVBLTEN=rvblten,RTHBLTEN=rthblten &
484 ,RQVBLTEN=rqvblten,RQCBLTEN=rqcblten &
485 ,RQIBLTEN=rqiblten &
486 ,CP=cp,G=g,ROVCP=rcp,R=r_d,ROVG=rovg,FLAG_QI=flag_qi &
487 ,DZ8W=dz8w,z=z,PSFC=psfc &
488 ,UST=ust,PBL=pblh,PSIM=psim,PSIH=psih &
489 ,HFX=hfx,QFX=qfx,TSK=tskold,GZ1OZ0=gz1oz0 &
490 ,WSPD=wspd,BR=br &
491 ,DT=dtbl,KPBL2D=kpbl,EP1=ep_1,KARMAN=karman &
492 ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
493 ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
494 ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
495 )
496 ELSE
497 CALL wrf_error_fatal('Lack arguments to call GFS pbl')
498 ENDIF
499
500 CASE (MYJPBLSCHEME)
501 IF ( PRESENT( qv_curr ) .AND. PRESENT( qc_curr ) .AND. &
502 PRESENT( rqvblten ) .AND. PRESENT( rqcblten ) .AND. &
503 .TRUE. ) THEN
504
505 CALL wrf_debug(100,'in MYJPBL')
506 CALL myjpbl( &
507 DT=dt,STEPBL=stepbl,HT=ht,DZ=dz8w &
508 ,PMID=p_phy,PINT=p8w,TH=th_phy,T=t_phy,EXNER=pi_phy &
509 ,QV=qv_curr, CWM=qc_curr &
510 ,U=u_phy,V=v_phy,RHO=rho &
511 ,TSK=tsk,QSFC=qsfc,CHKLOWQ=chklowq,THZ0=thz0 &
512 ,QZ0=qz0,UZ0=uz0,VZ0=vz0 &
513 ,LOWLYR=lowlyr &
514 ,XLAND=xland,SICE=xice,SNOW=snow &
515 ,TKE_MYJ=tke_myj,EXCH_H=exch_h,USTAR=ust,ZNT=znt &
516 ,EL_MYJ=el_myj,PBLH=pblh,KPBL=kpbl,CT=ct &
517 ,AKHS=akhs,AKMS=akms,ELFLX=lh &
518 ,RUBLTEN=rublten,RVBLTEN=rvblten,RTHBLTEN=rthblten &
519 ,RQVBLTEN=rqvblten,RQCBLTEN=rqcblten &
520 ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
521 ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
522 ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
523 )
524 ELSE
525 CALL wrf_error_fatal('Lack arguments to call MYJ pbl')
526 ENDIF
527
528 CASE DEFAULT
529
530 WRITE( message , * ) 'The pbl option does not exist: bl_pbl_physics = ', bl_pbl_physics
531 CALL wrf_error_fatal ( message )
532
533 END SELECT pbl_select
534
535 ENDDO
536 !$OMP END PARALLEL DO
537
538 ENDIF
539 !
540 END SUBROUTINE pbl_driver
541 END MODULE module_pbl_driver