Juan 30/06/2017: J.Escobar 30/06/2017 : Add activation of ZLIB compression in X2...
authorJuan Escobar <escj@aero.obs-mip.fr>
Fri, 30 Jun 2017 09:18:35 +0000 (11:18 +0200)
committerJuan Escobar <escj@aero.obs-mip.fr>
Fri, 30 Jun 2017 09:20:28 +0000 (11:20 +0200)
(cherry picked from commit 73b6c2253336c4e3e72561a297d2d91423500c77)

src/LIB/SURCOUCHE/src/modd_io.f90
src/LIB/SURCOUCHE/src/mode_netcdf.f90
src/Makefile
src/Makefile.MESONH.mk

index d58eeb8..60cbbb8 100644 (file)
@@ -9,6 +9,7 @@
 ! $Name$ 
 ! $Revision$ 
 ! $Date$
+!   J.Escobar 30/06/2017 : Add activation of ZLIB compression if MNH_IOCDF4 == 2
 !-----------------------------------------------------------------
 !-----------------------------------------------------------------
 
@@ -34,5 +35,9 @@ LOGICAL, SAVE :: LPACK = .FALSE. ! TRUE if FM compression occurs in 1D or 2D mod
 LOGICAL, SAVE :: LIOCDF4    = .FALSE. ! TRUE will enable full NetCDF4 (HDF5) I/O support
 LOGICAL, SAVE :: LLFIOUT    = .FALSE. ! TRUE will also force LFI output when LIOCDF4 is on (debug only)  
 LOGICAL, SAVE :: LLFIREAD   = .FALSE. ! TRUE will force LFI read (instead of NetCDF) when LIOCDF4 is on (debug only)  
-LOGICAL, SAVE :: LDEFLATEX2 = .FALSE. ! TRUE to enable Zlib deflate compression on X2 fields  
+#if MNH_IOCDF4 == 2
+LOGICAL, SAVE :: LDEFLATEX2 = .TRUE. ! TRUE to enable Zlib deflate compression on X2/X3 fields
+#else
+LOGICAL, SAVE :: LDEFLATEX2 = .FALSE. ! TRUE to enable Zlib deflate compression on X2/X3 fields
+#endif
 END MODULE MODD_IO_ll
index 7f87881..060c71c 100644 (file)
@@ -2,7 +2,8 @@
 MODULE MODE_NETCDF
 !!
 !!      Original  14/04/2015 D. Gazen
-!!      D.Gazen & J.Escobar 24/03/2107 : Correction for compilation of netcdf4IO in REAL*4 <=> MNH_REAL=R4      
+!!      D.Gazen & J.Escobar 24/03/2107 : Correction for compilation of netcdf4IO in REAL*4 <=> MNH_REAL=R4  
+!!      J.Escobar 30/06/2017 : Add activation of ZLIB compression in NCWRITX3    
 !!
 USE MODD_NETCDF
 
@@ -477,6 +478,7 @@ KRESP = IRESP
 END SUBROUTINE NCWRITX2
 
 SUBROUTINE NCWRITX3(PZCDF, HVARNAME, HDIR, PFIELD, TPFMH, KRESP)
+USE MODD_IO_ll, ONLY : LDEFLATEX2
 USE MODD_FM, ONLY : FMHEADER
 TYPE(IOCDF), POINTER              :: PZCDF
 CHARACTER(LEN=*),      INTENT(IN) :: HVARNAME
@@ -485,6 +487,10 @@ REAL, DIMENSION(:,:,:),INTENT(IN) :: PFIELD
 TYPE(FMHEADER),        INTENT(IN) :: TPFMH
 INTEGER,               INTENT(OUT):: KRESP
 
+INTEGER(KIND=IDCDF_KIND),PARAMETER :: SHUFFLE = 0
+INTEGER(KIND=IDCDF_KIND),PARAMETER :: DEFLATE = 1
+INTEGER(KIND=IDCDF_KIND),PARAMETER :: DEFLATE_LEVEL = 2
+
 INTEGER(KIND=IDCDF_KIND) :: STATUS
 INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
@@ -506,10 +512,14 @@ STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Get the netcdf dimensions
    CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS)
-
    ! Define the variable 
    STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX3[NF_DEF_VAR]')
+   IF (LDEFLATEX2) THEN
+      ! Compress the variable with deflate level 2
+      STATUS = NF_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, DEFLATE_LEVEL)
+      IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX3[NF_DEF_VAR_DEFLATE]')
+   END IF
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
    PRINT *,'NCWRITX3 : ', TRIM(YVARNAME), ' already defined !'
index 1788d58..f9735f8 100644 (file)
@@ -336,9 +336,16 @@ ifeq "$(VER_CDF)" "CDFAUTO"
 HDF_OPT    = ${OPT_BASE_I4:-$OPT_BASE}
 NETCDF_OPT = ${OPT_BASE_I4:-$OPT_BASE}
 #
+# if MNH_IOCDF4=2  use libz
+ifeq "$(MNH_IOCDF4)" "2"
+LZLIB=yes
+else
+LZLIB=no
+endif
+#
 cdf : $(CDF_INC)
 $(CDF_INC) : 
-       cd ${DIR_HDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --with-zlib=no \
+       cd ${DIR_HDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --with-zlib=$(LZLIB) \
        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 --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
index eb5f093..f926a5a 100644 (file)
@@ -377,7 +377,7 @@ endif
 ##########################################################
 # NETCDF4 INPUT/OUTPUT in MesoNH 
 ifdef MNH_IOCDF4
-CPPFLAGS_MNH += -DMNH_IOCDF4
+CPPFLAGS_MNH += -DMNH_IOCDF4=$(MNH_IOCDF4)
 endif
 #
 # NetCDF  : AUTO install of netcdf-4.X.X on PC linux to avoid problem with compiler
@@ -387,9 +387,13 @@ ifeq "$(VER_CDF)" "CDFAUTO"
 DIR_CDF?=${SRC_MESONH}/src/LIB/netcdf-${VERSION_CDF}
 CDF_PATH?=${DIR_CDF}-${ARCH}I${MNH_INT}
 CDF_INC?=${CDF_PATH}/include/netcdf.inc
+# if MNH_IOCDF4=2  use libz
+ifeq "$(MNH_IOCDF4)" "2"
+ZLIB=-lz
+endif
 #
 INC_NETCDF     ?= -I${CDF_PATH}/include
-LIB_NETCDF     ?= -L${CDF_PATH}/lib -L${CDF_PATH}/lib64 -lnetcdff -lnetcdf  -lhdf5_hl -lhdf5
+LIB_NETCDF     ?= -L${CDF_PATH}/lib -L${CDF_PATH}/lib64 -lnetcdff -lnetcdf  -lhdf5_hl -lhdf5 $(ZLIB)
 INC            += $(INC_NETCDF)
 LIBS           += $(LIB_NETCDF)
 #