diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index d58eeb88c83de738cffc35358da1ff3fa10bec88..60cbbb8a6ee5fd78e3d56ca594a6b429016d7cea 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -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 diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 7f87881d4c9d8e29eb8d5294d1aa7b685b0094d3..060c71ca002acc71cb3c6665ec1cbed9ac2df3f9 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -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 !' diff --git a/src/Makefile b/src/Makefile index 44311eeab98b119c3e747f716e85636df3a3396d..170ec01d7f0bb2bbbd1a36027b7dbcf0a77e88d9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -340,9 +340,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 diff --git a/src/Makefile.MESONH.mk b/src/Makefile.MESONH.mk index ea570334c3db1a9c7b23517c26c630e7c33ce1d9..c8ef289625452de60680516185a25749789324be 100644 --- a/src/Makefile.MESONH.mk +++ b/src/Makefile.MESONH.mk @@ -427,7 +427,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 @@ -437,9 +437,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) #