Merge branch 'MNH-52X-BUG2' into MNH-53X-BU2
authorJuan Escobar <escj@aero.obs-mip.fr>
Fri, 18 Nov 2016 16:45:17 +0000 (17:45 +0100)
committerJuan Escobar <escj@aero.obs-mip.fr>
Fri, 18 Nov 2016 16:45:17 +0000 (17:45 +0100)
Conflicts:
MY_RUN/KTEST/002_3Drelief/005_ncl/run_ncl
src/MNH/advection_metsv.f90
src/MNH/ground_paramn.f90
src/MNH/ini_lb.f90
src/MNH/ini_modeln.f90
src/MNH/modeln.f90
src/MNH/ppm_met.f90
src/MNH/ppm_scalar.f90
src/MNH/read_exsegn.f90
src/MNH/read_field.f90
src/MNH/resolved_cloud.f90
src/MNH/spawn_model2.f90
src/MNH/write_aircraft_balloon.f90
src/Makefile
src/SURFEX/ch_init_depconst.F90
src/SURFEX/ch_init_emissionn.F90
src/SURFEX/ch_init_snapn.F90
src/SURFEX/init_surf_atmn.F90
src/SURFEX/modd_ch_surfn.F90
src/SURFEX/pgd_surf_atm.F90
src/SURFEX/write_surf_atmn.F90
src/SURFEX/writesurf_snapn.F90
src/SURFEX/zoom_pgd_surf_atm.F90
src/configure

33 files changed:
1  2 
MY_RUN/KTEST/002_3Drelief/005_ncl/run_ncl
conf/profile_mesonh.ihm
src/MNH/advection_metsv.f90
src/MNH/advection_uvw.f90
src/MNH/advecuvw_rk.f90
src/MNH/default_desfmn.f90
src/MNH/ini_lb.f90
src/MNH/ini_modeln.f90
src/MNH/modeln.f90
src/MNH/phys_paramn.f90
src/MNH/ppm_met.f90
src/MNH/ppm_scalar.f90
src/MNH/read_exsegn.f90
src/MNH/resolved_cloud.f90
src/MNH/spawn_model2.f90
src/MNH/write_aircraft_balloon.f90
src/Makefile
src/Makefile.MESONH.mk
src/Rules.AIX64.mk
src/Rules.BG.mk
src/Rules.BGQ.mk
src/Rules.LXNAGf95.mk
src/Rules.LXcray.mk
src/Rules.LXg95.mk
src/Rules.LXgfortran.mk
src/Rules.LXifort.mk
src/Rules.LXpathf95.mk
src/Rules.LXpgi.mk
src/Rules.SX8.mk
src/SURFEX/ch_init_emissionn.F90
src/SURFEX/modd_ch_surfn.F90
src/SURFEX/write_surf_atmn.F90
src/SURFEX/zoom_pgd_surf_atm.F90

@@@ -6,9 -6,6 +6,8 @@@ set -
  
  ln -sf ../002_mesonh/REL3D.1.EXP01.002.nc4 .
  
 +rm -f visu_3Drelief*
 +
  ncl  plot_3Drelief.ncl
- #display visu_3Drelief.000001.png
 -display visu_3Drelief.000001.png
 +display visu_3Drelief.png
  exit 0
Simple merge
@@@ -473,14 -469,14 +473,14 @@@ IF (GTKE)    PRTKES_ADV(:,:,:)  = 0
  !* time splitting loop
  DO JSPL=1,KSPLIT
  !
