Newer
Older
DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4, &
DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4, &
NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),NDTRATIO(KMI), &
DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY, &
DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU, &
DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV, &
DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW, &
DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM, &
CCLOUD, LUSECHAQ, LUSECHIC, &
DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM, &
DPTR_XLBXTHM,DPTR_XLBYTHM, &
DPTR_XLBXTKEM,DPTR_XLBYTKEM, &
DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM )
END IF
!
!
!-------------------------------------------------------------------------------
!
! -------------------------------
!
IF (LLG .AND. LINIT_LG .AND. CPROGRAM=='MESONH') &
CALL INI_LG(XXHAT,XYHAT,XZZ,XSVT,XLBXSVM,XLBYSVM)
!
!-------------------------------------------------------------------------------
!
!* 16. INITIALIZE THE PARAMETERS FOR THE DYNAMICS
! ------------------------------------------
!
CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT, &
XZHAT,CLBCX,CLBCY,XTSTEP, &
LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV, &
LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, &
LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV, &
LHORELAX_SVC2R2,LHORELAX_SVC1R3,LHORELAX_SVELEC,LHORELAX_SVLG, &
LHORELAX_SVCHEM,LHORELAX_SVAER,LHORELAX_SVDST,LHORELAX_SVSLT, &
LHORELAX_SVPP,LHORELAX_SVCS,LHORELAX_SVCHIC,LHORELAX_SVSNW, &
#ifdef MNH_FOREFIRE
LHORELAX_SVFF, &
#endif
XRIMKMAX,NRIMX,NRIMY, &
XALKTOP,XALKGRD,XALZBOT,XALZBAS, &
XT4DIFU,XT4DIFTH,XT4DIFSV, &
XCORIOX,XCORIOY,XCORIOZ,XCURVX,XCURVY, &
XDXHATM,XDYHATM,XRHOM,XAF,XBFY,XCF,XTRIGSX,XTRIGSY,NIFAXX,NIFAXY,&
XALK,XALKW,NALBOT,XALKBAS,XALKWBAS,NALBAS, &
LMASK_RELAX,XKURELAX,XKVRELAX,XKWRELAX, &
XDK2U,XDK4U,XDK2TH,XDK4TH,XDK2SV,XDK4SV, &
LZDIFFU,XZDIFFU_HALO2, &
XBFB,XBF_SXP2_YP1_Z )
!
!
!* 16.1 Initialize the XDRAG array
! -------------
IF (LDRAG) THEN
CALL INI_DRAG(LMOUNT,XZS,XHSTART,NSTART,XDRAG)
ENDIF
!-------------------------------------------------------------------------------
!
! ---------------
!
IF (CRAD /= 'NONE') THEN
IF (CGETRAD =='INIT') THEN
GINIRAD =.TRUE.
ELSE
GINIRAD =.FALSE.
END IF

WAUTELET Philippe
committed
CALL INI_RADIATIONS(TPINIFILE,HLUOUT,GINIRAD,TDTCUR,TDTEXP,XZZ, &
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
XDXX, XDYY, &
XSINDEL,XCOSDEL,XTSIDER,XCORSOL, &
XSLOPANG,XSLOPAZI, &
XDTHRAD,XDIRFLASWD,XSCAFLASWD, &
XFLALWD,XDIRSRFSWD,NCLEARCOL_TM1, &
XZENITH,XAZIM, &
TDTRAD_FULL,TDTRAD_CLONLY, &
TZINITHALO2D_ll, &
XRADEFF,XSWU,XSWD,XLWU, &
XLWD,XDTHRADSW,XDTHRADLW )
!
IF (GINIRAD) CALL SUNPOS_n(XZENITH,PAZIMSOL=XAZIM)
CALL SURF_SOLAR_GEOM (XZS, XZS_XY)
!
ALLOCATE(XXHAT_ll (IIU_ll))
ALLOCATE(XYHAT_ll (IJU_ll))
ALLOCATE(XZS_ll (IIU_ll,IJU_ll))
ALLOCATE(XZS_XY_ll (IIU_ll,IJU_ll))
!
CALL GATHERALL_FIELD_ll('XY',XZS,XZS_ll,IRESP)
CALL GATHERALL_FIELD_ll('XY',XZS_XY,XZS_XY_ll,IRESP)
CALL GATHERALL_FIELD_ll('XX',XXHAT,XXHAT_ll,IRESP)
CALL GATHERALL_FIELD_ll('YY',XYHAT,XYHAT_ll,IRESP)
XZS_MAX_ll=MAXVAL(XZS_ll)
ELSE
XAZIM = XPI
XZENITH = XPI/2.
XDIRSRFSWD = 0.
XSCAFLASWD = 0.
XFLALWD = 300. ! W/m2
XTSIDER = 0.
END IF
!
!
CALL INI_SW_SETUP (CRAD,NSWB_MNH,XSW_BANDS)
CALL INI_LW_SETUP (CRAD,NLWB_MNH,XLW_BANDS)
! 17.1.1 Special initialisation for CO2 content
! CO2 (molar mass=44) horizontally and vertically homogeneous at 360 ppm
!
XCCO2 = 360.0E-06 * 44.0E-03 / XMD
#ifdef MNH_ECRAD
RCCO2 = 360.0E-06 * 44.0E-03 / XMD
#endif
! ---------------------------
!
ALLOCATE(ZCO2(IIU,IJU))
ZCO2(:,:) = XCCO2
!
ALLOCATE(ZDIR_ALB(IIU,IJU,NSWB_MNH))
ALLOCATE(ZSCA_ALB(IIU,IJU,NSWB_MNH))
ALLOCATE(ZEMIS (IIU,IJU,NLWB_MNH))

