From 4d34b4238ea44bdc07d26248be94c8043998afe3 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Wed, 20 Jun 2018 10:33:57 +0200 Subject: [PATCH] Philippe 20/06/2018: IO: better behavior with MNH_REAL=4 or MNH_INT=8 * R4 are now written in netCDF files as simple precision * files can be read even if written with different integer or real precisions * new attributes for netCDF files: MNH_REAL and MNH_INT * several small bug corrected --- src/LIB/SURCOUCHE/src/fmwrit_ll.f90 | 22 +++--- src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 108 +++++++++++++++++++------- 2 files changed, 92 insertions(+), 38 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 06ee66013..0f1086541 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -539,7 +539,7 @@ CONTAINS IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) ELSE ! multiprocesses execution -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -683,7 +683,7 @@ CONTAINS END IF ELSE ! multiprocesses execution CALL SECOND_MNH2(T0) -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -886,7 +886,7 @@ CONTAINS IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) END IF ELSEIF ( TPFILE%NSUBFILES_IOZ==0 .OR. YDIR=='--' ) THEN ! multiprocesses execution & 1 proc IO -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -923,7 +923,7 @@ CONTAINS CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! ELSE ! multiprocesses execution & // IO -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -1209,7 +1209,7 @@ CONTAINS IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) END IF ELSE -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -1347,7 +1347,7 @@ CONTAINS IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) END IF ELSE -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -1475,7 +1475,7 @@ CONTAINS IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) ELSE -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -1685,7 +1685,7 @@ CONTAINS IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP) IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP) ELSE ! multiprocesses execution -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -1823,7 +1823,7 @@ CONTAINS IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP) END IF ELSE ! multiprocesses execution -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -1973,7 +1973,7 @@ CONTAINS IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP) END IF ELSE ! multiprocesses execution -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -2192,7 +2192,7 @@ CONTAINS IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP) IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP) ELSE ! multiprocesses execution -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index b5594f1d6..0c7480e63 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -420,7 +420,11 @@ SUBROUTINE WRITE_HOR_COORD(TDIM,HLONGNAME,HSTDNAME,HAXIS,PSHIFT,KBOUNDLOW,KBOUND STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Define the coordinate variable +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIM, IVARID) +#endif IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_DEF_VAR]') ELSE CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_NC_COORDS_VAR',TRIM(YVARNAME)//' already defined') @@ -525,7 +529,11 @@ SUBROUTINE WRITE_VER_COORD(TDIM,HLONGNAME,HSTDNAME,HCOMPNAME,PSHIFT,KBOUNDLOW,KB STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Define the coordinate variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID) +#if (MNH_REAL == 8) + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIM, IVARID) +#endif IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_DEF_VAR]') ELSE CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_NC_COORDS_VAR',TRIM(YVARNAME)//' already defined') @@ -600,7 +608,11 @@ SUBROUTINE WRITE_TIME_COORD(TDIM) STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Define the coordinate variable +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIM, IVARID) +#endif IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_TIME_COORD[NF90_DEF_VAR]') ELSE CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_TIME_COORD',TRIM(YVARNAME)//' already defined') @@ -618,7 +630,7 @@ SUBROUTINE WRITE_TIME_COORD(TDIM) STATUS = NF90_PUT_ATT(INCID, IVARID, 'axis','T') IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID,'calendar','standard') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_ATT]') ! Model beginning date (TDTMOD%TDATE) is used as the reference date ! Reference time is set to 0. @@ -695,6 +707,20 @@ IF (TPFILE%LMASTER) THEN ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'Conventions', 'CF-1.7 COMODO-1.4') IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__,'IO_FILE_WRITE_HEADER[NF90_PUT_ATT]') +#if (MNH_REAL == 8) + ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_REAL', '8') +#else + ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_REAL', '4') +#endif + IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__,'IO_FILE_WRITE_HEADER[NF90_PUT_ATT]') + +#if (MNH_INT == 4) + ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_INT', '4') +#else + ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_INT', '8') +#endif + IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__,'IO_FILE_WRITE_HEADER[NF90_PUT_ATT]') + !title !history @@ -841,7 +867,7 @@ IF (.NOT.GISCOORD) THEN ENDIF ! IF(TPFIELD%NTYPE==TYPEINT .AND. TPFIELD%NDIMS>0) THEN - IF (TPFIELD%NFILLVALUE>=TPFIELD%NVALIDMIN .AND. TPFIELD%XFILLVALUE<=TPFIELD%NVALIDMAX) & + IF (TPFIELD%NFILLVALUE>=TPFIELD%NVALIDMIN .AND. TPFIELD%NFILLVALUE<=TPFIELD%NVALIDMAX) & CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','_FillValue is not outside of valid_min - valid_max'// & 'interval for variable '//TRIM(TPFIELD%CMNHNAME)) ! @@ -1313,12 +1339,20 @@ IF (STATUS /= NF90_NOERR) THEN ! Get the netcdf dimensions CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) +#if (MNH_REAL == 8) + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) +#endif IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0[NF90_DEF_VAR]') DEALLOCATE(IVDIMS) ELSE ! Define the scalar variable +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVARID) +#endif IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0[NF90_DEF_VAR]') END IF ELSE @@ -1377,7 +1411,11 @@ IF (STATUS /= NF90_NOERR) THEN IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) +#endif END IF IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X1[NF90_DEF_VAR]') ! Add compression if asked for @@ -1468,7 +1506,11 @@ IF (STATUS /= NF90_NOERR) THEN IF (TZFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) +#endif END IF IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2[NF90_DEF_VAR]') ! Add compression if asked for @@ -1535,7 +1577,11 @@ IF (STATUS /= NF90_NOERR) THEN IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) +#endif END IF ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN @@ -1602,7 +1648,11 @@ IF (STATUS /= NF90_NOERR) THEN IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) +#endif END IF ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN @@ -1669,7 +1719,11 @@ IF (STATUS /= NF90_NOERR) THEN IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) +#endif END IF ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN @@ -1736,7 +1790,11 @@ IF (STATUS /= NF90_NOERR) THEN IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) +#endif END IF ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN @@ -2369,7 +2427,11 @@ IF (TPFIELD%LTIMEDEP) & STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Define the scalar variable +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVARID) +#endif IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_T0[NF90_DEF_VAR]') ELSE GEXISTED = .TRUE. @@ -2436,7 +2498,11 @@ TZFIELD%CCOMMENT = 'SECONDS' STATUS = NF90_INQ_VARID(INCID, TZFIELD%CMNHNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Define the scalar variable +#if (MNH_REAL == 8) STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_DOUBLE, IVARID) +#else + STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_FLOAT, IVARID) +#endif IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_T0[NF90_DEF_VAR]') CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED) ELSE @@ -2688,7 +2754,7 @@ IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X0[ !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 -IF (IDIMS == 0 .AND. ITYPE == NF90_DOUBLE) THEN +IF (IDIMS == 0 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD) IF (STATUS /= NF90_NOERR) THEN @@ -2745,7 +2811,7 @@ IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X1[ !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 -IF (IDIMS == 1 .AND. ITYPE == NF90_DOUBLE) THEN +IF (IDIMS == 1 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN) IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X1[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) @@ -2825,7 +2891,7 @@ IF (IDIMS==3) THEN END IF END IF -IF (IDIMS == 2 .AND. ITYPE == NF90_DOUBLE) THEN +IF (IDIMS == 2 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) @@ -2894,7 +2960,7 @@ IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X3[ !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 -IF (IDIMS == 3 .AND. ITYPE == NF90_DOUBLE) THEN +IF (IDIMS == 3 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X3[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) @@ -2965,7 +3031,7 @@ IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X4[ !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 -IF (IDIMS == 4 .AND. ITYPE == NF90_DOUBLE) THEN +IF (IDIMS == 4 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X4[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) @@ -3039,7 +3105,7 @@ IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X5[ !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 -IF (IDIMS == 5 .AND. ITYPE == NF90_DOUBLE) THEN +IF (IDIMS == 5 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X5[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) @@ -3116,7 +3182,7 @@ IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X6[ !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 -IF (IDIMS == 6 .AND. ITYPE == NF90_DOUBLE) THEN +IF (IDIMS == 6 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X6[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) @@ -3193,12 +3259,8 @@ IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_N0[ !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 -#if ( MNH_INT == 4 ) -IF (IDIMS == 0 .AND. (ITYPE == NF90_INT) ) THEN -#else !Can read either 4 or 8 byte integers -IF (IDIMS == 0 .AND. (ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT) ) THEN -#endif +IF (IDIMS == 0 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64) ) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD) IF (STATUS /= NF90_NOERR) THEN @@ -3256,11 +3318,7 @@ IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_N1[ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 !NF90_INT1 is for the case a boolean was written -#if ( MNH_INT == 4 ) -IF (IDIMS == 1 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT1) ) THEN -#else -IF (IDIMS == 1 .AND. (ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN -#endif +IF (IDIMS == 1 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN) IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N1[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) @@ -3341,11 +3399,7 @@ IF (IDIMS==3) THEN END IF !NF90_INT1 is for the case a boolean was written -#if ( MNH_INT == 4 ) -IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT1) ) THEN -#else -IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN -#endif +IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) @@ -3636,7 +3690,7 @@ END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS) IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_T0[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) -IF (IDIMS == 0 .AND. ITYPE == NF90_DOUBLE) THEN +IF (IDIMS == 0 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Read time STATUS = NF90_GET_VAR(INCID, IVARID, TPDATA%TIME) IF (STATUS /= NF90_NOERR) THEN -- GitLab