1 !WRF:MEDIATION_LAYER:PHYSICS
2 ! *** add new modules of schemes here
4 MODULE module_microphysics_driver
7 SUBROUTINE microphysics_driver( &
9 ,ht, dz8w, p8w, dt,dx,dy &
10 ,mp_physics, spec_zone &
11 ,specified, channel_switch &
15 ,cldfra, cldfra_old, exch_h, nsource &
16 ,qlsink, precr, preci, precs, precg &
18 ,f_ice_phy,f_rain_phy,f_rimef_phy &
20 ,ids,ide, jds,jde, kds,kde &
21 ,ims,ime, jms,jme, kms,kme &
22 ,ips,ipe, jps,jpe, kps,kpe &
23 ,i_start,i_end,j_start,j_end,kts,kte &
25 ,qv_curr,qc_curr,qr_curr,qi_curr,qs_curr,qg_curr &
26 ,qndrop_curr,qni_curr,qh_curr,qnh_curr &
27 ,qzr_curr,qzi_curr,qzs_curr,qzg_curr,qzh_curr &
28 ,qns_curr,qnr_curr,qng_curr,qnn_curr,qnc_curr &
30 ,f_qv,f_qc,f_qr,f_qi,f_qs,f_qg,f_qndrop,f_qni &
31 ,f_qns,f_qnr,f_qng,f_qnc,f_qnn,f_qh,f_qnh &
32 , f_qzr,f_qzi,f_qzs,f_qzg,f_qzh &
34 ,qrcuten, qscuten, qicuten, mu &
36 ,mp_restart_state,tbpvs_state,tbpvs0_state & ! for etampnew or etampold
37 ,hail,ice2 & ! for mp_gsfcgce
38 ! ,ccntype & ! for mp_milbrandt2mom
43 ,graupelnc, graupelncv &
46 ,qv_b4mp, qc_b4mp, qi_b4mp, qs_b4mp &
48 ,refl_10cm & ! HM, 9/22/09, add for refl
50 ! Added the RI_CURR array to the call
56 USE module_state_description, ONLY : &
57 KESSLERSCHEME, LINSCHEME, SBU_YLINSCHEME, WSM3SCHEME, WSM5SCHEME &
58 ,WSM6SCHEME, ETAMPNEW, ETAMPOLD, etamp_HWRF,THOMPSON, MORR_TWO_MOMENT &
59 ,GSFCGCESCHEME, WDM5SCHEME, WDM6SCHEME &
60 ,MILBRANDT2MOM !,MILBRANDT3MOM
62 USE module_state_description, ONLY : &
63 KESSLERSCHEME, LINSCHEME, SBU_YLINSCHEME, WSM3SCHEME, WSM5SCHEME &
64 ,WSM6SCHEME, ETAMPNEW, ETAMPOLD, THOMPSON, MORR_TWO_MOMENT &
65 ,GSFCGCESCHEME, WDM5SCHEME, WDM6SCHEME, NSSL_2MOM, NSSL_2MOMCCN &
66 ,MILBRANDT2MOM !,MILBRANDT3MOM
70 USE module_model_constants
73 ! *** add new modules of schemes here
77 USE module_mp_sbu_ylin
83 USE module_mp_thompson
85 USE module_mp_morr_two_moment
88 USE module_mp_milbrandt2mom
89 ! USE module_mp_milbrandt3mom
91 USE module_mp_nssl_2mom
95 USE module_mixactivate, only: prescribe_aerosol_mixactivate
97 !----------------------------------------------------------------------
98 ! This driver calls subroutines for the microphys.
103 ! Lin et al. (1983), Rutledge and Hobbs (1984)
104 ! WRF Single-Moment 3-class, Hong, Dudhia and Chen (2004)
105 ! WRF Single-Moment 5-class, Hong, Dudhia and Chen (2004)
106 ! WRF Single-Moment 6-class, Lim and Hong (2003 WRF workshop)
107 ! Eta Grid-scale Cloud and Precipitation scheme (EGCP01, Ferrier)
108 ! * etampnew - what's in the operational 4-km High-Resolution Window Runs
109 ! * etampold - what was run in the 12-km operational NAM
110 ! Milbrandt and Yau (2005)
112 !----------------------------------------------------------------------
114 !======================================================================
115 ! Grid structure in physics part of WRF
116 !----------------------------------------------------------------------
117 ! The horizontal velocities used in the physics are unstaggered
118 ! relative to temperature/moisture variables. All predicted
119 ! variables are carried at half levels except w, which is at full
120 ! levels. Some arrays with names (*8w) are at w (full) levels.
122 !----------------------------------------------------------------------
123 ! In WRF, kms (smallest number) is the bottom level and kme (largest
124 ! number) is the top level. In your scheme, if 1 is at the top level,
125 ! then you have to reverse the order in the k direction.
127 ! kme - half level (no data at this level)
128 ! kme ----- full level
130 ! kme-1 ----- full level
135 ! kms+2 ----- full level
137 ! kms+1 ----- full level
139 ! kms ----- full level
141 !======================================================================
144 ! Rho_d dry density (kg/m^3)
145 ! Theta_m moist potential temperature (K)
146 ! Qv water vapor mixing ratio (kg/kg)
147 ! Qc cloud water mixing ratio (kg/kg)
148 ! Qr rain water mixing ratio (kg/kg)
149 ! Qi cloud ice mixing ratio (kg/kg)
150 ! Qs snow mixing ratio (kg/kg)
151 ! Qg graupel mixing ratio (kg/kg)
152 ! Qh hail mixing ratio (kg/kg)
153 ! Qndrop droplet number mixing ratio (#/kg)
154 ! Qni cloud ice number concentration (#/kg)
155 ! Qns snow number concentration (#/kg)
156 ! Qnr rain number concentration (#/kg)
157 ! Qng graupel number concentration (#/kg)
158 ! Qnh hail number concentration (#/kg)
160 ! Qzr rain reflectivity (m6/kg)
161 ! Qzi ice reflectivity (m6/kg)
162 ! Qzs snow reflectivity (m6/kg)
163 ! Qzg graupel reflectivity (m6/kg)
164 ! Qzh hail reflectivity (m6/kg)
166 ! Qvolg graupel particle volume (m3/kg)
169 !----------------------------------------------------------------------
170 !-- th potential temperature (K)
171 !-- moist_new updated moisture array (kg/kg)
172 !-- moist_old Old moisture array (kg/kg)
173 !-- rho density of air (kg/m^3)
174 !-- pi_phy exner function (dimensionless)
176 !-- RAINNC grid scale precipitation (mm)
177 !-- RAINNCV one time step grid scale precipitation (mm/step)
178 !-- SNOWNC grid scale snow and ice (mm)
179 !-- SNOWNCV one time step grid scale snow and ice (mm/step)
180 !-- GRAUPELNC grid scale graupel (mm)
181 !-- GRAUPELNCV one time step grid scale graupel (mm/step)
182 !-- HAILNC grid scale hail (mm)
183 !-- HAILNCV one time step grid scale hail (mm/step)
184 !-- SR one time step mass ratio of snow to total precip
185 !-- z Height above sea level (m)
187 !-- G acceleration due to gravity (m/s^2)
188 !-- CP heat capacity at constant pressure for dry air (J/kg/K)
189 !-- R_d gas constant for dry air (J/kg/K)
190 !-- R_v gas constant for water vapor (J/kg/K)
191 !-- XLS latent heat of sublimation (J/kg)
192 !-- XLV latent heat of vaporization (J/kg)
193 !-- XLF latent heat of melting (J/kg)
194 !-- rhowater water density (kg/m^3)
195 !-- rhosnow snow density (kg/m^3)
196 !-- F_ICE_PHY Fraction of ice.
197 !-- F_RAIN_PHY Fraction of rain.
198 !-- F_RIMEF_PHY Mass ratio of rimed ice (rime factor)
199 !-- t8w temperature at layer interfaces
200 !-- cldfra, cldfra_old, current, previous cloud fraction
201 !-- exch_h vertical diffusivity (m2/s)
202 !-- qlsink Fractional cloud water sink (/s)
203 !-- precr rain precipitation rate at all levels (kg/m2/s)
204 !-- preci ice precipitation rate at all levels (kg/m2/s)
205 !-- precs snow precipitation rate at all levels (kg/m2/s)
206 !-- precg graupel precipitation rate at all levels (kg/m2/s) &
207 !-- P_QV species index for water vapor
208 !-- P_QC species index for cloud water
209 !-- P_QR species index for rain water
210 !-- P_QI species index for cloud ice
211 !-- P_QS species index for snow
212 !-- P_QG species index for graupel
213 !-- P_QH species index for hail
214 !-- P_QNDROP species index for cloud drop mixing ratio
215 !-- P_QNR species index for rain number concentration,
216 !-- P_QNI species index for cloud ice number concentration
217 !-- P_QNS species index for snow number concentration,
218 !-- P_QNG species index for graupel number concentration,
219 !-- P_QNH species index for hail number concentration,
220 !-- P_QZR species index for rain reflectivity
221 !-- P_QZI species index for ice reflectivity
222 !-- P_QZS species index for snow reflectivity
223 !-- P_QZG species index for graupel reflectivity
224 !-- P_QZH species index for hail reflectivity
225 !-- P_QVOLG species index for graupel particle volume,
226 !-- id grid id number
227 !-- ids start index for i in domain
228 !-- ide end index for i in domain
229 !-- jds start index for j in domain
230 !-- jde end index for j in domain
231 !-- kds start index for k in domain
232 !-- kde end index for k in domain
233 !-- ims start index for i in memory
234 !-- ime end index for i in memory
235 !-- jms start index for j in memory
236 !-- jme end index for j in memory
237 !-- kms start index for k in memory
238 !-- kme end index for k in memory
239 !-- i_start start indices for i in tile
240 !-- i_end end indices for i in tile
241 !-- j_start start indices for j in tile
242 !-- j_end end indices for j in tile
243 !-- its start index for i in tile
244 !-- ite end index for i in tile
245 !-- jts start index for j in tile
246 !-- jte end index for j in tile
247 !-- kts start index for k in tile
248 !-- kte end index for k in tile
249 !-- num_tiles number of tiles
250 !-- diagflag Logical to tell us when to produce diagnostics for history or restart
252 !======================================================================
254 INTEGER, INTENT(IN ) :: mp_physics
255 LOGICAL, INTENT(IN ) :: specified
256 INTEGER, OPTIONAL, INTENT(IN ) :: chem_opt, progn
257 INTEGER, OPTIONAL, INTENT(IN ) :: hail, ice2 !, ccntype
259 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde
260 INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme
261 INTEGER, OPTIONAL, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe
262 INTEGER, INTENT(IN ) :: kts,kte
263 INTEGER, INTENT(IN ) :: itimestep,num_tiles,spec_zone
264 INTEGER, DIMENSION(num_tiles), INTENT(IN) :: &
265 & i_start,i_end,j_start,j_end
267 LOGICAL, INTENT(IN ) :: warm_rain
269 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
274 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
283 REAL, INTENT(INOUT), DIMENSION(ims:ime, kms:kme, jms:jme ) :: &
284 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
286 ! REAL, INTENT(OUT), DIMENSION(ims:ime, kms:kme, jms:jme ) :: &
287 REAL, OPTIONAL, INTENT(OUT), DIMENSION(ims:ime, kms:kme, jms:jme ) :: &
289 !!$ REAL, DIMENSION(ims:ime, kms:kme, jms:jme ) :: &
291 qlsink, & ! cloud water sink (/s)
292 precr, & ! rain precipitation rate at all levels (kg/m2/s)
293 preci, & ! ice precipitation rate at all levels (kg/m2/s)
294 precs, & ! snow precipitation rate at all levels (kg/m2/s)
295 precg ! graupel precipitation rate at all levels (kg/m2/s)
299 REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: XLAND
301 REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: SR
303 REAL, INTENT(IN ) :: dt,dx,dy
305 INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT) :: LOWLYR
310 REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(OUT) :: refl_10cm
312 LOGICAL, OPTIONAL, INTENT(IN ) :: channel_switch
313 REAL, OPTIONAL, INTENT(INOUT ) :: naer ! aerosol number concentration (/kg)
314 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
318 ,cldfra, cldfra_old, exch_h &
319 ,qv_curr,qc_curr,qr_curr,qi_curr,qs_curr,qg_curr &
320 ,qt_curr,qndrop_curr,qni_curr,qh_curr,qnh_curr &
321 ,qns_curr,qnr_curr,qng_curr,qnn_curr,qnc_curr &
322 ,qzr_curr,qzi_curr,qzs_curr,qzg_curr,qzh_curr &
325 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
327 INTENT(IN) :: qrcuten, qscuten, qicuten
329 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
330 INTENT(INOUT) :: rainprod, evapprod
331 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
332 INTENT(INOUT) :: qv_b4mp, qc_b4mp, qi_b4mp, qs_b4mp
334 REAL, DIMENSION( ims:ime, jms:jme ), &
338 ! Added RI_CURR similar to microphysics fields above
339 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
341 INTENT(INOUT) :: ri_curr
344 REAL, DIMENSION(ims:ime, kms:kme, jms:jme ), &
350 REAL, DIMENSION( ims:ime , jms:jme ), &
361 INTEGER,OPTIONAL,INTENT(IN ) :: id
363 REAL , DIMENSION( ims:ime , jms:jme ) , OPTIONAL , &
366 REAL, DIMENSION (:), OPTIONAL, INTENT(INOUT) :: mp_restart_state &
367 ,tbpvs_state,tbpvs0_state
370 LOGICAL, OPTIONAL :: f_qv,f_qc,f_qr,f_qi,f_qs,f_qg,f_qndrop,f_qni,f_qt &
371 ,f_qns,f_qnr,f_qng,f_qnn,f_qnc,f_qh,f_qnh,f_qzr &
372 ,f_qzi,f_qzs,f_qzg,f_qzh,f_qvolg
374 LOGICAL, OPTIONAL :: diagflag
378 INTEGER :: i,j,k,its,ite,jts,jte,ij,sz,n
381 !---------------------------------------------------------------------
382 ! check for microphysics type. We need a clean way to
383 ! specify these things!
384 !---------------------------------------------------------------------
387 IF ( PRESENT ( channel_switch ) ) channel = channel_switch
389 if (mp_physics .eq. 0) return
398 !$OMP PRIVATE ( ij, its, ite, jts, jte, i,j,k,n )
400 DO ij = 1 , num_tiles
402 its = max(i_start(ij),ids)
403 ite = min(i_end(ij),ide-1)
405 its = max(i_start(ij),ids+sz)
406 ite = min(i_end(ij),ide-1-sz)
408 jts = max(j_start(ij),jds+sz)
409 jte = min(j_end(ij),jde-1-sz)
416 its = max(ips,ids+sz)
417 ite = min(ipe,ide-1-sz)
419 jts = max(jps,jds+sz)
420 jte = min(jpe,jde-1-sz)
424 ! 2009-06009 rce - zero all these for safety
425 IF( PRESENT(qlsink) ) qlsink(its:ite,kts:kte,jts:jte) = 0.
426 IF( PRESENT(precr ) ) precr(its:ite,kts:kte,jts:jte) = 0.
427 IF( PRESENT(preci ) ) preci(its:ite,kts:kte,jts:jte) = 0.
428 IF( PRESENT(precs ) ) precs(its:ite,kts:kte,jts:jte) = 0.
429 IF( PRESENT(precg ) ) precg(its:ite,kts:kte,jts:jte) = 0.
432 IF( PRESENT(chem_opt) .AND. PRESENT(progn) ) THEN
433 IF( chem_opt==0 .AND. progn==1 .AND. (mp_physics==LINSCHEME .OR. mp_physics==MORR_TWO_MOMENT)) THEN
434 IF( PRESENT( QNDROP_CURR ) ) THEN
435 CALL wrf_debug ( 100 , 'microphysics_driver: calling prescribe_aerosol_mixactivate' )
436 ! 06-nov-2005 rce - id & itimestep added to arg list
437 call prescribe_aerosol_mixactivate ( &
438 id, itimestep, dt, naer, &
439 rho, th, pi_phy, w, cldfra, cldfra_old, &
440 z, dz8w, p8w, t8w, exch_h, &
441 qv_curr, qc_curr, qi_curr, qndrop_curr, &
443 ids,ide, jds,jde, kds,kde, &
444 ims,ime, jms,jme, kms,kme, &
445 its,ite, jts,jte, kts,kte, &
446 F_QC=f_qc, F_QI=f_qi )
448 ELSE IF( progn==1 .AND. mp_physics/=LINSCHEME .AND. mp_physics/=MORR_TWO_MOMENT) THEN
449 call wrf_error_fatal("SETTINGS ERROR: Prognostic cloud droplet number can only be used with the mp_physics=LINSCHEME or MORRISON.")
453 micro_select: SELECT CASE(mp_physics)
456 CALL wrf_debug ( 100 , 'microphysics_driver: calling kessler' )
457 IF ( PRESENT( QV_CURR ) .AND. PRESENT( QC_CURR ) .AND. &
458 PRESENT( QR_CURR ) .AND. &
459 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) .AND. &
466 ,RHO=rho, PII=pi_phy,DT_IN=dt, Z=z, XLV=xlv, CP=cp &
467 ,EP2=ep_2,SVP1=svp1,SVP2=svp2 &
468 ,SVP3=svp3,SVPT0=svpt0,RHOWATER=rhowater &
470 ,RAINNC=rainnc,RAINNCV=rainncv &
471 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
472 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
473 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
476 CALL wrf_error_fatal ( 'arguments not present for calling kessler' )
481 CALL wrf_debug ( 100 , 'microphysics_driver: calling thompson' )
482 IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. &
483 PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. &
484 PRESENT( QS_CURR ) .AND. PRESENT ( QG_CURR ) .AND. &
485 PRESENT( QNR_CURR) .AND. PRESENT ( QNI_CURR) .AND. &
486 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) ) THEN
488 qv_b4mp(its:ite,kts:kte,jts:jte) = qv_curr(its:ite,kts:kte,jts:jte)
489 qc_b4mp(its:ite,kts:kte,jts:jte) = qc_curr(its:ite,kts:kte,jts:jte)
490 qi_b4mp(its:ite,kts:kte,jts:jte) = qi_curr(its:ite,kts:kte,jts:jte)
491 qs_b4mp(its:ite,kts:kte,jts:jte) = qs_curr(its:ite,kts:kte,jts:jte)
507 ITIMESTEP=itimestep, &
512 GRAUPELNC=GRAUPELNC, &
513 GRAUPELNCV=GRAUPELNCV, &
519 ! refl_10cm, grid_clock, grid_alarms, &
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)
524 CALL wrf_error_fatal ( 'arguments not present for calling thompson_et_al' )
528 CASE (MORR_TWO_MOMENT)
529 CALL wrf_debug(100, 'microphysics_driver: calling morrison two moment')
530 IF (PRESENT (QV_CURR) .AND. PRESENT (QC_CURR) .AND. &
531 PRESENT (QR_CURR) .AND. PRESENT (QI_CURR) .AND. &
532 PRESENT (QS_CURR) .AND. PRESENT (QG_CURR) .AND. &
533 PRESENT (QR_CURR) .AND. PRESENT (QI_CURR) .AND. &
534 PRESENT (QNS_CURR) .AND. PRESENT (QNI_CURR).AND. &
535 PRESENT (QNR_CURR) .AND. PRESENT (QNG_CURR).AND. &
536 PRESENT (MU) .AND. PRESENT (QSCUTEN).AND. &
537 PRESENT (QRCUTEN) .AND. PRESENT (QICUTEN).AND. &
538 PRESENT (RAINNC ) .AND. PRESENT (RAINNCV) .AND. &
539 PRESENT (Z ) .AND.PRESENT ( W ) ) THEN
540 CALL mp_morr_two_moment( &
541 ITIMESTEP=itimestep, & !*
550 NS=qns_curr, & !* ! VVT
551 NR=qnr_curr, & !* ! VVT
552 NG=qng_curr, & !* ! VVT
561 ,RAINNCV=RAINNCV & !*
563 ,qrcuten=qrcuten & ! hm
564 ,qscuten=qscuten & ! hm
565 ,qicuten=qicuten & ! hm
567 ,F_QNDROP=f_qndrop & ! hm for wrf-chem
568 ,QNDROP=qndrop_curr & ! hm for wrf-chem
569 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
570 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
571 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
572 ,QLSINK=qlsink & ! jdf for wrf-chem
573 ,PRECR=precr,PRECI=preci,PRECS=precs,PRECG=precg & ! jdf for wrf-chem
576 Call wrf_error_fatal( 'arguments not present for calling morrison two moment')
581 CALL wrf_debug(100, 'microphysics_driver: calling milbrandt2mom')
582 IF (PRESENT (QV_CURR) .AND. &
583 PRESENT (QC_CURR) .AND. PRESENT (QNC_CURR) .AND. &
584 PRESENT (QR_CURR) .AND. PRESENT (QNR_CURR) .AND. &
585 PRESENT (QI_CURR) .AND. PRESENT (QNI_CURR) .AND. &
586 PRESENT (QS_CURR) .AND. PRESENT (QNS_CURR) .AND. &
587 PRESENT (QG_CURR) .AND. PRESENT (QNG_CURR) .AND. &
588 PRESENT (QH_CURR) .AND. PRESENT (QNH_CURR) .AND. &
589 PRESENT (RAINNC ) .AND. PRESENT (RAINNCV) .AND. &
590 PRESENT (SNOWNC ) .AND. PRESENT (SNOWNCV) .AND. &
591 PRESENT (HAILNC ) .AND. PRESENT (HAILNCV) .AND. &
592 PRESENT (GRAUPELNC).AND.PRESENT (GRAUPELNCV).AND. &
593 PRESENT (Z ) .AND. PRESENT ( W ) ) THEN
594 ! PRESENT (ccntype) &
596 CALL mp_milbrandt2mom_driver( &
597 ITIMESTEP=itimestep, &
623 GRPLNC = GRAUPELNC, &
624 GRPLNCV = GRAUPELNCV, &
626 ! ccntype = ccntype, &
627 Zet = refl_10cm, & ! HM, 9/22/09 for refl
628 IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde, &
629 IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme, &
630 ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
633 Call wrf_error_fatal( 'arguments not present for calling milbrandt2mom')
637 ! CASE (MILBRANDT3MOM)
638 ! CALL wrf_debug(100, 'microphysics_driver: calling milbrandt3mom')
639 ! IF (PRESENT (QV_CURR) .AND. &
640 ! PRESENT (QC_CURR) .AND. PRESENT (QNC_CURR) .AND. &
641 ! PRESENT (QR_CURR) .AND. PRESENT (QNR_CURR) .AND. PRESENT (QZR_CURR) .AND. &
642 ! PRESENT (QI_CURR) .AND. PRESENT (QNI_CURR) .AND. PRESENT (QZI_CURR) .AND. &
643 ! PRESENT (QS_CURR) .AND. PRESENT (QNS_CURR) .AND. PRESENT (QZS_CURR) .AND. &
644 ! PRESENT (QG_CURR) .AND. PRESENT (QNG_CURR) .AND. PRESENT (QZG_CURR) .AND. &
645 ! PRESENT (QH_CURR) .AND. PRESENT (QNH_CURR) .AND. PRESENT (QZH_CURR) .AND. &
646 ! PRESENT (RAINNC ) .AND. PRESENT (RAINNCV) .AND. &
647 ! PRESENT (Z ) .AND. PRESENT ( W ) ) THEN
648 ! CALL mp_milbrandt3mom_driver( &
649 ! ITIMESTEP=itimestep, & !*
674 ! ,RAINNC=RAINNC & !*
675 ! ,RAINNCV=RAINNCV & !*
677 ! ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
678 ! ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
679 ! ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
682 ! Call wrf_error_fatal( 'arguments not present for calling milbrandt3mom')
687 CALL wrf_debug(100, 'microphysics_driver: calling nssl2mom')
688 IF (PRESENT (QV_CURR) .AND. &
689 PRESENT (QC_CURR) .AND. PRESENT (QNC_CURR) .AND. &
690 PRESENT (QR_CURR) .AND. PRESENT (QNR_CURR) .AND. &
691 PRESENT (QI_CURR) .AND. PRESENT (QNI_CURR) .AND. &
692 PRESENT (QS_CURR) .AND. PRESENT (QNS_CURR) .AND. &
693 PRESENT (QG_CURR) .AND. PRESENT (QNG_CURR) .AND. &
694 PRESENT (QH_CURR) .AND. PRESENT (QNH_CURR) .AND. &
695 PRESENT (RAINNC ) .AND. PRESENT (RAINNCV) .AND. &
696 PRESENT (SNOWNC ) .AND. PRESENT (SNOWNCV) .AND. &
697 PRESENT (HAILNC ) .AND. PRESENT (HAILNCV) .AND. &
698 PRESENT (GRAUPELNC).AND.PRESENT (GRAUPELNCV).AND. &
699 PRESENT (Z ) .AND. PRESENT ( W ) .AND. &
700 PRESENT (QVOLG_CURR) ) THEN
703 CALL nssl_2mom_driver( &
704 ITIMESTEP=itimestep, &
732 GRPLNC = GRAUPELNC, &
733 GRPLNCV = GRAUPELNCV, &
736 diagflag = diagflag, &
737 IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde, &
738 IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme, &
739 ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
742 Call wrf_error_fatal( 'arguments not present for calling nssl_2mom')
746 CALL wrf_debug(100, 'microphysics_driver: calling nssl_2momccn')
747 IF (PRESENT (QV_CURR) .AND. &
748 PRESENT (QC_CURR) .AND. PRESENT (QNC_CURR) .AND. &
749 PRESENT (QR_CURR) .AND. PRESENT (QNR_CURR) .AND. &
750 PRESENT (QI_CURR) .AND. PRESENT (QNI_CURR) .AND. &
751 PRESENT (QS_CURR) .AND. PRESENT (QNS_CURR) .AND. &
752 PRESENT (QG_CURR) .AND. PRESENT (QNG_CURR) .AND. &
753 PRESENT (QH_CURR) .AND. PRESENT (QNH_CURR) .AND. &
754 PRESENT (RAINNC ) .AND. PRESENT (RAINNCV) .AND. &
755 PRESENT (SNOWNC ) .AND. PRESENT (SNOWNCV) .AND. &
756 PRESENT (HAILNC ) .AND. PRESENT (HAILNCV) .AND. &
757 PRESENT (GRAUPELNC).AND.PRESENT (GRAUPELNCV).AND. &
758 PRESENT (Z ) .AND. PRESENT ( W ) .AND. &
759 PRESENT (QVOLG_CURR) .AND. PRESENT( QNN_CURR ) ) THEN
762 CALL nssl_2mom_driver( &
763 ITIMESTEP=itimestep, &
792 GRPLNC = GRAUPELNC, &
793 GRPLNCV = GRAUPELNCV, &
796 diagflag = diagflag, &
797 IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde, &
798 IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme, &
799 ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
802 Call wrf_error_fatal( 'arguments not present for calling nssl_2momccn')
807 CALL wrf_debug ( 100 , 'microphysics_driver: calling GSFCGCE' )
808 IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. &
809 PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. &
810 PRESENT( QS_CURR ) .AND. &
811 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) .AND. &
812 PRESENT( HAIL ) .AND. PRESENT ( ICE2 ) .AND. &
813 PRESENT( Z ) .AND. PRESENT ( W ) ) THEN
821 ,RHO=rho, PII=pi_phy, P=p, DT_IN=dt, Z=z &
822 ,HT=ht, DZ8W=dz8w, GRAV=G &
823 ,RHOWATER=rhowater, RHOSNOW=rhosnow &
824 ,ITIMESTEP=itimestep &
825 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
826 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
827 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
828 ,RAINNC=rainnc, RAINNCV=rainncv &
829 ,SNOWNC=snownc, SNOWNCV=snowncv ,SR=sr &
830 ,GRAUPELNC=graupelnc ,GRAUPELNCV=graupelncv &
833 ,IHAIL=hail, ICE2=ice2 &
835 ! HAIL = 1, run gsfcgce with hail option
836 ! 0, run gsfcgce with graupel option <---- default
837 ! note: no effect if ice2 = 1
838 ! ICE2 = 1, run gsfcgce with only snow, ice
839 ! 2, run gsfcgce with only graupel, ice
840 ! 0, run gsfcgce with snow, ice and hail/graupel <---- default
843 CALL wrf_error_fatal ( 'arguments not present for calling GSFCGCE' )
847 CALL wrf_debug ( 100 , 'microphysics_driver: calling lin_et_al' )
848 IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. &
849 PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. &
850 PRESENT( QS_CURR ) .AND. &
851 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) .AND. &
861 ,RHO=rho, PII=pi_phy, P=p, DT_IN=dt, Z=z &
862 ,HT=ht, DZ8W=dz8w, GRAV=G, CP=cp &
863 ,RAIR=r_d, RVAPOR=R_v &
864 ,XLS=xls, XLV=xlv, XLF=xlf &
865 ,RHOWATER=rhowater, RHOSNOW=rhosnow &
866 ,EP2=ep_2,SVP1=svp1,SVP2=svp2 &
867 ,SVP3=svp3,SVPT0=svpt0 &
868 ,RAINNC=rainnc, RAINNCV=rainncv &
869 ,SNOWNC=snownc, SNOWNCV=snowncv &
870 ,GRAUPELNC=graupelnc, GRAUPELNCV=graupelncv, SR=sr &
871 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
872 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
873 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
874 ,PRECR=precr,PRECI=preci,PRECS=precs,PRECG=precg &
875 ,F_QG=f_qg, F_QNDROP=f_qndrop &
877 ,QNDROP=qndrop_curr &
880 CALL wrf_error_fatal ( 'arguments not present for calling lin_et_al' )
883 CASE (SBU_YLINSCHEME)
884 CALL wrf_debug ( 100 , 'microphysics_driver: calling sbu_ylin' )
885 IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. &
886 PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. &
887 PRESENT( QS_CURR ) .AND. &
888 PRESENT( RI_CURR ) .AND. &
889 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) .AND. &
900 ,RHO=rho, PII=pi_phy, P=p, DT_IN=dt, Z=z &
903 ! ,RAIR=r_d, RVAPOR=R_v &
904 ! ,XLS=xls, XLV=xlv, XLF=xlf &
905 ! ,RHOWATER=rhowater, RHOSNOW=rhosnow &
906 ! ,EP2=ep_2,SVP1=svp1,SVP2=svp2 &
907 ! ,SVP3=svp3,SVPT0=svpt0 &
908 ,RAINNC=rainnc, RAINNCV=rainncv &
909 ! ,SNOWNC=snownc, SNOWNCV=snowncv &
910 ! ,GRAUPELNC=graupelnc, GRAUPELNCV=graupelncv, SR=sr &
911 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
912 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
913 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
914 ! ,PRECR=precr,PRECI=preci,PRECS=precs,PRECG=precg &
916 ! ,F_QNDROP=f_qndrop &
918 ! ,QNDROP=qndrop_curr &
921 CALL wrf_error_fatal ( 'arguments not present for calling sbu_ylin' )
926 CALL wrf_debug ( 100 , 'microphysics_driver: calling wsm3' )
927 IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. &
928 PRESENT( QR_CURR ) .AND. &
929 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) .AND. &
936 ,W=w,DEN=rho,PII=pi_phy,P=p,DELZ=dz8w &
937 ,DELT=dt,G=g,CPD=cp,CPV=cpv &
938 ,RD=r_d,RV=r_v,T0C=svpt0 &
939 ,EP1=ep_1, EP2=ep_2, QMIN=epsilon &
940 ,XLS=xls, XLV0=xlv, XLF0=xlf &
941 ,DEN0=rhoair0, DENR=rhowater &
942 ,CLIQ=cliq,CICE=cice,PSAT=psat &
943 ,RAIN=rainnc ,RAINNCV=rainncv &
944 ,SNOW=snownc ,SNOWNCV=snowncv &
946 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
947 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
948 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
951 CALL wrf_error_fatal ( 'arguments not present for calling wsm3' )
955 CALL wrf_debug ( 100 , 'microphysics_driver: calling wsm5' )
956 IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. &
957 PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. &
958 PRESENT( QS_CURR ) .AND. &
959 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) ) THEN
967 ,DEN=rho,PII=pi_phy,P=p,DELZ=dz8w &
968 ,DELT=dt,G=g,CPD=cp,CPV=cpv &
969 ,RD=r_d,RV=r_v,T0C=svpt0 &
970 ,EP1=ep_1, EP2=ep_2, QMIN=epsilon &
971 ,XLS=xls, XLV0=xlv, XLF0=xlf &
972 ,DEN0=rhoair0, DENR=rhowater &
973 ,CLIQ=cliq,CICE=cice,PSAT=psat &
974 ,RAIN=rainnc ,RAINNCV=rainncv &
975 ,SNOW=snownc ,SNOWNCV=snowncv &
977 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
978 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
979 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
982 CALL wrf_error_fatal ( 'arguments not present for calling wsm5' )
986 CALL wrf_debug ( 100 , 'microphysics_driver: calling wsm6' )
987 IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. &
988 PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. &
989 PRESENT( QS_CURR ) .AND. PRESENT ( QG_CURR ) .AND. &
990 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) ) THEN
999 ,DEN=rho,PII=pi_phy,P=p,DELZ=dz8w &
1000 ,DELT=dt,G=g,CPD=cp,CPV=cpv &
1001 ,RD=r_d,RV=r_v,T0C=svpt0 &
1002 ,EP1=ep_1, EP2=ep_2, QMIN=epsilon &
1003 ,XLS=xls, XLV0=xlv, XLF0=xlf &
1004 ,DEN0=rhoair0, DENR=rhowater &
1005 ,CLIQ=cliq,CICE=cice,PSAT=psat &
1006 ,RAIN=rainnc ,RAINNCV=rainncv &
1007 ,SNOW=snownc ,SNOWNCV=snowncv &
1009 ,GRAUPEL=graupelnc ,GRAUPELNCV=graupelncv &
1010 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
1011 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
1012 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
1015 CALL wrf_error_fatal ( 'arguments not present for calling wsm6' )
1019 CALL wrf_debug ( 100 , 'microphysics_driver: calling wdm5' )
1020 IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. &
1021 PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. &
1022 PRESENT( QS_CURR ) .AND. PRESENT( QNN_CURR ) .AND. &
1023 PRESENT ( QNC_CURR ) .AND. PRESENT( QNR_CURR ).AND. &
1024 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) ) THEN
1035 ,DEN=rho,PII=pi_phy,P=p,DELZ=dz8w &
1036 ,DELT=dt,G=g,CPD=cp,CPV=cpv,CCN0=n_ccn0 &
1037 ,RD=r_d,RV=r_v,T0C=svpt0 &
1038 ,EP1=ep_1, EP2=ep_2, QMIN=epsilon &
1039 ,XLS=xls, XLV0=xlv, XLF0=xlf &
1040 ,DEN0=rhoair0, DENR=rhowater &
1041 ,CLIQ=cliq,CICE=cice,PSAT=psat &
1042 ,RAIN=rainnc ,RAINNCV=rainncv &
1043 ,SNOW=snownc ,SNOWNCV=snowncv &
1045 ,ITIMESTEP=itimestep &
1046 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
1047 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
1048 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
1051 CALL wrf_error_fatal ( 'arguments not present for calling wdm5')
1055 CALL wrf_debug ( 100 , 'microphysics_driver: calling wdm6' )
1056 IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. &
1057 PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. &
1058 PRESENT( QS_CURR ) .AND. PRESENT ( QG_CURR ) .AND. &
1059 PRESENT( QNN_CURR ) .AND. PRESENT ( QNC_CURR ) .AND. &
1060 PRESENT( QNR_CURR ).AND. &
1061 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) ) THEN
1073 ,DEN=rho,PII=pi_phy,P=p,DELZ=dz8w &
1074 ,DELT=dt,G=g,CPD=cp,CPV=cpv,CCN0=n_ccn0 &
1075 ,RD=r_d,RV=r_v,T0C=svpt0 &
1076 ,EP1=ep_1, EP2=ep_2, QMIN=epsilon &
1077 ,XLS=xls, XLV0=xlv, XLF0=xlf &
1078 ,DEN0=rhoair0, DENR=rhowater &
1079 ,CLIQ=cliq,CICE=cice,PSAT=psat &
1080 ,RAIN=rainnc ,RAINNCV=rainncv &
1081 ,SNOW=snownc ,SNOWNCV=snowncv &
1083 ,GRAUPEL=graupelnc ,GRAUPELNCV=graupelncv &
1084 ,ITIMESTEP=itimestep &
1085 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
1086 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
1087 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
1090 CALL wrf_error_fatal ( 'arguments not present for calling wdm6')
1094 CALL wrf_debug ( 100 , 'microphysics_driver: calling etampnew_HWRF')
1096 IF ( PRESENT( qv_curr ) .AND. PRESENT( qt_curr ) .AND. &
1097 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) .AND. &
1098 PRESENT( mp_restart_state ) .AND. &
1099 PRESENT( tbpvs_state ) .AND. &
1100 PRESENT( tbpvs0_state ) ) THEN
1102 CALL ETAMP_NEW_HWRF( &
1103 ITIMESTEP=itimestep,DT=dt,DX=dx,DY=dy, GID=id &
1104 ,RAINNC=rainnc,RAINNCV=rainncv &
1105 ,DZ8W=dz8w,RHO_PHY=rho,P_PHY=p,PI_PHY=pi_phy,TH_PHY=th &
1108 ,LOWLYR=LOWLYR,SR=SR &
1109 ,F_ICE_PHY=F_ICE_PHY,F_RAIN_PHY=F_RAIN_PHY &
1110 ,F_RIMEF_PHY=F_RIMEF_PHY &
1111 ,QC=qc_curr,QR=Qr_curr,QI=Qi_curr &
1112 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
1113 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
1114 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
1117 CALL wrf_error_fatal ( 'arguments not present for calling etampnew' )
1120 CASE (ETAMPNEW) !-- Operational 4-km High-Resolution Window (HRW) version
1121 CALL wrf_debug ( 100 , 'microphysics_driver: calling etampnew')
1123 IF ( PRESENT( qv_curr ) .AND. PRESENT( qt_curr ) .AND. &
1124 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) .AND. &
1125 PRESENT( mp_restart_state ) .AND. &
1126 PRESENT( tbpvs_state ) .AND. &
1127 PRESENT( tbpvs0_state ) ) THEN
1129 ITIMESTEP=itimestep,DT=dt,DX=dx,DY=dy &
1130 ,DZ8W=dz8w,RHO_PHY=rho,P_PHY=p,PI_PHY=pi_phy,TH_PHY=th &
1136 ,LOWLYR=LOWLYR,SR=SR &
1137 ,F_ICE_PHY=F_ICE_PHY,F_RAIN_PHY=F_RAIN_PHY &
1138 ,F_RIMEF_PHY=F_RIMEF_PHY &
1139 ,RAINNC=rainnc,RAINNCV=rainncv &
1140 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
1141 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
1142 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
1143 ,MP_RESTART_STATE=mp_restart_state &
1144 ,TBPVS_STATE=tbpvs_state,TBPVS0_STATE=tbpvs0_state &
1147 CALL wrf_error_fatal ( 'arguments not present for calling etampnew' )
1150 CASE (ETAMPOLD) !-- What was run in the operational NAM (WRF NMM)
1151 CALL wrf_debug ( 100 , 'microphysics_driver: calling etampold')
1153 IF ( PRESENT( qv_curr ) .AND. PRESENT( qt_curr ) .AND. &
1154 PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) .AND. &
1155 PRESENT( mp_restart_state ) .AND. &
1156 PRESENT( tbpvs_state ) .AND. &
1157 PRESENT( tbpvs0_state ) ) THEN
1159 ITIMESTEP=itimestep,DT=dt,DX=dx,DY=dy &
1160 ,DZ8W=dz8w,RHO_PHY=rho,P_PHY=p,PI_PHY=pi_phy,TH_PHY=th &
1166 ,LOWLYR=LOWLYR,SR=SR &
1167 ,F_ICE_PHY=F_ICE_PHY,F_RAIN_PHY=F_RAIN_PHY &
1168 ,F_RIMEF_PHY=F_RIMEF_PHY &
1169 ,RAINNC=rainnc,RAINNCV=rainncv &
1170 ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
1171 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
1172 ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte &
1173 ,MP_RESTART_STATE=mp_restart_state &
1174 ,TBPVS_STATE=tbpvs_state,TBPVS0_STATE=tbpvs0_state &
1177 CALL wrf_error_fatal ( 'arguments not present for calling etampold' )
1182 WRITE( wrf_err_message , * ) 'The microphysics option does not exist: mp_physics = ', mp_physics
1183 CALL wrf_error_fatal ( wrf_err_message )
1185 END SELECT micro_select
1189 !$OMP END PARALLEL DO
1192 CALL wrf_debug ( 200 , 'microphysics_driver: returning from' )
1196 END SUBROUTINE microphysics_driver
1198 END MODULE module_microphysics_driver