WAUTELET Philippe
committed
IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=6) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
CALL IO_READ_FIELD(TPINIFILE,'SURF',CSURF)
ELSE
CSURF = "EXTE"
END IF
!
!
IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ')) THEN
! ouverture du fichier PGD
IF ( LEN_TRIM(CINIFILEPGD) > 0 ) THEN

WAUTELET Philippe
committed
CALL IO_FILE_ADD2LIST(TINIFILEPGD,TRIM(CINIFILEPGD),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)

WAUTELET Philippe
committed
CALL IO_FILE_OPEN_ll(TINIFILEPGD,OPARALLELIO=.FALSE.,KRESP=IRESP)

WAUTELET Philippe
committed
LUNIT_MODEL(KMI)%TINIFILEPGD => TINIFILEPGD
IF (IRESP/=0) THEN
WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD
WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNITn"
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
ENDIF
ELSE
! case after a spawning

Juan Escobar
committed
#ifdef CPLOASIS
CALL SFX_OASIS_READ_NAM(CPROGRAM,XTSTEP)
WRITE(*,*) 'SFX-OASIS: READ NAM_SFX_SEA_CPL OK'
#endif
!* initialization of surface
CALL INIT_GROUND_PARAM_n ('ALL',SIZE(CSV),CSV,ZCO2, &
XZENITH,XAZIM,XSW_BANDS,XLW_BANDS,ZDIR_ALB,ZSCA_ALB, &
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
ZEMIS,ZTSRAD )
!
IF (SIZE(XEMIS)>0) THEN
XDIR_ALB = ZDIR_ALB
XSCA_ALB = ZSCA_ALB
XEMIS = ZEMIS
XTSRAD = ZTSRAD
CALL MNHGET_SURF_PARAM_n (PSEA=XSEA)
END IF
ELSE
!* fields not physically necessary, but must be initialized
IF (SIZE(XEMIS)>0) THEN
XDIR_ALB = 0.
XSCA_ALB = 0.
XEMIS = 1.
XTSRAD = XTT
XSEA = 1.
END IF
END IF
IF (CSURF=='EXTE' .AND. (CPROGRAM=='SPAWN ')) THEN
! ouverture du fichier PGD

WAUTELET Philippe
committed
CALL IO_FILE_ADD2LIST(TINIFILEPGD,TRIM(CINIFILEPGD),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)

WAUTELET Philippe
committed
CALL IO_FILE_OPEN_ll(TINIFILEPGD,OPARALLELIO=.FALSE.,KRESP=IRESP)

WAUTELET Philippe
committed
LUNIT_MODEL(KMI)%TINIFILEPGD => TINIFILEPGD
IF (IRESP/=0) THEN
WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD
WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNIT2_SPA"
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
!
IF (.NOT.ASSOCIATED(TINIFILEPGD)) TINIFILEPGD => TFILE_DUMMY
!
!* special case after spawning in prep_real_case
IF (CSURF=='EXRM' .AND. CPROGRAM=='REAL ') CSURF = 'EXTE'
!
DEALLOCATE(ZDIR_ALB)
DEALLOCATE(ZSCA_ALB)
DEALLOCATE(ZEMIS )
DEALLOCATE(ZTSRAD )
!
DEALLOCATE(ZCO2)
!
!
!* in a RESTART case, reads surface radiative quantities in the MESONH file
!
IF ((CRAD == 'ECMW' .OR. CRAD == 'ECRA') .AND. CGETRAD=='READ') THEN

WAUTELET Philippe
committed
CALL INI_SURF_RAD(TPINIFILE, XDIR_ALB, XSCA_ALB, XEMIS, XTSRAD)

