Newer
Older
! 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
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
!* initialization of surface
CALL INIT_GROUND_PARAM_n ('ALL',SIZE(CSV),CSV,ZCO2, &
XZENITH,XAZIM,XSW_BANDS,ZDIR_ALB,ZSCA_ALB, &
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','')
ENDIF
ENDIF
!
!* 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' .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,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(:,:,:,:)
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
!
END IF
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
FFCOUPLING = .TRUE.
ELSE
FFCOUPLING = .FALSE.
ENDIF
! Initializing the ForeFire variables
!------------------------------------
IF ( LFOREFIRE ) THEN
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

Gaelle DELAUTIER
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
ELSE
ALLOCATE(XPROD(0,0,0,0))
ALLOCATE(XLOSS(0,0,0,0))
END IF
!
!-------------------------------------------------------------------------------
!
!* 31. Extended production/loss terms for chemical species
!

Gaelle DELAUTIER
committed
IF (LCHEMDIAG) THEN

Gaelle DELAUTIER
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
ELSE
ALLOCATE(XTCHEM(0))
END IF