From 5d9f9210d572a69c82e1fc1b27cadbdbdf79b5d3 Mon Sep 17 00:00:00 2001 From: Juan Escobar <escj@aero.obs-mip.fr> Date: Mon, 12 Jun 2017 10:16:54 +0200 Subject: [PATCH] Juan 12/06/2017:ini_prog_var.f90, Mai 2017 (M. Leriche) read aerosol namelists before call ini_nsv Mai 2017 (M. Leriche) Get wet dep. sv in Meso-NH init file --- src/MNH/ini_prog_var.f90 | 172 +++++++++++++++++++++++++++++---------- 1 file changed, 127 insertions(+), 45 deletions(-) diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90 index 6f36ce8f7..7494a0f41 100644 --- a/src/MNH/ini_prog_var.f90 +++ b/src/MNH/ini_prog_var.f90 @@ -95,6 +95,8 @@ END MODULE MODI_INI_PROG_VAR !! Aug 2012 (J.-P. Chaboureau) read the chem-file descriptor !! Fev 2015 (J.-P. Chaboureau) read instant T insteed of M !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! Mai 2017 (M. Leriche) read aerosol namelists before call ini_nsv +!! Mai 2017 (M. Leriche) Get wet dep. sv in Meso-NH init file !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -119,6 +121,7 @@ USE MODD_SALT ! USE MODN_DUST USE MODN_SALT +USE MODN_CH_ORILAM ! USE MODI_PGDFILTER USE MODI_CH_INIT_SCHEME_n @@ -126,6 +129,7 @@ USE MODI_CH_AER_INIT_SOA ! USE MODE_POS USE MODE_FM +USE MODE_MODELN_HANDLER USE MODE_IO_ll USE MODE_FMREAD USE MODD_DIM_n @@ -157,12 +161,14 @@ INTEGER :: IIU_ll, IJU_ll INTEGER :: IKU INTEGER :: ILBX,ILBY INTEGER :: JSV ! Loop index -INTEGER :: JMOM, IMOMENTS, JMODE, ISV_NAME_IDX ! dust modes +INTEGER :: JMOM, IMOMENTS, JMODE, ISV_NAME_IDX, IMODEIDX ! dust and salt modes INTEGER :: ILUDES ! logical unit numbers of DESFM file LOGICAL :: GFOUND ! Return code when searching namelist !------------------------------------------------------------------------------- ! -CALL GET_MODEL_NUMBER_ll(IMI) +! get model index +IMI = GET_CURRENT_MODEL_INDEX() +! CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) ! CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) @@ -209,22 +215,6 @@ END IF ALLOCATE(XSVT(0,0,0,0)) IF(PRESENT(HCHEMFILE)) THEN WRITE(ILUOUT,*) 'Routine INI_PROG_VAR: CHEMical species read in ',TRIM(HCHEMFILE) - - IF (.NOT.LDUST) THEN - ! Always initialize chemical scheme variables before INI_NSV call ! - CALL CH_INIT_SCHEME_n(IMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT,NVERB) -! Question CL : Maud a supprime l appel a CH_INIT_CCS ? - LUSECHEM = .TRUE. - END IF - IF (LORILAM) THEN - CORGANIC = "MPMPO" - LVARSIGI = .TRUE. - LVARSIGJ = .TRUE. - CALL CH_AER_INIT_SOA(ILUOUT,NVERB) - END IF ! lorilam - ! initialise NSV_* variables - CALL INI_NSV(1) - ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) ! Read dimensions in chem file and checks with output file CALL FMOPEN_ll(HCHEMFILE,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP) YRECFM='IMAX' @@ -275,8 +265,40 @@ IF(PRESENT(HCHEMFILE)) THEN CALL ABORT STOP END IF ! IIMAX +! check nsv to be read + IF (.NOT.LDUST) THEN + ! Always initialize chemical scheme variables before INI_NSV call ! + CALL CH_INIT_SCHEME_n(IMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT,NVERB) + LUSECHEM = .TRUE. + END IF + IF (LORILAM) THEN + YDESFM=TRIM(ADJUSTL(HCHEMFILE))//'.des' + CALL FMLOOK_ll(YDESFM,HLUOUT,ILUDES,IRESP) + CALL POSNAM(ILUDES,'NAM_CH_ORILAM',GFOUND,ILUOUT) + IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CH_ORILAM) + ENDIF + IF (LDUST) THEN + LDSTINIT=.TRUE. + LDSTPRES=.FALSE. + YDESFM=TRIM(ADJUSTL(HCHEMFILE))//'.des' + CALL FMLOOK_ll(YDESFM,HLUOUT,ILUDES,IRESP) + CALL POSNAM(ILUDES,'NAM_DUST',GFOUND,ILUOUT) + IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_DUST) + ENDIF + IF (LSALT) THEN + LSLTINIT=.TRUE. + LSLTPRES=.FALSE. + YDESFM=TRIM(ADJUSTL(HCHEMFILE))//'.des' + CALL FMLOOK_ll(YDESFM,HLUOUT,ILUDES,IRESP) + CALL POSNAM(ILUDES,'NAM_SALT',GFOUND,ILUOUT) + IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SALT) + ! initialise NSV_* variables + ENDIF + CALL INI_NSV(1) + ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) + + ! Read scalars in chem file IF (.NOT.LDUST) THEN - ! Read scalars in chem file DO JSV = NSV_CHEMBEG,NSV_CHEMEND YRECFM=TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T' YDIR='XY' @@ -293,14 +315,45 @@ IF(PRESENT(HCHEMFILE)) THEN END IF END IF + IF (LORILAM) THEN + CALL CH_AER_INIT_SOA(ILUOUT,NVERB) + DO JSV = NSV_AERBEG,NSV_AEREND + YRECFM=TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T' + YDIR='XY' + CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & + YCOMMENT,IRESP) + IF (IRESP/=0) THEN + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE +!callabortstop +!CALL ABORT +! STOP + LORILAM=.FALSE. + END IF !IRESP + END DO ! JSV + IF (LDEPOS_AER(IMI)) THEN + IF(.NOT.ALLOCATED(CDEAERNAMES)) THEN + ALLOCATE(CDEAERNAMES(JPMODE*2)) + CDEAERNAMES(:) = YPDEAER_INI(:) + ENDIF + DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND + YRECFM=TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T' + YDIR='XY' + CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & + YCOMMENT,IRESP) + IF (IRESP/=0) THEN + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE +!callabortstop +!CALL ABORT +! STOP + LDEPOS_AER(IMI)=.FALSE. + END IF !IRESP + END DO ! JSV + END IF ! ldepos_aer + END IF ! lorilam + IF (LDUST) THEN - LDSTINIT=.TRUE. - LDSTPRES=.FALSE. - YDESFM=TRIM(ADJUSTL(HCHEMFILE))//'.des' - CALL FMLOOK_ll(YDESFM,HLUOUT,ILUDES,IRESP) - CALL POSNAM(ILUDES,'NAM_DUST',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_DUST) - CALL INI_NSV(1) IMOMENTS = INT(NSV_DSTEND - NSV_DSTBEG+1)/NMODE_DST IF (IMOMENTS == 1) THEN DO JMODE=1, NMODE_DST @@ -339,15 +392,34 @@ IF(PRESENT(HCHEMFILE)) THEN END IF !IRESP END DO ! JMOM END DO !JMOD - END IF !if IMOMENTS + END IF !if IMOMENTS + IF (LDEPOS_DST(IMI)) THEN + IF(.NOT.ALLOCATED(CDEDSTNAMES)) THEN + ALLOCATE(CDEDSTNAMES(NMODE_DST*2)) + DO JMODE=1,NMODE_DST + IMODEIDX=JPDUSTORDER(JMODE) + CDEDSTNAMES(JMODE) = YPDEDST_INI(IMODEIDX) + CDEDSTNAMES(NMODE_DST+JMODE) = YPDEDST_INI(NMODE_DST+IMODEIDX) + ENDDO + ENDIF + DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND + YRECFM=TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T' + YDIR='XY' + CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & + YCOMMENT,IRESP) + IF (IRESP/=0) THEN + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE +!callabortstop +!CALL ABORT +! STOP + LDEPOS_DST(IMI)=.FALSE. + END IF !IRESP + END DO ! JSV + END IF ! ldepos_dst END IF ! LDUST IF (LSALT) THEN - LSLTINIT=.TRUE. - LSLTPRES=.FALSE. - CALL POSNAM(ILUDES,'NAM_SALT',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SALT) - CALL INI_NSV(1) IMOMENTS = INT(NSV_SLTEND - NSV_SLTBEG+1)/NMODE_SLT IF (IMOMENTS == 1) THEN DO JMODE=1, NMODE_SLT @@ -386,23 +458,33 @@ IF(PRESENT(HCHEMFILE)) THEN END IF !IRESP END DO ! JMOM END DO !JMOD - END IF !if IMOMENTS - END IF ! LSALT - - DO JSV = NSV_AERBEG,NSV_AEREND - YRECFM=TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T' - YDIR='XY' - CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & + END IF !if IMOMENTS + IF (LDEPOS_SLT(IMI)) THEN + IF(.NOT.ALLOCATED(CDESLTNAMES)) THEN + ALLOCATE(CDESLTNAMES(NMODE_SLT*2)) + DO JMODE=1,NMODE_SLT + IMODEIDX=JPDUSTORDER(JMODE) + CDESLTNAMES(JMODE) = YPDESLT_INI(IMODEIDX) + CDESLTNAMES(NMODE_SLT+JMODE) = YPDESLT_INI(NMODE_SLT+IMODEIDX) + ENDDO + ENDIF + DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND + YRECFM=TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T' + YDIR='XY' + CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & YCOMMENT,IRESP) - IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=9000) - WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE + IF (IRESP/=0) THEN + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE !callabortstop !CALL ABORT ! STOP - LORILAM=.FALSE. - END IF !IRESP - END DO ! JSV + LDEPOS_SLT(IMI)=.FALSE. + END IF !IRESP + END DO ! JSV + ENDIF ! ldepos_slt + END IF ! LSALT + CALL FMCLOS_ll(HCHEMFILE,'KEEP',HLUOUT,IRESP) ELSE ! HCHEMFILE -- GitLab