diff --git a/src/SURFEX/ch_init_emissionn.F90 b/src/SURFEX/ch_init_emissionn.F90 index 71427a5a64531c8656ad7104323d7153deb56b16..6ff89e7e28da3b0891807d436b29e8c6cf3f5f9a 100644 --- a/src/SURFEX/ch_init_emissionn.F90 +++ b/src/SURFEX/ch_init_emissionn.F90 @@ -30,6 +30,7 @@ !! M.Leriche 04/2014 change length of CHARACTER for emission 6->12 !! M.Leriche & V. Masson 05/16 bug in write emis fields for nest !! J. Pianezze 04/17 wrong length of YCOMMENT (100 instead of 40) +!! 06/06/17 (V.Masson & M. Leriche) add emission time by species !----------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -76,12 +77,13 @@ REAL, DIMENSION(:),INTENT(IN) :: PRHOA ! air density ! INTEGER :: IRESP ! File INTEGER :: ILUOUT ! output listing logical unit -CHARACTER (LEN=LEN_HREC) :: YRECFM ! management -CHARACTER (LEN=40) :: YCOMMENT ! variables + CHARACTER (LEN=LEN_HREC) :: YRECFM ! management + CHARACTER (LEN=40) :: YCOMMENT ! variables INTEGER :: JSPEC ! Loop index for cover data INTEGER :: IIND1,IIND2 ! Indices counter -CHARACTER(LEN=40) :: YSPEC_NAME ! species name -CHARACTER(LEN=LEN_HREC), DIMENSION(:),ALLOCATABLE :: YEMIS_NAME ! species name +! + CHARACTER(LEN=40) :: YSPEC_NAME ! species name + CHARACTER(LEN=LEN_HREC), DIMENSION(:),ALLOCATABLE :: YEMIS_NAME ! species name INTEGER,DIMENSION(:),ALLOCATABLE :: INBTIMES! number of emission times array INTEGER,DIMENSION(:),ALLOCATABLE :: ITIMES ! emission times for a species INTEGER,DIMENSION(:),ALLOCATABLE :: IOFFNDX ! index array of offline emission species @@ -89,7 +91,7 @@ INTEGER :: INBTS ! number of emission times for a sp INTEGER :: INBOFF ! Number of offline emissions INTEGER :: IVERB ! verbose level INTEGER :: ICH ! logical unit of input chemistry file -CHARACTER(LEN=3) :: YSURF ! surface type + CHARACTER(LEN=3) :: YSURF ! surface type REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK2D ! work array to read emission fields ! INTEGER :: IVERSION ! version of surfex file being read @@ -138,7 +140,7 @@ ELSE WRITE(ILUOUT,*) 'CEMIS_NAME already allocated with SIZE :',SIZE(CHE%CEMIS_NAME) END IF -IF (.NOT. ASSOCIATED(CHE%CEMIS_AREA)) ALLOCATE(CHE%CEMIS_AREA(CHE%NEMISPEC_NBR)) +IF (.NOT. ASSOCIATED(CHE%NEMIS_NBT)) ALLOCATE(CHE%NEMIS_NBT(CHE%NEMISPEC_NBR)) IF (.NOT. ASSOCIATED(CHE%NEMIS_TIME)) ALLOCATE(CHE%NEMIS_TIME(CHE%NEMIS_NBR)) CHE%NEMIS_TIME(:) = -1 ! @@ -169,9 +171,6 @@ DO JSPEC = 1,CHE%NEMISPEC_NBR ! Loop on the number of species CALL ABOR1_SFX('CH_INIT_EMISSIONN: PROBLEM WHEN READING NAME OF EMITTED CHEMICAL SPECIES') END IF - WRITE(YRECFM,'("EMISAREA",I3.3)') JSPEC - CALL READ_SURF( & - HPROGRAM,YRECFM,YSURF,IRESP,YCOMMENT) WRITE(YRECFM,'("EMISNBT",I3.3)') JSPEC CALL READ_SURF( & HPROGRAM,YRECFM,INBTS,IRESP,YCOMMENT) @@ -205,13 +204,12 @@ DO JSPEC = 1,CHE%NEMISPEC_NBR ! Loop on the number of species ! CHE%NTIME_MAX = MAXVAL(CHE%NEMIS_TIME) ! -! INBTIMES, CEMIS_AREA and CEMIS_NAME +! INBTIMES and CEMIS_NAME ! are updated for ALL species CHE%CEMIS_NAME(JSPEC) = YSPEC_NAME - CHE%CEMIS_AREA(JSPEC) = YSURF ! !* 2. Simple reading of emission fields -! + IF (HINIT /= "ALL") THEN YRECFM='E_'//TRIM(ADJUSTL(YSPEC_NAME)) ALLOCATE(ZWORK2D(KLU,INBTS)) @@ -223,6 +221,8 @@ DO JSPEC = 1,CHE%NEMISPEC_NBR ! Loop on the number of species ! END DO ! +CHE%NEMIS_NBT(:) = INBTIMES(:) + WRITE(ILUOUT,*) '---- Nunmer of OFFLINE species = ',INBOFF WRITE(ILUOUT,*) 'INBTIMES=',INBTIMES WRITE(ILUOUT,*) 'IOFFNDX=',IOFFNDX diff --git a/src/SURFEX/modd_ch_emis_fieldn.F90 b/src/SURFEX/modd_ch_emis_fieldn.F90 index 4afe98c79b3172ced1ceb53e223f6aba7c60a44f..daf991dcee06f7fa22a4033778e121c36b4bf28f 100644 --- a/src/SURFEX/modd_ch_emis_fieldn.F90 +++ b/src/SURFEX/modd_ch_emis_fieldn.F90 @@ -30,6 +30,7 @@ !! ------------- !! Original 08/03/2001 !! 01/12/03 (D.Gazen) change emissions handling for surf. externalization +!! 06/06/17 (V.Masson & M. Leriche) add emission time by species !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -63,6 +64,8 @@ TYPE CH_EMIS_FIELD_t CHARACTER(LEN=40), DIMENSION(:), POINTER :: CEMIS_COMMENT ! comment CHARACTER(LEN=40), DIMENSION(:), POINTER :: CEMIS_NAME ! ! name of the chemical pgd fields (emitted species) +! + INTEGER, DIMENSION(:), POINTER :: NEMIS_NBT ! number of emission time by species ! INTEGER, DIMENSION(:), POINTER :: NEMIS_TIME ! emission time ! @@ -94,6 +97,7 @@ IF (LHOOK) CALL DR_HOOK("MODD_CH_EMIS_FIELD_N:CH_EMIS_FIELD_INIT",0,ZHOOK_HANDLE NULLIFY(YCH_EMIS_FIELD%CEMIS_AREA) NULLIFY(YCH_EMIS_FIELD%CEMIS_COMMENT) NULLIFY(YCH_EMIS_FIELD%CEMIS_NAME) + NULLIFY(YCH_EMIS_FIELD%NEMIS_NBT) NULLIFY(YCH_EMIS_FIELD%NEMIS_TIME) NULLIFY(YCH_EMIS_FIELD%XEMIS_FIELDS) NULLIFY(YCH_EMIS_FIELD%TSEMISS) diff --git a/src/SURFEX/pgd_chemistry.F90 b/src/SURFEX/pgd_chemistry.F90 index 1d073fd886f7d14ee740a07c31153be7579c7cc9..4bd8051b887391af172a471b031764fbe0a0f57f 100644 --- a/src/SURFEX/pgd_chemistry.F90 +++ b/src/SURFEX/pgd_chemistry.F90 @@ -34,6 +34,8 @@ !! ------------ !! !! Original 10/12/97 +!! (V.Masson & M.Leriche) 06/06/17 add a missed value in NEMISPEC_NBR +!! to count the number of emitted species in case of writing pgd !! !---------------------------------------------------------------------------- ! @@ -152,6 +154,7 @@ IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CH_EMIS_PGD) !* 3. Allocation ! ---------- ! + CHE%NEMISPEC_NBR = -999 ! will be counted in writesurf_ch_emisn.f90 CHE%NEMIS_NBR = NEMIS_PGD_NBR ! CALL GET_SURF_SIZE_n(DTCO, U, & diff --git a/src/SURFEX/writesurf_ch_emisn.F90 b/src/SURFEX/writesurf_ch_emisn.F90 index d542424409f387c0bb01605eef10cc783e8a270f..bbc577915a578a59b40ab5309440413d70f6c9f6 100644 --- a/src/SURFEX/writesurf_ch_emisn.F90 +++ b/src/SURFEX/writesurf_ch_emisn.F90 @@ -21,6 +21,8 @@ !! ------------- !! Original 03/2004 !! M.Moge 01/2016 using WRITE_SURF_FIELD2D/3D for 2D/3D surfex fields writes +!! V.Masson & M. Leriche 06/06/17 do not count emitted species in nest case +!! do not write CEMIS_AREA no longer used !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -90,6 +92,7 @@ YCOMMENT='Total number of 2D emission files.' HPROGRAM,YRECFM,CHE%NEMIS_NBR,IRESP,HCOMMENT=YCOMMENT) ! ! count emitted species +IF (CHE%NEMISPEC_NBR==-999) THEN IEMISPEC_NBR = 0 DO JI=1,CHE%NEMIS_NBR YNAME = TRIM(ADJUSTL(CHE%CEMIS_NAME(JI))) @@ -114,6 +117,25 @@ DO JI=1,CHE%NEMIS_NBR INBTIMES(JSPEC) = INBTIMES(JSPEC)+1 END IF END DO +ELSE + IEMISPEC_NBR=CHE%NEMISPEC_NBR + INBTIMES(:CHE%NEMISPEC_NBR)=CHE%NEMIS_NBT(:) + YEMISPEC_NAMES(:IEMISPEC_NBR) = CHE%CEMIS_NAME(:) + IFIRST=1 + ILAST=0 + INEXT=0 + JI=0 + DO JSPEC=1,IEMISPEC_NBR + IF (JSPEC>1) IFIRST(JSPEC)=ILAST(JSPEC-1)+1 + ILAST(JSPEC) = IFIRST(JSPEC) + INBTIMES(JSPEC) - 1 + JI=JI+1 + IF (JSPEC>1) INEXT(ILAST(JSPEC-1))=0 + DO JT=2,INBTIMES(JSPEC) + JI=JI+1 + INEXT(JI-1) = JI + END DO + END DO +END IF ! YRECFM='EMISPEC_NBR ' YCOMMENT='Number of emitted chemical species.' @@ -176,18 +198,13 @@ END DO ! Now fill the ZWORK2D array for writing ZWORK2D(:,:) = CHE%XEMIS_FIELDS(:,IINDEX(:)) ! -! Write NAME of species JSPEC with AREA and number of emission times +! Write NAME of species JSPEC with number of emission times ! stored in the commentary WRITE(YRECFM,'("EMISNAME",I3.3)') JSPEC -WRITE(YCOMMENT,'(A3,", emission times number:",I5)') CHE%CEMIS_AREA(IINDEX(1)),KSIZE +YCOMMENT = "Emission species name" CALL WRITE_SURF(DGU, U, & HPROGRAM,YRECFM,YEMISPEC_NAMES(JSPEC),IRESP,HCOMMENT=YCOMMENT) ! -WRITE(YRECFM,'("EMISAREA",I3.3)') JSPEC -YCOMMENT = "Emission area" - CALL WRITE_SURF(DGU, U, & - HPROGRAM,YRECFM,CHE%CEMIS_AREA(IINDEX(1)),IRESP,HCOMMENT=YCOMMENT) -! WRITE(YRECFM,'("EMISNBT",I3.3)') JSPEC YCOMMENT = "Emission times number" CALL WRITE_SURF(DGU, U, &