-    ZRTHS_PPM(:,:,:)   = 0.              
-    ZRTKES_PPM(:,:,:)   = 0.              
-    IF (KRR /=0) ZRRS_PPM(:,:,:,:)   = 0.              
-    IF (KSV /=0) ZRSVS_PPM(:,:,:,:)   = 0.              
+    !ZRTHS_PPM(:,:,:)   = 0.
+    !ZRTKES_PPM(:,:,:)   = 0.
+    !IF (KRR /=0) ZRRS_PPM(:,:,:,:)   = 0.
+    !IF (KSV /=0) ZRSVS_PPM(:,:,:,:)   = 0.
  !
     IF (LNEUTRAL) ZTH=ZTH-PTHVREF  !* To be removed with the new PPM scheme ?
 -   CALL PPM_MET (HLBCX,HLBCY, KRR, KTCOUNT, ZRUCPPM, ZRVCPPM, ZRWCPPM, ZTSTEP_PPM,    &
 -              PRHODJ,  ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2,  ZRHOZ1, ZRHOZ2,               &
 +   CALL PPM_MET (HLBCX,HLBCY, KRR, TPDTCUR,ZRUCPPM, ZRVCPPM, ZRWCPPM, ZTSTEP_PPM,    &
 +              PRHODJ,  ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2,  ZRHOZ1, ZRHOZ2,              &
                ZTH, ZTKE, ZR, ZRTHS_PPM, ZRTKES_PPM, ZRRS_PPM, HMET_ADV_SCHEME)
     IF (LNEUTRAL) ZTH=ZTH+PTHVREF  !* To be removed with the new PPM scheme ?
  !
     IF (KRR /=0)  PRRS      (:,:,:,:) = PRRS      (:,:,:,:) + ZRRS_PPM  (:,:,:,:) / KSPLIT
     IF (KSV /=0 ) PRSVS     (:,:,:,:) = PRSVS     (:,:,:,:) + ZRSVS_PPM (:,:,:,:) / KSPLIT
  !
 -    !
 -    !  Guesses of the field inside the time splitting loop
 -    !
 -    ZTH = ZTH + ( ZRTHS_PPM(:,:,:) + ZRTHS_OTHER(:,:,:) + PRTHS_CLD(:,:,:)) * &
 -          ZTSTEP_PPM / PRHODJ(:,:,:)
 -    IF (GTKE) ZTKE = ZTKE + ( ZRTKES_PPM(:,:,:) + ZRTKES_OTHER(:,:,:) ) * ZTSTEP_PPM / PRHODJ(:,:,:)
 -    DO JR = 1, KRR
 -      ZR(:,:,:,JR) = ZR(:,:,:,JR) + ( ZRRS_PPM(:,:,:,JR) + ZRRS_OTHER(:,:,:,JR) + PRRS_CLD(:,:,:,JR) ) &
 -                     * ZTSTEP_PPM / PRHODJ(:,:,:)
 -    END DO
 -    DO JSV = 1, KSV
 -      ZSV(:,:,:,JSV) = ZSV(:,:,:,JSV) + ( ZRSVS_PPM(:,:,:,JSV) + ZRSVS_OTHER(:,:,:,JSV) +  &
 -                       PRSVS_CLD(:,:,:,JSV) ) * ZTSTEP_PPM / PRHODJ(:,:,:)
 -    END DO
 -    !
 -    ! Top and bottom Boundaries and LBC for the guesses
 -    !
 -    CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTH, PTHT )    
+    IF (JSPL<KSPLIT) THEN
-    CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTKE, PTKET)
 +!
 +!  Guesses of the field inside the time splitting loop
 +!
 +   ZTH = ZTH + ( ZRTHS_PPM(:,:,:) + ZRTHS_OTHER(:,:,:) + PRTHS_CLD(:,:,:)) * &
 +           ZTSTEP_PPM / PRHODJ(:,:,:)
 +   IF (GTKE) ZTKE = ZTKE + ( ZRTKES_PPM(:,:,:) + ZRTKES_OTHER(:,:,:) ) * ZTSTEP_PPM / PRHODJ(:,:,:)
 +   DO JR = 1, KRR
 +    ZR(:,:,:,JR) = ZR(:,:,:,JR) + ( ZRRS_PPM(:,:,:,JR) + ZRRS_OTHER(:,:,:,JR) + PRRS_CLD(:,:,:,JR) ) &
 +                    * ZTSTEP_PPM / PRHODJ(:,:,:)
 +   END DO
 +   DO JSV = 1, KSV
 +    ZSV(:,:,:,JSV) = ZSV(:,:,:,JSV) + ( ZRSVS_PPM(:,:,:,JSV) + ZRSVS_OTHER(:,:,:,JSV) +  &
 +                     PRSVS_CLD(:,:,:,JSV) ) * ZTSTEP_PPM / PRHODJ(:,:,:)
 +   END DO
 +!
 +! Top and bottom Boundaries and LBC for the guesses
 +!
 +   CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTH, PTHT )    
 -    DO JR = 1, KRR
 -      CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZR(:,:,:,JR), PRT(:,:,:,JR))
 -    END DO
 -    DO JSV = 1, KSV
 -      CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZSV(:,:,:,JSV), PSVT(:,:,:,JSV))
 -    END DO
 -    !
 -    !  Exchanges fields between processors
 -    !
 -    NULLIFY(TZFIELDS1_ll)
