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_args.inc>
11 !----------------------------------------------------------------------
14 USE MODULE_DRIVER_CONSTANTS
15 USE module_model_constants
22 USE MODULE_IGWAVE_ADJUST,ONLY: PDTE, PFDHT, DDAMP
23 USE MODULE_ADVECTION, ONLY: ADVE, VAD2, HAD2
24 USE MODULE_NONHY_DYNAM, ONLY: VADZ, HADZ
25 USE MODULE_DIFFUSION_NMM,ONLY: HDIFF
26 USE MODULE_BNDRY_COND, ONLY: BOCOH, BOCOV
27 USE MODULE_PHYSICS_INIT
28 ! USE MODULE_RA_GFDLETA
30 USE MODULE_EXT_INTERNAL
33 USE MODULE_AEROSOLS_SORGAM, ONLY: SUM_PM_SORGAM
34 USE MODULE_MOSAIC_DRIVER, ONLY: SUM_PM_MOSAIC
37 !----------------------------------------------------------------------
41 !----------------------------------------------------------------------
45 TYPE(DOMAIN),INTENT(INOUT) :: GRID
46 LOGICAL , INTENT(IN) :: allowed_to_read
48 #include <dummy_decl.inc>
50 TYPE(GRID_CONFIG_REC_TYPE) :: CONFIG_FLAGS
53 REAL RGASUNIV ! universal gas constant [ J/mol-K ]
54 PARAMETER ( RGASUNIV = 8.314510 )
60 INTEGER :: IDS,IDE,JDS,JDE,KDS,KDE &
61 & ,IMS,IME,JMS,JME,KMS,KME &
62 & ,IPS,IPE,JPS,JPE,KPS,KPE
66 REAL,ALLOCATABLE,DIMENSION(:) :: PHALF
68 REAL :: EPSB=0.1,EPSIN=9.8
72 INTEGER :: I,IEND,IER,IFE,IFS,IHH,IHL,IHRSTB,II,IRTN &
73 & ,ISIZ1,ISIZ2,ISTART,ISTAT,IX,J,J00,JFE,JFS,JHH,JJ &
74 & ,JM1,JM2,JM3,JP1,JP2,JP3,JX,KK &
75 & ,K,K400,KBI,KBI2,KCCO2,KNT,KNTI &
77 & ,N,NMAP,NRADLH,NRADSH,NREC,NS,RECL,STAT &
78 & ,STEPBL,STEPCU,STEPRA
80 INTEGER :: MY_E,MY_N,MY_S,MY_W &
81 & ,MY_NE,MY_NW,MY_SE,MY_SW,MYI,MYJ,NPE
85 INTEGER :: ILPAD2,IRPAD2,JBPAD2,JTPAD2
86 INTEGER :: ITS,ITE,JTS,JTE,KTS,KTE
88 INTEGER,DIMENSION(3) :: LPTOP
90 REAL :: ADDL,APELM,APELMNW,APEM1,CAPA,CLOGES,DPLM,DZLM,EPS,ESE &
91 & ,FAC1,FAC2,PDIF,PLM,PM1,PSFCK,PSS,PSUM,QLM,RANG &
92 & ,SLPM,TERM1,THLM,TIME,TLM,TSFCK,ULM,VLM
94 !!! REAL :: BLDT,CWML,EXNSFC,G_INV,PLYR,PSFC,ROG,SFCZ,THSIJ,TL
95 REAL :: CWML,EXNSFC,G_INV,PLYR,PSURF,ROG,SFCZ,THSIJ,TL
99 !!! REAL,ALLOCATABLE,DIMENSION(:,:) :: RAINBL,RAINNC,RAINNC &
100 INTEGER,ALLOCATABLE,DIMENSION(:,:) :: ITEMP,LOWLYR
101 REAL,ALLOCATABLE,DIMENSION(:) :: SFULL,SMID
102 REAL,ALLOCATABLE,DIMENSION(:) :: DZS,ZS
103 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: RQCBLTEN,RQIBLTEN &
104 & ,RQVBLTEN,RTHBLTEN &
106 & ,RQCCUTEN,RQICUTEN,RQRCUTEN &
107 & ,RQSCUTEN,RQVCUTEN,RTHCUTEN &
109 & ,RTHRATENLW,RTHRATENSW
110 REAL,ALLOCATABLE,DIMENSION(:,:) :: EMISS,EMTEMP,GLW,HFX &
112 & ,QFX,RAINBL,RAINC,RAINNC &
114 & ,SNOWC,THC,TMN,TSFC
116 REAL,ALLOCATABLE,DIMENSION(:,:) :: Z0_DUM, ALBEDO_DUM
118 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: ZINT,RRI,CONVFAC,ZMID
119 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: T_TRANS,PINT_TRANS
120 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: CLDFRA_TRANS
122 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: CLDFRA_OLD
125 REAL,ALLOCATABLE,DIMENSION(:,:,:) :: W0AVG
127 LOGICAL :: E_BDY,N_BDY,S_BDY,W_BDY,WARM_RAIN,ADV_MOIST_COND
128 LOGICAL :: START_OF_SIMULATION
129 integer :: jam,retval
130 character(20) :: seeout="hi08.t00z.nhbmeso"
133 real :: dsig,dsigsum,pdbot,pdtot,rpdtot
134 real :: fisx,ht,prodx,rg
135 integer :: i_t=096,j_t=195,n_t=11
136 integer :: i_u=49,j_u=475,n_u=07
137 integer :: i_v=49,j_v=475,n_v=07
138 integer :: num_ozmixm, num_aerosolc
140 INTEGER :: hr, mn, sec, ms, rc
141 TYPE(WRFU_Time) :: currentTime
145 REAL,DIMENSION(0:30) :: VZ0TBL_24
147 & 1.00, 0.07, 0.07, 0.07, 0.07, 0.15, &
148 & 0.08, 0.03, 0.05, 0.86, 0.80, 0.85, &
149 & 2.65, 1.09, 0.80, 0.001, 0.04, 0.05, &
150 & 0.01, 0.04, 0.06, 0.05, 0.03, 0.001, &
151 & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/)
155 !----------------------------------------------------------------------
157 #include <scalar_derefs.inc>
158 !----------------------------------------------------------------------
159 !**********************************************************************
160 !----------------------------------------------------------------------
162 CALL GET_IJK_FROM_GRID(GRID, &
163 & IDS,IDE,JDS,JDE,KDS,KDE, &
164 & IMS,IME,JMS,JME,KMS,KME, &
165 & IPS,IPE,JPS,JPE,KPS,KPE)
174 CALL model_to_grid_config_rec(grid%id,model_config_rec &
177 RESTRT=config_flags%restart
178 ! write(0,*) 'set RESTRT to: ', RESTRT
181 IF(IME>NMM_MAX_DIM )THEN
182 WRITE(wrf_err_message,*) &
183 'start_domain_nmm ime (',ime,') > ',NMM_MAX_DIM, &
184 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
185 CALL WRF_ERROR_FATAL(wrf_err_message)
188 IF(JME>NMM_MAX_DIM )THEN
189 WRITE(wrf_err_message,*) &
190 'start_domain_nmm jme (',jme,') > ',NMM_MAX_DIM, &
191 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
192 CALL WRF_ERROR_FATAL(wrf_err_message)
195 IF(IMS>-2.OR.IME>NMM_MAX_DIM )THEN
196 WRITE(wrf_err_message,*) &
197 'start_domain_nmm ims(',ims,' > -2 or ime (',ime,') > ',NMM_MAX_DIM, &
198 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
199 CALL WRF_ERROR_FATAL(wrf_err_message)
202 IF(JMS>-2.OR.JME>NMM_MAX_DIM )THEN
203 WRITE(wrf_err_message,*) &
204 'start_domain_nmm jms(',jms,' > -2 or jme (',jme,') > ',NMM_MAX_DIM, &
205 '. Increase NMM_MAX_DIM in configure.wrf, clean, and recompile.'
206 CALL WRF_ERROR_FATAL(wrf_err_message)
210 !----------------------------------------------------------------------
212 WRITE(0,196)IHRST,IDAT
213 WRITE(LIST,196)IHRST,IDAT
214 196 FORMAT(' FORECAST BEGINS ',I2,' GMT ',2(I2,'/'),I4)
216 !!!! For now, set NPES to 1
227 !! All "my" variables defined below have had the IDE or JDE specification
236 MYIS1 =MAX(IDS+1,IPS)
237 MYIE1 =MIN(IDE-2,IPE)
238 MYJS2 =MAX(JDS+2,JPS)
239 MYJE2 =MIN(JDE-3,JPE)
241 MYIS_P1=MAX(IDS,IPS-1)
242 MYIE_P1=MIN(IDE-1,IPE+1)
243 MYIS_P2=MAX(IDS,IPS-2)
244 MYIE_P2=MIN(IDE-1,IPE+2)
245 MYIS_P3=MAX(IDS,IPS-3)
246 MYIE_P3=MIN(IDE-1,IPE+3)
247 MYJS_P3=MAX(JDS,JPS-3)
248 MYJE_P3=MIN(JDE-1,JPE+3)
249 MYIS_P4=MAX(IDS,IPS-4)
250 MYIE_P4=MIN(IDE-1,IPE+4)
251 MYJS_P4=MAX(JDS,JPS-4)
252 MYJE_P4=MIN(JDE-1,JPE+4)
253 MYIS_P5=MAX(IDS,IPS-5)
254 MYIE_P5=MIN(IDE-1,IPE+5)
255 MYJS_P5=MAX(JDS,JPS-5)
256 MYJE_P5=MIN(JDE-1,JPE+5)
258 MYIS1_P1=MAX(IDS+1,IPS-1)
259 MYIE1_P1=MIN(IDE-2,IPE+1)
260 MYIS1_P2=MAX(IDS+1,IPS-2)
261 MYIE1_P2=MIN(IDE-2,IPE+2)
263 MYJS1_P1=MAX(JDS+1,JPS-1)
264 MYJS2_P1=MAX(JDS+2,JPS-1)
265 MYJE1_P1=MIN(JDE-2,JPE+1)
266 MYJE2_P1=MIN(JDE-3,JPE+1)
267 MYJS1_P2=MAX(JDS+1,JPS-2)
268 MYJE1_P2=MIN(JDE-2,JPE+2)
269 MYJS2_P2=MAX(JDS+2,JPS-2)
270 MYJE2_P2=MIN(JDE-3,JPE+2)
271 MYJS1_P3=MAX(JDS+1,JPS-3)
272 MYJE1_P3=MIN(JDE-2,JPE+3)
273 MYJS2_P3=MAX(JDS+2,JPS-3)
274 MYJE2_P3=MIN(JDE-3,JPE+3)
279 CALL WRF_GET_MYPROC(MYPROC)
283 !----------------------------------------------------------------------
284 !*** Let each task determine who its eight neighbors are because we
285 !*** will need to know that for the halo exchanges. The direction
286 !*** to each neighbor will be designated by the following integers:
297 !*** If a task has no neighbor in a particular direction because of
298 !*** the presence of the global domain boundary then that element
299 !*** of my_neb is set to -1.
300 !-----------------------------------------------------------------------
302 call wrf_get_nprocx(inpes)
303 call wrf_get_nprocy(jnpes)
305 allocate(itemp(inpes,jnpes),stat=istat)
320 if(myj+1<=jnpes)my_n=itemp(myi,myj+1)
323 if(myi+1<=inpes)my_e=itemp(myi+1,myj)
326 if(myj-1>=1)my_s=itemp(myi,myj-1)
329 if(myi-1>=1)my_w=itemp(myi-1,myj)
332 if((myi+1<=inpes).and.(myj+1<=jnpes)) &
333 my_ne=itemp(myi+1,myj+1)
336 if((myi+1<=inpes).and.(myj-1>=1)) &
337 my_se=itemp(myi+1,myj-1)
340 if((myi-1>=1).and.(myj-1>=1)) &
341 my_sw=itemp(myi-1,myj-1)
344 if((myi-1>=1).and.(myj+1<=jnpes)) &
345 my_nw=itemp(myi-1,myj+1)
357 # include <HALO_NMM_INIT_1.inc>
358 # include <HALO_NMM_INIT_2.inc>
359 # include <HALO_NMM_INIT_3.inc>
360 # include <HALO_NMM_INIT_4.inc>
361 # include <HALO_NMM_INIT_5.inc>
362 # include <HALO_NMM_INIT_6.inc>
363 # include <HALO_NMM_INIT_7.inc>
364 # include <HALO_NMM_INIT_8.inc>
365 # include <HALO_NMM_INIT_9.inc>
366 # include <HALO_NMM_INIT_10.inc>
367 # include <HALO_NMM_INIT_11.inc>
368 # include <HALO_NMM_INIT_12.inc>
369 # include <HALO_NMM_INIT_13.inc>
370 # include <HALO_NMM_INIT_14.inc>
371 # include <HALO_NMM_INIT_15.inc>
372 # include <HALO_NMM_INIT_16.inc>
373 # include <HALO_NMM_INIT_17.inc>
374 # include <HALO_NMM_INIT_18.inc>
375 # include <HALO_NMM_INIT_19.inc>
376 # include <HALO_NMM_INIT_20.inc>
377 # include <HALO_NMM_INIT_21.inc>
378 # include <HALO_NMM_INIT_22.inc>
379 # include <HALO_NMM_INIT_23.inc>
380 # include <HALO_NMM_INIT_24.inc>
381 # include <HALO_NMM_INIT_25.inc>
382 # include <HALO_NMM_INIT_26.inc>
383 # include <HALO_NMM_INIT_27.inc>
384 # include <HALO_NMM_INIT_28.inc>
385 # include <HALO_NMM_INIT_29.inc>
386 # include <HALO_NMM_INIT_30.inc>
387 # include <HALO_NMM_INIT_31.inc>
388 # include <HALO_NMM_INIT_32.inc>
389 # include <HALO_NMM_INIT_33.inc>
390 # include <HALO_NMM_INIT_34.inc>
391 # include <HALO_NMM_INIT_35.inc>
392 # include <HALO_NMM_INIT_36.inc>
393 # include <HALO_NMM_INIT_37.inc>
394 # include <HALO_NMM_INIT_38.inc>
395 # include <HALO_NMM_INIT_39.inc>
423 PDSL(I,J) =PD(I,J)*RES(I,J)
430 ! fisx=max(fis(i,j),0.)
431 ! prodx=Z0(I,J)*Z0MAX
432 ! Z0(I,J) =SM(I,J)*Z0SEA+(1.-SM(I,J))* &
433 ! & (Z0(I,J)*Z0MAX+FISx *FCM+Z0LAND)
434 !!! & (prodx +FISx *FCM+Z0LAND)
442 HTOPD(I,J) =REAL(KTS)
443 HTOPS(I,J) =REAL(KTS)
445 HBOTD(I,J) =REAL(KTE)
446 HBOTS(I,J) =REAL(KTE)
448 !*** AT THIS POINT, WE MUST CALCULATE THE INITIAL POTENTIAL TEMPERATURE
449 !*** OF THE SURFACE AND OF THE SUBGROUND.
450 !*** EXTRAPOLATE DOWN FOR INITIAL SURFACE POTENTIAL TEMPERATURE.
451 !*** ALSO DO THE SHELTER PRESSURE.
453 PM1=AETA1(KTS)*PDTOP+AETA2(KTS)*PDSL(I,J)+PT
454 APEM1=(1.E5/PM1)**CAPA
456 IF(NMM_TSK(I,J)>=200.)THEN ! have a specific skin temp, use it
457 THS(I,J)=NMM_TSK(I,J)*APEM1
459 ELSE ! use lowest layer as a proxy
460 THS(I,J)=T(I,J,KTS)*APEM1
464 ! if (I .eq. IFE/2 .and. J .eq. JFE/2) then
465 ! write(6,*) 'I,J,T(I,KOFF+1,J),NMM_TSK(I,J):: ', I,J,T(I,KOFF+1,J),NMM_TSK(I,J)
466 ! write(6,*) 'THS(I,J): ', THS(I,J)
469 PSFCK=PD(I,J)+PDTOP+PT
472 QSH(I,J)=PQ0/PSFCK*EXP(A2*(TSFCK-A3)/(TSFCK-A4))
473 ELSEIF(SM(I,J)>0.5) THEN
474 THS(I,J)=SST(I,J)*(1.E5/(PD(I,J)+PDTOP+PT))**CAPA
477 TERM1=-0.068283/T(I,J,KTS)
478 PSHLTR(I,J)=(PD(I,J)+PDTOP+PT)*EXP(TERM1)
490 !*** INITIALIZE CLOUD FIELDS
492 IF (MAXVAL(CWM) .gt. 0. .and. MAXVAL(CWM) .lt. 1.) then
493 write(0,*) 'appear to have CWM values...do not zero'
495 write(0,*) 'zeroing CWM'
505 !*** INITIALIZE ACCUMULATOR ARRAYS TO ZERO.
540 !*** INITIALIZE SATURATION SPECIFIC HUMIDITY OVER THE WATER.
547 CLOGES =-CM1/SST(I,J)-CM2*ALOG10(SST(I,J))+CM3
548 ESE = 10.**(CLOGES+2.)
549 QSH(I,J)= SM(I,J)*EPS*ESE/(PD(I,J)+PDTOP+PT-ESE*(1.-EPS))
554 !*** INITIALIZE TURBULENT KINETIC ENERGY (TKE) TO A SMALL
555 !*** VALUE (EPSQ2) ABOVE GROUND. SET TKE TO ZERO IN THE
556 !*** THE LOWEST MODEL LAYER. IN THE LOWEST TWO ATMOSPHERIC
557 !*** ETA LAYERS SET TKE TO A SMALL VALUE (Q2INI).
559 !***EROGERS: add check for realistic values of q2
561 IF (MAXVAL(Q2) .gt. epsq2 .and. MAXVAL(Q2) .lt. 200.) then
562 write(0,*) 'appear to have Q2 values...do not zero'
564 write(0,*) 'zeroing Q2'
568 Q2(I,J,K)=HBM2(I,J)*EPSQ2
576 Q2(I,J,KTE-2)= HBM2(I,J)*Q2INI
577 Q2(I,J,KTE-1)= HBM2(I,J)*Q2INI
582 !*** PAD ABOVE GROUND SPECIFIC HUMIDITY IF IT IS TOO SMALL.
583 !*** INITIALIZE LATENT HEATING ACCUMULATION ARRAYS.
588 IF(Q(I,J,K)<EPSQ)Q(I,J,K)=EPSQ
596 !*** INITIALIZE MAX/MIN TEMPERATURES.
600 TLMAX(I,J)=T(I,J,KPS)
601 TLMIN(I,J)=T(I,J,KPS)
605 !----------------------------------------------------------------------
606 !*** END OF SCRATCH START INITIALIZATION BLOCK.
607 !----------------------------------------------------------------------
609 CALL wrf_message('INIT: INITIALIZED ARRAYS FOR CLEAN START')
610 ENDIF ! <--- (not restart)
616 IF(T(I,J,KTS)==0.)THEN
617 T(I,J,KTS)=T(I,J,KTS+1)
620 TERM1=-0.068283/T(I,J,KTS)
621 PSHLTR(I,J)=(PD(I,J)+PDTOP+PT)*EXP(TERM1)
626 !----------------------------------------------------------------------
627 !*** RESTART INITIALIZING. CHECK TO SEE IF WE NEED TO ZERO
628 !*** ACCUMULATION ARRAYS.
629 !----------------------------------------------------------------------
631 TSPH=3600./GRID%DT ! needed?
635 write(0,*)' start_nmm TSTART=',grid%tstart
636 write(0,*)' start_nmm TPREC=',grid%tprec
637 write(0,*)' start_nmm THEAT=',grid%theat
638 write(0,*)' start_nmm TCLOD=',grid%tclod
639 write(0,*)' start_nmm TRDSW=',grid%trdsw
640 write(0,*)' start_nmm TRDLW=',grid%trdlw
641 write(0,*)' start_nmm TSRFC=',grid%tsrfc
642 write(0,*)' start_nmm PCPFLG=',grid%pcpflg
645 NSTART = INT(grid%TSTART*TSPH+0.5)
650 !! want non-zero values for NPREC, NHEAT type vars to avoid problems
651 !! with mod statements below.
653 NPREC = INT(grid%TPREC *TSPH+0.5)
654 NHEAT = INT(grid%THEAT *TSPH+0.5)
655 NCLOD = INT(grid%TCLOD *TSPH+0.5)
656 NRDSW = INT(grid%TRDSW *TSPH+0.5)
657 NRDLW = INT(grid%TRDLW *TSPH+0.5)
658 NSRFC = INT(grid%TSRFC *TSPH+0.5)
660 !----------------------------------------------------------------------
662 !*** FLAG FOR INITIALIZING ARRAYS, LOOKUP TABLES, & CONSTANTS USED IN
663 !*** MICROPHYSICS AND RADIATION
665 !----------------------------------------------------------------------
669 !----------------------------------------------------------------------
671 !*** INITIALIZE ADVECTION TENDENCIES TO ZERO SO THAT
672 !*** BOUNDARY POINTS WILL ALWAYS BE ZERO
681 !----------------------------------------------------------------------
683 !*** SET INDEX ARRAYS FOR UPSTREAM ADVECTION
685 !----------------------------------------------------------------------
701 #ifndef NO_UPSTREAM_ADVECTION
703 !*** N_IUP_H HOLDS THE NUMBER OF MASS POINTS NEEDED IN EACH ROW
704 !*** FOR UPSTREAM ADVECTION (FULL ROWS IN THE 3RD THROUGH 7TH
705 !*** ROWS FROM THE SOUTH AND NORTH GLOBAL BOUNDARIES AND
706 !*** FOUR POINTS ADJACENT TO THE WEST AND EAST GLOBAL BOUNDARIES
707 !*** ON ALL OTHER INTERNAL ROWS). SIMILARLY FOR N_IUP_V.
708 !*** BECAUSE OF HORIZONTAL OPERATIONS, THESE POINTS EXTEND OUTSIDE
709 !*** OF THE UPSTREAM REGION SOMEWHAT.
710 !*** N_IUP_ADH HOLDS THE NUMBER OF MASS POINTS NEEDED IN EACH ROW
711 !*** FOR THE COMPUTATION OF THE TENDENCIES THEMSELVES (ADT, ADQ2M
712 !*** AND ADQ2L); SPECIFICALLY THESE TENDENCIES ARE ONLY DONE IN
713 !*** THE UPSTREAM REGION.
714 !*** N_IUP_ADV HOLDS THE NUMBER OF MASS POINTS NEEDED IN EACH ROW
715 !*** FOR THE VELOCITY POINT TENDENCIES.
716 !*** IUP_H AND IUP_V HOLD THE ACTUAL I VALUES USED IN EACH ROW.
717 !*** LIKEWISE FOR IUP_ADH AND IUP_ADV.
718 !*** ALSO, SET UPSTRM FOR THOSE TASKS AROUND THE GLOBAL EDGE.
753 IF(E_BDY)IEND=IEND-MOD(JJ+1,2)
755 IUP_ADH(IMS+KNTI,J)=I
763 IF(E_BDY)IEND=IEND-MOD(JJ,2)
765 IUP_ADV(IMS+KNTI,J)=I
776 DO JJ=JDE-7, JDE-1 ! JM-6,JM
788 DO JJ=JDE-5, JDE-3 ! JM-4,JM-2
793 IF(E_BDY)IEND=IEND-MOD(JJ+1,2)
795 IUP_ADH(IMS+KNTI,J)=I
803 IF(E_BDY)IEND=IEND-MOD(JJ,2)
805 IUP_ADV(IMS+KNTI,J)=I
816 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
829 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
834 IUP_ADH(IMS+KNTI,J)=I
842 IUP_ADV(IMS+KNTI,J)=I
851 CALL WRF_GET_NPROCX(INPES)
857 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
862 !*** IN CASE THERE IS ONLY A SINGLE GLOBAL TASK IN THE
863 !*** I DIRECTION THEN WE MUST ADD THE WESTSIDE UPSTREAM
864 !*** POINTS TO THE EASTSIDE POINTS IN EACH ROW.
867 IF(INPES.EQ.1)KNTI=N_IUP_H(J)
879 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
881 IEND=IM-1-MOD(JJ+1,2)
882 ISTART=IEND-MOD(JJ,2)
884 IF(INPES==1)KNTI=N_IUP_ADH(J)
887 IUP_ADH(IMS+KNTI,J)=I
895 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
900 IF(INPES==1)KNTI=N_IUP_V(J)
912 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
915 ISTART=IEND-MOD(JJ+1,2)
917 IF(INPES==1)KNTI=N_IUP_ADV(J)
920 IUP_ADV(IMS+KNTI,J)=I
927 !----------------------------------------------------------------------
928 !!!!!!!!!!!!!!!!!!!!tlb
929 !!!Read in EM and EMT from the original NMM nhb file
930 !!! call int_get_fresh_handle( retval )
932 !!! open(unit=retval,file=seeout,form='UNFORMATTED',iostat=ier)
937 !!! read(seeout)dummyx,em,emt
938 !!!!!!read(55)dummyx,em,emt
940 jam=6+2*(JDE-JDS-1-9)
941 ! read(55)(em(j),j=1,jam),(emt(j),j=1,jam)
942 !!!!!!!!!!!!!!!!!!!!tlb
944 !*** EXTRACT EM AND EMT FOR THE LOCAL SUBDOMAINS
960 DO JJ=JDE-5,JDE-3 ! JM-4,JM-2
972 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
984 IF(JJ>=MY_JS_GLB-2.AND.JJ<=MY_JE_GLB+2)THEN
992 CALL wrf_message( 'start_domain_nmm: upstream advection commented out')
996 !*** SET ZERO-VALUE FOR SOME OUTPUT DIAGNOSTIC ARRAYS
1000 GRID%NSOIL= GRID%NUM_SOIL_LAYERS
1006 ! CMC(I,J)=canwat(i,j) ! tgs
1007 IF(SICE(I,J)>0.5)THEN
1055 !----------------------------------------------------------------------
1056 !*** INITIALIZE RADTN VARIABLES
1057 !*** CALCULATE THE NUMBER OF STEPS AT EACH POINT.
1058 !*** THE ARRAY 'LVL' WILL COORDINATE VERTICAL LOCATIONS BETWEEN
1059 !*** THE LIFTED WORKING ARRAYS AND THE FUNDAMENTAL MODEL ARRAYS.
1060 !*** LVL HOLDS THE HEIGHT (IN MODEL LAYERS) OF THE TOPOGRAPHY AT
1061 !*** EACH GRID POINT.
1062 !----------------------------------------------------------------------
1070 !*** DETERMINE MODEL LAYER LIMITS FOR HIGH(3), MIDDLE(2),
1071 !*** AND LOW(1) CLOUDS. ALSO FIND MODEL LAYER THAT IS JUST BELOW
1072 !*** (HEIGHT-WISE) 400 MB. (K400)
1079 PSUM=PSUM+DETA(K)*PDIF
1081 IF(PSUM>PHITP)LPTOP(3)=K
1082 ELSEIF(LPTOP(2)==0)THEN
1083 IF(PSUM>PMDHI)LPTOP(2)=K
1086 ELSEIF(LPTOP(1)==0)THEN
1087 IF(PSUM>PLOMD)LPTOP(1)=K
1091 !*** CALL GRADFS ONCE TO CALC. CONSTANTS AND GET O3 DATA
1095 !*** CALCULATE THE MIDLAYER PRESSURES IN THE STANDARD ATMOSPHERE
1100 ALLOCATE(PHALF(LM+1),STAT=I)
1103 PHALF(K+1)=AETA(K)*PDIF+PT
1110 !!! CALL GRADFS(PHALF,KCCO2,NUNIT_CO2)
1112 !*** CALL SOLARD TO CALCULATE NON-DIMENSIONAL SUN-EARTH DISTANCE
1114 !!! IF(MYPE==0)CALL SOLARD(SUN_DIST)
1115 !!! CALL MPI_BCAST(SUN_DIST,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
1118 !*** CALL ZENITH SIMPLY TO GET THE DAY OF THE YEAR FOR
1119 !*** THE SETUP OF THE OZONE DATA
1121 TIME=(NTSD-1)*GRID%DT
1123 !!! CALL ZENITH(TIME,DAYI,HOUR)
1126 IF(MOD(IDAT(3),4)==0)ADDL=1.
1132 !----------------------------------------------------------------------
1133 !*** SOME INITIAL VALUES RELATED TO TURBULENCE SCHEME
1134 !----------------------------------------------------------------------
1139 !*** TRY A SIMPLE LINEAR INTERP TO GET 2/10 M VALUES
1141 PDSL(I,J)=PD(I,J)*RES(I,J)
1147 PLM=AETA1(KTS)*PDTOP+AETA2(KTS)*PDSL(I,J)+PT
1148 APELM=(1.0E5/PLM)**CAPA
1149 APELMNW=(1.0E5/PSHLTR(I,J))**CAPA
1151 DPLM=(DETA1(KTS)*PDTOP+DETA2(KTS)*PDSL(I,J))*0.5
1152 DZLM=R_D*DPLM*TLM*(1.+P608*QLM)/(G*PLM)
1154 FAC2=(DZLM-10.)/DZLM
1161 TH10(I,J)=FAC2*THS(I,J)+FAC1*THLM
1162 Q10(I,J)=FAC2*QSH(I,J)+FAC1*QLM
1168 ! FAC2=(DZLM-2.)/DZLM
1169 ! IF(DZLM.LE.2.)THEN
1174 IF(.NOT.RESTRT.OR.NEST)THEN
1176 IF ( (THLM-THS(I,J))>2.0) THEN ! weight differently in different scenarios
1184 TSHLTR(I,J)=FAC2*THS(I,J)+FAC1*THLM
1185 ! TSHLTR(I,J)=0.2*THS(I,J)+0.8*THLM
1186 QSHLTR(I,J)=FAC2*QSH(I,J)+FAC1*QLM
1187 ! QSHLTR(I,J)=0.2*QSH(I,J)+0.8*QLM
1190 !*** NEED TO CONVERT TO THETA IF IS THE RESTART CASE
1191 !*** AS CHKOUT.f WILL CONVERT TO TEMPERATURE
1193 !EROGERS: COMMENT OUT IN WRF-NMM
1196 ! TSHLTR(I,J)=TSHLTR(I,J)*APELMNW
1201 !----------------------------------------------------------------------
1202 !*** INITIALIZE TAU-1 VALUES FOR ADAMS-BASHFORTH
1203 !----------------------------------------------------------------------
1209 TOLD(I,J,K)=T(I,J,K) ! T AT TAU-1
1210 UOLD(I,J,K)=U(I,J,K) ! U AT TAU-1
1211 VOLD(I,J,K)=V(I,J,K) ! V AT TAU-1
1217 !----------------------------------------------------------------------
1218 !*** INITIALIZE NONHYDROSTATIC QUANTITIES
1219 !----------------------------------------------------------------------
1221 !!!! SHOULD DWDT BE REDEFINED IF RESTRT?
1223 IF(.NOT.RESTRT.OR.NEST)THEN
1233 IF(GRID%SIGMA==1)THEN
1242 PDSL(I,J)=RES(I,J)*PD(I,J)
1250 !!!! SHOULD PINT,Z,W BE REDEFINED IF RESTRT?
1252 write(0,*)' restrt=',restrt,' nest=',nest
1253 write(0,*)' ifs=',ifs,' ife=',ife
1254 write(0,*)' jfs=',jfs,' jfe=',jfe
1255 write(0,*)' kps=',kps,' kpe=',kpe
1256 write(0,*)' pdtop=',pdtop,' pt=',pt
1257 IF(.NOT.RESTRT.OR.NEST)THEN
1261 PINT(I,J,K)=ETA1(K)*PDTOP+ETA2(K)*PDSL(I,J)+PT
1262 Z(I,J,K)=PINT(I,J,K)
1269 #ifndef NO_RESTRICT_ACCEL
1270 !----------------------------------------------------------------------
1271 !*** RESTRICTING THE ACCELERATION ALONG THE BOUNDARIES
1272 !----------------------------------------------------------------------
1283 JHH=JDE-1-JHL+1 ! JM-JHL+1
1287 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1290 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1300 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1303 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1313 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1316 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1326 IF(J>=MY_JS_GLB-JBPAD2.AND.J<=MY_JE_GLB+JTPAD2)THEN
1328 ! moved this line to inside the J-loop, 20030429, jm
1329 IHH=IDE-1-IHL+MOD(J,2) ! IM-IHL+MOD(J,2)
1331 IF(I>=MY_IS_GLB-ILPAD2.AND.I<=MY_IE_GLB+IRPAD2)THEN
1343 CALL wrf_message('start_domain_nmm: NO_RESTRICT_ACCEL')
1346 !-----------------------------------------------------------------------
1347 !*** CALL THE GENERAL PHYSICS INITIALIZATION
1348 !-----------------------------------------------------------------------
1351 ALLOCATE(SFULL(KMS:KME),STAT=I) ; SFULL = 0.
1352 ALLOCATE(SMID(KMS:KME),STAT=I) ; SMID = 0.
1353 ALLOCATE(EMISS(IMS:IME,JMS:JME),STAT=I) ; EMISS = 0.
1354 ALLOCATE(EMTEMP(IMS:IME,JMS:JME),STAT=I) ; EMTEMP = 0.
1355 ALLOCATE(GLW(IMS:IME,JMS:JME),STAT=I) ; GLW = 0.
1356 ALLOCATE(HFX(IMS:IME,JMS:JME),STAT=I) ; HFX = 0.
1357 ALLOCATE(LOWLYR(IMS:IME,JMS:JME),STAT=I) ; LOWLYR = 0.
1358 ! ALLOCATE(MAVAIL(IMS:IME,JMS:JME),STAT=I) ; MAVAIL = 0.
1359 ALLOCATE(NCA(IMS:IME,JMS:JME),STAT=I) ; NCA = 0.
1360 ALLOCATE(QFX(IMS:IME,JMS:JME),STAT=I) ; QFX = 0.
1361 ALLOCATE(RAINBL(IMS:IME,JMS:JME),STAT=I) ; RAINBL = 0.
1362 ALLOCATE(RAINC(IMS:IME,JMS:JME),STAT=I) ; RAINC = 0.
1363 ALLOCATE(RAINNC(IMS:IME,JMS:JME),STAT=I) ; RAINNC = 0.
1364 ALLOCATE(RAINNCV(IMS:IME,JMS:JME),STAT=I) ; RAINNCV = 0.
1366 ALLOCATE(ZS(KMS:KME),STAT=I) ; ZS = 0.
1367 ALLOCATE(SNOWC(IMS:IME,JMS:JME),STAT=I) ; SNOWC = 0.
1368 ALLOCATE(THC(IMS:IME,JMS:JME),STAT=I) ; THC = 0.
1369 ALLOCATE(TMN(IMS:IME,JMS:JME),STAT=I) ; TMN = 0.
1370 ALLOCATE(TSFC(IMS:IME,JMS:JME),STAT=I) ; TSFC = 0.
1371 ALLOCATE(Z0_DUM(IMS:IME,JMS:JME),STAT=I) ; Z0_DUM = 0.
1372 ALLOCATE(ALBEDO_DUM(IMS:IME,JMS:JME),STAT=I) ; ALBEDO_DUM = 0.
1374 ALLOCATE(DZS(KMS:KME),STAT=I) ; DZS = 0.
1375 ALLOCATE(RQCBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQCBLTEN = 0.
1376 ALLOCATE(RQIBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQIBLTEN = 0.
1377 ALLOCATE(RQVBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQVBLTEN = 0.
1378 ALLOCATE(RTHBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHBLTEN = 0.
1379 ALLOCATE(RUBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RUBLTEN = 0.
1380 ALLOCATE(RVBLTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RVBLTEN = 0.
1381 ALLOCATE(RQCCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQCCUTEN = 0.
1382 ALLOCATE(RQICUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQICUTEN = 0.
1383 ALLOCATE(RQRCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQRCUTEN = 0.
1384 ALLOCATE(RQSCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQSCUTEN = 0.
1385 ALLOCATE(RQVCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RQVCUTEN = 0.
1386 ALLOCATE(RTHCUTEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHCUTEN = 0.
1387 ALLOCATE(RTHRATEN(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHRATEN = 0.
1388 ALLOCATE(RTHRATENLW(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHRATENLW = 0.
1389 ALLOCATE(RTHRATENSW(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RTHRATENSW = 0.
1390 ALLOCATE(ZINT(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; ZINT = 0.
1391 ALLOCATE(CONVFAC(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; CONVFAC = 0.
1392 ALLOCATE(PINT_TRANS(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; PINT_TRANS = 0.
1393 ALLOCATE(T_TRANS(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; T_TRANS = 0.
1394 ALLOCATE(RRI(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; RRI = 0.
1395 ALLOCATE(CLDFRA_TRANS(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; CLDFRA_TRANS = 0.
1397 ALLOCATE(CLDFRA_OLD(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; CLDFRA_OLD = 0.
1400 ALLOCATE(W0AVG(IMS:IME,KMS:KME,JMS:JME),STAT=I) ; W0AVG = 0.
1402 !-----------------------------------------------------------------------
1403 !jm added set of g_inv
1406 GRID%RADT=GRID%NRADS*GRID%DT/60.
1407 GRID%BLDT=GRID%NPHS*GRID%DT/60.
1408 GRID%CUDT=GRID%NCNVC*GRID%DT/60.
1409 GRID%GSMDT=GRID%NPHS*GRID%DT/60.
1415 PDSL(I,J)=PD(I,J)*RES(I,J)
1417 EXNSFC=(1.E5/PSURF)**CAPA
1418 XLAND(I,J)=SM(I,J)+1.
1419 THSIJ=(SST(I,J)*EXNSFC)*(XLAND(I,J)-1.) &
1420 & +THS(I,J)*(2.-SM(I,J))
1421 TSFC(I,J)=THSIJ/EXNSFC
1424 PLYR=(PINT(I,J,K)+PINT(I,J,K+1))*0.5
1427 RRI(I,K,J)=R_D*TL*(1.+P608*Q(I,J,K))/PLYR
1428 ZINT(I,K+1,J)=ZINT(I,K,J)+TL/PLYR &
1429 *(DETA1(K)*PDTOP+DETA2(K)*PDSL(I,J))*ROG &
1430 *(Q(I,J,K)*P608-CWML+1.)
1434 !!! ZMID(I,K,J)=0.5*(ZINT(I,K,J)+ZINT(I,K+1,J))
1439 !-----------------------------------------------------------------------
1440 !*** RECREATE SIGMA VALUES AT LAYER INTERFACES FOR THE FULL VERTICAL
1441 !*** DOMAIN FROM THICKNESS VALUES FOR THE TWO SUBDOMAINS.
1442 !*** NOTE: KTE=NUMBER OF LAYERS PLUS ONE
1443 !-----------------------------------------------------------------------
1445 write(0,*)' start_domain kte=',kte
1453 DSIG=(DETA1(K-1)*PDTOP+DETA2(K-1)*PDBOT)*RPDTOT
1454 DSIGSUM=DSIGSUM+DSIG
1455 SFULL(K)=SFULL(K-1)-DSIG
1456 SMID(K-1)=0.5*(SFULL(K-1)+SFULL(K))
1458 DSIG=(DETA1(KTE-1)*PDTOP+DETA2(KTE-1)*PDBOT)*RPDTOT
1459 DSIGSUM=DSIGSUM+DSIG
1460 SMID(KTE-1)=0.5*(SFULL(KTE-1)+SFULL(KTE))
1462 !-----------------------------------------------------------------------
1469 Z0_DUM(I,J)=Z0(I,J) ! hold
1470 ALBEDO_DUM(I,J)=ALBEDO(I,J) ! Save albedos
1475 !*** Always define the quantity Z0BASE
1482 Z0BASE(I,J)=VZ0TBL_24(IVGTYP(I,J))+Z0LAND
1484 Z0BASE(I,J)=VZ0TBL_24(IVGTYP(I,J))+Z0SEA
1491 ! when allocating CAM radiation 4d arrays (ozmixm, aerosolc) these are not needed
1495 ! Set GMT, JULDAY, and JULYR outside of phy_init because it is no longer
1496 ! called inside phy_init due to moving nest changes. (When nests move
1497 ! phy_init may not be called on a process if, for example, it is a moving
1498 ! nest and if this part of the domain is not being initialized (not the
1499 ! leading edge).) Calling domain_setgmtetc() here will avoid this problem
1500 ! when NMM moves to moving nests.
1501 CALL domain_setgmtetc( GRID, START_OF_SIMULATION )
1504 CALL domain_clock_get( grid, current_time=currentTime )
1505 CALL WRFU_TimeGet( currentTime, YY=grid%julyr, dayOfYear=grid%julday, &
1506 H=hr, M=mn, S=sec, MS=ms, rc=rc)
1507 grid%gmt=hr+real(mn)/60.+real(sec)/3600.+real(ms)/(1000*3600)
1508 WRITE( wrf_err_message , * ) 'DEBUG start_domain_nmm(): gmt = ',grid%gmt
1509 CALL wrf_debug( 150, TRIM(wrf_err_message) )
1512 ! Several arguments are RCONFIG entries in Registry.NMM. Registry no longer
1513 ! includes these as dummy arguments or declares them. Access them from
1516 CALL PHY_INIT(GRID%ID,CONFIG_FLAGS,GRID%DT,GRID%RESTART,SFULL,SMID &
1517 & ,PT,TSFC,GRID%RADT,GRID%BLDT,GRID%CUDT,GRID%GSMDT &
1518 & ,RTHCUTEN, RQVCUTEN, RQRCUTEN &
1519 & ,RQCCUTEN, RQSCUTEN, RQICUTEN &
1520 & ,RUBLTEN,RVBLTEN,RTHBLTEN &
1521 & ,RQVBLTEN,RQCBLTEN,RQIBLTEN &
1522 & ,RTHRATEN,RTHRATENLW,RTHRATENSW &
1523 & ,STEPBL,STEPRA,STEPCU &
1524 & ,W0AVG, RAINNC, RAINC, RAINCV, RAINNCV &
1525 & ,NCA,GRID%SWRAD_SCAT &
1528 & ,RTHFTEN, RQVFTEN &
1529 & ,CLDFRA_TRANS,CLDFRA_OLD,GLW,GSW,EMISS,EMTEMP,LU_INDEX&
1530 & ,GRID%LANDUSE_ISICE, GRID%LANDUSE_LUCATS &
1531 & ,GRID%LANDUSE_LUSEAS, GRID%LANDUSE_ISN &
1533 & ,XLAT,XLONG,ALBEDO,ALBBCK &
1534 & ,GRID%GMT,GRID%JULYR,GRID%JULDAY &
1535 & ,GRID%LEVSIZ, NUM_OZMIXM, NUM_AEROSOLC, GRID%PAERLEV &
1536 & ,TMN,XLAND,ZNT,Z0,USTAR,MOL,PBLH,TKE_MYJ &
1537 & ,EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL &
1538 & ,STC,ZS,DZS,GRID%NUM_SOIL_LAYERS,WARM_RAIN &
1540 & ,APR_GR,APR_W,APR_MC,APR_ST,APR_AS &
1541 & ,APR_CAPMA,APR_CAPME,APR_CAPMI &
1542 & ,XICE,XICE,VEGFRA,SNOW,CANWAT,SMSTAV &
1543 & ,SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW &
1544 & ,ACSNOM,IVGTYP,ISLTYP,SFCEVP,SMC &
1545 & ,SH2O, SNOWH, SMFR3D & ! temporary
1546 & ,GRID%DX,GRID%DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY &
1547 & ,MP_RESTART_STATE,TBPVS_STATE,TBPVS0_STATE &
1548 & ,.TRUE.,.FALSE.,START_OF_SIMULATION &
1549 & ,IDS, IDE, JDS, JDE, KDS, KDE &
1550 & ,IMS, IME, JMS, JME, KMS, KME &
1551 & ,ITS, ITE, JTS, JTE, KTS, KTE &
1554 !-----------------------------------------------------------------------
1567 CLDFRA(I,J,K)=CLDFRA_TRANS(I,K,J)
1576 !mp replace F*_PHY with values defined in module_initialize_real.F?
1578 IF (.NOT. RESTRT) THEN
1579 ! Added by Greg Thompson, NCAR-RAL, for initializing water vapor
1580 ! mixing ratio (from NMM's specific humidity var) into moist array.
1582 write(0,*) 'Initializng moist(:,:,:, Qv) from Q'
1586 moist(I,J,K,P_QV) = Q(I,J,K) / (1.-Q(I,J,K))
1591 ! Also sum cloud water, ice, rain, snow, graupel into Ferrier CWM
1592 ! array (if any hydrometeors found and non-zero from initialization
1593 ! package). Then, determine fractions ice and rain from species.
1595 IF (.not. (MAXVAL(CWM).gt.0. .and. MAXVAL(CWM).lt.1.) ) then
1596 do i_m = 2, num_moist
1598 & write(0,*) ' summing moist(:,:,:,',i_m,') into CWM array'
1602 IF ( (moist(I,J,K,i_m).gt.EPSQ) .and. (i_m.ne.p_qv) ) THEN
1603 CWM(I,J,K) = CWM(I,J,K) + moist(I,J,K,i_m)
1610 IF (.not. ( (maxval(F_ICE)+maxval(F_RAIN)) .gt. EPSQ) ) THEN
1611 write(0,*) ' computing F_ICE'
1612 do i_m = 2, num_moist
1616 IF ( (moist(I,J,K,i_m).gt.EPSQ) .and. &
1617 & ( (i_m.eq.p_qi).or.(i_m.eq.p_qs).or.(i_m.eq.p_qg) ) ) THEN
1618 F_ICE(I,K,J) = F_ICE(I,K,J) + moist(I,J,K,i_m)
1620 if (model_config_rec%mp_physics(grid%id).EQ.ETAMPNEW) then
1621 if ((i_m.eq.p_qi).or.(i_m.eq.p_qg) ) then
1622 moist(I,J,K,p_qs)=moist(I,J,K,p_qs)+moist(I,J,K,i_m)
1623 moist(I,J,K,i_m) =0.
1630 write(0,*) ' computing F_RAIN'
1635 IF(F_ICE(i,k,j)<=EPSQ)THEN
1638 F_ICE(I,K,J) = F_ICE(I,K,J)/CWM(I,J,K)
1640 IF ( (moist(I,J,K,p_qr)+moist(I,J,K,p_qc)).gt.EPSQ) THEN
1641 IF(moist(i,j,k,p_qr)<=EPSQ)THEN
1644 F_RAIN(I,K,J) = moist(i,j,k,p_qr) &
1645 & / (moist(i,j,k,p_qr)+moist(i,j,k,p_qc))
1653 ! End addition by Greg Thompson
1655 IF (maxval(F_ICE) .gt. 0.) THEN
1656 write(0,*) 'F_ICE > 0'
1660 F_ICE_PHY(I,K,J)=F_ICE(I,K,J)
1666 IF (maxval(F_RAIN) .gt. 0.) THEN
1667 write(0,*) 'F_RAIN > 0'
1671 F_RAIN_PHY(I,K,J)=F_RAIN(I,K,J)
1677 IF (maxval(F_RIMEF) .gt. 0.) THEN
1678 write(0,*) 'F_RIMEF > 0'
1682 F_RIMEF_PHY(I,K,J)=F_RIMEF(I,K,J)
1689 IF (.NOT. RESTRT) THEN
1690 !-- Replace albedos if original albedos are nonzero
1691 IF(MAXVAL(ALBEDO_DUM)>0.)THEN
1694 ALBEDO(I,J)=ALBEDO_DUM(I,J)
1703 APREC(I,J)=RAINNC(I,J)*1.E-3
1704 CUPREC(I,J)=RAINCV(I,J)*1.E-3
1708 !following will need mods Sep06
1717 CONVFAC(I,K,J) = PINT(II,JJ,KK)/RGASUNIV/T(II,JJ,KK)
1725 PINT_TRANS(I,K,J)=PINT(I,J,K)
1726 T_TRANS(I,K,J)=T(I,J,K)
1730 CALL CHEM_INIT (GRID%ID,CHEM,GRID%DT,GRID%BIOEMDT,GRID%PHOTDT,GRID%CHEMDT, &
1731 STEPBIOE,STEPPHOT,STEPCHEM,STEPFIREPL,GRID%PLUMERISEFIRE_FRQ, &
1732 ZINT,G,AERWRF,CONFIG_FLAGS, &
1733 RRI,T_TRANS,PINT_TRANS,CONVFAC, &
1734 GD_CLOUD,GD_CLOUD2,GD_CLOUD_B,GD_CLOUD2_B, &
1735 TAUAER1,TAUAER2,TAUAER3,TAUAER4, &
1736 GAER1,GAER2,GAER3,GAER4, &
1737 WAER1,WAER2,WAER3,WAER4, &
1738 PM2_5_DRY,PM2_5_WATER,PM2_5_DRY_EC,GRID%CHEM_IN_OPT, &
1740 IDS , IDE , JDS , JDE , KDS , KDE , &
1741 IMS , IME , JMS , JME , KMS , KME , &
1742 ITS , ITE , JTS , JTE , KTS , KTE )
1745 ! calculate initial pm
1747 SELECT CASE (CONFIG_FLAGS%CHEM_OPT)
1748 CASE (RADM2SORG, RACMSORG,RACMSORG_KPP)
1749 CALL SUM_PM_SORGAM ( &
1750 RRI, CHEM, H2OAJ, H2OAI, &
1751 PM2_5_DRY, PM2_5_WATER, PM2_5_DRY_EC, PM10, &
1752 IDS,IDE, JDS,JDE, KDS,KDE, &
1753 IMS,IME, JMS,JME, KMS,KME, &
1754 ITS,ITE, JTS,JTE, KTS,KTE-1 )
1756 CASE (CBMZ_MOSAIC_4BIN, CBMZ_MOSAIC_8BIN, CBMZ_MOSAIC_4BIN_AQ, CBMZ_MOSAIC_8BIN_AQ)
1757 CALL SUM_PM_MOSAIC ( &
1759 PM2_5_DRY, PM2_5_WATER, PM2_5_DRY_EC, PM10, &
1760 IDS,IDE, JDS,JDE, KDS,KDE, &
1761 IMS,IME, JMS,JME, KMS,KME, &
1762 ITS,ITE, JTS,JTE, KTS,KTE-1 )
1765 DO J=JTS,MIN(JTE,JDE-1)
1766 DO K=KTS,MIN(KTE,KDE-1)
1767 DO I=ITS,MIN(ITE,IDE-1)
1768 PM2_5_DRY(I,K,J) = 0.
1769 PM2_5_WATER(I,K,J) = 0.
1770 PM2_5_DRY_EC(I,K,J) = 0.
1785 ! DEALLOCATE(MAVAIL)
1792 DEALLOCATE(RQCBLTEN)
1793 DEALLOCATE(RQIBLTEN)
1794 DEALLOCATE(RQVBLTEN)
1795 DEALLOCATE(RTHBLTEN)
1798 DEALLOCATE(RQCCUTEN)
1799 DEALLOCATE(RQICUTEN)
1800 DEALLOCATE(RQRCUTEN)
1801 DEALLOCATE(RQSCUTEN)
1802 DEALLOCATE(RQVCUTEN)
1803 DEALLOCATE(RTHCUTEN)
1804 DEALLOCATE(RTHRATEN)
1805 DEALLOCATE(RTHRATENLW)
1806 DEALLOCATE(RTHRATENSW)
1815 DEALLOCATE(PINT_TRANS)
1817 DEALLOCATE(CLDFRA_TRANS)
1819 DEALLOCATE(CLDFRA_OLD)
1824 !-----------------------------------------------------------------------
1825 !----------------------------------------------------------------------
1828 DWDTMN(I,J)=DWDTMN(I,J)*HBM3(I,J)
1829 DWDTMX(I,J)=DWDTMX(I,J)*HBM3(I,J)
1832 !----------------------------------------------------------------------
1835 # include <HALO_NMM_INIT_1.inc>
1836 # include <HALO_NMM_INIT_2.inc>
1837 # include <HALO_NMM_INIT_3.inc>
1838 # include <HALO_NMM_INIT_4.inc>
1839 # include <HALO_NMM_INIT_5.inc>
1840 # include <HALO_NMM_INIT_6.inc>
1841 # include <HALO_NMM_INIT_7.inc>
1842 # include <HALO_NMM_INIT_8.inc>
1843 # include <HALO_NMM_INIT_9.inc>
1844 # include <HALO_NMM_INIT_10.inc>
1845 # include <HALO_NMM_INIT_11.inc>
1846 # include <HALO_NMM_INIT_12.inc>
1847 # include <HALO_NMM_INIT_13.inc>
1848 # include <HALO_NMM_INIT_14.inc>
1849 # include <HALO_NMM_INIT_15.inc>
1850 # include <HALO_NMM_INIT_15B.inc>
1851 # include <HALO_NMM_INIT_16.inc>
1852 # include <HALO_NMM_INIT_17.inc>
1853 # include <HALO_NMM_INIT_18.inc>
1854 # include <HALO_NMM_INIT_19.inc>
1855 # include <HALO_NMM_INIT_20.inc>
1856 # include <HALO_NMM_INIT_21.inc>
1857 # include <HALO_NMM_INIT_22.inc>
1858 # include <HALO_NMM_INIT_23.inc>
1859 # include <HALO_NMM_INIT_24.inc>
1860 # include <HALO_NMM_INIT_25.inc>
1861 # include <HALO_NMM_INIT_26.inc>
1862 # include <HALO_NMM_INIT_27.inc>
1863 # include <HALO_NMM_INIT_28.inc>
1864 # include <HALO_NMM_INIT_29.inc>
1865 # include <HALO_NMM_INIT_30.inc>
1866 # include <HALO_NMM_INIT_31.inc>
1867 # include <HALO_NMM_INIT_32.inc>
1868 # include <HALO_NMM_INIT_33.inc>
1869 # include <HALO_NMM_INIT_34.inc>
1870 # include <HALO_NMM_INIT_35.inc>
1871 # include <HALO_NMM_INIT_36.inc>
1872 # include <HALO_NMM_INIT_37.inc>
1873 # include <HALO_NMM_INIT_38.inc>
1874 # include <HALO_NMM_INIT_39.inc>
1877 #include <scalar_derefs.inc>
1882 END SUBROUTINE START_DOMAIN_NMM