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 & ,RTHRATENLW,RTHRATENSW
136 REAL,ALLOCATABLE,DIMENSION(:,:) :: EMISS,EMTEMP,GLW,HFX &
138 & ,QFX,RAINBL,RAINC,RAINNC &
140 & ,SNOWC,THC,TMN,TSFC
142 REAL,ALLOCATABLE,DIMENSION(:,:) :: Z0_DUM, ALBEDO_DUM
144 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: ZINT,RRI,CONVFAC,ZMID
145 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: T_TRANS,PINT_TRANS
146 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: CLDFRA_TRANS
148 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: CLDFRA_OLD
151 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: w0avg
153 LOGICAL :: E_BDY,N_BDY,S_BDY,W_BDY,WARM_RAIN,ADV_MOIST_COND
154 LOGICAL :: START_OF_SIMULATION
158 integer :: jam,retval
159 CHARACTER(LEN=255) :: message
161 real :: dsig,dsigsum,pdbot,pdtot,rpdtot
162 real :: fisx,ht,prodx,rg
163 integer :: i_t=096,j_t=195,n_t=11
164 integer :: i_u=49,j_u=475,n_u=07
165 integer :: i_v=49,j_v=475,n_v=07
166 integer :: num_ozmixm, num_aerosolc
167 real :: cen_lat,cen_lon,dtphs ! GWD
168 integer :: num_urban_layers
170 INTEGER :: hr, mn, sec, ms, rc
171 TYPE(WRFU_Time) :: currentTime
173 INTEGER :: interval_seconds, restart_interval
177 REAL,DIMENSION(0:30) :: VZ0TBL_24
179 & 1.00, 0.07, 0.07, 0.07, 0.07, 0.15, &
180 & 0.08, 0.03, 0.05, 0.86, 0.80, 0.85, &
181 & 2.65, 1.09, 0.80, 0.001, 0.04, 0.05, &
182 & 0.01, 0.04, 0.06, 0.05, 0.03, 0.001, &
183 & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/)
187 !----------------------------------------------------------------------
189 !#include <scalar_derefs.inc>
190 !----------------------------------------------------------------------
191 !**********************************************************************
192 !----------------------------------------------------------------------
195 CALL GET_IJK_FROM_GRID(GRID, &
196 & IDS,IDE,JDS,JDE,KDS,KDE, &
197 & IMS,IME,JMS,JME,KMS,KME, &
198 & IPS,IPE,JPS,JPE,KPS,KPE)
207 CALL model_to_grid_config_rec(grid%id,model_config_rec &
210 RESTRT=config_flags%restart
212 !zhang's doing added for analysis option
213 ANAL=config_flags%analysis ! gopal's doing
218 IF(IME>NMM_MAX_DIM )THEN
219 WRITE(wrf_err_message,*) &
220 'start_domain_nmm ime (',ime,') > ',NMM_MAX_DIM, &
221 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
222 CALL WRF_ERROR_FATAL(wrf_err_message)
225 IF(JME>NMM_MAX_DIM )THEN
226 WRITE(wrf_err_message,*) &
227 'start_domain_nmm jme (',jme,') > ',NMM_MAX_DIM, &
228 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
229 CALL WRF_ERROR_FATAL(wrf_err_message)
232 IF(IMS>-2.OR.IME>NMM_MAX_DIM )THEN
233 WRITE(wrf_err_message,*) &
234 'start_domain_nmm ims(',ims,' > -2 or ime (',ime,') > ',NMM_MAX_DIM, &
235 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
236 CALL WRF_ERROR_FATAL(wrf_err_message)
239 IF(JMS>-2.OR.JME>NMM_MAX_DIM )THEN
240 WRITE(wrf_err_message,*) &
241 'start_domain_nmm jms(',jms,' > -2 or jme (',jme,') > ',NMM_MAX_DIM, &
242 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
243 CALL WRF_ERROR_FATAL(wrf_err_message)
247 !----------------------------------------------------------------------
249 WRITE(message,196)IHRST,IDAT
250 CALL wrf_message(trim(message))
251 196 FORMAT(' FORECAST BEGINS ',I2,' GMT ',2(I2,'/'),I4)
254 !! Restarts must be made from times for which boundary data is available
256 CALL nl_get_interval_seconds(GRID%ID, interval_seconds)
257 CALL nl_get_restart_interval(GRID%ID, restart_interval)
258 IF (MOD(restart_interval*60,interval_seconds) /= 0) THEN
259 WRITE(wrf_err_message,*)' restart_interval is not integer multiplier of interval_seconds'
260 CALL WRF_ERROR_FATAL(wrf_err_message)
264 !!!! For now, set NPES to 1
275 !! All "my" variables defined below have had the IDE or JDE specification
284 MYIS1 =MAX(IDS+1,IPS)
285 MYIE1 =MIN(IDE-2,IPE)
286 MYJS2 =MAX(JDS+2,JPS)
287 MYJE2 =MIN(JDE-3,JPE)
289 MYIS_P1=MAX(IDS,IPS-1)
290 MYIE_P1=MIN(IDE-1,IPE+1)
291 MYIS_P2=MAX(IDS,IPS-2)
292 MYIE_P2=MIN(IDE-1,IPE+2)
293 MYIS_P3=MAX(IDS,IPS-3)
294 MYIE_P3=MIN(IDE-1,IPE+3)
295 MYJS_P3=MAX(JDS,JPS-3)
296 MYJE_P3=MIN(JDE-1,JPE+3)
297 MYIS_P4=MAX(IDS,IPS-4)
298 MYIE_P4=MIN(IDE-1,IPE+4)
299 MYJS_P4=MAX(JDS,JPS-4)
300 MYJE_P4=MIN(JDE-1,JPE+4)
301 MYIS_P5=MAX(IDS,IPS-5)
302 MYIE_P5=MIN(IDE-1,IPE+5)
303 MYJS_P5=MAX(JDS,JPS-5)
304 MYJE_P5=MIN(JDE-1,JPE+5)
306 MYIS1_P1=MAX(IDS+1,IPS-1)
307 MYIE1_P1=MIN(IDE-2,IPE+1)
308 MYIS1_P2=MAX(IDS+1,IPS-2)
309 MYIE1_P2=MIN(IDE-2,IPE+2)
311 MYJS1_P1=MAX(JDS+1,JPS-1)
312 MYJS2_P1=MAX(JDS+2,JPS-1)
313 MYJE1_P1=MIN(JDE-2,JPE+1)
314 MYJE2_P1=MIN(JDE-3,JPE+1)
315 MYJS1_P2=MAX(JDS+1,JPS-2)
316 MYJE1_P2=MIN(JDE-2,JPE+2)
317 MYJS2_P2=MAX(JDS+2,JPS-2)
318 MYJE2_P2=MIN(JDE-3,JPE+2)
319 MYJS1_P3=MAX(JDS+1,JPS-3)
320 MYJE1_P3=MIN(JDE-2,JPE+3)
321 MYJS2_P3=MAX(JDS+2,JPS-3)
322 MYJE2_P3=MIN(JDE-3,JPE+3)
327 CALL WRF_GET_MYPROC(MYPROC)
331 !----------------------------------------------------------------------
332 !*** Let each task determine who its eight neighbors are because we
333 !*** will need to know that for the halo exchanges. The direction
334 !*** to each neighbor will be designated by the following integers:
345 !*** If a task has no neighbor in a particular direction because of
346 !*** the presence of the global domain boundary then that element
347 !*** of my_neb is set to -1.
348 !-----------------------------------------------------------------------
350 call wrf_get_nprocx(inpes)
351 call wrf_get_nprocy(jnpes)
353 allocate(itemp(inpes,jnpes),stat=istat)
368 if(myj+1<=jnpes)my_n=itemp(myi,myj+1)
371 if(myi+1<=inpes)my_e=itemp(myi+1,myj)
374 if(myj-1>=1)my_s=itemp(myi,myj-1)
377 if(myi-1>=1)my_w=itemp(myi-1,myj)
380 if((myi+1<=inpes).and.(myj+1<=jnpes)) &
381 my_ne=itemp(myi+1,myj+1)
384 if((myi+1<=inpes).and.(myj-1>=1)) &
385 my_se=itemp(myi+1,myj-1)
388 if((myi-1>=1).and.(myj-1>=1)) &
389 my_sw=itemp(myi-1,myj-1)
392 if((myi-1>=1).and.(myj+1<=jnpes)) &
393 my_nw=itemp(myi-1,myj+1)
405 # include <HALO_NMM_INIT_1.inc>
406 # include <HALO_NMM_INIT_2.inc>
407 # include <HALO_NMM_INIT_3.inc>
408 # include <HALO_NMM_INIT_4.inc>
409 # include <HALO_NMM_INIT_5.inc>
410 # include <HALO_NMM_INIT_6.inc>
411 # include <HALO_NMM_INIT_7.inc>
412 # include <HALO_NMM_INIT_8.inc>
413 # include <HALO_NMM_INIT_9.inc>
414 # include <HALO_NMM_INIT_10.inc>
415 # include <HALO_NMM_INIT_11.inc>
416 # include <HALO_NMM_INIT_12.inc>
417 # include <HALO_NMM_INIT_13.inc>
418 # include <HALO_NMM_INIT_14.inc>
419 # include <HALO_NMM_INIT_15.inc>
420 # include <HALO_NMM_INIT_16.inc>
421 # include <HALO_NMM_INIT_17.inc>
422 # include <HALO_NMM_INIT_18.inc>
423 # include <HALO_NMM_INIT_19.inc>
424 # include <HALO_NMM_INIT_20.inc>
425 # include <HALO_NMM_INIT_21.inc>
426 # include <HALO_NMM_INIT_22.inc>
427 # include <HALO_NMM_INIT_23.inc>
428 # include <HALO_NMM_INIT_24.inc>
429 # include <HALO_NMM_INIT_25.inc>
430 # include <HALO_NMM_INIT_26.inc>
431 # include <HALO_NMM_INIT_27.inc>
432 # include <HALO_NMM_INIT_28.inc>
433 # include <HALO_NMM_INIT_29.inc>
434 # include <HALO_NMM_INIT_30.inc>
435 # include <HALO_NMM_INIT_31.inc>
436 # include <HALO_NMM_INIT_32.inc>
437 # include <HALO_NMM_INIT_33.inc>
438 # include <HALO_NMM_INIT_34.inc>
439 # include <HALO_NMM_INIT_35.inc>
440 # include <HALO_NMM_INIT_36.inc>
441 # include <HALO_NMM_INIT_37.inc>
442 # include <HALO_NMM_INIT_38.inc>
443 # include <HALO_NMM_INIT_39.inc>
447 grid%iheg(J)=MOD(J+1,2)
448 grid%ihwg(J)=grid%iheg(J)-1
449 grid%iveg(J)=MOD(J,2)
450 grid%ivwg(J)=grid%iveg(J)-1
454 grid%ivw(J)=grid%ivwg(J)
455 grid%ive(J)=grid%iveg(J)
456 grid%ihe(J)=grid%iheg(J)
457 grid%ihw(J)=grid%ihwg(J)
470 IF((.NOT.RESTRT .AND. .NOT.ANAL) .OR. .NOT.allowed_to_read)THEN
471 !end of zhang's doing
477 grid%pdsl(I,J) =grid%pd(I,J)*grid%res(I,J)
479 IF(allowed_to_read)grid%acprec(I,J)=0. ! This is gopal's inclusion for moving nest
484 ! fisx=max(grid%fis(i,j),0.)
485 ! prodx=grid%z0(I,J)*Z0MAX
486 ! grid%z0(I,J) =grid%sm(I,J)*Z0SEA+(1.-grid%sm(I,J))* &
487 ! & (grid%z0(I,J)*Z0MAX+FISx *FCM+Z0LAND)
488 !!! & (prodx +FISx *FCM+Z0LAND)
494 IF(allowed_to_read)THEN ! This is gopal's inclusion for moving nest
496 grid%htop(I,J) =REAL(KTS)
497 grid%htopd(I,J) =REAL(KTS)
498 grid%htops(I,J) =REAL(KTS)
499 grid%hbot(I,J) =REAL(KTE)
500 grid%hbotd(I,J) =REAL(KTE)
501 grid%hbots(I,J) =REAL(KTE)
504 !*** AT THIS POINT, WE MUST CALCULATE THE INITIAL POTENTIAL TEMPERATURE
505 !*** OF THE SURFACE AND OF THE SUBGROUND.
506 !*** EXTRAPOLATE DOWN FOR INITIAL SURFACE POTENTIAL TEMPERATURE.
507 !*** ALSO DO THE SHELTER PRESSURE.
510 !*** BECAUSE WE REINITIALIZE TOPOGRAPHY, LAND SEA MASK AND FIND THE TEMPERATURE
511 !*** FIELD OVER THE NEW TOPOGRAPHY, AFTER THE MOVE, I THINK IT MORE APPROPRIATE
512 !*** TO USE grid%nmm_tsk OR grid%sst TO RE-DERIVE grid%ths AND QS (AND CONSEQUENTLY grid%thz0 AND grid%qz0).
513 !*** THIS MAY BE MORE CONSISTENT WITH THE PSEUDO-HYDROSTATIC BALANCING THAT IS
514 !*** DONE OVER THE NEW TERRAIN (AND WITH NEW grid%sm). gopal!
518 IF(allowed_to_read)THEN ! This is gopal's inclusion for moving nest
520 PM1=grid%aeta1(KTS)*grid%pdtop+grid%aeta2(KTS)*grid%pdsl(I,J)+grid%pt
521 APEM1=(1.E5/PM1)**CAPA
523 IF(grid%nmm_tsk(I,J)>=200.)THEN ! have a specific skin temp, use it
525 grid%ths(I,J)=grid%nmm_tsk(I,J)*(1.+P608*grid%q(I,J,KTS+1))*APEM1
526 TSFCK=grid%nmm_tsk(I,J)*(1.+P608*grid%q(I,J,KTS+1))
528 grid%ths(I,J)=grid%nmm_tsk(I,J)*APEM1
529 TSFCK=grid%nmm_tsk(I,J)
532 ELSE ! use lowest layer as a proxy
534 grid%ths(I,J)=grid%t(I,J,KTS)*(1.+P608*grid%q(I,J,KTS+1))*APEM1
535 TSFCK=grid%t(I,J,KTS)*(1.+P608*grid%q(I,J,KTS+1))
537 grid%ths(I,J)=grid%t(I,J,KTS)*APEM1
538 TSFCK=grid%t(I,J,KTS)
542 PSFCK=grid%pd(I,J)+grid%pdtop+grid%pt
544 IF(grid%sm(I,J)<0.5) THEN
545 grid%qsh(I,J)=PQ0/PSFCK*EXP(A2*(TSFCK-A3)/(TSFCK-A4))
546 ELSEIF(grid%sm(I,J)>0.5) THEN
547 grid%ths(I,J)=grid%sst(I,J)*(1.E5/(grid%pd(I,J)+grid%pdtop+grid%pt))**CAPA
550 TERM1=-0.068283/grid%t(I,J,KTS)
551 grid%pshltr(I,J)=(grid%pd(I,J)+grid%pdtop+grid%pt)*EXP(TERM1)
554 grid%thz0(I,J)=grid%ths(I,J)
555 grid%qz0(I,J)=grid%qsh(I,J)
559 ENDIF ! endif for allowed to read
565 !*** INITIALIZE CLOUD FIELDS
567 IF (MAXVAL(grid%cwm) .gt. 0. .and. MAXVAL(grid%cwm) .lt. 1.) then
568 CALL wrf_message('appear to have grid%cwm values...do not zero')
570 IF(allowed_to_read)THEN ! This is gopal's inclusion for moving nest
571 CALL wrf_message('zeroing grid%cwm')
582 !*** INITIALIZE ACCUMULATOR ARRAYS TO ZERO.
617 !*** INITIALIZE SATURATION SPECIFIC HUMIDITY OVER THE WATER.
621 IF(allowed_to_read)THEN ! This is gopal's inclusion for moving nest
624 IF(grid%sm(I,J)>0.5)THEN
625 CLOGES =-CM1/grid%sst(I,J)-CM2*ALOG10(grid%sst(I,J))+CM3
626 ESE = 10.**(CLOGES+2.)
627 grid%qsh(I,J)= grid%sm(I,J)*EPS*ESE/(grid%pd(I,J)+grid%pdtop+grid%pt-ESE*(1.-EPS))
633 !*** INITIALIZE TURBULENT KINETIC ENERGY (TKE) TO A SMALL
634 !*** VALUE (EPSQ2) ABOVE GROUND. SET TKE TO ZERO IN THE
635 !*** THE LOWEST MODEL LAYER. IN THE LOWEST TWO ATMOSPHERIC
636 !*** ETA LAYERS SET TKE TO A SMALL VALUE (Q2INI).
638 !***EROGERS: add check for realistic values of grid%q2
640 IF (MAXVAL(grid%q2) .gt. epsq2 .and. MAXVAL(grid%q2) .lt. 200.) then
641 CALL wrf_message('appear to have grid%q2 values...do not zero')
643 IF(allowed_to_read)THEN ! This is gopal's inclusion for moving nest
644 CALL wrf_message('zeroing grid%q2')
651 grid%q2(I,J,K)=grid%hbm2(I,J)*EPSQ2
661 grid%q2(I,J,KTE-2)= 0.
662 grid%q2(I,J,KTE-1)= 0.
664 grid%q2(I,J,KTE-2)= grid%hbm2(I,J)*Q2INI
665 grid%q2(I,J,KTE-1)= grid%hbm2(I,J)*Q2INI
672 !*** PAD ABOVE GROUND SPECIFIC HUMIDITY IF IT IS TOO SMALL.
673 !*** INITIALIZE LATENT HEATING ACCUMULATION ARRAYS.
678 IF(grid%q(I,J,K)<EPSQ)grid%q(I,J,K)=EPSQ
686 !*** INITIALIZE MAX/MIN TEMPERATURES.
690 grid%tlmax(I,J)=grid%t(I,J,KPS)
691 grid%tlmin(I,J)=grid%t(I,J,KPS)
695 !----------------------------------------------------------------------
696 !*** END OF SCRATCH START INITIALIZATION BLOCK.
697 !----------------------------------------------------------------------
699 CALL wrf_message('INIT: INITIALIZED ARRAYS FOR CLEAN START')
700 ENDIF ! <--- (not restart)
706 IF(grid%t(I,J,KTS)==0.)THEN
707 grid%t(I,J,KTS)=grid%t(I,J,KTS+1)
710 TERM1=-0.068283/grid%t(I,J,KTS)
711 grid%pshltr(I,J)=(grid%pd(I,J)+grid%pdtop+grid%pt)*EXP(TERM1)
716 !----------------------------------------------------------------------
717 !*** RESTART INITIALIZING. CHECK TO SEE IF WE NEED TO ZERO
718 !*** ACCUMULATION ARRAYS.
719 !----------------------------------------------------------------------
721 TSPH=3600./GRID%DT ! needed?
730 WRITE( wrf_err_message, * )' start_nmm TSTART=',grid%tstart
731 CALL wrf_debug( 1, TRIM(wrf_err_message) )
732 WRITE( wrf_err_message, * )' start_nmm TPREC=',grid%tprec
733 CALL wrf_debug( 1, TRIM(wrf_err_message) )
734 WRITE( wrf_err_message, * )' start_nmm THEAT=',grid%theat
735 CALL wrf_debug( 1, TRIM(wrf_err_message) )
736 WRITE( wrf_err_message, * )' start_nmm TCLOD=',grid%tclod
737 CALL wrf_debug( 1, TRIM(wrf_err_message) )
738 WRITE( wrf_err_message, * )' start_nmm TRDSW=',grid%trdsw
739 CALL wrf_debug( 1, TRIM(wrf_err_message) )
740 WRITE( wrf_err_message, * )' start_nmm TRDLW=',grid%trdlw
741 CALL wrf_debug( 1, TRIM(wrf_err_message) )
742 WRITE( wrf_err_message, * )' start_nmm TSRFC=',grid%tsrfc
743 CALL wrf_debug( 1, TRIM(wrf_err_message) )
744 WRITE( wrf_err_message, * )' start_nmm PCPFLG=',grid%pcpflg
745 CALL wrf_debug( 1, TRIM(wrf_err_message) )
748 NSTART = INT(grid%TSTART*TSPH+0.5)
753 !! want non-zero values for grid%nprec, grid%nheat type vars to avoid problems
754 !! with mod statements below.
756 grid%nprec = INT(grid%TPREC *TSPH+0.5)
757 grid%nheat = INT(grid%THEAT *TSPH+0.5)
758 grid%nclod = INT(grid%TCLOD *TSPH+0.5)
759 grid%nrdsw = INT(grid%TRDSW *TSPH+0.5)
760 grid%nrdlw = INT(grid%TRDLW *TSPH+0.5)
761 grid%nsrfc = INT(grid%TSRFC *TSPH+0.5)
763 !zhang's dong for analysis option:
764 grid%NCNVC0 = grid%NCNVC
765 grid%NPHS0 = grid%NPHS
768 !----------------------------------------------------------------------
770 !*** FLAG FOR INITIALIZING ARRAYS, LOOKUP TABLES, & CONSTANTS USED IN
771 !*** MICROPHYSICS AND RADIATION
773 !----------------------------------------------------------------------
775 grid%micro_start=.TRUE.
777 !----------------------------------------------------------------------
779 !*** INITIALIZE ADVECTION TENDENCIES TO ZERO SO THAT
780 !*** BOUNDARY POINTS WILL ALWAYS BE ZERO
789 !----------------------------------------------------------------------
791 !*** SET INDEX ARRAYS FOR UPSTREAM ADVECTION
793 !----------------------------------------------------------------------
803 grid%iup_adh(I,J)=-999
804 grid%iup_adv(I,J)=-999
809 #ifndef NO_UPSTREAM_ADVECTION
811 !*** n_iup_h HOLDS THE NUMBER OF MASS POINTS NEEDED IN EACH ROW
812 !*** FOR UPSTREAM ADVECTION (FULL ROWS IN THE 3RD THROUGH 7TH
813 !*** ROWS FROM THE SOUTH AND NORTH GLOBAL BOUNDARIES AND
814 !*** FOUR POINTS ADJACENT TO THE WEST AND EAST GLOBAL BOUNDARIES
815 !*** ON ALL OTHER INTERNAL ROWS). SIMILARLY FOR n_iup_v.
816 !*** BECAUSE OF HORIZONTAL OPERATIONS, THESE POINTS EXTEND OUTSIDE
817 !*** OF THE UPSTREAM REGION SOMEWHAT.
818 !*** n_iup_adh HOLDS THE NUMBER OF MASS POINTS NEEDED IN EACH ROW
819 !*** FOR THE COMPUTATION OF THE TENDENCIES THEMSELVES (adt, ADQ2M
820 !*** AND ADQ2L); SPECIFICALLY THESE TENDENCIES ARE ONLY DONE IN
821 !*** THE UPSTREAM REGION.
822 !*** n_iup_adv HOLDS THE NUMBER OF MASS POINTS NEEDED IN EACH ROW
823 !*** FOR THE VELOCITY POINT TENDENCIES.
824 !*** iup_h AND iup_v HOLD THE ACTUAL I VALUES USED IN EACH ROW.
825 !*** LIKEWISE FOR iup_adh AND iup_adv.
826 !*** ALSO, SET upstrm FOR THOSE TASKS AROUND THE GLOBAL EDGE.
848 grid%iup_h(IMS+KNTI,J)=I
849 grid%iup_v(IMS+KNTI,J)=I
861 IF(E_BDY)IEND=IEND-MOD(JJ+1,2)
863 grid%iup_adh(IMS+KNTI,J)=I
866 grid%n_iup_adh(J)=KNTI
871 IF(E_BDY)IEND=IEND-MOD(JJ,2)
873 grid%iup_adv(IMS+KNTI,J)=I
876 grid%n_iup_adv(J)=KNTI
884 DO JJ=JDE-7, JDE-1 ! JM-6,JM
888 grid%iup_h(IMS+KNTI,J)=I
889 grid%iup_v(IMS+KNTI,J)=I
896 DO JJ=JDE-5, JDE-3 ! JM-4,JM-2
901 IF(E_BDY)IEND=IEND-MOD(JJ+1,2)
903 grid%iup_adh(IMS+KNTI,J)=I
906 grid%n_iup_adh(J)=KNTI
911 IF(E_BDY)IEND=IEND-MOD(JJ,2)
913 grid%iup_adv(IMS+KNTI,J)=I
916 grid%n_iup_adv(J)=KNTI
924 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
928 grid%iup_h(IMS+I-1,J)=I
929 grid%iup_v(IMS+I-1,J)=I
937 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
942 grid%iup_adh(IMS+KNTI,J)=I
945 grid%n_iup_adh(J)=KNTI
950 grid%iup_adv(IMS+KNTI,J)=I
953 grid%n_iup_adv(J)=KNTI
959 CALL WRF_GET_NPROCX(INPES)
965 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
970 !*** IN CASE THERE IS ONLY A SINGLE GLOBAL TASK IN THE
971 !*** I DIRECTION THEN WE MUST ADD THE WESTSIDE UPSTREAM
972 !*** POINTS TO THE EASTSIDE POINTS IN EACH ROW.
975 IF(INPES.EQ.1)KNTI=grid%n_iup_h(J)
979 grid%iup_h(IMS+KNTI,J)=I
987 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
989 IEND=IM-1-MOD(JJ+1,2)
990 ISTART=IEND-MOD(JJ,2)
992 IF(INPES==1)KNTI=grid%n_iup_adh(J)
995 grid%iup_adh(IMS+KNTI,J)=I
998 grid%n_iup_adh(J)=KNTI
1002 DO JJ=8,JDE-8 ! JM-7
1003 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
1008 IF(INPES==1)KNTI=grid%n_iup_v(J)
1012 grid%iup_v(IMS+KNTI,J)=I
1015 grid%n_iup_v(J)=KNTI
1019 DO JJ=6,JDE-6 ! JM-5
1020 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
1023 ISTART=IEND-MOD(JJ+1,2)
1025 IF(INPES==1)KNTI=grid%n_iup_adv(J)
1028 grid%iup_adv(IMS+KNTI,J)=I
1031 grid%n_iup_adv(J)=KNTI
1035 !----------------------------------------------------------------------
1036 jam=6+2*(JDE-JDS-1-9)
1038 !*** EXTRACT em AND emt FOR THE LOCAL SUBDOMAINS
1040 DO J=MYJS_P5,MYJE_P5
1041 grid%em_loc(J)=-9.E9
1042 grid%emt_loc(J)=-9.E9
1044 !!! IF(IBROW==1)THEN
1047 grid%em_loc(J)=grid%em(J-2)
1048 grid%emt_loc(J)=grid%emt(J-2)
1051 !!! IF(ITROW==1)THEN
1054 DO JJ=JDE-5,JDE-3 ! JM-4,JM-2
1057 grid%em_loc(J)=grid%em(KNT)
1058 grid%emt_loc(J)=grid%emt(KNT)
1061 !!! IF(ILCOL==1)THEN
1064 DO JJ=6,JDE-6 ! JM-5
1066 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
1068 grid%em_loc(J)=grid%em(KNT)
1069 grid%emt_loc(J)=grid%emt(KNT)
1073 !!! IF(IRCOL==1)THEN
1075 KNT=6+JDE-11 ! JM-10
1076 DO JJ=6,JDE-6 ! JM-5
1078 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
1080 grid%em_loc(J)=grid%em(KNT)
1081 grid%emt_loc(J)=grid%emt(KNT)
1086 CALL wrf_message( 'start_domain_nmm: upstream advection commented out')
1090 !*** SET ZERO-VALUE FOR SOME OUTPUT DIAGNOSTIC ARRAYS
1093 !zhang'sdoing IF(NSTART.EQ.0)THEN
1094 IF(NSTART.EQ.0 .or. .not.allowed_to_read )THEN
1100 GRID%NSOIL= GRID%NUM_SOIL_LAYERS
1103 grid%pctsno(I,J)=-999.0
1104 IF(grid%sm(I,J)<0.5)THEN
1106 ! grid%cmc(I,J)=grid%canwat(i,j) ! tgs
1107 IF(grid%sice(I,J)>0.5)THEN
1111 grid%smstav(I,J)=1.0
1112 grid%smstot(I,J)=1.0
1113 grid%ssroff(I,J)=0.0
1114 grid%bgroff(I,J)=0.0
1117 grid%smc(I,NS,J)=1.0
1118 ! grid%sh2o(I,NS,J)=0.05
1119 grid%sh2o(I,NS,J)=1.0
1126 grid%smstav(I,J)=1.0
1127 grid%smstot(I,J)=1.0
1128 grid%ssroff(I,J)=0.0
1129 grid%bgroff(I,J)=0.0
1130 grid%soiltb(I,J)=273.16
1132 grid%subshx(I,J)=0.0
1133 grid%acsnow(I,J)=0.0
1134 grid%acsnom(I,J)=0.0
1135 grid%snopcx(I,J)=0.0
1139 grid%smc(I,NS,J)=1.0
1140 grid%stc(I,NS,J)=273.16
1141 ! grid%sh2o(I,NS,J)=0.05
1142 grid%sh2o(I,NS,J)=1.0
1155 !----------------------------------------------------------------------
1156 !*** INITIALIZE RADTN VARIABLES
1157 !*** CALCULATE THE NUMBER OF STEPS AT EACH POINT.
1158 !*** THE ARRAY 'lvl' WILL COORDINATE VERTICAL LOCATIONS BETWEEN
1159 !*** THE LIFTED WORKING ARRAYS AND THE FUNDAMENTAL MODEL ARRAYS.
1160 !*** lvl HOLDS THE HEIGHT (IN MODEL LAYERS) OF THE TOPOGRAPHY AT
1161 !*** EACH GRID POINT.
1162 !----------------------------------------------------------------------
1166 grid%lvl(I,J)=LM-KTE
1170 !*** DETERMINE MODEL LAYER LIMITS FOR HIGH(3), MIDDLE(2),
1171 !*** AND LOW(1) CLOUDS. ALSO FIND MODEL LAYER THAT IS JUST BELOW
1172 !*** (HEIGHT-WISE) 400 MB. (K400)
1179 PSUM=PSUM+grid%deta(K)*PDIF
1181 IF(PSUM>PHITP)LPTOP(3)=K
1182 ELSEIF(LPTOP(2)==0)THEN
1183 IF(PSUM>PMDHI)LPTOP(2)=K
1186 ELSEIF(LPTOP(1)==0)THEN
1187 IF(PSUM>PLOMD)LPTOP(1)=K
1191 !*** CALL GRADFS ONCE TO CALC. CONSTANTS AND GET O3 DATA
1195 !*** CALCULATE THE MIDLAYER PRESSURES IN THE STANDARD ATMOSPHERE
1200 ALLOCATE(PHALF(LM+1),STAT=I)
1203 PHALF(K+1)=grid%aeta(K)*PDIF+grid%pt
1210 !!! CALL GRADFS(PHALF,KCCO2,NUNIT_CO2)
1212 !*** CALL SOLARD TO CALCULATE NON-DIMENSIONAL SUN-EARTH DISTANCE
1214 !!! IF(MYPE==0)CALL SOLARD(SUN_DIST)
1215 !!! CALL MPI_BCAST(SUN_DIST,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
1218 !*** CALL ZENITH SIMPLY TO GET THE DAY OF THE YEAR FOR
1219 !*** THE SETUP OF THE OZONE DATA
1221 TIME=(grid%ntsd-1)*GRID%DT
1223 !!! CALL ZENITH(TIME,DAYI,HOUR)
1226 IF(MOD(IDAT(3),4)==0)ADDL=1.
1232 !----------------------------------------------------------------------
1233 !*** SOME INITIAL VALUES RELATED TO TURBULENCE SCHEME
1234 !----------------------------------------------------------------------
1236 IF(allowed_to_read.and.(.NOT.RESTRT))THEN ! This is gopal's inclusion for moving nest
1241 !*** TRY A SIMPLE LINEAR INTERP TO GET 2/10 M VALUES
1245 IF(.NOT.RESTRT .OR. .NOT.allowed_to_read) then
1246 grid%PDSL(I,J)=grid%PD(I,J)*grid%RES(I,J)
1248 !end of zhang's doing
1250 grid%PDSL(I,J)=grid%PD(I,J)*grid%RES(I,J)
1257 PLM=grid%aeta1(KTS)*grid%pdtop+grid%aeta2(KTS)*grid%pdsl(I,J)+grid%pt
1258 APELM=(1.0E5/PLM)**CAPA
1259 TERM1=-0.068283/grid%t(I,J,KTS)
1260 grid%pshltr(I,J)=(grid%pd(I,J)+grid%pdtop+grid%pt)*EXP(TERM1)
1261 APELMNW=(1.0E5/grid%pshltr(I,J))**CAPA
1263 DPLM=(grid%deta1(KTS)*grid%pdtop+grid%deta2(KTS)*grid%pdsl(I,J))*0.5
1264 DZLM=R_D*DPLM*TLM*(1.+P608*QLM)/(G*PLM)
1266 FAC2=(DZLM-10.)/DZLM
1274 IF(.NOT.RESTRT .OR. .NOT.allowed_to_read)THEN
1275 !end of zhang's doing
1279 grid%th10(I,J)=FAC2*grid%ths(I,J)+FAC1*THLM
1280 grid%q10(I,J)=FAC2*grid%qsh(I,J)+FAC1*QLM
1282 IF(grid%sm(I,J).LT.0.5)THEN
1283 grid%u10(I,J)=ULM*(log(10./grid%z0(I,J))/log(DZLM/grid%z0(I,J))) ! this is all Qingfu's doing
1284 grid%v10(I,J)=VLM*(log(10./grid%z0(I,J))/log(DZLM/grid%z0(I,J)))
1285 ZOQING=1.944*SQRT(grid%u10(I,J)*grid%u10(I,J)+grid%v10(I,J)*grid%v10(I,J))
1286 IF(ZOQING.GT.60.)THEN
1287 grid%u10(I,J)=grid%u10(I,J)*(1.12-7.2/ZOQING)
1288 grid%v10(I,J)=grid%v10(I,J)*(1.12-7.2/ZOQING)
1291 ZOQING=(0.074*SQRT(ULM*ULM+VLM*VLM)-0.58)*1.0e-3
1292 ZOQING=MAX(ZOQING,grid%z0(I,J)) ! for winds greater than 12.5 m/s
1293 grid%u10(I,J)=ULM*(log(10./ZOQING))/log(DZLM/ZOQING) ! this is all Qingfu's doing
1294 grid%v10(I,J)=VLM*(log(10./ZOQING))/log(DZLM/ZOQING)
1295 ZOQING=1.944*SQRT(grid%u10(I,J)*grid%u10(I,J)+grid%v10(I,J)*grid%v10(I,J))
1296 IF(ZOQING.GT.60.)THEN
1297 grid%u10(I,J)=grid%u10(I,J)*(1.12-7.2/ZOQING)
1298 grid%v10(I,J)=grid%v10(I,J)*(1.12-7.2/ZOQING)
1308 ! FAC2=(DZLM-2.)/DZLM
1309 ! IF(DZLM.LE.2.)THEN
1314 IF(.NOT.RESTRT.OR.NEST)THEN
1316 IF ( (THLM-grid%ths(I,J))>2.0) THEN ! weight differently in different scenarios
1325 grid%tshltr(I,J)=0.2*grid%ths(I,J)+0.8*THLM
1326 grid%qshltr(I,J)=0.2*grid%qsh(I,J)+0.8*QLM
1328 grid%tshltr(I,J)=FAC2*grid%ths(I,J)+FAC1*THLM
1329 grid%qshltr(I,J)=FAC2*grid%qsh(I,J)+FAC1*QLM
1333 !*** NEED TO CONVERT TO THETA IF IS THE RESTART CASE
1334 !*** AS CHKOUT.f WILL CONVERT TO TEMPERATURE
1336 !EROGERS: COMMENT OUT IN WRF-NMM
1339 ! grid%tshltr(I,J)=grid%tshltr(I,J)*APELMNW
1344 END IF ! IF(allowed_to_read)THEN
1346 !----------------------------------------------------------------------
1347 !*** INITIALIZE TAU-1 VALUES FOR ADAMS-BASHFORTH
1348 !----------------------------------------------------------------------
1352 IF(.NOT.RESTRT .OR. .NOT.allowed_to_read)THEN !zhang's doing
1359 grid%told(I,J,K)=grid%t(I,J,K) ! grid%t AT TAU-1
1360 grid%uold(I,J,K)=grid%u(I,J,K) ! grid%u AT TAU-1
1361 grid%vold(I,J,K)=grid%v(I,J,K) ! grid%v AT TAU-1
1367 !----------------------------------------------------------------------
1368 !*** INITIALIZE NONHYDROSTATIC QUANTITIES
1369 !----------------------------------------------------------------------
1371 !!!! SHOULD grid%dwdt BE REDEFINED IF RESTRT?
1373 IF((.NOT.RESTRT.OR.NEST).AND. allowed_to_read)THEN ! This is gopal's inclusion for moving nest
1384 IF(.NOT.RESTRT .OR. .NOT.allowed_to_read) THEN !zhang's doing
1386 IF(GRID%SIGMA==1)THEN
1389 grid%pdsl(I,J)=grid%pd(I,J)
1395 grid%pdsl(I,J)=grid%res(I,J)*grid%pd(I,J)
1400 ENDIF !zhang's doing
1406 !!!! SHOULD pint,z,w BE REDEFINED IF RESTRT?
1408 WRITE( wrf_err_message, * )' restrt=',restrt,' nest=',nest
1409 CALL wrf_debug( 0, TRIM(wrf_err_message) )
1410 WRITE( wrf_err_message, * )' grid%pdtop=',grid%pdtop,' grid%pt=',grid%pt
1411 CALL wrf_debug( 0, TRIM(wrf_err_message) )
1414 IF(.NOT.RESTRT.OR.NEST .OR. .NOT.allowed_to_read)THEN
1415 !end of zhang's doing
1417 IF(.NOT.RESTRT.OR.NEST)THEN
1422 grid%pint(I,J,K)=grid%eta1(K)*grid%pdtop+grid%eta2(K)*grid%pdsl(I,J)+grid%pt
1423 grid%z(I,J,K)=grid%pint(I,J,K)
1431 IF(.NOT.RESTRT.OR.NEST .OR. .NOT.allowed_to_read)THEN
1437 grid%rtop(I,J,K)=(grid%q(I,J,K)*P608-grid%cwm(I,J,K)+1.)*grid%t(I,J,K)*R_D/ &
1438 ((grid%pint(I,J,K+1)+grid%pint(I,J,K))*0.5)
1448 ! add to output MSLP at the initial time
1450 ! COMPUTATION OF MSLP ! This is gopal's doing
1456 grid%Z(I,J,1)=grid%FIS(I,J)*GI
1463 APELP = (grid%PINT(I,J,K+1)+grid%PINT(I,J,K))
1464 RTOPP = TRG*grid%T(I,J,K)*(1.0+grid%Q(I,J,K)*P608)/APELP
1465 DZ = RTOPP*(grid%DETA1(K)*grid%PDTOP+grid%DETA2(K)*grid%PD(I,J))
1466 grid%Z(I,J,K+1) = grid%Z(I,J,K) + DZ
1474 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
1475 A = LAPSR*grid%Z(I,J,1)/SFCT
1476 grid%MSLP(I,J) = grid%PINT(I,J,1)*(1-A)**COEF2
1480 ! SET BACK Z AS IN ORIGINAL CODE
1485 grid%Z(I,J,K)=grid%PINT(I,J,K)
1493 #ifndef NO_RESTRICT_ACCEL
1494 !----------------------------------------------------------------------
1495 !*** RESTRICTING THE ACCELERATION ALONG THE BOUNDARIES
1496 !----------------------------------------------------------------------
1500 grid%dwdtmn(I,J)=-EPSIN
1501 grid%dwdtmx(I,J)= EPSIN
1507 JHH=JDE-1-JHL+1 ! JM-JHL+1
1511 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1514 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1516 grid%dwdtmn(IX,JX)=-EPSB
1517 grid%dwdtmx(IX,JX)= EPSB
1524 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1527 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1529 grid%dwdtmn(IX,JX)=-EPSB
1530 grid%dwdtmx(IX,JX)= EPSB
1537 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1540 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1542 grid%dwdtmn(IX,JX)=-EPSB
1543 grid%dwdtmx(IX,JX)= EPSB
1550 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1552 ! moved this line to inside the J-loop, 20030429, jm
1553 IHH=IDE-1-IHL+MOD(J,2) ! IM-IHL+MOD(J,2)
1555 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1557 grid%dwdtmn(IX,JX)=-EPSB
1558 grid%dwdtmx(IX,JX)= EPSB
1567 CALL wrf_message('start_domain_nmm: NO_RESTRICT_ACCEL')
1570 !-----------------------------------------------------------------------
1571 !*** CALL THE GENERAL PHYSICS INITIALIZATION
1572 !-----------------------------------------------------------------------
1575 ALLOCATE(SFULL(KMS:KME),STAT=I) ; SFULL = 0.
1576 ALLOCATE(SMID(KMS:KME),STAT=I) ; SMID = 0.
1577 ALLOCATE(EMISS(IMS:IME,JMS:JME),STAT=I) ; EMISS = 0.
1578 ALLOCATE(EMTEMP(IMS:IME,JMS:JME),STAT=I) ; EMTEMP = 0.
1579 ALLOCATE(GLW(IMS:IME,JMS:JME),STAT=I) ; GLW = 0.
1580 ALLOCATE(HFX(IMS:IME,JMS:JME),STAT=I) ; HFX = 0.
1581 ALLOCATE(LOWLYR(IMS:IME,JMS:JME),STAT=I) ; LOWLYR = 0.
1582 ! ALLOCATE(grid%mavail(IMS:IME,JMS:JME),STAT=I) ; grid%mavail = 0.
1583 ALLOCATE(NCA(IMS:IME,JMS:JME),STAT=I) ; NCA = 0.
1584 ALLOCATE(QFX(IMS:IME,JMS:JME),STAT=I) ; QFX = 0.
1585 ALLOCATE(RAINBL(IMS:IME,JMS:JME),STAT=I) ; RAINBL = 0.
1586 ALLOCATE(RAINC(IMS:IME,JMS:JME),STAT=I) ; RAINC = 0.
1587 ALLOCATE(RAINNC(IMS:IME,JMS:JME),STAT=I) ; RAINNC = 0.
1588 ALLOCATE(RAINNCV(IMS:IME,JMS:JME),STAT=I) ; RAINNCV = 0.
1590 ALLOCATE(ZS(KMS:KME),STAT=I) ; ZS = 0.
1591 ALLOCATE(SNOWC(IMS:IME,JMS:JME),STAT=I) ; SNOWC = 0.
1592 ALLOCATE(THC(IMS:IME,JMS:JME),STAT=I) ; THC = 0.
1593 ALLOCATE(TMN(IMS:IME,JMS:JME),STAT=I) ; TMN = 0.
1594 ALLOCATE(TSFC(IMS:IME,JMS:JME),STAT=I) ; TSFC = 0.
1595 ALLOCATE(Z0_DUM(IMS:IME,JMS:JME),STAT=I) ; Z0_DUM = 0.
1596 ALLOCATE(ALBEDO_DUM(IMS:IME,JMS:JME),STAT=I) ; ALBEDO_DUM = 0.
1598 ALLOCATE(DZS(KMS:KME),STAT=I) ; DZS = 0.
1599 ALLOCATE(RQCBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQCBLTEN = 0.
1600 ALLOCATE(RQIBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQIBLTEN = 0.
1601 ALLOCATE(RQVBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQVBLTEN = 0.
1602 ALLOCATE(RTHBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHBLTEN = 0.
1603 ALLOCATE(RUBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RUBLTEN = 0.
1604 ALLOCATE(RVBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RVBLTEN = 0.
1605 ALLOCATE(RQCCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQCCUTEN = 0.
1606 ALLOCATE(RQICUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQICUTEN = 0.
1607 ALLOCATE(RQRCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQRCUTEN = 0.
1608 ALLOCATE(RQSCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQSCUTEN = 0.
1609 ALLOCATE(RQVCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQVCUTEN = 0.
1610 ALLOCATE(RTHCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHCUTEN = 0.
1611 ALLOCATE(RTHRATEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHRATEN = 0.
1612 ALLOCATE(RTHRATENLW(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHRATENLW = 0.
1613 ALLOCATE(RTHRATENSW(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHRATENSW = 0.
1614 ALLOCATE(ZINT(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; ZINT = 0.
1615 ALLOCATE(CONVFAC(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; CONVFAC = 0.
1616 ALLOCATE(PINT_TRANS(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; PINT_TRANS = 0.
1617 ALLOCATE(T_TRANS(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; T_TRANS = 0.
1618 ALLOCATE(RRI(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RRI = 0.
1619 ALLOCATE(CLDFRA_TRANS(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; CLDFRA_TRANS = 0.
1621 ALLOCATE(CLDFRA_OLD(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; CLDFRA_OLD = 0.
1624 ALLOCATE(w0avg(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; w0avg = 0.
1626 !-----------------------------------------------------------------------
1627 !jm added set of g_inv
1630 GRID%RADT=GRID%NRADS*GRID%DT/60.
1631 GRID%BLDT=GRID%NPHS*GRID%DT/60.
1632 GRID%CUDT=GRID%NCNVC*GRID%DT/60.
1633 GRID%GSMDT=GRID%NPHS*GRID%DT/60.
1637 SFCZ=grid%fis(I,J)*G_INV
1641 IF(.NOT.RESTRT .OR. .NOT.allowed_to_read) then
1642 grid%PDSL(I,J)=grid%PD(I,J)*grid%RES(I,J)
1644 !end of zhang's doing
1646 grid%pdsl(I,J)=grid%pd(I,J)*grid%res(I,J)
1648 PSURF=grid%pint(I,J,KTS)
1649 EXNSFC=(1.E5/PSURF)**CAPA
1650 grid%xland(I,J)=grid%sm(I,J)+1.
1651 THSIJ=(grid%sst(I,J)*EXNSFC)*(grid%xland(I,J)-1.) &
1652 & +grid%ths(I,J)*(2.-grid%sm(I,J))
1653 TSFC(I,J)=THSIJ/EXNSFC
1656 PLYR=(grid%pint(I,J,K)+grid%pint(I,J,K+1))*0.5
1658 CWML=grid%cwm(I,J,K)
1659 RRI(I,K,J)=R_D*TL*(1.+P608*grid%q(I,J,K))/PLYR
1660 ZINT(I,K+1,J)=ZINT(I,K,J)+TL/PLYR &
1661 *(grid%deta1(K)*grid%pdtop+grid%deta2(K)*grid%pdsl(I,J))*ROG &
1662 *(grid%q(I,J,K)*P608-CWML+1.)
1666 !!! ZMID(I,K,J)=0.5*(ZINT(I,K,J)+ZINT(I,K+1,J))
1671 !-----------------------------------------------------------------------
1672 !*** RECREATE SIGMA VALUES AT LAYER INTERFACES FOR THE FULL VERTICAL
1673 !*** DOMAIN FROM THICKNESS VALUES FOR THE TWO SUBDOMAINS.
1674 !*** NOTE: KTE=NUMBER OF LAYERS PLUS ONE
1675 !-----------------------------------------------------------------------
1677 PDTOT=101325.-grid%pt
1679 PDBOT=PDTOT-grid%pdtop
1684 DSIG=(grid%deta1(K-1)*grid%pdtop+grid%deta2(K-1)*PDBOT)*RPDTOT
1685 DSIGSUM=DSIGSUM+DSIG
1686 SFULL(K)=SFULL(K-1)-DSIG
1687 SMID(K-1)=0.5*(SFULL(K-1)+SFULL(K))
1689 DSIG=(grid%deta1(KTE-1)*grid%pdtop+grid%deta2(KTE-1)*PDBOT)*RPDTOT
1690 DSIGSUM=DSIGSUM+DSIG
1691 SMID(KTE-1)=0.5*(SFULL(KTE-1)+SFULL(KTE))
1693 !-----------------------------------------------------------------------
1697 if(.NOT.RESTRT .OR. .NOT.allowed_to_read)grid%LU_INDEX=grid%IVGTYP
1698 !end of zhang's doing
1700 grid%lu_index=grid%ivgtyp
1706 Z0_DUM(I,J)=grid%z0(I,J) ! hold
1707 ALBEDO_DUM(I,J)=grid%albedo(I,J) ! Save albedos
1712 !*** Always define the quantity grid%z0base
1718 IF(grid%sm(I,J)==0)then
1719 grid%z0base(I,J)=VZ0TBL_24(grid%ivgtyp(I,J))+Z0LAND
1721 grid%z0base(I,J)=VZ0TBL_24(grid%ivgtyp(I,J))+Z0SEA
1728 ! when allocating CAM radiation 4d arrays (ozmixm, aerosolc) these are not needed
1732 ! Set GMT, JULDAY, and JULYR outside of phy_init because it is no longer
1733 ! called inside phy_init due to moving nest changes. (When nests move
1734 ! phy_init may not be called on a process if, for example, it is a moving
1735 ! nest and if this part of the domain is not being initialized (not the
1736 ! leading edge).) Calling domain_setgmtetc() here will avoid this problem
1737 ! when NMM moves to moving nests.
1738 CALL domain_setgmtetc( GRID, START_OF_SIMULATION )
1743 CALL nl_get_julyr (grid%id, grid%julyr)
1744 CALL nl_get_julday (grid%id, grid%julday)
1745 CALL nl_get_gmt (grid%id, grid%gmt)
1748 CALL domain_clock_get( grid, current_time=currentTime )
1749 CALL WRFU_TimeGet( currentTime, YY=grid%julyr, dayOfYear=grid%julday, &
1750 H=hr, M=mn, S=sec, MS=ms, rc=rc)
1751 grid%gmt=hr+real(mn)/60.+real(sec)/3600.+real(ms)/(1000*3600)
1752 WRITE( wrf_err_message , * ) 'DEBUG start_domain_nmm(): gmt = ',grid%gmt
1753 CALL wrf_debug( 150, TRIM(wrf_err_message) )
1757 ! Several arguments are RCONFIG entries in Registry.NMM. Registry no longer
1758 ! includes these as dummy arguments or declares them. Access them from
1760 #ifndef WRF_NMM_NEST
1761 grid%moved = .FALSE.
1764 IF (GRID%RESTART) THEN
1765 LRESTART = GRID%RESTART
1767 IF (grid%moved) THEN
1774 CALL PHY_INIT(GRID%ID,CONFIG_FLAGS,GRID%DT,LRESTART,SFULL,SMID &
1775 & ,grid%pt,TSFC,GRID%RADT,GRID%BLDT,GRID%CUDT,GRID%GSMDT &
1776 & ,RTHCUTEN, RQVCUTEN, RQRCUTEN &
1777 & ,RQCCUTEN, RQSCUTEN, RQICUTEN &
1778 & ,RUBLTEN,RVBLTEN,RTHBLTEN &
1779 & ,RQVBLTEN,RQCBLTEN,RQIBLTEN &
1780 & ,RTHRATEN,RTHRATENLW,RTHRATENSW &
1781 & ,STEPBL,STEPRA,STEPCU &
1782 & ,grid%w0avg, RAINNC, RAINC, grid%raincv, RAINNCV &
1783 & ,NCA,GRID%SWRAD_SCAT &
1784 & ,grid%cldefi,LOWLYR &
1786 & ,grid%rthften, grid%rqvften &
1787 & ,CLDFRA_TRANS,CLDFRA_OLD,GLW,grid%gsw,EMISS,EMTEMP,grid%lu_index&
1788 & ,GRID%LANDUSE_ISICE, GRID%LANDUSE_LUCATS &
1789 & ,GRID%LANDUSE_LUSEAS, GRID%LANDUSE_ISN &
1791 & ,grid%xlat,grid%xlong,grid%albedo,grid%albbck &
1792 & ,GRID%GMT,GRID%JULYR,GRID%JULDAY &
1793 & ,GRID%LEVSIZ, NUM_OZMIXM, NUM_AEROSOLC, GRID%PAERLEV &
1794 & ,TMN,grid%xland,grid%znt,grid%z0,grid%ustar,grid%mol,grid%pblh,grid%tke_myj &
1795 & ,grid%DUCUDT, grid%DVCUDT &
1796 & ,grid%exch_h,THC,SNOWC,grid%mavail,HFX,QFX,RAINBL &
1797 & ,grid%stc,ZS,DZS,GRID%NUM_SOIL_LAYERS,WARM_RAIN &
1799 & ,grid%apr_gr,grid%apr_w,grid%apr_mc,grid%apr_st,grid%apr_as &
1800 & ,grid%apr_capma,grid%apr_capme,grid%apr_capmi &
1801 & ,grid%xice,grid%xice,grid%vegfra,grid%snow,grid%canwat,grid%smstav &
1802 & ,grid%smstot, grid%sfcrunoff,grid%udrunoff,grid%grdflx,grid%acsnow &
1803 & ,grid%acsnom,grid%ivgtyp,grid%isltyp,grid%sfcevp,grid%smc &
1804 & ,grid%sh2o, grid%snowh, grid%smfr3d & ! temporary
1806 & ,GRID%DX,GRID%DY,grid%f_ice_phy,grid%f_rain_phy,grid%f_rimef_phy &
1807 & ,grid%mp_restart_state,grid%tbpvs_state,grid%tbpvs0_state &
1808 & ,.TRUE.,grid%moved,START_OF_SIMULATION &
1810 & ,IDS, IDE, JDS, JDE, KDS, KDE &
1811 & ,IMS, IME, JMS, JME, KMS, KME &
1812 & ,ITS, ITE, JTS, JTE, KTS, KTE &
1813 & ,NUM_URBAN_LAYERS &
1818 grid%julyr_rst=grid%julyr_rst
1819 grid%julday_rst=grid%julday_rst
1820 grid%gmt_rst=grid%gmt_rst
1821 !end of zhang's doing
1823 !-----------------------------------------------------------------------
1824 !---- Initialization for gravity wave drag (GWD) & mountain blocking (MB)
1826 CALL nl_get_cen_lat(GRID%ID, CEN_LAT) !-- CEN_LAT in deg
1827 CALL nl_get_cen_lon(GRID%ID, CEN_LON) !-- CEN_LON in deg
1828 DTPHS=grid%dt*grid%nphs
1829 CALL GWD_init(DTPHS,GRID%DX,GRID%DY,CEN_LAT,CEN_LON,RESTRT &
1830 & ,grid%glat,grid%glon,grid%crot,grid%srot,grid%hangl &
1831 & ,IDS,IDE,JDS,JDE,KDS,KDE &
1832 & ,IMS,IME,JMS,JME,KMS,KME &
1833 & ,ITS,ITE,JTS,JTE,KTS,KTE )
1837 grid%ugwdsfc(I,J)=0.
1838 grid%vgwdsfc(I,J)=0.
1843 !-----------------------------------------------------------------------
1846 IF(NSTART.EQ.0 .or. .not.allowed_to_read )THEN
1853 grid%z0(I,J)=grid%z0base(I,J)
1860 grid%cldfra(I,J,K)=CLDFRA_TRANS(I,K,J)
1869 !mp replace F*_PHY with values defined in module_initialize_real.F?
1871 IF (.NOT. RESTRT) THEN !zhang
1873 grid%f_ice = grid%f_ice_phy
1874 grid%f_rimef = grid%f_rimef_phy
1875 grid%f_rain = grid%f_rain_phy
1879 IF (.NOT. RESTRT) THEN
1880 ! Added by Greg Thompson, NCAR-RAL, for initializing water vapor
1881 ! mixing ratio (from NMM's specific humidity var) into moist array.
1884 CALL wrf_message('Initializng moist(:,:,:, Qv) from q')
1888 moist(I,J,K,P_QV) = grid%q(I,J,K) / (1.-grid%q(I,J,K))
1893 ! Also sum cloud water, ice, rain, snow, graupel into Ferrier cwm
1894 ! array (if any hydrometeors found and non-zero from initialization
1895 ! package). Then, determine fractions ice and rain from species.
1897 IF (.not. (MAXVAL(grid%cwm).gt.0. .and. MAXVAL(grid%cwm).lt.1.) ) then
1898 do i_m = 2, num_moist
1900 & CALL wrf_message(' summing moist(:,:,:,i_m) into cwm array')
1904 IF ( (moist(I,J,K,i_m).gt.EPSQ) .and. (i_m.ne.p_qv) ) THEN
1905 grid%cwm(I,J,K) = grid%cwm(I,J,K) + moist(I,J,K,i_m)
1912 IF (.not. ( (maxval(grid%f_ice)+maxval(grid%f_rain)) .gt. EPSQ) ) THEN
1913 CALL wrf_message(' computing grid%f_ice')
1914 do i_m = 2, num_moist
1918 IF ( (moist(I,J,K,i_m).gt.EPSQ) .and. &
1919 & ( (i_m.eq.p_qi).or.(i_m.eq.p_qs).or.(i_m.eq.p_qg) ) ) THEN
1920 grid%f_ice(I,K,J) = grid%f_ice(I,K,J) + moist(I,J,K,i_m)
1922 if (model_config_rec%mp_physics(grid%id).EQ.ETAMPNEW) then
1923 if ((i_m.eq.p_qi).or.(i_m.eq.p_qg) ) then
1924 moist(I,J,K,p_qs)=moist(I,J,K,p_qs)+moist(I,J,K,i_m)
1925 moist(I,J,K,i_m) =0.
1932 CALL wrf_message(' computing f_rain')
1937 IF(grid%f_ice(i,k,j)<=EPSQ)THEN
1938 grid%f_ice(I,K,J)=0.
1940 grid%f_ice(I,K,J) = grid%f_ice(I,K,J)/grid%cwm(I,J,K)
1942 IF ( (moist(I,J,K,p_qr)+moist(I,J,K,p_qc)).gt.EPSQ) THEN
1943 IF(moist(i,j,k,p_qr)<=EPSQ)THEN
1944 grid%f_rain(I,K,J)=0.
1946 grid%f_rain(I,K,J) = moist(i,j,k,p_qr) &
1947 & / (moist(i,j,k,p_qr)+moist(i,j,k,p_qc))
1955 ! End addition by Greg Thompson
1957 IF (maxval(grid%f_ice) .gt. 0.) THEN
1961 grid%f_ice_phy(I,K,J)=grid%f_ice(I,K,J)
1967 IF (maxval(grid%f_rain) .gt. 0.) THEN
1971 grid%f_rain_phy(I,K,J)=grid%f_rain(I,K,J)
1977 IF (maxval(grid%f_rimef) .gt. 0.) THEN
1981 grid%f_rimef_phy(I,K,J)=grid%f_rimef(I,K,J)
1988 IF (.NOT. RESTRT) THEN
1989 !-- Replace albedos if original albedos are nonzero
1990 IF(MAXVAL(ALBEDO_DUM)>0.)THEN
1993 grid%albedo(I,J)=ALBEDO_DUM(I,J)
2000 if(.NOT. RESTRT .OR. .NOT.allowed_to_read) then !zhang's doing
2007 grid%aprec(I,J)=RAINNC(I,J)*1.E-3
2008 grid%cuprec(I,J)=grid%raincv(I,J)*1.E-3
2012 !following will need mods Sep06
2021 CONVFAC(I,K,J) = grid%pint(II,JJ,KK)/RGASUNIV/grid%t(II,JJ,KK)
2029 PINT_TRANS(I,K,J)=grid%pint(I,J,K)
2030 T_TRANS(I,K,J)=grid%t(I,J,K)
2036 grid%xlat(i,j)=grid%glat(I,J)/DEGRAD
2037 grid%xlong(I,J)=grid%glon(I,J)/DEGRAD
2041 !!! write(0,*)'now do chem_init'
2042 CALL CHEM_INIT (GRID%ID,CHEM,EMIS_ANT,scalar,GRID%DT,GRID%BIOEMDT,GRID%PHOTDT,GRID%CHEMDT, &
2043 STEPBIOE,STEPPHOT,STEPCHEM,STEPFIREPL,GRID%PLUMERISEFIRE_FRQ, &
2044 ZINT,grid%xlat,grid%xlong,G,AERWRF,CONFIG_FLAGS,grid, &
2045 RRI,T_TRANS,PINT_TRANS,CONVFAC, &
2046 grid%ttday,grid%tcosz,grid%julday,grid%gmt, &
2047 GD_CLOUD,GD_CLOUD2,raincv_a,raincv_b, &
2048 GD_CLOUD_a,GD_CLOUD2_a, &
2049 GD_CLOUD_B,GD_CLOUD2_B, &
2050 TAUAER1,TAUAER2,TAUAER3,TAUAER4, &
2051 GAER1,GAER2,GAER3,GAER4, &
2052 WAER1,WAER2,WAER3,WAER4, &
2053 l2AER,l3AER,l4AER,l5AER,l6aer,l7aer, &
2054 PM2_5_DRY,PM2_5_WATER,PM2_5_DRY_EC, &
2055 grid%last_chem_time_year,grid%last_chem_time_month, &
2056 grid%last_chem_time_day,grid%last_chem_time_hour, &
2057 grid%last_chem_time_minute,grid%last_chem_time_second, &
2060 IDS , IDE , JDS , JDE , KDS , KDE , &
2061 IMS , IME , JMS , JME , KMS , KME , &
2062 ITS , ITE , JTS , JTE , KTS , KTE )
2065 ! calculate initial pm
2067 SELECT CASE (CONFIG_FLAGS%CHEM_OPT)
2068 case (GOCART_SIMPLE,GOCARTRACM_KPP,GOCARTRADM2,GOCARTRADM2_KPP)
2069 call sum_pm_gocart ( &
2070 RRI, CHEM, PM2_5_DRY, PM2_5_DRY_EC, PM10, &
2071 IDS,IDE, JDS,JDE, KDS,KDE, &
2072 IMS,IME, JMS,JME, KMS,KME, &
2073 ITS,ITE, JTS,JTE, KTS,KTE-1 )
2074 CASE (RADM2SORG,RADM2SORG_AQ,RADM2SORG_KPP,RACMSORG_AQ,RACMSORG_KPP)
2075 !!! write(0,*)'sum pm '
2076 CALL SUM_PM_SORGAM ( &
2077 RRI, CHEM, H2OAJ, H2OAI, &
2078 PM2_5_DRY, PM2_5_WATER, PM2_5_DRY_EC, PM10, &
2079 IDS,IDE, JDS,JDE, KDS,KDE, &
2080 IMS,IME, JMS,JME, KMS,KME, &
2081 ITS,ITE, JTS,JTE, KTS,KTE-1 )
2083 CASE (CBMZ_MOSAIC_4BIN, CBMZ_MOSAIC_8BIN, CBMZ_MOSAIC_4BIN_AQ, CBMZ_MOSAIC_8BIN_AQ)
2084 CALL SUM_PM_MOSAIC ( &
2086 PM2_5_DRY, PM2_5_WATER, PM2_5_DRY_EC, PM10, &
2087 IDS,IDE, JDS,JDE, KDS,KDE, &
2088 IMS,IME, JMS,JME, KMS,KME, &
2089 ITS,ITE, JTS,JTE, KTS,KTE-1 )
2092 DO J=JTS,MIN(JTE,JDE-1)
2093 DO K=KTS,MIN(KTE,KDE-1)
2094 DO I=ITS,MIN(ITE,IDE-1)
2095 PM2_5_DRY(I,K,J) = 0.
2096 PM2_5_WATER(I,K,J) = 0.
2097 PM2_5_DRY_EC(I,K,J) = 0.
2112 ! DEALLOCATE(grid%mavail)
2119 DEALLOCATE(RQCBLTEN)
2120 DEALLOCATE(RQIBLTEN)
2121 DEALLOCATE(RQVBLTEN)
2122 DEALLOCATE(RTHBLTEN)
2125 DEALLOCATE(RQCCUTEN)
2126 DEALLOCATE(RQICUTEN)
2127 DEALLOCATE(RQRCUTEN)
2128 DEALLOCATE(RQSCUTEN)
2129 DEALLOCATE(RQVCUTEN)
2130 DEALLOCATE(RTHCUTEN)
2131 DEALLOCATE(RTHRATEN)
2132 DEALLOCATE(RTHRATENLW)
2133 DEALLOCATE(RTHRATENSW)
2142 DEALLOCATE(PINT_TRANS)
2144 DEALLOCATE(CLDFRA_TRANS)
2146 DEALLOCATE(CLDFRA_OLD)
2151 !-----------------------------------------------------------------------
2152 !----------------------------------------------------------------------
2155 grid%dwdtmn(I,J)=grid%dwdtmn(I,J)*grid%hbm3(I,J)
2156 grid%dwdtmx(I,J)=grid%dwdtmx(I,J)*grid%hbm3(I,J)
2159 !----------------------------------------------------------------------
2162 # include <HALO_NMM_INIT_1.inc>
2163 # include <HALO_NMM_INIT_2.inc>
2164 # include <HALO_NMM_INIT_3.inc>
2165 # include <HALO_NMM_INIT_4.inc>
2166 # include <HALO_NMM_INIT_5.inc>
2167 # include <HALO_NMM_INIT_6.inc>
2168 # include <HALO_NMM_INIT_7.inc>
2169 # include <HALO_NMM_INIT_8.inc>
2170 # include <HALO_NMM_INIT_9.inc>
2171 # include <HALO_NMM_INIT_10.inc>
2172 # include <HALO_NMM_INIT_11.inc>
2173 # include <HALO_NMM_INIT_12.inc>
2174 # include <HALO_NMM_INIT_13.inc>
2175 # include <HALO_NMM_INIT_14.inc>
2176 # include <HALO_NMM_INIT_15.inc>
2177 # include <HALO_NMM_INIT_15B.inc>
2178 # include <HALO_NMM_INIT_16.inc>
2179 # include <HALO_NMM_INIT_17.inc>
2180 # include <HALO_NMM_INIT_18.inc>
2181 # include <HALO_NMM_INIT_19.inc>
2182 # include <HALO_NMM_INIT_20.inc>
2183 # include <HALO_NMM_INIT_21.inc>
2184 # include <HALO_NMM_INIT_22.inc>
2185 # include <HALO_NMM_INIT_23.inc>
2186 # include <HALO_NMM_INIT_24.inc>
2187 # include <HALO_NMM_INIT_25.inc>
2188 # include <HALO_NMM_INIT_26.inc>
2189 # include <HALO_NMM_INIT_27.inc>
2190 # include <HALO_NMM_INIT_28.inc>
2191 # include <HALO_NMM_INIT_29.inc>
2192 # include <HALO_NMM_INIT_30.inc>
2193 # include <HALO_NMM_INIT_31.inc>
2194 # include <HALO_NMM_INIT_32.inc>
2195 # include <HALO_NMM_INIT_33.inc>
2196 # include <HALO_NMM_INIT_34.inc>
2197 # include <HALO_NMM_INIT_35.inc>
2198 # include <HALO_NMM_INIT_36.inc>
2199 # include <HALO_NMM_INIT_37.inc>
2200 # include <HALO_NMM_INIT_38.inc>
2201 # include <HALO_NMM_INIT_39.inc>
2204 !#include <scalar_derefs.inc>
2209 END SUBROUTINE START_DOMAIN_NMM