+     IF (GTKE) CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTKE, PTKET)
 +   DO JR = 1, KRR
 +     CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZR(:,:,:,JR), PRT(:,:,:,JR))
 +   END DO
 +   DO JSV = 1, KSV
 +     CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZSV(:,:,:,JSV), PSVT(:,:,:,JSV))
 +   END DO
 +!
 +!  Exchanges fields between processors
 +!
 +   NULLIFY(TZFIELDS1_ll)
  !!$   IF(NHALO == 1) THEN
      CALL ADD3DFIELD_ll(TZFIELDS1_ll, ZTH)
      IF (GTKE) CALL ADD3DFIELD_ll(TZFIELDS1_ll, ZTKE)
@@@ -292,22 -286,24 +292,24 @@@ DO JSPL=1,ISPLI
    PRVS(:,:,:) = PRVS(:,:,:) + ZRVS_ADV(:,:,:) / ISPLIT
    PRWS(:,:,:) = PRWS(:,:,:) + ZRWS_ADV(:,:,:) / ISPLIT
  
 -    !
 -    ! Guesses for next time splitting loop
 -    !
 -    ZU(:,:,:) = ZU(:,:,:) + ZTSTEP / ZMXM_RHODJ *  &
 -                (ZRUS_OTHER(:,:,:) + ZRUS_ADV(:,:,:))
 -    ZV(:,:,:) = ZV(:,:,:) + ZTSTEP / ZMYM_RHODJ *  &
 -                (ZRVS_OTHER(:,:,:) + ZRVS_ADV(:,:,:))
 -    ZW(:,:,:) = ZW(:,:,:) + ZTSTEP / ZMZM_RHODJ *  &
+   IF (JSPL<ISPLIT) THEN
 +!
 +! Guesses for next time splitting loop
 +!
 +  ZU(:,:,:) = ZU(:,:,:) + ZTSTEP / ZMXM_RHODJ *  &
 +              (ZRUS_OTHER(:,:,:) + ZRUS_ADV(:,:,:))
 +  ZV(:,:,:) = ZV(:,:,:) + ZTSTEP / ZMYM_RHODJ *  &
 +              (ZRVS_OTHER(:,:,:) + ZRVS_ADV(:,:,:))
 +  ZW(:,:,:) = ZW(:,:,:) + ZTSTEP / ZMZM_RHODJ *  &
                (ZRWS_OTHER(:,:,:) + ZRWS_ADV(:,:,:))
 -    !
 -    ! Top and bottom Boundaries
 -    !
 -    CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZU, PUT, 'U' )
 -    CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZV, PVT, 'V' )
 -    CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZW, PWT, 'W' )
 -    ZW (:,:,IKE+1 ) = 0.
 +!
 +! Top and bottom Boundaries 
 +!
 +  CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZU, PUT, 'U' )    
 +  CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZV, PVT, 'V' )    
 +  CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZW, PWT, 'W' )
 +  ZW (:,:,IKE+1 ) = 0.
+   END IF
  !
  ! End of the time splitting loop
  END DO
Simple merge
@@@ -208,13 -208,10 +208,16 @@@ END MODULE MODI_DEFAULT_DESFM_
  !!                   07/2013  (C.Lac) add WENO, LCHECK              
  !!                   07/2013  (Bosseur & Filippi) adds Forefire
  !!                   08/2015  (Redelsperger & Pianezze) add XPOND coefficient for LBC
+ !!      Modification 24/03/16 (Leriche) remove LCH_SURFACE_FLUX 
+ !!                                      put NCH_VEC_LENGTH = 50 instead of 1000
+ !!
  !!                   04/2016 (C.LAC) negative contribution to the budget splitted between advection, turbulence and microphysics for KHKO/C2R2
 +!!      Modification    01/2016  (JP Pinty) Add LIMA
 +!!      Modification 24/03/16 (Leriche) remove LCH_SURFACE_FLUX 
 +!!                                      put NCH_VEC_LENGTH = 50 instead of 1000
 +!!                   10/2016 (C.Lac) VSIGQSAT change from 0 to 0.02 for coherence with AROME
 +!!                    10/2016 (C.Lac) Add droplet deposition
 +!!                   10/2016  (R.Honnert and S.Riette) : Improvement of EDKF and adaptation to the grey zone
  !-------------------------------------------------------------------------------
  !
  !*       0.    DECLARATIONS