WAUTELET Philippe
committed
IF (CPROGRAM/='REAL ') CALL MNHREAD_ZS_DUMMY_n(TINIFILEPGD)
!
!-------------------------------------------------------------------------------
!
!* 18. INITIALIZE THE PARAMETERS FOR THE PHYSICS
! -----------------------------------------
!
IF (CRAD == 'ECMW') THEN
!
!* get cover mask for aerosols
!
IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ') THEN
ALLOCATE(ZSEA(IIU,IJU))
ALLOCATE(ZTOWN(IIU,IJU))
ALLOCATE(ZBARE(IIU,IJU))
CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE)
ZSEA (:,:) = 1.
ZTOWN(:,:) = 0.
ZBARE(:,:) = 0.
CALL INI_RADIATIONS_ECMWF (TPINIFILE%CNAME,HLUOUT, &
XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP, &
CLW,NDLON,NFLEV,NFLUX,NRAD,NSWB_OLD,CAER,NAER,NSTATM, &
XSTATM,ZSEA,ZTOWN,ZBARE,XOZON, XAER,XDST_WL, LSUBG_COND )
DEALLOCATE(ZSEA,ZTOWN,ZBARE)
ALLOCATE (XAER_CLIM(SIZE(XAER,1),SIZE(XAER,2),SIZE(XAER,3),SIZE(XAER,4)))
XAER_CLIM(:,:,:,:) =XAER(:,:,:,:)
ELSE IF (CRAD == 'ECRA') THEN
#ifdef MNH_ECRAD
!* get cover mask for aerosols
!
IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ') THEN
ALLOCATE(ZSEA(IIU,IJU))
ALLOCATE(ZTOWN(IIU,IJU))
ALLOCATE(ZBARE(IIU,IJU))
IF (CSURF=='EXTE') THEN
CALL GOTO_SURFEX(KMI)
CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE)
ELSE
ZSEA (:,:) = 1.
ZTOWN(:,:) = 0.
ZBARE(:,:) = 0.
END IF
!
CALL INI_RADIATIONS_ECRAD (TPINIFILE%CNAME,HLUOUT, &
XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP, &
CLW,NDLON,NFLEV,NFLUX,NRAD,NSWB_OLD,CAER,NAER,NSTATM, &
XSTATM,ZSEA,ZTOWN,ZBARE,XOZON, XAER,XDST_WL, LSUBG_COND )
DEALLOCATE(ZSEA,ZTOWN,ZBARE)
ALLOCATE (XAER_CLIM(SIZE(XAER,1),SIZE(XAER,2),SIZE(XAER,3),SIZE(XAER,4)))
XAER_CLIM(:,:,:,:) = XAER(:,:,:,:)
!
END IF
#endif
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
ELSE
ALLOCATE (XOZON(0,0,0))
ALLOCATE (XAER(0,0,0,0))
ALLOCATE (XDST_WL(0,0,0,0))
ALLOCATE (XAER_CLIM(0,0,0,0))
END IF
!
!
!
IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
IF (CGETCONV=='INIT') THEN
GINIDCONV=.TRUE.
ELSE
GINIDCONV=.FALSE.
END IF
!
! commensurability between convection calling time and time step
!
XDTCONV=XTSTEP*REAL( INT( (MIN(XDTCONV,1800.)+1.E-10)/XTSTEP ) )
XDTCONV=MAX( XDTCONV, XTSTEP )
IF (NVERB>=10) THEN
WRITE(ILUOUT,*) 'XDTCONV has been set to : ',XDTCONV
END IF

