diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90 index 956f95e6a581e566935e3c32d3f2423693d0ac1a..cae9e5e85388e7897a03ff66cd5effe8c7cbb9eb 100644 --- a/src/LIB/SURCOUCHE/src/fmread_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90 @@ -1320,14 +1320,14 @@ TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,TPFIELD%CMNHNAME,KFIELD,TZFMH,IRESP) + CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,TZFMH,IRESP) ELSE CALL FM_READ_ll(TZFD%FLU,TPFIELD%CMNHNAME,.FALSE.,1,KFIELD,TZFMH,IRESP) END IF ELSE IF (ISP == TZFD%OWNER) THEN IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,TPFIELD%CMNHNAME,KFIELD,TZFMH,IRESP) + CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,TZFMH,IRESP) ELSE CALL FM_READ_ll(TZFD%FLU,TPFIELD%CMNHNAME,.FALSE.,1,KFIELD,TZFMH,IRESP) END IF diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 4079e0d34965796eb884dbfef92205de68f1aa25..802eea843b7bd123e92e2eda14f97bc4da66a29f 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -34,6 +34,19 @@ INTERFACE IO_WRITE_FIELD_NC4 IO_WRITE_FIELD_NC4_T0 END INTERFACE IO_WRITE_FIELD_NC4 +INTERFACE IO_READ_FIELD_NC4 + MODULE PROCEDURE IO_READ_FIELD_NC4_N0 +! IO_READ_FIELD_NC4_X0,IO_READ_FIELD_NC4_X1, & +! IO_READ_FIELD_NC4_X2,IO_READ_FIELD_NC4_X3, & +! IO_READ_FIELD_NC4_X4,IO_READ_FIELD_NC4_X5, & +! IO_READ_FIELD_NC4_X6, & +! IO_READ_FIELD_NC4_N1, & +! IO_READ_FIELD_NC4_L0,IO_READ_FIELD_NC4_L1, & +! IO_READ_FIELD_NC4_N2,IO_READ_FIELD_NC4_N3, & +! IO_READ_FIELD_NC4_C0,IO_READ_FIELD_NC4_C1, & +! IO_READ_FIELD_NC4_T0 +END INTERFACE IO_READ_FIELD_NC4 + INTERFACE NCWRIT MODULE PROCEDURE NCWRITX0, NCWRITX1, NCWRITX2, NCWRITX3, & & NCWRITX4, NCWRITX5, NCWRITX6, & @@ -51,7 +64,7 @@ END INTERFACE NCREAD ! Public from module netcdf PUBLIC NF90_OPEN,NF90_CREATE,NF90_NOWRITE,NF90_CLOBBER,NF90_NETCDF4,NF90_NOERR,NF90_STRERROR ! Public from this module : -PUBLIC NEWIOCDF,CLEANIOCDF,NCWRIT,NCREAD,IO_WRITE_FIELD_NC4,IO_WRITE_HEADER_NC4 +PUBLIC NEWIOCDF,CLEANIOCDF,NCWRIT,NCREAD,IO_WRITE_FIELD_NC4,IO_READ_FIELD_NC4,IO_WRITE_HEADER_NC4 CONTAINS @@ -2575,6 +2588,64 @@ KRESP = IRESP END SUBROUTINE NCREADN0 +SUBROUTINE IO_READ_FIELD_NC4_N0(TPFILE, TPFIELD, KFIELD, TPFMH, KRESP) +USE MODD_FM, ONLY : FMHEADER, JPXKRK +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD +INTEGER, INTENT(OUT):: KFIELD +TYPE(FMHEADER), INTENT(OUT):: TPFMH +INTEGER, INTENT(OUT):: KRESP ! return-code + +INTEGER(KIND=IDCDF_KIND) :: STATUS +INTEGER(KIND=IDCDF_KIND) :: INCID +INTEGER(KIND=IDCDF_KIND) :: IVARID +INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type +INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions +INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length +CHARACTER(LEN=30) :: YVARNAME +INTEGER :: IRESP + +CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) + +IRESP = 0 +! Get the Netcdf file ID +INCID = TPFILE%NNCID + +CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) + +! Get variable ID, NDIMS and TYPE +STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) +IF (STATUS /= NF90_NOERR) THEN + CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N0[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + GOTO 1000 +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_N0[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) + +!NF90_INT1 is for the case a boolean was written +#ifndef MNH_INT8 +IF (IDIMS == 0 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT1) ) THEN +#else +IF (IDIMS == 0 .AND. (ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN +#endif + ! Read variable + STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD) + IF (STATUS /= NF90_NOERR) THEN + CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + GOTO 1000 + END IF + ! Read variables attributes (GRID and COMMENT) + CALL READATTR(INCID, IVARID, YVARNAME, TPFMH) +ELSE + PRINT *, 'IO_READ_FIELD_NC4_N0: '//TRIM(YVARNAME)//' not READ (wrong size or type).' + IRESP = -3 +END IF + +1000 CONTINUE +KRESP = IRESP + +END SUBROUTINE IO_READ_FIELD_NC4_N0 + SUBROUTINE NCREADN1(KNCID, HVARNAME, KFIELD, TPFMH, KRESP) USE MODD_FM, ONLY : FMHEADER, JPXKRK INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90 index 36ea691c59958820dfd0e2adbb0f93a43c8326e6..7e50f17f8e2d6aa5f89ceb0751b4b075c05b7d00 100644 --- a/src/MNH/ini_segn.f90 +++ b/src/MNH/ini_segn.f90 @@ -180,6 +180,7 @@ USE MODD_PARAM_n, ONLY : CSURF USE MODD_PARAMETERS USE MODD_REF, ONLY : LBOUSS ! +USE MODE_FD_ll, ONLY : GETFD,FD_LL USE MODE_FIELD USE MODE_FMREAD USE MODE_FM @@ -259,6 +260,7 @@ CHARACTER (LEN=4) :: YCLOUD CHARACTER (LEN=4) :: YELEC CHARACTER (LEN=3) :: YEQNSYS TYPE(TFILEDATA) :: TZFILE +TYPE(FD_ll), POINTER :: TZFD ! !------------------------------------------------------------------------------- ! @@ -395,11 +397,15 @@ END IF TZFILE%CNAME = HINIFILE !TZFILE%CTYPE = '' CALL PRINT_MSG(NVERB_WARNING,'IO','INI_SEG_n','filetype not (yet) set') +TZFD=>GETFD(TRIM(ADJUSTL(TZFILE%CNAME))//'.lfi') +IF (.NOT.ASSOCIATED(TZFD)) CALL PRINT_MSG(NVERB_FATAL,'IO','INI_SEG_n','file '//TRIM(TZFILE%CNAME)//' not found') IF (LIOCDF4 .AND. .NOT.LLFIREAD) THEN TZFILE%CFORMAT = 'NETCDF4' + TZFILE%NNCID = TZFD%CDF%NCID ELSE TZFILE%CFORMAT = 'LFI' TZFILE%NLFINPRAR = 0 + TZFILE%NLFIFLU = TZFD%FLU ENDIF TZFILE%CMODE = 'READ' TZFILE%NLFITYPE = 2