@@@ -126,9 -126,8 +126,10 @@@ SUBROUTINE INI_LB(HINIFILE,HLUOUT,OLSOU
  !!      M.Leriche       16/07/10    Add ice phase chemical species
  !!      Pialat/tulet    15/02/12    Add ForeFire scalars 
  !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
+ !!      M.Leriche       09/02/16    Treat gas and aq. chemicals separately
  !!      J.Escobar : 27/04/2016 : bug , test only on ANY(HGETSVM({{1:KSV}})=='READ'
 +!!      J.-P. Pinty     09/02/16    Add LIMA that is LBC for CCN and IFN
 +!!      M.Leriche       09/02/16    Treat gas and aq. chemicals separately
  !-------------------------------------------------------------------------------
  !
  !*       0.    DECLARATIONS
@@@ -262,13 -262,10 +262,14 @@@ END MODULE MODI_INI_MODEL_
  !!                   JAn.  2015  (F. Brosse) bug in allocate XACPRAQ
  !!                   Dec 2014 (C.Lac) : For reproducibility START/RESTA
  !!                   J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 -!!       V. Masson     Feb 2015 replaces, for aerosols, cover fractions by sea, town, bare soil fractions
 +!!                   V. Masson     Feb 2015 replaces, for aerosols, cover fractions by sea, town, bare soil fractions
  !!                   J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
+ !!                   J.Escobar : 01/06/2016 : correct check limit of NRIM versus local subdomain size IDIM
 +!!                   06/2016     (G.Delautier) phasage surfex 8
 +!!                   Modification    01/2016  (JP Pinty) Add LIMA
  !!                   M.Leriche 2016 Chemistry
 +!!                   10/2016 M.Mazoyer New KHKO output fields
 +!!                      10/2016 (C.Lac) Add max values
  !---------------------------------------------------------------------------------
  !
  !*       0.    DECLARATIONS
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -280,11 -280,7 +280,10 @@@ END MODULE MODI_READ_EXSEG_
  !!      Modification   01/2015   (C. Barthe) add explicit LNOx
  !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
  !!      M.Leriche 18/12/2015 : bug chimie glace dans prep_real_case
 +!!      Modification    01/2016  (JP Pinty) Add LIMA
  !!      Modification   02/2016   (M.Leriche) treat gas and aq. chemicals separately
 +!!      Modification   10/2016    (C.LAC) Add OSPLIT_WENO + Add droplet
 +!!                                deposition + Add max values
  !!------------------------------------------------------------------------------
  !
  !*       0.    DECLARATIONS
Simple merge
@@@ -187,8 -187,7 +187,9 @@@ END MODULE MODI_SPAWN_MODEL
  !!      Modification 05/02/2015 (M.Moge) parallelization of SPAWNING
  !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
  !!      J.Escobar   02/05/2016 : test ZZS_MAX in // 
+ !!      J.Escobar   12/07/2016 : add test on NRIMY & change the one on NRIMX with >=
 +!!      Modification    01/2016  (JP Pinty) Add LIMA
 +!!                    10/2016 (C.Lac) Add droplet deposition
  !-------------------------------------------------------------------------------
  !
  !*       0.     DECLARATIONS
@@@ -61,7 -61,8 +61,9 @@@ END MODULE MODI_WRITE_AIRCRAFT_BALLOO
  !!     Original 15/05/2000
  !!     10/01/2011 adding IMI, the model number
  !!     March, 2013 :  C.Lac : add vertical profiles
+ !!     July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for
+ !!                                      aircraft, ballon and profiler
 +!!     Oct 2016 : G.Delautier LIMA
  !!     August 2016 (M.Leriche) Add mass concentration of aerosol species
  !!
  !! --------------------------------------------------------------------------
diff --cc src/Makefile
@@@ -340,8 -340,8 +344,8 @@@ cdf : $(CDF_INC
  $(CDF_INC) : 
        cd ${DIR_HDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --with-zlib=no \
        FC="$(FC)" FCFLAGS="$(HDF_OPT)" CPPFLAGS="-DpgiFortran" ${HDF_CONF} && make && make install && $(MAKE) -j 1 clean
-       cd ${DIR_CDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --disable-cxx --disable-dap \
+       cd ${DIR_CDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --disable-cxx --enable-f90 --disable-dap \
 -      FC="$(FC)" FCFLAGS="$(NETCDF_OPT)" CPPFLAGS="-DpgiFortran ${INC_NETCDF}" ${CDF_CONF} LDFLAGS=" -L${CDF_PATH}/lib64" && make && make install && $(MAKE) -j 1 clean
 +        FC="$(FC)" FCFLAGS="$(NETCDF_OPT)" CPPFLAGS="-DpgiFortran ${INC_NETCDF}" ${CDF_CONF} LDFLAGS=" -L${CDF_PATH}/lib64" && make && make install && $(MAKE) -j 1 clean
  
  cleanmaster : cleancdf
  cleancdf :
Simple merge
Simple merge
diff --cc src/Rules.BG.mk
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -42,10 -37,10 +42,13 @@@ USE MODI_GET_LUOU
  USE MODI_BUILD_EMISSTAB_n
  USE MODI_BUILD_PRONOSLIST_n
  USE MODI_READ_SURF
+ USE MODI_OPEN_NAMELIST
+ USE MODI_CLOSE_NAMELIST
+ USE MODI_READ_SURF_FIELD2D
  !
 +USE MODI_OPEN_NAMELIST
 +USE MODI_CLOSE_NAMELIST
 +USE MODI_READ_SURF_FIELD2D
  !
  USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
  USE PARKIND1  ,ONLY : JPRB
@@@ -132,24 -117,23 +135,25 @@@ IF (IRESP/=0) THE
  END IF
  !
  !
 -IF (.NOT. ASSOCIATED(CEMIS_NAME))  THEN 
 -  ALLOCATE(CEMIS_NAME(NEMISPEC_NBR))
 +IF (.NOT. ASSOCIATED(CHE%CEMIS_NAME))  THEN 
 +  ALLOCATE(CHE%CEMIS_NAME(CHE%NEMISPEC_NBR))
  ELSE
 -  WRITE(ILUOUT,*) 'CEMIS_NAME already allocated with SIZE :',SIZE(CEMIS_NAME)
 +  WRITE(ILUOUT,*) 'CEMIS_NAME already allocated with SIZE :',SIZE(CHE%CEMIS_NAME)
  END IF
  
 -IF (.NOT. ASSOCIATED(CEMIS_AREA))   ALLOCATE(CEMIS_AREA(NEMISPEC_NBR))
 -IF (.NOT. ASSOCIATED(NEMIS_TIME))   ALLOCATE(NEMIS_TIME(NEMIS_NBR))
 +IF (.NOT. ASSOCIATED(CHE%CEMIS_AREA))   ALLOCATE(CHE%CEMIS_AREA(CHE%NEMISPEC_NBR))
 +IF (.NOT. ASSOCIATED(CHE%NEMIS_TIME))   ALLOCATE(CHE%NEMIS_TIME(CHE%NEMIS_NBR))
 + CHE%NEMIS_TIME(:) = -1
 +!
  IF (HINIT/='ALL') THEN
 -  ALLOCATE(XEMIS_FIELDS(KLU,NEMIS_NBR))
 -  ALLOCATE(CEMIS_COMMENT(NEMIS_NBR))
 +  ALLOCATE(CHE%XEMIS_FIELDS(KLU,CHE%NEMIS_NBR))
 +  ALLOCATE(CHE%CEMIS_COMMENT(CHE%NEMIS_NBR))
  END IF
  !
 -ALLOCATE(ITIMES(NEMIS_NBR))
 -ALLOCATE(INBTIMES(NEMISPEC_NBR))
 -ALLOCATE(IOFFNDX(NEMISPEC_NBR))
 +ALLOCATE(ITIMES(CHE%NEMIS_NBR))
 +ALLOCATE(INBTIMES(CHE%NEMISPEC_NBR))
 +ALLOCATE(IOFFNDX(CHE%NEMISPEC_NBR))
  !
  INBTIMES(:) = -1
  IOFFNDX(:)  = 0 ! Index array of offline species 
@@@ -203,24 -179,21 +207,34 @@@ DO JSPEC = 1,CHE%NEMISPEC_NBR ! Loop o
      END IF
    END IF
  !
 + CHE%NTIME_MAX = MAXVAL(CHE%NEMIS_TIME)
 +!
  ! INBTIMES, CEMIS_AREA and CEMIS_NAME 
  ! are updated for ALL species
 -  CEMIS_NAME(JSPEC) = YSPEC_NAME
 -  CEMIS_AREA(JSPEC) = YSURF
 +  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))
 +    CALL READ_SURF_FIELD2D(HPROGRAM,ZWORK2D(:,:),YRECFM,YCOMMENT)
 +    CHE%XEMIS_FIELDS(:,IIND1:IIND2) = ZWORK2D(:,:)
 +    CHE%CEMIS_COMMENT(IIND1:IIND2) = YCOMMENT
 +    DEALLOCATE(ZWORK2D)
 +  END IF
  ! 
+ !*      2.     Simple reading of emission fields
+   IF (HINIT /= "ALL") THEN
+     YRECFM='E_'//TRIM(ADJUSTL(YSPEC_NAME))
+     ALLOCATE(ZWORK2D(KLU,INBTS))
+     CALL READ_SURF_FIELD2D(HPROGRAM,ZWORK2D(:,:),YRECFM,YCOMMENT)
+     XEMIS_FIELDS(:,IIND1:IIND2) = ZWORK2D(:,:)
+     CEMIS_COMMENT(IIND1:IIND2) = YCOMMENT
+     DEALLOCATE(ZWORK2D)
+   END IF
  END DO
  !
  WRITE(ILUOUT,*) '---- Nunmer of OFFLINE species = ',INBOFF
@@@ -60,28 -60,73 +60,24 @@@ TYPE CH_SURF_
  !
  END TYPE CH_SURF_t
  
 -TYPE(CH_SURF_t), ALLOCATABLE, TARGET, SAVE :: CH_SURF_MODEL(:)
  
 - CHARACTER(LEN=4),               POINTER :: CCH_EMIS=>NULL()
 -!$OMP THREADPRIVATE(CCH_EMIS)
 - CHARACTER(LEN=6), DIMENSION(:), POINTER :: CCH_NAMES=>NULL()
 -!$OMP THREADPRIVATE(CCH_NAMES)
 - CHARACTER(LEN=6), DIMENSION(:), POINTER :: CAER_NAMES=>NULL()
 -!$OMP THREADPRIVATE(CAER_NAMES)
 - CHARACTER(LEN=28), POINTER :: CCHEM_SURF_FILE=>NULL()
 -!$OMP THREADPRIVATE(CCHEM_SURF_FILE)
 -REAL, DIMENSION(:), POINTER   :: XCONVERSION=>NULL()
 -!$OMP THREADPRIVATE(XCONVERSION)
 -LOGICAL, POINTER :: LCH_SURF_EMIS=>NULL()
 -!$OMP THREADPRIVATE(LCH_SURF_EMIS)
 -LOGICAL, POINTER :: LCH_EMIS=>NULL()
 -!$OMP THREADPRIVATE(LCH_EMIS)
 + CONTAINS
  
 -CONTAINS
 -
 -SUBROUTINE CH_SURF_GOTO_MODEL(KFROM, KTO, LKFROM)
 -LOGICAL, INTENT(IN) :: LKFROM
 -INTEGER, INTENT(IN) :: KFROM, KTO
 -REAL(KIND=JPRB) :: ZHOOK_HANDLE
 -!
 -! Save current state for allocated arrays
 -IF (LKFROM) THEN
 -CH_SURF_MODEL(KFROM)%CCH_NAMES=>CCH_NAMES
 -CH_SURF_MODEL(KFROM)%CAER_NAMES=>CAER_NAMES
 -CH_SURF_MODEL(KFROM)%XCONVERSION=>XCONVERSION
 -ENDIF
  !
 -! Current model is set to model KTO
 -IF (LHOOK) CALL DR_HOOK('MODD_CH_SURF_N:CH_SURF_GOTO_MODEL',0,ZHOOK_HANDLE)
 -CCH_EMIS=>CH_SURF_MODEL(KTO)%CCH_EMIS
 -CCH_NAMES=>CH_SURF_MODEL(KTO)%CCH_NAMES
 -CAER_NAMES=>CH_SURF_MODEL(KTO)%CAER_NAMES
 -CCHEM_SURF_FILE=>CH_SURF_MODEL(KTO)%CCHEM_SURF_FILE
 -XCONVERSION=>CH_SURF_MODEL(KTO)%XCONVERSION
 -LCH_SURF_EMIS=>CH_SURF_MODEL(KTO)%LCH_SURF_EMIS
 -LCH_EMIS=>CH_SURF_MODEL(KTO)%LCH_EMIS
 -IF (LHOOK) CALL DR_HOOK('MODD_CH_SURF_N:CH_SURF_GOTO_MODEL',1,ZHOOK_HANDLE)
  
 -END SUBROUTINE CH_SURF_GOTO_MODEL
--
 -SUBROUTINE CH_SURF_ALLOC(KMODEL)
 -INTEGER, INTENT(IN) :: KMODEL
 -INTEGER :: J
 +SUBROUTINE CH_SURF_INIT(YCH_SURF)
 +TYPE(CH_SURF_t), INTENT(INOUT) :: YCH_SURF
  REAL(KIND=JPRB) :: ZHOOK_HANDLE
 -IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_ALLOC",0,ZHOOK_HANDLE)
 -ALLOCATE(CH_SURF_MODEL(KMODEL))
 -DO J=1,KMODEL
 -  NULLIFY(CH_SURF_MODEL(J)%CCH_NAMES)
 -  NULLIFY(CH_SURF_MODEL(J)%CAER_NAMES)
 -  NULLIFY(CH_SURF_MODEL(J)%XCONVERSION)
 -ENDDO
 -CH_SURF_MODEL(:)%CCH_EMIS=' '
 -CH_SURF_MODEL(:)%CCHEM_SURF_FILE=' '
 -CH_SURF_MODEL(:)%LCH_SURF_EMIS=.FALSE.
 -CH_SURF_MODEL(:)%LCH_EMIS=.FALSE.
 -IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_ALLOC",1,ZHOOK_HANDLE)
 -END SUBROUTINE CH_SURF_ALLOC
 +IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_INIT",0,ZHOOK_HANDLE)
 +  NULLIFY(YCH_SURF%CCH_NAMES)
 +  NULLIFY(YCH_SURF%CAER_NAMES)
 +  NULLIFY(YCH_SURF%XCONVERSION)
 +YCH_SURF%CCH_EMIS=' '
 +YCH_SURF%CCHEM_SURF_FILE=' '
 +YCH_SURF%LCH_SURF_EMIS=.FALSE.
 +YCH_SURF%LCH_EMIS=.FALSE.
 +IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_INIT",1,ZHOOK_HANDLE)
 +END SUBROUTINE CH_SURF_INIT
  
 -SUBROUTINE CH_SURF_DEALLO
 -REAL(KIND=JPRB) :: ZHOOK_HANDLE
 -IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_DEALLO",0,ZHOOK_HANDLE)
 -IF (ALLOCATED(CH_SURF_MODEL)) DEALLOCATE(CH_SURF_MODEL)
 -IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_DEALLO",1,ZHOOK_HANDLE)
 -END SUBROUTINE CH_SURF_DEALLO
  
  END MODULE MODD_CH_SURF_n
@@@ -43,7 -42,7 +43,8 @@@
  !       Modified    07/2011, B.Decharme: delete write pgd fields
  !       Modified    07/2011, B.Decharme: land_use key for writing semi-prognostic variables
  !       Modified    05/2012, B.Decharme: supress LPROVAR_TO_DIAG to write prognostic fields if user want
 +!       Modified    05/2013, B.Decharme: WRITESURF_PRECIP becomes WRITESURF_CPL_GCM
+ !       Modified    05/2016, M.Leriche & V.Masson suppress readwrite_ch_emis (only written in pgd step)
  !-------------------------------------------------------------------------------
  !
  !*       0.    DECLARATIONS
@@@ -192,7 -185,7 +192,11 @@@ YSC%DUU%NDUMMY_NBR = 
  !*   10.      Chemical Emission fields
  !             ------------------------
  !
++<<<<<<< HEAD
 +YSC%CHU%LCH_EMIS = .FALSE.
++=======
+ LCH_EMIS = .FALSE.
++>>>>>>> MNH-52X-BUG2
  IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_SURF_ATM',1,ZHOOK_HANDLE)
  !_______________________________________________________________________________
  !