WAUTELET Philippe
committed
CALL INI_DEEP_CONVECTION (TPINIFILE,HLUOUT,GINIDCONV,TDTCUR, &
NCOUNTCONV,XDTHCONV,XDRVCONV,XDRCCONV, &
XDRICONV,XPRCONV,XPRSCONV,XPACCONV, &
XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,&
XCAPE,NCLTOPCONV,NCLBASCONV, &
TDTDCONV, CGETSVCONV, XDSVCONV, &
LCH_CONV_LINOX, XIC_RATE, XCG_RATE, &
XIC_TOTAL_NUMBER, XCG_TOTAL_NUMBER )
END IF
!
!-------------------------------------------------------------------------------
!
!
! ---------------------------------
!
IF (LSERIES .AND. CPROGRAM/='DIAG ') CALL INI_SERIES_n
!
!-------------------------------------------------------------------------------
!
!
! -------------------------------
!
!
IF ( LUSECHEM .OR. LCHEMDIAG ) THEN
IF (CPROGRAM=='MESONH'.AND.CCONF=='RESTA') LCH_INIT_FIELD =.FALSE.
IF (CPROGRAM=='MESONH'.OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='IDEAL ') &
CALL CH_INIT_FIELD_n(KMI, ILUOUT, NVERB)
END IF
!
!-------------------------------------------------------------------------------
!
! -----------
!
!
CALL UPDATE_HALO_ll(TZINITHALO3D_ll,IINFO_ll)
CALL UPDATE_HALO_ll(TZINITHALO2D_ll,IINFO_ll)
CALL CLEANLIST_ll(TZINITHALO3D_ll)
CALL CLEANLIST_ll(TZINITHALO2D_ll)
!
!
!-------------------------------------------------------------------------------
!
! -------------
!
DEALLOCATE(ZJ)
!
DEALLOCATE(XSTROATM)
DEALLOCATE(XSMLSATM)
DEALLOCATE(XSMLWATM)
DEALLOCATE(XSPOSATM)
DEALLOCATE(XSPOWATM)
!
!-------------------------------------------------------------------------------
!
! ------------------------------------
!
CALL INI_AIRCRAFT_BALLOON(TPINIFILE,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, &
IKU,CTURB=="TKEL" , &
XLATORI, XLONORI )
!
!-------------------------------------------------------------------------------
!
CALL INI_SURFSTATION_n(XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, &
CTURB=="TKEL" , &
XLATORI, XLONORI )
!
!-------------------------------------------------------------------------------
!
CALL INI_POSPROFILER_n(XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, &
CTURB=="TKEL", &
XLATORI, XLONORI )
!
!-------------------------------------------------------------------------------
!
! ------------------------
!
CALL INI_AEROSET1
CALL INI_AEROSET2
CALL INI_AEROSET3
CALL INI_AEROSET4
CALL INI_AEROSET5
CALL INI_AEROSET6
#ifdef MNH_FOREFIRE
!
!-------------------------------------------------------------------------------
! ------------------------
!
! Coupling with ForeFire if resolution is low enough
!---------------------------------------------------
IF ( LFOREFIRE .AND. 0.5*(XXHAT(2)-XXHAT(1)+XYHAT(2)-XYHAT(1)) < COUPLINGRES ) THEN

WAUTELET Philippe
committed
FFCOUPLING = .TRUE.
ELSE

WAUTELET Philippe
committed
FFCOUPLING = .FALSE.
ENDIF
! Initializing the ForeFire variables
!------------------------------------
IF ( LFOREFIRE ) THEN

WAUTELET Philippe
committed
CALL INIT_FOREFIRE_n(KMI, ILUOUT, IP &
, TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, XTSTEP)
END IF
#endif

Gaelle DELAUTIER
committed
!-------------------------------------------------------------------------------
!
!* 30. Total production/Loss for chemical species
!

Gaelle DELAUTIER
committed
IF (LCHEMDIAG) THEN

WAUTELET Philippe
committed
CALL CH_INIT_PRODLOSSTOT_n(ILUOUT)
IF (NEQ_PLT>0) THEN
ALLOCATE(XPROD(IIU,IJU,IKU,NEQ_PLT))
ALLOCATE(XLOSS(IIU,IJU,IKU,NEQ_PLT))
XPROD=0.0
XLOSS=0.0
ELSE
ALLOCATE(XPROD(0,0,0,0))
ALLOCATE(XLOSS(0,0,0,0))
END IF

Gaelle DELAUTIER
committed
ELSE

WAUTELET Philippe
committed
ALLOCATE(XPROD(0,0,0,0))
ALLOCATE(XLOSS(0,0,0,0))

Gaelle DELAUTIER
committed
END IF
!
!-------------------------------------------------------------------------------
!
!* 31. Extended production/loss terms for chemical species
!

Gaelle DELAUTIER
committed
IF (LCHEMDIAG) THEN

WAUTELET Philippe
committed
CALL CH_INIT_BUDGET_n(ILUOUT)
IF (NEQ_BUDGET>0) THEN
ALLOCATE(IINDEX(2,NNONZEROTERMS))
ALLOCATE(IIND(NEQ_BUDGET))
CALL CH_NONZEROTERMS(KMI,IINDEX,NNONZEROTERMS)
ALLOCATE(XTCHEM(NEQ_BUDGET))
DO JM=1,NEQ_BUDGET
IIND(JM)=COUNT((IINDEX(1,:))==NSPEC_BUDGET(JM))
ALLOCATE(XTCHEM(JM)%NB_REAC(IIND(JM)))
ALLOCATE(XTCHEM(JM)%XB_REAC(IIU,IJU,IKU,IIND(JM)))
END DO
DEALLOCATE(IIND)
DEALLOCATE(IINDEX)
ELSE
ALLOCATE(XTCHEM(0))
END IF

Gaelle DELAUTIER
committed
ELSE

WAUTELET Philippe
committed
ALLOCATE(XTCHEM(0))

Gaelle DELAUTIER
committed
END IF