1 !#define NO_RESTRICT_ACCEL
2 !#define NO_GFDLETAINIT
3 !#define NO_UPSTREAM_ADVECTION
4 !----------------------------------------------------------------------
6 SUBROUTINE START_DOMAIN_NMM(GRID, allowed_to_read &
8 #include <dummy_new_args.inc>
11 !----------------------------------------------------------------------
14 USE MODULE_DRIVER_CONSTANTS
15 USE module_model_constants
21 USE MODULE_DM, ONLY : LOCAL_COMMUNICATOR &
22 ,MYTASK,NTASKS,NTASKS_X &
29 USE MODULE_IGWAVE_ADJUST,ONLY: PDTE, PFDHT, DDAMP
30 USE MODULE_ADVECTION, ONLY: ADVE, VAD2, HAD2
31 USE MODULE_NONHY_DYNAM, ONLY: VADZ, HADZ
32 USE MODULE_DIFFUSION_NMM,ONLY: HDIFF
33 USE MODULE_BNDRY_COND, ONLY: BOCOH, BOCOV
34 USE MODULE_PHYSICS_INIT
36 ! USE MODULE_RA_GFDLETA
38 USE MODULE_EXT_INTERNAL
41 USE MODULE_AEROSOLS_SORGAM, ONLY: SUM_PM_SORGAM
42 USE MODULE_GOCART_AEROSOLS, ONLY: SUM_PM_GOCART
43 USE MODULE_MOSAIC_DRIVER, ONLY: SUM_PM_MOSAIC
46 !----------------------------------------------------------------------
50 !----------------------------------------------------------------------
54 TYPE(DOMAIN),INTENT(INOUT) :: GRID
55 LOGICAL , INTENT(IN) :: allowed_to_read
57 #include <dummy_new_decl.inc>
59 TYPE(GRID_CONFIG_REC_TYPE) :: CONFIG_FLAGS
62 REAL RGASUNIV ! universal gas constant [ J/mol-K ]
63 PARAMETER ( RGASUNIV = 8.314510 )
70 LOGICAL :: ANAL !zhang's doing, added for analysis option
72 INTEGER :: IDS,IDE,JDS,JDE,KDS,KDE &
73 & ,IMS,IME,JMS,JME,KMS,KME &
74 & ,IPS,IPE,JPS,JPE,KPS,KPE
78 REAL,ALLOCATABLE,DIMENSION(:) :: PHALF
80 REAL :: EPSB=0.1,EPSIN=9.8
84 INTEGER :: I,IEND,IER,IFE,IFS,IHH,IHL,IHRSTB,II,IRTN &
85 & ,ISIZ1,ISIZ2,ISTART,ISTAT,IX,J,J00,JFE,JFS,JHH,JJ &
86 & ,JM1,JM2,JM3,JP1,JP2,JP3,JX,KK &
87 & ,K,K400,KBI,KBI2,KCCO2,KNT,KNTI &
89 & ,N,NMAP,NRADLH,NRADSH,NREC,NS,RECL,STAT &
90 & ,STEPBL,STEPCU,STEPRA
92 INTEGER :: MY_E,MY_N,MY_S,MY_W &
93 & ,MY_NE,MY_NW,MY_SE,MY_SW,MYI,MYJ,NPE
97 INTEGER :: ILPAD2,IRPAD2,JBPAD2,JTPAD2
98 INTEGER :: ITS,ITE,JTS,JTE,KTS,KTE
100 INTEGER,DIMENSION(3) :: LPTOP
102 REAL :: ADDL,APELM,APELMNW,APEM1,CAPA,CLOGES,DPLM,DZLM,EPS,ESE &
103 & ,FAC1,FAC2,PDIF,PLM,PM1,PSFCK,PSS,PSUM,QLM,RANG &
104 & ,SLPM,TERM1,THLM,TIME,TLM,TSFCK,ULM,VLM
106 !!! REAL :: BLDT,CWML,EXNSFC,G_INV,PLYR,PSFC,ROG,SFCZ,THSIJ,TL
107 REAL :: CWML,EXNSFC,G_INV,PLYR,PSURF,ROG,SFCZ,THSIJ,TL,ZOQING
115 ! gopal's doing for the moving nest (MSLP computation)
116 !-----------------------------------------------------------------------------------------------------
117 REAL, PARAMETER :: LAPSR=6.5E-3, GI=1./G,D608=0.608
118 REAL, PARAMETER :: COEF3=287.05*GI*LAPSR, COEF2=-1./COEF3
119 REAL, PARAMETER :: TRG=2.0*R_D*GI,LAPSI=1.0/LAPSR
120 REAL :: RTOPP,APELP,DZ,SFCT,A
121 !-----------------------------------------------------------------------------------------------------
125 !!! REAL,ALLOCATABLE,DIMENSION(:,:) :: RAINBL,RAINNC,RAINNC &
126 INTEGER,ALLOCATABLE,DIMENSION(:,:) :: ITEMP,LOWLYR
127 REAL,ALLOCATABLE,DIMENSION(:) :: SFULL,SMID
128 REAL,ALLOCATABLE,DIMENSION(:) :: DZS,ZS
129 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: RQCBLTEN,RQIBLTEN &
130 & ,RQVBLTEN,RTHBLTEN &
132 & ,RQCCUTEN,RQICUTEN,RQRCUTEN &
133 & ,RQSCUTEN,RQVCUTEN,RTHCUTEN &
135 & ,RQCSHTEN,RQISHTEN,RQRSHTEN &
136 & ,RQSSHTEN,RQVSHTEN,RTHSHTEN &
139 & ,RTHRATENLW,RTHRATENSW
140 REAL,ALLOCATABLE,DIMENSION(:,:) :: EMISS,EMTEMP,GLW,HFX &
142 & ,QFX,RAINBL,RAINC,RAINNC &
145 & ,GRAUPELNC,GRAUPELNCV &
146 & ,SNOWC,THC,TMN,TSFC
148 REAL,ALLOCATABLE,DIMENSION(:,:) :: Z0_DUM, ALBEDO_DUM
150 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: ZINT,RRI,CONVFAC,ZMID
151 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: T_TRANS,PINT_TRANS
152 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: CLDFRA_TRANS
154 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: CLDFRA_OLD
157 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: w0avg
159 LOGICAL :: E_BDY,N_BDY,S_BDY,W_BDY,WARM_RAIN,ADV_MOIST_COND
160 LOGICAL :: START_OF_SIMULATION
164 integer :: jam,retval
165 CHARACTER(LEN=255) :: message
167 real :: dsig,dsigsum,pdbot,pdtot,rpdtot
168 real :: fisx,ht,prodx,rg
169 integer :: i_t=096,j_t=195,n_t=11
170 integer :: i_u=49,j_u=475,n_u=07
171 integer :: i_v=49,j_v=475,n_v=07
172 integer :: num_ozmixm, num_aerosolc
173 real :: cen_lat,cen_lon,dtphs ! GWD
174 integer :: num_urban_layers
176 INTEGER :: hr, mn, sec, ms, rc
177 TYPE(WRFU_Time) :: currentTime
179 INTEGER :: interval_seconds, restart_interval
183 REAL,DIMENSION(0:30) :: VZ0TBL_24
185 & 1.00, 0.07, 0.07, 0.07, 0.07, 0.15, &
186 & 0.08, 0.03, 0.05, 0.86, 0.80, 0.85, &
187 & 2.65, 1.09, 0.80, 0.001, 0.04, 0.05, &
188 & 0.01, 0.04, 0.06, 0.05, 0.03, 0.001, &
189 & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/)
193 !----------------------------------------------------------------------
195 !#include <scalar_derefs.inc>
196 !----------------------------------------------------------------------
197 !**********************************************************************
198 !----------------------------------------------------------------------
201 CALL GET_IJK_FROM_GRID(GRID, &
202 & IDS,IDE,JDS,JDE,KDS,KDE, &
203 & IMS,IME,JMS,JME,KMS,KME, &
204 & IPS,IPE,JPS,JPE,KPS,KPE)
213 CALL model_to_grid_config_rec(grid%id,model_config_rec &
216 RESTRT=config_flags%restart
218 !zhang's doing added for analysis option
219 ANAL=config_flags%analysis ! gopal's doing
224 IF(IME>NMM_MAX_DIM )THEN
225 WRITE(wrf_err_message,*) &
226 'start_domain_nmm ime (',ime,') > ',NMM_MAX_DIM, &
227 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
228 CALL WRF_ERROR_FATAL(wrf_err_message)
231 IF(JME>NMM_MAX_DIM )THEN
232 WRITE(wrf_err_message,*) &
233 'start_domain_nmm jme (',jme,') > ',NMM_MAX_DIM, &
234 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
235 CALL WRF_ERROR_FATAL(wrf_err_message)
238 IF(IMS>-2.OR.IME>NMM_MAX_DIM )THEN
239 WRITE(wrf_err_message,*) &
240 'start_domain_nmm ims(',ims,' > -2 or ime (',ime,') > ',NMM_MAX_DIM, &
241 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
242 CALL WRF_ERROR_FATAL(wrf_err_message)
245 IF(JMS>-2.OR.JME>NMM_MAX_DIM )THEN
246 WRITE(wrf_err_message,*) &
247 'start_domain_nmm jms(',jms,' > -2 or jme (',jme,') > ',NMM_MAX_DIM, &
248 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
249 CALL WRF_ERROR_FATAL(wrf_err_message)
253 !----------------------------------------------------------------------
255 WRITE(message,196)IHRST,IDAT
256 CALL wrf_message(trim(message))
257 196 FORMAT(' FORECAST BEGINS ',I2,' GMT ',2(I2,'/'),I4)
260 !! Restarts must be made from times for which boundary data is available
262 CALL nl_get_interval_seconds(GRID%ID, interval_seconds)
263 CALL nl_get_restart_interval(GRID%ID, restart_interval)
264 IF (MOD(restart_interval*60,interval_seconds) /= 0) THEN
265 WRITE(wrf_err_message,*)' restart_interval is not integer multiplier of interval_seconds'
266 CALL WRF_ERROR_FATAL(wrf_err_message)
270 !!!! For now, set NPES to 1
281 !! All "my" variables defined below have had the IDE or JDE specification
290 MYIS1 =MAX(IDS+1,IPS)
291 MYIE1 =MIN(IDE-2,IPE)
292 MYJS2 =MAX(JDS+2,JPS)
293 MYJE2 =MIN(JDE-3,JPE)
295 MYIS_P1=MAX(IDS,IPS-1)
296 MYIE_P1=MIN(IDE-1,IPE+1)
297 MYIS_P2=MAX(IDS,IPS-2)
298 MYIE_P2=MIN(IDE-1,IPE+2)
299 MYIS_P3=MAX(IDS,IPS-3)
300 MYIE_P3=MIN(IDE-1,IPE+3)
301 MYJS_P3=MAX(JDS,JPS-3)
302 MYJE_P3=MIN(JDE-1,JPE+3)
303 MYIS_P4=MAX(IDS,IPS-4)
304 MYIE_P4=MIN(IDE-1,IPE+4)
305 MYJS_P4=MAX(JDS,JPS-4)
306 MYJE_P4=MIN(JDE-1,JPE+4)
307 MYIS_P5=MAX(IDS,IPS-5)
308 MYIE_P5=MIN(IDE-1,IPE+5)
309 MYJS_P5=MAX(JDS,JPS-5)
310 MYJE_P5=MIN(JDE-1,JPE+5)
312 MYIS1_P1=MAX(IDS+1,IPS-1)
313 MYIE1_P1=MIN(IDE-2,IPE+1)
314 MYIS1_P2=MAX(IDS+1,IPS-2)
315 MYIE1_P2=MIN(IDE-2,IPE+2)
317 MYJS1_P1=MAX(JDS+1,JPS-1)
318 MYJS2_P1=MAX(JDS+2,JPS-1)
319 MYJE1_P1=MIN(JDE-2,JPE+1)
320 MYJE2_P1=MIN(JDE-3,JPE+1)
321 MYJS1_P2=MAX(JDS+1,JPS-2)
322 MYJE1_P2=MIN(JDE-2,JPE+2)
323 MYJS2_P2=MAX(JDS+2,JPS-2)
324 MYJE2_P2=MIN(JDE-3,JPE+2)
325 MYJS1_P3=MAX(JDS+1,JPS-3)
326 MYJE1_P3=MIN(JDE-2,JPE+3)
327 MYJS2_P3=MAX(JDS+2,JPS-3)
328 MYJE2_P3=MIN(JDE-3,JPE+3)
333 CALL WRF_GET_MYPROC(MYPROC)
337 !----------------------------------------------------------------------
338 !*** Let each task determine who its eight neighbors are because we
339 !*** will need to know that for the halo exchanges. The direction
340 !*** to each neighbor will be designated by the following integers:
351 !*** If a task has no neighbor in a particular direction because of
352 !*** the presence of the global domain boundary then that element
353 !*** of my_neb is set to -1.
354 !-----------------------------------------------------------------------
356 call wrf_get_nprocx(inpes)
357 call wrf_get_nprocy(jnpes)
359 allocate(itemp(inpes,jnpes),stat=istat)
374 if(myj+1<=jnpes)my_n=itemp(myi,myj+1)
377 if(myi+1<=inpes)my_e=itemp(myi+1,myj)
380 if(myj-1>=1)my_s=itemp(myi,myj-1)
383 if(myi-1>=1)my_w=itemp(myi-1,myj)
386 if((myi+1<=inpes).and.(myj+1<=jnpes)) &
387 my_ne=itemp(myi+1,myj+1)
390 if((myi+1<=inpes).and.(myj-1>=1)) &
391 my_se=itemp(myi+1,myj-1)
394 if((myi-1>=1).and.(myj-1>=1)) &
395 my_sw=itemp(myi-1,myj-1)
398 if((myi-1>=1).and.(myj+1<=jnpes)) &
399 my_nw=itemp(myi-1,myj+1)
411 # include <HALO_NMM_INIT_1.inc>
412 # include <HALO_NMM_INIT_2.inc>
413 # include <HALO_NMM_INIT_3.inc>
414 # include <HALO_NMM_INIT_4.inc>
415 # include <HALO_NMM_INIT_5.inc>
416 # include <HALO_NMM_INIT_6.inc>
417 # include <HALO_NMM_INIT_7.inc>
418 # include <HALO_NMM_INIT_8.inc>
419 # include <HALO_NMM_INIT_9.inc>
420 # include <HALO_NMM_INIT_10.inc>
421 # include <HALO_NMM_INIT_11.inc>
422 # include <HALO_NMM_INIT_12.inc>
423 # include <HALO_NMM_INIT_13.inc>
424 # include <HALO_NMM_INIT_14.inc>
425 # include <HALO_NMM_INIT_15.inc>
426 # include <HALO_NMM_INIT_16.inc>
427 # include <HALO_NMM_INIT_17.inc>
428 # include <HALO_NMM_INIT_18.inc>
429 # include <HALO_NMM_INIT_19.inc>
430 # include <HALO_NMM_INIT_20.inc>
431 # include <HALO_NMM_INIT_21.inc>
432 # include <HALO_NMM_INIT_22.inc>
433 # include <HALO_NMM_INIT_23.inc>
434 # include <HALO_NMM_INIT_24.inc>
435 # include <HALO_NMM_INIT_25.inc>
436 # include <HALO_NMM_INIT_26.inc>
437 # include <HALO_NMM_INIT_27.inc>
438 # include <HALO_NMM_INIT_28.inc>
439 # include <HALO_NMM_INIT_29.inc>
440 # include <HALO_NMM_INIT_30.inc>
441 # include <HALO_NMM_INIT_31.inc>
442 # include <HALO_NMM_INIT_32.inc>
443 # include <HALO_NMM_INIT_33.inc>
444 # include <HALO_NMM_INIT_34.inc>
445 # include <HALO_NMM_INIT_35.inc>
446 # include <HALO_NMM_INIT_36.inc>
447 # include <HALO_NMM_INIT_37.inc>
448 # include <HALO_NMM_INIT_38.inc>
449 # include <HALO_NMM_INIT_39.inc>
453 grid%iheg(J)=MOD(J+1,2)
454 grid%ihwg(J)=grid%iheg(J)-1
455 grid%iveg(J)=MOD(J,2)
456 grid%ivwg(J)=grid%iveg(J)-1
460 grid%ivw(J)=grid%ivwg(J)
461 grid%ive(J)=grid%iveg(J)
462 grid%ihe(J)=grid%iheg(J)
463 grid%ihw(J)=grid%ihwg(J)
476 IF((.NOT.RESTRT .AND. .NOT.ANAL) .OR. .NOT.allowed_to_read)THEN
477 !end of zhang's doing
483 grid%pdsl(I,J) =grid%pd(I,J)*grid%res(I,J)
485 IF(allowed_to_read)grid%acprec(I,J)=0. ! This is gopal's inclusion for moving nest
490 ! fisx=max(grid%fis(i,j),0.)
491 ! prodx=grid%z0(I,J)*Z0MAX
492 ! grid%z0(I,J) =grid%sm(I,J)*Z0SEA+(1.-grid%sm(I,J))* &
493 ! & (grid%z0(I,J)*Z0MAX+FISx *FCM+Z0LAND)
494 !!! & (prodx +FISx *FCM+Z0LAND)
500 IF(allowed_to_read)THEN ! This is gopal's inclusion for moving nest
502 grid%htop(I,J) =REAL(KTS)
503 grid%htopd(I,J) =REAL(KTS)
504 grid%htops(I,J) =REAL(KTS)
505 grid%hbot(I,J) =REAL(KTE)
506 grid%hbotd(I,J) =REAL(KTE)
507 grid%hbots(I,J) =REAL(KTE)
510 !*** AT THIS POINT, WE MUST CALCULATE THE INITIAL POTENTIAL TEMPERATURE
511 !*** OF THE SURFACE AND OF THE SUBGROUND.
512 !*** EXTRAPOLATE DOWN FOR INITIAL SURFACE POTENTIAL TEMPERATURE.
513 !*** ALSO DO THE SHELTER PRESSURE.
516 !*** BECAUSE WE REINITIALIZE TOPOGRAPHY, LAND SEA MASK AND FIND THE TEMPERATURE
517 !*** FIELD OVER THE NEW TOPOGRAPHY, AFTER THE MOVE, I THINK IT MORE APPROPRIATE
518 !*** TO USE grid%nmm_tsk OR grid%sst TO RE-DERIVE grid%ths AND QS (AND CONSEQUENTLY grid%thz0 AND grid%qz0).
519 !*** THIS MAY BE MORE CONSISTENT WITH THE PSEUDO-HYDROSTATIC BALANCING THAT IS
520 !*** DONE OVER THE NEW TERRAIN (AND WITH NEW grid%sm). gopal!
524 IF(allowed_to_read)THEN ! This is gopal's inclusion for moving nest
526 PM1=grid%aeta1(KTS)*grid%pdtop+grid%aeta2(KTS)*grid%pdsl(I,J)+grid%pt
527 APEM1=(1.E5/PM1)**CAPA
529 IF(grid%nmm_tsk(I,J)>=200.)THEN ! have a specific skin temp, use it
531 grid%ths(I,J)=grid%nmm_tsk(I,J)*(1.+P608*grid%q(I,J,KTS+1))*APEM1
532 TSFCK=grid%nmm_tsk(I,J)*(1.+P608*grid%q(I,J,KTS+1))
534 grid%ths(I,J)=grid%nmm_tsk(I,J)*APEM1
535 TSFCK=grid%nmm_tsk(I,J)
538 ELSE ! use lowest layer as a proxy
540 grid%ths(I,J)=grid%t(I,J,KTS)*(1.+P608*grid%q(I,J,KTS+1))*APEM1
541 TSFCK=grid%t(I,J,KTS)*(1.+P608*grid%q(I,J,KTS+1))
543 grid%ths(I,J)=grid%t(I,J,KTS)*APEM1
544 TSFCK=grid%t(I,J,KTS)
548 PSFCK=grid%pd(I,J)+grid%pdtop+grid%pt
550 IF(grid%sm(I,J)<0.5) THEN
551 grid%qsh(I,J)=PQ0/PSFCK*EXP(A2*(TSFCK-A3)/(TSFCK-A4))
552 ELSEIF(grid%sm(I,J)>0.5) THEN
553 grid%ths(I,J)=grid%sst(I,J)*(1.E5/(grid%pd(I,J)+grid%pdtop+grid%pt))**CAPA
556 TERM1=-0.068283/grid%t(I,J,KTS)
557 grid%pshltr(I,J)=(grid%pd(I,J)+grid%pdtop+grid%pt)*EXP(TERM1)
560 grid%thz0(I,J)=grid%ths(I,J)
561 grid%qz0(I,J)=grid%qsh(I,J)
565 ENDIF ! endif for allowed to read
571 !*** INITIALIZE CLOUD FIELDS
573 IF (MAXVAL(grid%cwm) .gt. 0. .and. MAXVAL(grid%cwm) .lt. 1.) then
574 CALL wrf_message('appear to have grid%cwm values...do not zero')
576 IF(allowed_to_read)THEN ! This is gopal's inclusion for moving nest
577 CALL wrf_message('zeroing grid%cwm')
588 !*** INITIALIZE ACCUMULATOR ARRAYS TO ZERO.
623 !*** INITIALIZE SATURATION SPECIFIC HUMIDITY OVER THE WATER.
627 IF(allowed_to_read)THEN ! This is gopal's inclusion for moving nest
630 IF(grid%sm(I,J)>0.5)THEN
631 CLOGES =-CM1/grid%sst(I,J)-CM2*ALOG10(grid%sst(I,J))+CM3
632 ESE = 10.**(CLOGES+2.)
633 grid%qsh(I,J)= grid%sm(I,J)*EPS*ESE/(grid%pd(I,J)+grid%pdtop+grid%pt-ESE*(1.-EPS))
639 !*** INITIALIZE TURBULENT KINETIC ENERGY (TKE) TO A SMALL
640 !*** VALUE (EPSQ2) ABOVE GROUND. SET TKE TO ZERO IN THE
641 !*** THE LOWEST MODEL LAYER. IN THE LOWEST TWO ATMOSPHERIC
642 !*** ETA LAYERS SET TKE TO A SMALL VALUE (Q2INI).
644 !***EROGERS: add check for realistic values of grid%q2
646 IF (MAXVAL(grid%q2) .gt. epsq2 .and. MAXVAL(grid%q2) .lt. 200.) then
647 CALL wrf_message('appear to have grid%q2 values...do not zero')
649 IF(allowed_to_read)THEN ! This is gopal's inclusion for moving nest
650 CALL wrf_message('zeroing grid%q2')
657 grid%q2(I,J,K)=grid%hbm2(I,J)*EPSQ2
667 grid%q2(I,J,KTE-2)= 0.
668 grid%q2(I,J,KTE-1)= 0.
670 grid%q2(I,J,KTE-2)= grid%hbm2(I,J)*Q2INI
671 grid%q2(I,J,KTE-1)= grid%hbm2(I,J)*Q2INI
678 !*** PAD ABOVE GROUND SPECIFIC HUMIDITY IF IT IS TOO SMALL.
679 !*** INITIALIZE LATENT HEATING ACCUMULATION ARRAYS.
684 IF(grid%q(I,J,K)<EPSQ)grid%q(I,J,K)=EPSQ
692 !*** INITIALIZE MAX/MIN TEMPERATURES.
696 grid%tlmax(I,J)=grid%t(I,J,KPS)
697 grid%tlmin(I,J)=grid%t(I,J,KPS)
701 !----------------------------------------------------------------------
702 !*** END OF SCRATCH START INITIALIZATION BLOCK.
703 !----------------------------------------------------------------------
705 CALL wrf_message('INIT: INITIALIZED ARRAYS FOR CLEAN START')
706 ENDIF ! <--- (not restart)
712 IF(grid%t(I,J,KTS)==0.)THEN
713 grid%t(I,J,KTS)=grid%t(I,J,KTS+1)
716 TERM1=-0.068283/grid%t(I,J,KTS)
717 grid%pshltr(I,J)=(grid%pd(I,J)+grid%pdtop+grid%pt)*EXP(TERM1)
722 !----------------------------------------------------------------------
723 !*** RESTART INITIALIZING. CHECK TO SEE IF WE NEED TO ZERO
724 !*** ACCUMULATION ARRAYS.
725 !----------------------------------------------------------------------
727 TSPH=3600./GRID%DT ! needed?
736 WRITE( wrf_err_message, * )' start_nmm TSTART=',grid%tstart
737 CALL wrf_debug( 1, TRIM(wrf_err_message) )
738 WRITE( wrf_err_message, * )' start_nmm TPREC=',grid%tprec
739 CALL wrf_debug( 1, TRIM(wrf_err_message) )
740 WRITE( wrf_err_message, * )' start_nmm THEAT=',grid%theat
741 CALL wrf_debug( 1, TRIM(wrf_err_message) )
742 WRITE( wrf_err_message, * )' start_nmm TCLOD=',grid%tclod
743 CALL wrf_debug( 1, TRIM(wrf_err_message) )
744 WRITE( wrf_err_message, * )' start_nmm TRDSW=',grid%trdsw
745 CALL wrf_debug( 1, TRIM(wrf_err_message) )
746 WRITE( wrf_err_message, * )' start_nmm TRDLW=',grid%trdlw
747 CALL wrf_debug( 1, TRIM(wrf_err_message) )
748 WRITE( wrf_err_message, * )' start_nmm TSRFC=',grid%tsrfc
749 CALL wrf_debug( 1, TRIM(wrf_err_message) )
750 WRITE( wrf_err_message, * )' start_nmm PCPFLG=',grid%pcpflg
751 CALL wrf_debug( 1, TRIM(wrf_err_message) )
754 NSTART = INT(grid%TSTART*TSPH+0.5)
759 !! want non-zero values for grid%nprec, grid%nheat type vars to avoid problems
760 !! with mod statements below.
762 grid%nprec = INT(grid%TPREC *TSPH+0.5)
763 grid%nheat = INT(grid%THEAT *TSPH+0.5)
764 grid%nclod = INT(grid%TCLOD *TSPH+0.5)
765 grid%nrdsw = INT(grid%TRDSW *TSPH+0.5)
766 grid%nrdlw = INT(grid%TRDLW *TSPH+0.5)
767 grid%nsrfc = INT(grid%TSRFC *TSPH+0.5)
769 !zhang's dong for analysis option:
770 grid%NCNVC0 = grid%NCNVC
771 grid%NPHS0 = grid%NPHS
774 !----------------------------------------------------------------------
776 !*** FLAG FOR INITIALIZING ARRAYS, LOOKUP TABLES, & CONSTANTS USED IN
777 !*** MICROPHYSICS AND RADIATION
779 !----------------------------------------------------------------------
781 grid%micro_start=.TRUE.
783 !----------------------------------------------------------------------
785 !*** INITIALIZE ADVECTION TENDENCIES TO ZERO SO THAT
786 !*** BOUNDARY POINTS WILL ALWAYS BE ZERO
795 !----------------------------------------------------------------------
797 !*** SET INDEX ARRAYS FOR UPSTREAM ADVECTION
799 !----------------------------------------------------------------------
809 grid%iup_adh(I,J)=-999
810 grid%iup_adv(I,J)=-999
815 #ifndef NO_UPSTREAM_ADVECTION
817 !*** n_iup_h HOLDS THE NUMBER OF MASS POINTS NEEDED IN EACH ROW
818 !*** FOR UPSTREAM ADVECTION (FULL ROWS IN THE 3RD THROUGH 7TH
819 !*** ROWS FROM THE SOUTH AND NORTH GLOBAL BOUNDARIES AND
820 !*** FOUR POINTS ADJACENT TO THE WEST AND EAST GLOBAL BOUNDARIES
821 !*** ON ALL OTHER INTERNAL ROWS). SIMILARLY FOR n_iup_v.
822 !*** BECAUSE OF HORIZONTAL OPERATIONS, THESE POINTS EXTEND OUTSIDE
823 !*** OF THE UPSTREAM REGION SOMEWHAT.
824 !*** n_iup_adh HOLDS THE NUMBER OF MASS POINTS NEEDED IN EACH ROW
825 !*** FOR THE COMPUTATION OF THE TENDENCIES THEMSELVES (adt, ADQ2M
826 !*** AND ADQ2L); SPECIFICALLY THESE TENDENCIES ARE ONLY DONE IN
827 !*** THE UPSTREAM REGION.
828 !*** n_iup_adv HOLDS THE NUMBER OF MASS POINTS NEEDED IN EACH ROW
829 !*** FOR THE VELOCITY POINT TENDENCIES.
830 !*** iup_h AND iup_v HOLD THE ACTUAL I VALUES USED IN EACH ROW.
831 !*** LIKEWISE FOR iup_adh AND iup_adv.
832 !*** ALSO, SET upstrm FOR THOSE TASKS AROUND THE GLOBAL EDGE.
854 grid%iup_h(IMS+KNTI,J)=I
855 grid%iup_v(IMS+KNTI,J)=I
867 IF(E_BDY)IEND=IEND-MOD(JJ+1,2)
869 grid%iup_adh(IMS+KNTI,J)=I
872 grid%n_iup_adh(J)=KNTI
877 IF(E_BDY)IEND=IEND-MOD(JJ,2)
879 grid%iup_adv(IMS+KNTI,J)=I
882 grid%n_iup_adv(J)=KNTI
890 DO JJ=JDE-7, JDE-1 ! JM-6,JM
894 grid%iup_h(IMS+KNTI,J)=I
895 grid%iup_v(IMS+KNTI,J)=I
902 DO JJ=JDE-5, JDE-3 ! JM-4,JM-2
907 IF(E_BDY)IEND=IEND-MOD(JJ+1,2)
909 grid%iup_adh(IMS+KNTI,J)=I
912 grid%n_iup_adh(J)=KNTI
917 IF(E_BDY)IEND=IEND-MOD(JJ,2)
919 grid%iup_adv(IMS+KNTI,J)=I
922 grid%n_iup_adv(J)=KNTI
930 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
934 grid%iup_h(IMS+I-1,J)=I
935 grid%iup_v(IMS+I-1,J)=I
943 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
948 grid%iup_adh(IMS+KNTI,J)=I
951 grid%n_iup_adh(J)=KNTI
956 grid%iup_adv(IMS+KNTI,J)=I
959 grid%n_iup_adv(J)=KNTI
965 CALL WRF_GET_NPROCX(INPES)
971 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
976 !*** IN CASE THERE IS ONLY A SINGLE GLOBAL TASK IN THE
977 !*** I DIRECTION THEN WE MUST ADD THE WESTSIDE UPSTREAM
978 !*** POINTS TO THE EASTSIDE POINTS IN EACH ROW.
981 IF(INPES.EQ.1)KNTI=grid%n_iup_h(J)
985 grid%iup_h(IMS+KNTI,J)=I
993 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
995 IEND=IM-1-MOD(JJ+1,2)
996 ISTART=IEND-MOD(JJ,2)
998 IF(INPES==1)KNTI=grid%n_iup_adh(J)
1001 grid%iup_adh(IMS+KNTI,J)=I
1004 grid%n_iup_adh(J)=KNTI
1008 DO JJ=8,JDE-8 ! JM-7
1009 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
1014 IF(INPES==1)KNTI=grid%n_iup_v(J)
1018 grid%iup_v(IMS+KNTI,J)=I
1021 grid%n_iup_v(J)=KNTI
1025 DO JJ=6,JDE-6 ! JM-5
1026 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
1029 ISTART=IEND-MOD(JJ+1,2)
1031 IF(INPES==1)KNTI=grid%n_iup_adv(J)
1034 grid%iup_adv(IMS+KNTI,J)=I
1037 grid%n_iup_adv(J)=KNTI
1041 !----------------------------------------------------------------------
1042 jam=6+2*(JDE-JDS-1-9)
1044 !*** EXTRACT em AND emt FOR THE LOCAL SUBDOMAINS
1046 DO J=MYJS_P5,MYJE_P5
1047 grid%em_loc(J)=-9.E9
1048 grid%emt_loc(J)=-9.E9
1050 !!! IF(IBROW==1)THEN
1053 grid%em_loc(J)=grid%em(J-2)
1054 grid%emt_loc(J)=grid%emt(J-2)
1057 !!! IF(ITROW==1)THEN
1060 DO JJ=JDE-5,JDE-3 ! JM-4,JM-2
1063 grid%em_loc(J)=grid%em(KNT)
1064 grid%emt_loc(J)=grid%emt(KNT)
1067 !!! IF(ILCOL==1)THEN
1070 DO JJ=6,JDE-6 ! JM-5
1072 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
1074 grid%em_loc(J)=grid%em(KNT)
1075 grid%emt_loc(J)=grid%emt(KNT)
1079 !!! IF(IRCOL==1)THEN
1081 KNT=6+JDE-11 ! JM-10
1082 DO JJ=6,JDE-6 ! JM-5
1084 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
1086 grid%em_loc(J)=grid%em(KNT)
1087 grid%emt_loc(J)=grid%emt(KNT)
1092 CALL wrf_message( 'start_domain_nmm: upstream advection commented out')
1096 !*** SET ZERO-VALUE FOR SOME OUTPUT DIAGNOSTIC ARRAYS
1099 !zhang'sdoing IF(NSTART.EQ.0)THEN
1100 IF(NSTART.EQ.0 .or. .not.allowed_to_read )THEN
1106 GRID%NSOIL= GRID%NUM_SOIL_LAYERS
1109 grid%pctsno(I,J)=-999.0
1110 IF(grid%sm(I,J)<0.5)THEN
1112 ! grid%cmc(I,J)=grid%canwat(i,j) ! tgs
1113 IF(grid%sice(I,J)>0.5)THEN
1117 grid%smstav(I,J)=1.0
1118 grid%smstot(I,J)=1.0
1119 grid%ssroff(I,J)=0.0
1120 grid%bgroff(I,J)=0.0
1123 grid%smc(I,NS,J)=1.0
1124 ! grid%sh2o(I,NS,J)=0.05
1125 grid%sh2o(I,NS,J)=1.0
1132 grid%smstav(I,J)=1.0
1133 grid%smstot(I,J)=1.0
1134 grid%ssroff(I,J)=0.0
1135 grid%bgroff(I,J)=0.0
1136 grid%soiltb(I,J)=273.16
1138 grid%subshx(I,J)=0.0
1139 grid%acsnow(I,J)=0.0
1140 grid%acsnom(I,J)=0.0
1141 grid%snopcx(I,J)=0.0
1145 grid%smc(I,NS,J)=1.0
1146 grid%stc(I,NS,J)=273.16
1147 ! grid%sh2o(I,NS,J)=0.05
1148 grid%sh2o(I,NS,J)=1.0
1161 !----------------------------------------------------------------------
1162 !*** INITIALIZE RADTN VARIABLES
1163 !*** CALCULATE THE NUMBER OF STEPS AT EACH POINT.
1164 !*** THE ARRAY 'lvl' WILL COORDINATE VERTICAL LOCATIONS BETWEEN
1165 !*** THE LIFTED WORKING ARRAYS AND THE FUNDAMENTAL MODEL ARRAYS.
1166 !*** lvl HOLDS THE HEIGHT (IN MODEL LAYERS) OF THE TOPOGRAPHY AT
1167 !*** EACH GRID POINT.
1168 !----------------------------------------------------------------------
1172 grid%lvl(I,J)=LM-KTE
1176 !*** DETERMINE MODEL LAYER LIMITS FOR HIGH(3), MIDDLE(2),
1177 !*** AND LOW(1) CLOUDS. ALSO FIND MODEL LAYER THAT IS JUST BELOW
1178 !*** (HEIGHT-WISE) 400 MB. (K400)
1185 PSUM=PSUM+grid%deta(K)*PDIF
1187 IF(PSUM>PHITP)LPTOP(3)=K
1188 ELSEIF(LPTOP(2)==0)THEN
1189 IF(PSUM>PMDHI)LPTOP(2)=K
1192 ELSEIF(LPTOP(1)==0)THEN
1193 IF(PSUM>PLOMD)LPTOP(1)=K
1197 !*** CALL GRADFS ONCE TO CALC. CONSTANTS AND GET O3 DATA
1201 !*** CALCULATE THE MIDLAYER PRESSURES IN THE STANDARD ATMOSPHERE
1206 ALLOCATE(PHALF(LM+1),STAT=I)
1209 PHALF(K+1)=grid%aeta(K)*PDIF+grid%pt
1216 !!! CALL GRADFS(PHALF,KCCO2,NUNIT_CO2)
1218 !*** CALL SOLARD TO CALCULATE NON-DIMENSIONAL SUN-EARTH DISTANCE
1220 !!! IF(MYPE==0)CALL SOLARD(SUN_DIST)
1221 !!! CALL MPI_BCAST(SUN_DIST,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
1224 !*** CALL ZENITH SIMPLY TO GET THE DAY OF THE YEAR FOR
1225 !*** THE SETUP OF THE OZONE DATA
1227 TIME=(grid%ntsd-1)*GRID%DT
1229 !!! CALL ZENITH(TIME,DAYI,HOUR)
1232 IF(MOD(IDAT(3),4)==0)ADDL=1.
1238 !----------------------------------------------------------------------
1239 !*** SOME INITIAL VALUES RELATED TO TURBULENCE SCHEME
1240 !----------------------------------------------------------------------
1242 IF(allowed_to_read.and.(.NOT.RESTRT))THEN ! This is gopal's inclusion for moving nest
1247 !*** TRY A SIMPLE LINEAR INTERP TO GET 2/10 M VALUES
1251 IF(.NOT.RESTRT .OR. .NOT.allowed_to_read) then
1252 grid%PDSL(I,J)=grid%PD(I,J)*grid%RES(I,J)
1254 !end of zhang's doing
1256 grid%PDSL(I,J)=grid%PD(I,J)*grid%RES(I,J)
1263 PLM=grid%aeta1(KTS)*grid%pdtop+grid%aeta2(KTS)*grid%pdsl(I,J)+grid%pt
1264 APELM=(1.0E5/PLM)**CAPA
1265 TERM1=-0.068283/grid%t(I,J,KTS)
1266 grid%pshltr(I,J)=(grid%pd(I,J)+grid%pdtop+grid%pt)*EXP(TERM1)
1267 APELMNW=(1.0E5/grid%pshltr(I,J))**CAPA
1269 DPLM=(grid%deta1(KTS)*grid%pdtop+grid%deta2(KTS)*grid%pdsl(I,J))*0.5
1270 DZLM=R_D*DPLM*TLM*(1.+P608*QLM)/(G*PLM)
1272 FAC2=(DZLM-10.)/DZLM
1280 IF(.NOT.RESTRT .OR. .NOT.allowed_to_read)THEN
1281 !end of zhang's doing
1285 grid%th10(I,J)=FAC2*grid%ths(I,J)+FAC1*THLM
1286 grid%q10(I,J)=FAC2*grid%qsh(I,J)+FAC1*QLM
1288 IF(grid%sm(I,J).LT.0.5)THEN
1289 grid%u10(I,J)=ULM*(log(10./grid%z0(I,J))/log(DZLM/grid%z0(I,J))) ! this is all Qingfu's doing
1290 grid%v10(I,J)=VLM*(log(10./grid%z0(I,J))/log(DZLM/grid%z0(I,J)))
1291 ZOQING=1.944*SQRT(grid%u10(I,J)*grid%u10(I,J)+grid%v10(I,J)*grid%v10(I,J))
1292 IF(ZOQING.GT.60.)THEN
1293 grid%u10(I,J)=grid%u10(I,J)*(1.12-7.2/ZOQING)
1294 grid%v10(I,J)=grid%v10(I,J)*(1.12-7.2/ZOQING)
1297 ZOQING=(0.074*SQRT(ULM*ULM+VLM*VLM)-0.58)*1.0e-3
1298 ZOQING=MAX(ZOQING,grid%z0(I,J)) ! for winds greater than 12.5 m/s
1299 grid%u10(I,J)=ULM*(log(10./ZOQING))/log(DZLM/ZOQING) ! this is all Qingfu's doing
1300 grid%v10(I,J)=VLM*(log(10./ZOQING))/log(DZLM/ZOQING)
1301 ZOQING=1.944*SQRT(grid%u10(I,J)*grid%u10(I,J)+grid%v10(I,J)*grid%v10(I,J))
1302 IF(ZOQING.GT.60.)THEN
1303 grid%u10(I,J)=grid%u10(I,J)*(1.12-7.2/ZOQING)
1304 grid%v10(I,J)=grid%v10(I,J)*(1.12-7.2/ZOQING)
1314 ! FAC2=(DZLM-2.)/DZLM
1315 ! IF(DZLM.LE.2.)THEN
1320 IF(.NOT.RESTRT.OR.NEST)THEN
1322 IF ( (THLM-grid%ths(I,J))>2.0) THEN ! weight differently in different scenarios
1331 grid%tshltr(I,J)=0.2*grid%ths(I,J)+0.8*THLM
1332 grid%qshltr(I,J)=0.2*grid%qsh(I,J)+0.8*QLM
1334 grid%tshltr(I,J)=FAC2*grid%ths(I,J)+FAC1*THLM
1335 grid%qshltr(I,J)=FAC2*grid%qsh(I,J)+FAC1*QLM
1339 !*** NEED TO CONVERT TO THETA IF IS THE RESTART CASE
1340 !*** AS CHKOUT.f WILL CONVERT TO TEMPERATURE
1342 !EROGERS: COMMENT OUT IN WRF-NMM
1345 ! grid%tshltr(I,J)=grid%tshltr(I,J)*APELMNW
1350 END IF ! IF(allowed_to_read)THEN
1352 !----------------------------------------------------------------------
1353 !*** INITIALIZE TAU-1 VALUES FOR ADAMS-BASHFORTH
1354 !----------------------------------------------------------------------
1358 IF(.NOT.RESTRT .OR. .NOT.allowed_to_read)THEN !zhang's doing
1365 grid%told(I,J,K)=grid%t(I,J,K) ! grid%t AT TAU-1
1366 grid%uold(I,J,K)=grid%u(I,J,K) ! grid%u AT TAU-1
1367 grid%vold(I,J,K)=grid%v(I,J,K) ! grid%v AT TAU-1
1373 !----------------------------------------------------------------------
1374 !*** INITIALIZE NONHYDROSTATIC QUANTITIES
1375 !----------------------------------------------------------------------
1377 !!!! SHOULD grid%dwdt BE REDEFINED IF RESTRT?
1379 IF((.NOT.RESTRT.OR.NEST).AND. allowed_to_read)THEN ! This is gopal's inclusion for moving nest
1390 IF(.NOT.RESTRT .OR. .NOT.allowed_to_read) THEN !zhang's doing
1392 IF(GRID%SIGMA==1)THEN
1395 grid%pdsl(I,J)=grid%pd(I,J)
1401 grid%pdsl(I,J)=grid%res(I,J)*grid%pd(I,J)
1406 ENDIF !zhang's doing
1412 !!!! SHOULD pint,z,w BE REDEFINED IF RESTRT?
1414 WRITE( wrf_err_message, * )' restrt=',restrt,' nest=',nest
1415 CALL wrf_debug( 0, TRIM(wrf_err_message) )
1416 WRITE( wrf_err_message, * )' grid%pdtop=',grid%pdtop,' grid%pt=',grid%pt
1417 CALL wrf_debug( 0, TRIM(wrf_err_message) )
1420 IF(.NOT.RESTRT.OR.NEST .OR. .NOT.allowed_to_read)THEN
1421 !end of zhang's doing
1423 IF(.NOT.RESTRT.OR.NEST)THEN
1428 grid%pint(I,J,K)=grid%eta1(K)*grid%pdtop+grid%eta2(K)*grid%pdsl(I,J)+grid%pt
1429 grid%z(I,J,K)=grid%pint(I,J,K)
1437 IF(.NOT.RESTRT.OR.NEST .OR. .NOT.allowed_to_read)THEN
1443 grid%rtop(I,J,K)=(grid%q(I,J,K)*P608-grid%cwm(I,J,K)+1.)*grid%t(I,J,K)*R_D/ &
1444 ((grid%pint(I,J,K+1)+grid%pint(I,J,K))*0.5)
1454 ! add to output MSLP at the initial time
1456 ! COMPUTATION OF MSLP ! This is gopal's doing
1462 grid%Z(I,J,1)=grid%FIS(I,J)*GI
1469 APELP = (grid%PINT(I,J,K+1)+grid%PINT(I,J,K))
1470 RTOPP = TRG*grid%T(I,J,K)*(1.0+grid%Q(I,J,K)*P608)/APELP
1471 DZ = RTOPP*(grid%DETA1(K)*grid%PDTOP+grid%DETA2(K)*grid%PD(I,J))
1472 grid%Z(I,J,K+1) = grid%Z(I,J,K) + DZ
1480 SFCT = grid%T(I,J,1)*(1.+D608*grid%Q(I,J,1)) + LAPSR*(grid%Z(I,J,1)+grid%Z(I,J,2))*0.5
1481 A = LAPSR*grid%Z(I,J,1)/SFCT
1482 grid%MSLP(I,J) = grid%PINT(I,J,1)*(1-A)**COEF2
1486 ! SET BACK Z AS IN ORIGINAL CODE
1491 grid%Z(I,J,K)=grid%PINT(I,J,K)
1499 #ifndef NO_RESTRICT_ACCEL
1500 !----------------------------------------------------------------------
1501 !*** RESTRICTING THE ACCELERATION ALONG THE BOUNDARIES
1502 !----------------------------------------------------------------------
1506 grid%dwdtmn(I,J)=-EPSIN
1507 grid%dwdtmx(I,J)= EPSIN
1513 JHH=JDE-1-JHL+1 ! JM-JHL+1
1517 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1520 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1522 grid%dwdtmn(IX,JX)=-EPSB
1523 grid%dwdtmx(IX,JX)= EPSB
1530 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1533 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1535 grid%dwdtmn(IX,JX)=-EPSB
1536 grid%dwdtmx(IX,JX)= EPSB
1543 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1546 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1548 grid%dwdtmn(IX,JX)=-EPSB
1549 grid%dwdtmx(IX,JX)= EPSB
1556 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1558 ! moved this line to inside the J-loop, 20030429, jm
1559 IHH=IDE-1-IHL+MOD(J,2) ! IM-IHL+MOD(J,2)
1561 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1563 grid%dwdtmn(IX,JX)=-EPSB
1564 grid%dwdtmx(IX,JX)= EPSB
1573 CALL wrf_message('start_domain_nmm: NO_RESTRICT_ACCEL')
1576 !-----------------------------------------------------------------------
1577 !*** CALL THE GENERAL PHYSICS INITIALIZATION
1578 !-----------------------------------------------------------------------
1581 ALLOCATE(SFULL(KMS:KME),STAT=I) ; SFULL = 0.
1582 ALLOCATE(SMID(KMS:KME),STAT=I) ; SMID = 0.
1583 ALLOCATE(EMISS(IMS:IME,JMS:JME),STAT=I) ; EMISS = 0.
1584 ALLOCATE(EMTEMP(IMS:IME,JMS:JME),STAT=I) ; EMTEMP = 0.
1585 ALLOCATE(GLW(IMS:IME,JMS:JME),STAT=I) ; GLW = 0.
1586 ALLOCATE(HFX(IMS:IME,JMS:JME),STAT=I) ; HFX = 0.
1587 ALLOCATE(LOWLYR(IMS:IME,JMS:JME),STAT=I) ; LOWLYR = 0.
1588 ! ALLOCATE(grid%mavail(IMS:IME,JMS:JME),STAT=I) ; grid%mavail = 0.
1589 ALLOCATE(NCA(IMS:IME,JMS:JME),STAT=I) ; NCA = 0.
1590 ALLOCATE(QFX(IMS:IME,JMS:JME),STAT=I) ; QFX = 0.
1591 ALLOCATE(RAINBL(IMS:IME,JMS:JME),STAT=I) ; RAINBL = 0.
1592 ALLOCATE(RAINC(IMS:IME,JMS:JME),STAT=I) ; RAINC = 0.
1593 ALLOCATE(RAINNC(IMS:IME,JMS:JME),STAT=I) ; RAINNC = 0.
1594 ALLOCATE(RAINNCV(IMS:IME,JMS:JME),STAT=I) ; RAINNCV = 0.
1595 ALLOCATE(SNOWNC(IMS:IME,JMS:JME),STAT=I) ; SNOWNC = 0.
1596 ALLOCATE(SNOWNCV(IMS:IME,JMS:JME),STAT=I) ; SNOWNCV = 0.
1597 ALLOCATE(GRAUPELNC(IMS:IME,JMS:JME),STAT=I) ; GRAUPELNC = 0.
1598 ALLOCATE(GRAUPELNCV(IMS:IME,JMS:JME),STAT=I) ; GRAUPELNCV = 0.
1600 ALLOCATE(ZS(KMS:KME),STAT=I) ; ZS = 0.
1601 ALLOCATE(SNOWC(IMS:IME,JMS:JME),STAT=I) ; SNOWC = 0.
1602 ALLOCATE(THC(IMS:IME,JMS:JME),STAT=I) ; THC = 0.
1603 ALLOCATE(TMN(IMS:IME,JMS:JME),STAT=I) ; TMN = 0.
1604 ALLOCATE(TSFC(IMS:IME,JMS:JME),STAT=I) ; TSFC = 0.
1605 ALLOCATE(Z0_DUM(IMS:IME,JMS:JME),STAT=I) ; Z0_DUM = 0.
1606 ALLOCATE(ALBEDO_DUM(IMS:IME,JMS:JME),STAT=I) ; ALBEDO_DUM = 0.
1608 ALLOCATE(DZS(KMS:KME),STAT=I) ; DZS = 0.
1609 ALLOCATE(RQCBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQCBLTEN = 0.
1610 ALLOCATE(RQIBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQIBLTEN = 0.
1611 ALLOCATE(RQVBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQVBLTEN = 0.
1612 ALLOCATE(RTHBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHBLTEN = 0.
1613 ALLOCATE(RUBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RUBLTEN = 0.
1614 ALLOCATE(RVBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RVBLTEN = 0.
1615 ALLOCATE(RQCCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQCCUTEN = 0.
1616 ALLOCATE(RQICUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQICUTEN = 0.
1617 ALLOCATE(RQRCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQRCUTEN = 0.
1618 ALLOCATE(RQSCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQSCUTEN = 0.
1619 ALLOCATE(RQVCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQVCUTEN = 0.
1620 ALLOCATE(RTHCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHCUTEN = 0.
1621 ALLOCATE(RUSHTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RUSHTEN = 0.
1622 ALLOCATE(RVSHTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RVSHTEN = 0.
1623 ALLOCATE(RQCSHTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQCSHTEN = 0.
1624 ALLOCATE(RQISHTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQISHTEN = 0.
1625 ALLOCATE(RQRSHTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQRSHTEN = 0.
1626 ALLOCATE(RQSSHTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQSSHTEN = 0.
1627 ALLOCATE(RQGSHTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQGSHTEN = 0.
1628 ALLOCATE(RQVSHTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQVSHTEN = 0.
1629 ALLOCATE(RTHSHTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHSHTEN = 0.
1630 ALLOCATE(RTHRATEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHRATEN = 0.
1631 ALLOCATE(RTHRATENLW(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHRATENLW = 0.
1632 ALLOCATE(RTHRATENSW(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHRATENSW = 0.
1633 ALLOCATE(ZINT(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; ZINT = 0.
1634 ALLOCATE(CONVFAC(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; CONVFAC = 0.
1635 ALLOCATE(PINT_TRANS(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; PINT_TRANS = 0.
1636 ALLOCATE(T_TRANS(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; T_TRANS = 0.
1637 ALLOCATE(RRI(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RRI = 0.
1638 ALLOCATE(CLDFRA_TRANS(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; CLDFRA_TRANS = 0.
1640 ALLOCATE(CLDFRA_OLD(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; CLDFRA_OLD = 0.
1643 ALLOCATE(w0avg(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; w0avg = 0.
1645 !-----------------------------------------------------------------------
1646 !jm added set of g_inv
1649 GRID%RADT=GRID%NRADS*GRID%DT/60.
1650 GRID%BLDT=GRID%NPHS*GRID%DT/60.
1651 GRID%CUDT=GRID%NCNVC*GRID%DT/60.
1652 GRID%GSMDT=GRID%NPHS*GRID%DT/60.
1656 SFCZ=grid%fis(I,J)*G_INV
1660 IF(.NOT.RESTRT .OR. .NOT.allowed_to_read) then
1661 grid%PDSL(I,J)=grid%PD(I,J)*grid%RES(I,J)
1663 !end of zhang's doing
1665 grid%pdsl(I,J)=grid%pd(I,J)*grid%res(I,J)
1667 PSURF=grid%pint(I,J,KTS)
1668 EXNSFC=(1.E5/PSURF)**CAPA
1669 grid%xland(I,J)=grid%sm(I,J)+1.
1670 THSIJ=(grid%sst(I,J)*EXNSFC)*(grid%xland(I,J)-1.) &
1671 & +grid%ths(I,J)*(2.-grid%sm(I,J))
1672 TSFC(I,J)=THSIJ/EXNSFC
1675 PLYR=(grid%pint(I,J,K)+grid%pint(I,J,K+1))*0.5
1677 CWML=grid%cwm(I,J,K)
1678 RRI(I,K,J)=R_D*TL*(1.+P608*grid%q(I,J,K))/PLYR
1679 ZINT(I,K+1,J)=ZINT(I,K,J)+TL/PLYR &
1680 *(grid%deta1(K)*grid%pdtop+grid%deta2(K)*grid%pdsl(I,J))*ROG &
1681 *(grid%q(I,J,K)*P608-CWML+1.)
1685 !!! ZMID(I,K,J)=0.5*(ZINT(I,K,J)+ZINT(I,K+1,J))
1690 !-----------------------------------------------------------------------
1691 !*** RECREATE SIGMA VALUES AT LAYER INTERFACES FOR THE FULL VERTICAL
1692 !*** DOMAIN FROM THICKNESS VALUES FOR THE TWO SUBDOMAINS.
1693 !*** NOTE: KTE=NUMBER OF LAYERS PLUS ONE
1694 !-----------------------------------------------------------------------
1696 PDTOT=101325.-grid%pt
1698 PDBOT=PDTOT-grid%pdtop
1703 DSIG=(grid%deta1(K-1)*grid%pdtop+grid%deta2(K-1)*PDBOT)*RPDTOT
1704 DSIGSUM=DSIGSUM+DSIG
1705 SFULL(K)=SFULL(K-1)-DSIG
1706 SMID(K-1)=0.5*(SFULL(K-1)+SFULL(K))
1708 DSIG=(grid%deta1(KTE-1)*grid%pdtop+grid%deta2(KTE-1)*PDBOT)*RPDTOT
1709 DSIGSUM=DSIGSUM+DSIG
1710 SMID(KTE-1)=0.5*(SFULL(KTE-1)+SFULL(KTE))
1712 !-----------------------------------------------------------------------
1716 if(.NOT.RESTRT .OR. .NOT.allowed_to_read)grid%LU_INDEX=grid%IVGTYP
1717 !end of zhang's doing
1719 grid%lu_index=grid%ivgtyp
1725 Z0_DUM(I,J)=grid%z0(I,J) ! hold
1726 ALBEDO_DUM(I,J)=grid%albedo(I,J) ! Save albedos
1731 !*** Always define the quantity grid%z0base
1737 IF(grid%sm(I,J)==0)then
1738 grid%z0base(I,J)=VZ0TBL_24(grid%ivgtyp(I,J))+Z0LAND
1740 grid%z0base(I,J)=VZ0TBL_24(grid%ivgtyp(I,J))+Z0SEA
1747 ! when allocating CAM radiation 4d arrays (ozmixm, aerosolc) these are not needed
1751 ! Set GMT, JULDAY, and JULYR outside of phy_init because it is no longer
1752 ! called inside phy_init due to moving nest changes. (When nests move
1753 ! phy_init may not be called on a process if, for example, it is a moving
1754 ! nest and if this part of the domain is not being initialized (not the
1755 ! leading edge).) Calling domain_setgmtetc() here will avoid this problem
1756 ! when NMM moves to moving nests.
1757 CALL domain_setgmtetc( GRID, START_OF_SIMULATION )
1762 CALL nl_get_julyr (grid%id, grid%julyr)
1763 CALL nl_get_julday (grid%id, grid%julday)
1764 CALL nl_get_gmt (grid%id, grid%gmt)
1767 CALL domain_clock_get( grid, current_time=currentTime )
1768 CALL WRFU_TimeGet( currentTime, YY=grid%julyr, dayOfYear=grid%julday, &
1769 H=hr, M=mn, S=sec, MS=ms, rc=rc)
1770 grid%gmt=hr+real(mn)/60.+real(sec)/3600.+real(ms)/(1000*3600)
1771 WRITE( wrf_err_message , * ) 'DEBUG start_domain_nmm(): gmt = ',grid%gmt
1772 CALL wrf_debug( 150, TRIM(wrf_err_message) )
1776 ! Several arguments are RCONFIG entries in Registry.NMM. Registry no longer
1777 ! includes these as dummy arguments or declares them. Access them from
1779 #ifndef WRF_NMM_NEST
1780 grid%moved = .FALSE.
1783 IF (GRID%RESTART) THEN
1784 LRESTART = GRID%RESTART
1786 IF (grid%moved) THEN
1793 CALL PHY_INIT(GRID%ID,CONFIG_FLAGS,GRID%DT,LRESTART,SFULL,SMID &
1794 & ,grid%pt,TSFC,GRID%RADT,GRID%BLDT,GRID%CUDT,GRID%GSMDT &
1795 & ,grid%DUCUDT, grid%DVCUDT &
1796 & ,RTHCUTEN, RQVCUTEN, RQRCUTEN &
1797 & ,RQCCUTEN, RQSCUTEN, RQICUTEN &
1798 & ,RUSHTEN, RVSHTEN, RTHSHTEN &
1799 & ,RQVSHTEN, RQRSHTEN, RQCSHTEN &
1800 & ,RQSSHTEN, RQISHTEN, RQGSHTEN &
1801 & ,RUBLTEN,RVBLTEN,RTHBLTEN &
1802 & ,RQVBLTEN,RQCBLTEN,RQIBLTEN &
1803 & ,RTHRATEN,RTHRATENLW,RTHRATENSW &
1804 & ,STEPBL,STEPRA,STEPCU &
1805 & ,grid%w0avg, RAINNC, RAINC, grid%raincv, RAINNCV &
1806 & ,SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV &
1807 & ,NCA,GRID%SWRAD_SCAT &
1808 & ,grid%cldefi,LOWLYR &
1810 & ,grid%rthften, grid%rqvften &
1811 & ,CLDFRA_TRANS,CLDFRA_OLD,GLW,grid%gsw,EMISS,EMTEMP,grid%lu_index&
1812 & ,GRID%LANDUSE_ISICE, GRID%LANDUSE_LUCATS &
1813 & ,GRID%LANDUSE_LUSEAS, GRID%LANDUSE_ISN &
1815 & ,grid%xlat,grid%xlong,grid%albedo,grid%albbck &
1816 & ,GRID%GMT,GRID%JULYR,GRID%JULDAY &
1817 & ,GRID%LEVSIZ, NUM_OZMIXM, NUM_AEROSOLC, GRID%PAERLEV &
1818 & ,TMN,grid%xland,grid%znt,grid%z0,grid%ustar,grid%mol,grid%pblh,grid%tke_pbl &
1819 & ,grid%exch_h,THC,SNOWC,grid%mavail,HFX,QFX,RAINBL &
1820 & ,grid%stc,ZS,DZS,GRID%NUM_SOIL_LAYERS,WARM_RAIN &
1822 & ,grid%apr_gr,grid%apr_w,grid%apr_mc,grid%apr_st,grid%apr_as &
1823 & ,grid%apr_capma,grid%apr_capme,grid%apr_capmi &
1824 & ,grid%xice,grid%xice,grid%vegfra,grid%snow,grid%canwat,grid%smstav &
1825 & ,grid%smstot, grid%sfcrunoff,grid%udrunoff,grid%grdflx,grid%acsnow &
1826 & ,grid%acsnom,grid%ivgtyp,grid%isltyp,grid%sfcevp,grid%smc &
1827 & ,grid%sh2o, grid%snowh, grid%smfr3d & ! temporary
1829 & ,GRID%DX,GRID%DY,grid%f_ice_phy,grid%f_rain_phy,grid%f_rimef_phy &
1830 & ,grid%mp_restart_state,grid%tbpvs_state,grid%tbpvs0_state &
1831 & ,ALLOWED_TO_READ,grid%moved,START_OF_SIMULATION &
1833 & ,IDS, IDE, JDS, JDE, KDS, KDE &
1834 & ,IMS, IME, JMS, JME, KMS, KME &
1835 & ,ITS, ITE, JTS, JTE, KTS, KTE &
1836 & ,NUM_URBAN_LAYERS &
1841 grid%julyr_rst=grid%julyr_rst
1842 grid%julday_rst=grid%julday_rst
1843 grid%gmt_rst=grid%gmt_rst
1844 !end of zhang's doing
1846 !-----------------------------------------------------------------------
1847 !---- Initialization for gravity wave drag (GWD) & mountain blocking (MB)
1849 CALL nl_get_cen_lat(GRID%ID, CEN_LAT) !-- CEN_LAT in deg
1850 CALL nl_get_cen_lon(GRID%ID, CEN_LON) !-- CEN_LON in deg
1851 DTPHS=grid%dt*grid%nphs
1852 CALL GWD_init(DTPHS,GRID%DX,GRID%DY,CEN_LAT,CEN_LON,RESTRT &
1853 & ,grid%glat,grid%glon,grid%crot,grid%srot,grid%hangl &
1854 & ,IDS,IDE,JDS,JDE,KDS,KDE &
1855 & ,IMS,IME,JMS,JME,KMS,KME &
1856 & ,ITS,ITE,JTS,JTE,KTS,KTE )
1860 grid%ugwdsfc(I,J)=0.
1861 grid%vgwdsfc(I,J)=0.
1866 !-----------------------------------------------------------------------
1869 IF(NSTART.EQ.0 .or. .not.allowed_to_read )THEN
1876 grid%z0(I,J)=grid%z0base(I,J)
1883 grid%cldfra(I,J,K)=CLDFRA_TRANS(I,K,J)
1892 !mp replace F*_PHY with values defined in module_initialize_real.F?
1894 IF (.NOT. RESTRT .and. ALLOWED_TO_READ) THEN !zhang
1896 grid%f_ice = grid%f_ice_phy
1897 grid%f_rimef = grid%f_rimef_phy
1898 grid%f_rain = grid%f_rain_phy
1902 IF (.NOT. RESTRT .and. ALLOWED_TO_READ) THEN
1903 ! Added by Greg Thompson, NCAR-RAL, for initializing water vapor
1904 ! mixing ratio (from NMM's specific humidity var) into moist array.
1907 CALL wrf_message('Initializng moist(:,:,:, Qv) from q')
1911 moist(I,J,K,P_QV) = grid%q(I,J,K) / (1.-grid%q(I,J,K))
1916 ! Also sum cloud water, ice, rain, snow, graupel into Ferrier cwm
1917 ! array (if any hydrometeors found and non-zero from initialization
1918 ! package). Then, determine fractions ice and rain from species.
1920 IF (.not. (MAXVAL(grid%cwm).gt.0. .and. MAXVAL(grid%cwm).lt.1.) ) then
1921 do i_m = 2, num_moist
1923 & CALL wrf_message(' summing moist(:,:,:,i_m) into cwm array')
1927 IF ( (moist(I,J,K,i_m).gt.EPSQ) .and. (i_m.ne.p_qv) ) THEN
1928 grid%cwm(I,J,K) = grid%cwm(I,J,K) + moist(I,J,K,i_m)
1935 IF (.not. ( (maxval(grid%f_ice)+maxval(grid%f_rain)) .gt. EPSQ) ) THEN
1936 CALL wrf_message(' computing grid%f_ice')
1937 do i_m = 2, num_moist
1941 IF ( (moist(I,J,K,i_m).gt.EPSQ) .and. &
1942 & ( (i_m.eq.p_qi).or.(i_m.eq.p_qs).or.(i_m.eq.p_qg) ) ) THEN
1943 grid%f_ice(I,K,J) = grid%f_ice(I,K,J) + moist(I,J,K,i_m)
1945 if (model_config_rec%mp_physics(grid%id).EQ.ETAMPNEW) then
1946 if ((i_m.eq.p_qi).or.(i_m.eq.p_qg) ) then
1947 moist(I,J,K,p_qs)=moist(I,J,K,p_qs)+moist(I,J,K,i_m)
1948 moist(I,J,K,i_m) =0.
1955 CALL wrf_message(' computing f_rain')
1960 IF(grid%f_ice(i,k,j)<=EPSQ)THEN
1961 grid%f_ice(I,K,J)=0.
1963 grid%f_ice(I,K,J) = grid%f_ice(I,K,J)/grid%cwm(I,J,K)
1965 IF ( (moist(I,J,K,p_qr)+moist(I,J,K,p_qc)).gt.EPSQ) THEN
1966 IF(moist(i,j,k,p_qr)<=EPSQ)THEN
1967 grid%f_rain(I,K,J)=0.
1969 grid%f_rain(I,K,J) = moist(i,j,k,p_qr) &
1970 & / (moist(i,j,k,p_qr)+moist(i,j,k,p_qc))
1978 ! End addition by Greg Thompson
1980 IF (maxval(grid%f_ice) .gt. 0.) THEN
1984 grid%f_ice_phy(I,K,J)=grid%f_ice(I,K,J)
1990 IF (maxval(grid%f_rain) .gt. 0.) THEN
1994 grid%f_rain_phy(I,K,J)=grid%f_rain(I,K,J)
2000 IF (maxval(grid%f_rimef) .gt. 0.) THEN
2004 grid%f_rimef_phy(I,K,J)=grid%f_rimef(I,K,J)
2011 IF (.NOT. RESTRT) THEN
2012 !-- Replace albedos if original albedos are nonzero
2013 IF(MAXVAL(ALBEDO_DUM)>0.)THEN
2016 grid%albedo(I,J)=ALBEDO_DUM(I,J)
2023 if(.NOT. RESTRT .OR. .NOT.allowed_to_read) then !zhang's doing
2030 grid%aprec(I,J)=RAINNC(I,J)*1.E-3
2031 grid%cuprec(I,J)=grid%raincv(I,J)*1.E-3
2035 !following will need mods Sep06
2044 CONVFAC(I,K,J) = grid%pint(II,JJ,KK)/RGASUNIV/grid%t(II,JJ,KK)
2052 PINT_TRANS(I,K,J)=grid%pint(I,J,K)
2053 T_TRANS(I,K,J)=grid%t(I,J,K)
2059 grid%xlat(i,j)=grid%glat(I,J)/DEGRAD
2060 grid%xlong(I,J)=grid%glon(I,J)/DEGRAD
2064 !!! write(0,*)'now do chem_init'
2065 CALL CHEM_INIT (GRID%ID,CHEM,EMIS_ANT,scalar,GRID%DT,GRID%BIOEMDT,GRID%PHOTDT,GRID%CHEMDT, &
2066 STEPBIOE,STEPPHOT,STEPCHEM,STEPFIREPL,GRID%PLUMERISEFIRE_FRQ, &
2067 ZINT,grid%xlat,grid%xlong,G,AERWRF,CONFIG_FLAGS,grid, &
2068 RRI,T_TRANS,PINT_TRANS,CONVFAC, &
2069 grid%ttday,grid%tcosz,grid%julday,grid%gmt, &
2070 GD_CLOUD,GD_CLOUD2,raincv_a,raincv_b, &
2071 GD_CLOUD_a,GD_CLOUD2_a, &
2072 GD_CLOUD_B,GD_CLOUD2_B, &
2073 TAUAER1,TAUAER2,TAUAER3,TAUAER4, &
2074 GAER1,GAER2,GAER3,GAER4, &
2075 WAER1,WAER2,WAER3,WAER4, &
2076 l2AER,l3AER,l4AER,l5AER,l6aer,l7aer, &
2077 PM2_5_DRY,PM2_5_WATER,PM2_5_DRY_EC, &
2078 grid%last_chem_time_year,grid%last_chem_time_month, &
2079 grid%last_chem_time_day,grid%last_chem_time_hour, &
2080 grid%last_chem_time_minute,grid%last_chem_time_second, &
2083 IDS , IDE , JDS , JDE , KDS , KDE , &
2084 IMS , IME , JMS , JME , KMS , KME , &
2085 ITS , ITE , JTS , JTE , KTS , KTE )
2088 ! calculate initial pm
2090 SELECT CASE (CONFIG_FLAGS%CHEM_OPT)
2091 case (GOCART_SIMPLE,GOCARTRACM_KPP,GOCARTRADM2,GOCARTRADM2_KPP)
2092 call sum_pm_gocart ( &
2093 RRI, CHEM, PM2_5_DRY, PM2_5_DRY_EC, PM10, &
2094 IDS,IDE, JDS,JDE, KDS,KDE, &
2095 IMS,IME, JMS,JME, KMS,KME, &
2096 ITS,ITE, JTS,JTE, KTS,KTE-1 )
2097 CASE (RADM2SORG,RADM2SORG_AQ,RADM2SORG_KPP,RACMSORG_AQ,RACMSORG_KPP)
2098 !!! write(0,*)'sum pm '
2099 CALL SUM_PM_SORGAM ( &
2100 RRI, CHEM, H2OAJ, H2OAI, &
2101 PM2_5_DRY, PM2_5_WATER, PM2_5_DRY_EC, PM10, &
2102 IDS,IDE, JDS,JDE, KDS,KDE, &
2103 IMS,IME, JMS,JME, KMS,KME, &
2104 ITS,ITE, JTS,JTE, KTS,KTE-1 )
2106 CASE (CBMZ_MOSAIC_4BIN, CBMZ_MOSAIC_8BIN, CBMZ_MOSAIC_4BIN_AQ, CBMZ_MOSAIC_8BIN_AQ)
2107 CALL SUM_PM_MOSAIC ( &
2109 PM2_5_DRY, PM2_5_WATER, PM2_5_DRY_EC, PM10, &
2110 IDS,IDE, JDS,JDE, KDS,KDE, &
2111 IMS,IME, JMS,JME, KMS,KME, &
2112 ITS,ITE, JTS,JTE, KTS,KTE-1 )
2115 DO J=JTS,MIN(JTE,JDE-1)
2116 DO K=KTS,MIN(KTE,KDE-1)
2117 DO I=ITS,MIN(ITE,IDE-1)
2118 PM2_5_DRY(I,K,J) = 0.
2119 PM2_5_WATER(I,K,J) = 0.
2120 PM2_5_DRY_EC(I,K,J) = 0.
2135 ! DEALLOCATE(grid%mavail)
2142 DEALLOCATE(RQCBLTEN)
2143 DEALLOCATE(RQIBLTEN)
2144 DEALLOCATE(RQVBLTEN)
2145 DEALLOCATE(RTHBLTEN)
2148 DEALLOCATE(RQCCUTEN)
2149 DEALLOCATE(RQICUTEN)
2150 DEALLOCATE(RQRCUTEN)
2151 DEALLOCATE(RQSCUTEN)
2152 DEALLOCATE(RQVCUTEN)
2153 DEALLOCATE(RTHCUTEN)
2156 DEALLOCATE(RQCSHTEN)
2157 DEALLOCATE(RQISHTEN)
2158 DEALLOCATE(RQRSHTEN)
2159 DEALLOCATE(RQSSHTEN)
2160 DEALLOCATE(RQGSHTEN)
2161 DEALLOCATE(RQVSHTEN)
2162 DEALLOCATE(RTHSHTEN)
2163 DEALLOCATE(RTHRATEN)
2164 DEALLOCATE(RTHRATENLW)
2165 DEALLOCATE(RTHRATENSW)
2174 DEALLOCATE(PINT_TRANS)
2176 DEALLOCATE(CLDFRA_TRANS)
2178 DEALLOCATE(CLDFRA_OLD)
2183 !-----------------------------------------------------------------------
2184 !----------------------------------------------------------------------
2187 grid%dwdtmn(I,J)=grid%dwdtmn(I,J)*grid%hbm3(I,J)
2188 grid%dwdtmx(I,J)=grid%dwdtmx(I,J)*grid%hbm3(I,J)
2191 !----------------------------------------------------------------------
2194 # include <HALO_NMM_INIT_1.inc>
2195 # include <HALO_NMM_INIT_2.inc>
2196 # include <HALO_NMM_INIT_3.inc>
2197 # include <HALO_NMM_INIT_4.inc>
2198 # include <HALO_NMM_INIT_5.inc>
2199 # include <HALO_NMM_INIT_6.inc>
2200 # include <HALO_NMM_INIT_7.inc>
2201 # include <HALO_NMM_INIT_8.inc>
2202 # include <HALO_NMM_INIT_9.inc>
2203 # include <HALO_NMM_INIT_10.inc>
2204 # include <HALO_NMM_INIT_11.inc>
2205 # include <HALO_NMM_INIT_12.inc>
2206 # include <HALO_NMM_INIT_13.inc>
2207 # include <HALO_NMM_INIT_14.inc>
2208 # include <HALO_NMM_INIT_15.inc>
2209 # include <HALO_NMM_INIT_15B.inc>
2210 # include <HALO_NMM_INIT_16.inc>
2211 # include <HALO_NMM_INIT_17.inc>
2212 # include <HALO_NMM_INIT_18.inc>
2213 # include <HALO_NMM_INIT_19.inc>
2214 # include <HALO_NMM_INIT_20.inc>
2215 # include <HALO_NMM_INIT_21.inc>
2216 # include <HALO_NMM_INIT_22.inc>
2217 # include <HALO_NMM_INIT_23.inc>
2218 # include <HALO_NMM_INIT_24.inc>
2219 # include <HALO_NMM_INIT_25.inc>
2220 # include <HALO_NMM_INIT_26.inc>
2221 # include <HALO_NMM_INIT_27.inc>
2222 # include <HALO_NMM_INIT_28.inc>
2223 # include <HALO_NMM_INIT_29.inc>
2224 # include <HALO_NMM_INIT_30.inc>
2225 # include <HALO_NMM_INIT_31.inc>
2226 # include <HALO_NMM_INIT_32.inc>
2227 # include <HALO_NMM_INIT_33.inc>
2228 # include <HALO_NMM_INIT_34.inc>
2229 # include <HALO_NMM_INIT_35.inc>
2230 # include <HALO_NMM_INIT_36.inc>
2231 # include <HALO_NMM_INIT_37.inc>
2232 # include <HALO_NMM_INIT_38.inc>
2233 # include <HALO_NMM_INIT_39.inc>
2236 !#include <scalar_derefs.inc>
2241 END SUBROUTINE START_DOMAIN_NMM