diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 4d4fd98dcf7090b79279cb4f7c555fadaeaf3033..cd955daff69b2bd550d9396392a93cb12d1af373 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -13,6 +13,9 @@ !----------------------------------------------------------------- MODULE MODD_IO_ll +! +USE MODD_NETCDF, ONLY: IDCDF_KIND +! IMPLICIT NONE ! ! @@ -61,6 +64,12 @@ TYPE TFILEDATA INTEGER :: NLFINPRAR = 0 !Number of predicted articles of the LFI file (non crucial) INTEGER :: NLFITYPE = -1 !Type of the file (used to generate list of files to transfers) INTEGER :: NLFIVERB = 1 !LFI verbosity level + INTEGER :: NLFIFLU = -1 !File identifier + ! + ! Fields for netCDF files + INTEGER(KIND=IDCDF_KIND) :: NNCID = -1 !File identifier + LOGICAL :: LNCREDUCE_FLOAT_PRECISION = .FALSE. ! Reduce the precision of floats to single precision + ! instead of double precision (for netCDF) ! TYPE(TFILEDATA),POINTER :: TFILE_PREV => NULL() TYPE(TFILEDATA),POINTER :: TFILE_NEXT => NULL() diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index 7158dbefd36ab276706857bdbb27c6dac6e8afaa..a04d04e3f33451ed30fb78b2f974391f535e8a66 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -132,13 +132,15 @@ END SUBROUTINE FMLOOK_ll SUBROUTINE IO_FILE_OPEN_ll(TPFILE,HFIPRI,KRESP) ! -USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_IO_ll, ONLY: LIOCDF4,TFILEDATA +USE MODE_FD_ll, ONLY: FD_ll,GETFD ! TYPE(TFILEDATA), INTENT(INOUT) :: TPFILE ! File structure CHARACTER(LEN=*), INTENT(IN) :: HFIPRI ! File for prints in FM INTEGER, INTENT(OUT) :: KRESP ! Return code ! INTEGER :: ININAR ! Number of articles present in LFI file (unused here) +TYPE(FD_ll), POINTER :: TZFDLFI ! IF (TPFILE%LOPENED) THEN PRINT *,'ERROR: IO_FILE_OPEN_ll: file ',TRIM(TPFILE%CNAME),' already opened' @@ -151,6 +153,9 @@ CALL FMOPEN_ll(TPFILE%CNAME,TPFILE%CMODE,HFIPRI,TPFILE%NLFINPRAR,TPFILE%NLFITYPE TPFILE%LOPENED = .TRUE. TPFILE%NOPEN = TPFILE%NOPEN + 1 ! +TZFDLFI=>GETFD(ADJUSTL(TRIM(TPFILE%CNAME)//'.lfi')) +IF (LIOCDF4) TPFILE%NNCID = TZFDLFI%CDF%NCID +! END SUBROUTINE IO_FILE_OPEN_ll SUBROUTINE FMOPEN_ll(HFILEM,HACTION,HFIPRI,KNPRAR,KFTYPE,KVERB,KNINAR& @@ -393,6 +398,7 @@ CALL FMCLOS_ll(TPFILE%CNAME,'KEEP',HFIPRI,KRESP,TPFILE=TPFILE) ! TPFILE%LOPENED = .FALSE. TPFILE%NCLOSE = TPFILE%NCLOSE + 1 +TPFILE%NNCID = -1 ! END SUBROUTINE IO_FILE_CLOSE_ll diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 6e3014f00c38f7c836b33ab18f9127d7ad2529ae..0f806e5be7dcfe6ef75635964e438b31f8c266a4 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -11,6 +11,7 @@ MODULE MODE_NETCDF USE MODD_NETCDF USE NETCDF +USE MODD_IO_ll, ONLY : TFILEDATA USE MODE_FIELD, ONLY : TFIELDDATA IMPLICIT NONE @@ -157,7 +158,7 @@ IF (TRIM(TPFILE%CFORMAT)/='NETCDF4' .AND. TRIM(TPFILE%CFORMAT)/='LFICDF4') RETUR TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') ! IF (ISP == TZFD%OWNER) THEN - ISTATUS = NF90_PUT_ATT(TZFD%CDF%NCID, NF90_GLOBAL, 'Conventions', 'CF-1.6') + ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'Conventions', 'CF-1.6') IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__,'IO_FILE_WRITE_HEADER[NF90_PUT_ATT]') !title @@ -547,10 +548,11 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX2[NF90_PUT_VAR KRESP = IRESP END SUBROUTINE NCWRITX2 -SUBROUTINE IO_WRITE_FIELD_NC4_X2(TPFIELD,PZCDF,PFIELD,KRESP,KVERTLEVEL) +SUBROUTINE IO_WRITE_FIELD_NC4_X2(TPFILE,TPFIELD,PZCDF,PFIELD,KRESP,KVERTLEVEL) ! USE MODD_FM, ONLY : FMHEADER ! +TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD TYPE(IOCDF), POINTER :: PZCDF REAL,DIMENSION(:,:), INTENT(IN) :: PFIELD ! array containing the data field @@ -575,7 +577,7 @@ ELSE ENDIF ! Get the Netcdf file ID -INCID = PZCDF%NCID +INCID = TPFILE%NNCID ! NetCDF var names can't contain '%' nor '.' YVARNAME = str_replace(YVARNAME, '%', '__') @@ -647,10 +649,11 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX3[NF90_PUT_VAR KRESP = IRESP END SUBROUTINE NCWRITX3 -SUBROUTINE IO_WRITE_FIELD_NC4_X3(TPFIELD,PZCDF,PFIELD,KRESP) +SUBROUTINE IO_WRITE_FIELD_NC4_X3(TPFILE,TPFIELD,PZCDF,PFIELD,KRESP) ! USE MODD_FM, ONLY : FMHEADER ! +TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD TYPE(IOCDF), POINTER :: PZCDF REAL,DIMENSION(:,:,:), INTENT(IN) :: PFIELD ! array containing the data field @@ -665,7 +668,7 @@ INTEGER :: IRESP ! IRESP = 0 ! Get the Netcdf file ID -INCID = PZCDF%NCID +INCID = TPFILE%NNCID ! NetCDF var names can't contain '%' nor '.' YVARNAME = str_replace(TPFIELD%CMNHNAME, '%', '__') @@ -889,7 +892,7 @@ IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(PZCDF%DIMZ)) PZCDF%DIMZ=>GETDIMCDF KRESP = IRESP END SUBROUTINE NCWRITN0 -SUBROUTINE IO_WRITE_FIELD_NC4_N0(TPFIELD,PZCDF,KFIELD,KRESP) +SUBROUTINE IO_WRITE_FIELD_NC4_N0(TPFILE,TPFIELD,PZCDF,KFIELD,KRESP) ! USE MODD_FM, ONLY : FMHEADER USE MODD_PARAMETERS_ll, ONLY : JPVEXT @@ -898,6 +901,7 @@ USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT USE MODD_IO_ll, ONLY : LPACK,L1D,L2D #endif ! +TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD TYPE(IOCDF), POINTER :: PZCDF INTEGER, INTENT(IN) :: KFIELD @@ -911,7 +915,7 @@ INTEGER :: IRESP ! IRESP = 0 ! Get the Netcdf file ID -INCID = PZCDF%NCID +INCID = TPFILE%NNCID ! NetCDF var names can't contain '%' nor '.' YVARNAME = str_replace(TPFIELD%CMNHNAME, '%', '__') @@ -1103,10 +1107,11 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITC0[NF90_PUT_VAR KRESP = IRESP END SUBROUTINE NCWRITC0 -SUBROUTINE IO_WRITE_FIELD_NC4_C0(TPFIELD,PZCDF,HFIELD,KRESP) +SUBROUTINE IO_WRITE_FIELD_NC4_C0(TPFILE,TPFIELD,PZCDF,HFIELD,KRESP) ! USE MODD_FM, ONLY : FMHEADER ! +TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD TYPE(IOCDF), POINTER :: PZCDF CHARACTER(LEN=*), INTENT(IN) :: HFIELD @@ -1131,7 +1136,7 @@ IF (MOD(ILEN,IMULT)/=0) PRINT *,'ERROR: IO_WRITE_FIELD_NC4_C0: ILEN is not a mul IF (ILEN==0) ILEN = IMULT ! Get the Netcdf file ID -INCID = PZCDF%NCID +INCID = TPFILE%NNCID ! NetCDF var names can't contain '%' nor '.' YVARNAME = str_replace(TPFIELD%CMNHNAME, '%', '__')