diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90 index b568776033d9afe2136a47d2b88a1c9e3538d74d..5e00f6622164ffb80876f044a18198c0c7833d8c 100644 --- a/src/LIB/SURCOUCHE/src/fmread_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90 @@ -629,6 +629,9 @@ IF (IRESP==0) THEN TZFIELD = TPFIELD WRITE(YSUFFIX,'(I4.4)') JKK TZFIELD%CMNHNAME = TRIM(TPFIELD%CMNHNAME)//TRIM(YSUFFIX) + IF (LEN_TRIM(TZFIELD%CSTDNAME)>0) TZFIELD%CSTDNAME = TRIM(TZFIELD%CSTDNAME)//'_at_level_'//YSUFFIX + IF (LEN_TRIM(TZFIELD%CLONGNAME)>0) TZFIELD%CLONGNAME = TRIM(TZFIELD%CLONGNAME)//' at level '//YSUFFIX + TZFIELD%NDIMS = 2 ! IK_RANK = TZFILE%NMASTER_RANK ! @@ -688,6 +691,9 @@ IF (IRESP==0) THEN TZFIELD = TPFIELD WRITE(YSUFFIX,'(I4.4)') JKK TZFIELD%CMNHNAME = TRIM(TPFIELD%CMNHNAME)//TRIM(YSUFFIX) + IF (LEN_TRIM(TZFIELD%CSTDNAME)>0) TZFIELD%CSTDNAME = TRIM(TZFIELD%CSTDNAME)//'_at_level_'//YSUFFIX + IF (LEN_TRIM(TZFIELD%CLONGNAME)>0) TZFIELD%CLONGNAME = TRIM(TZFIELD%CLONGNAME)//' at level '//YSUFFIX + TZFIELD%NDIMS = 2 ELSE TZFILE => TPFILE TZFIELD = TPFIELD diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index a83f493351c6e3cf6a49426323526efec5adc619..6f2588b1149edea6743ed12103d007a361ed7982 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -816,6 +816,9 @@ CONTAINS ! TZFILE => NULL() ! + ZSLICE => NULL() + ZSLICE_ll => NULL() + ! YFILEM = TPFILE%CNAME YRECFM = TPFIELD%CMNHNAME YDIR = TPFIELD%CDIR diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index 362b5c49cfe7fc5857dd8a05725eb81195cff742..d7d27962efd4d863cae4ad093c1fc14b2ee5f3cb 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -631,7 +631,7 @@ CONTAINS WRITE(CFILE ,'(".Z",i3.3)') IFILE YFILE_IOZ = TRIM(TPFILE%CNAME)//CFILE//".lfi" - CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(CFILE),TZSPLITFILE,IRESP,OOLD=.FALSE.) + CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(CFILE),TZSPLITFILE,IRESP) IF (IRESP/=0) THEN !File not yet in filelist => add it (nothing to do if already in list) CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(CFILE),TPFILE%CTYPE,TPFILE%CMODE, & diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 8ed0d895bd9589b3e0a890cf1f136f5fd3141e55..4e75349f05b74e0bf0fded0418b5696887bebc49 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -880,18 +880,16 @@ GETSTRDIMID = TMP%ID END FUNCTION GETSTRDIMID -SUBROUTINE FILLVDIMS(TPFILE, TPFIELD, KSHAPE, KVDIMS, OSPLIT) +SUBROUTINE FILLVDIMS(TPFILE, TPFIELD, KSHAPE, KVDIMS) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(IN) :: KSHAPE INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(OUT) :: KVDIMS -LOGICAL, OPTIONAL, INTENT(IN) :: OSPLIT ! INTEGER :: IGRID INTEGER :: JI CHARACTER(LEN=32) :: YINT CHARACTER(LEN=2) :: YDIR -LOGICAL :: GSPLIT TYPE(DIMCDF), POINTER :: PTDIM ! CALL PRINT_MSG(NVERB_DEBUG,'IO','FILLVDIMS','called for '//TRIM(TPFIELD%CMNHNAME)) @@ -901,21 +899,10 @@ IF (SIZE(KSHAPE) < 1) CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','empty KSHAPE' IGRID = TPFIELD%NGRID YDIR = TPFIELD%CDIR ! -GSPLIT = .FALSE. -IF (PRESENT(OSPLIT)) GSPLIT = OSPLIT -! -IF (GSPLIT) THEN - IF(SIZE(KSHAPE)/=(TPFIELD%NDIMS-1)) THEN - WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS-1 - CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS-1 ('//TRIM(YINT)//') for field ' & - //TRIM(TPFIELD%CMNHNAME)) - END IF -ELSE - IF(SIZE(KSHAPE)/=TPFIELD%NDIMS) THEN - WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS - CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS ('//TRIM(YINT)//') for field ' & - //TRIM(TPFIELD%CMNHNAME)) - END IF +IF(SIZE(KSHAPE)/=TPFIELD%NDIMS) THEN + WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS + CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS ('//TRIM(YINT)//') for field ' & + //TRIM(TPFIELD%CMNHNAME)) END IF ! IF(IGRID<0 .OR. IGRID>8) THEN @@ -1078,16 +1065,15 @@ LOGICAL,OPTIONAL, INTENT(IN) :: OISCOORD ! Is a coordinate variable (->do INTEGER(KIND=IDCDF_KIND) :: STATUS INTEGER(KIND=IDCDF_KIND) :: INCID CHARACTER(LEN=4) :: YSUFFIX -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YTMP,YVARNAME +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME INTEGER(KIND=IDCDF_KIND) :: IVARID INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS INTEGER :: IRESP -LOGICAL :: GSPLIT +TYPE(TFIELDDATA) :: TZFIELD TYPE(TFILEDATA),POINTER :: TZFILE LOGICAL :: GEXISTED !True if variable was already defined ! IRESP = 0 -GSPLIT = .FALSE. ! IF (PRESENT(KVERTLEVEL)) THEN WRITE(YSUFFIX,'(I4.4)') KVERTLEVEL @@ -1095,23 +1081,26 @@ IF (PRESENT(KVERTLEVEL)) THEN CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_NC4_X2','KZFILE argument not provided') RETURN END IF - YTMP = TRIM(TPFIELD%CMNHNAME)//YSUFFIX IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_NC4_X2','KZFILE value too high') TZFILE => TPFILE%TFILES_IOZ(KZFILE)%TFILE - GSPLIT = .TRUE. + TZFIELD = TPFIELD + TZFIELD%CMNHNAME = TRIM(TZFIELD%CMNHNAME)//YSUFFIX + IF (LEN_TRIM(TZFIELD%CSTDNAME)>0) TZFIELD%CSTDNAME = TRIM(TZFIELD%CSTDNAME)//'_at_level_'//YSUFFIX + IF (LEN_TRIM(TZFIELD%CLONGNAME)>0) TZFIELD%CLONGNAME = TRIM(TZFIELD%CLONGNAME)//' at level '//YSUFFIX + TZFIELD%NDIMS = 2 ELSE - YTMP = TRIM(TPFIELD%CMNHNAME) TZFILE => TPFILE + TZFIELD = TPFIELD ENDIF ! -CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': writing '//TRIM(YTMP)) +CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TZFILE%CNAME)//': writing '//TRIM(TZFIELD%CMNHNAME)) ! ! Get the Netcdf file ID INCID = TZFILE%NNCID ! GEXISTED = .FALSE. ! -CALL CLEANMNHNAME(YTMP,YVARNAME) +CALL CLEANMNHNAME(TZFIELD%CMNHNAME,YVARNAME) ! The variable should not already exist but who knows ? STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) @@ -1123,7 +1112,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS, GSPLIT) + CALL FILLVDIMS(TZFILE, TZFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable IF (TZFILE%LNCREDUCE_FLOAT_PRECISION) THEN @@ -1139,14 +1128,14 @@ IF (STATUS /= NF90_NOERR) THEN END IF ELSE GEXISTED = .TRUE. - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TZFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') END IF ! Write metadata -CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD) +CALL IO_WRITE_FIELD_ATTR_NC4(TZFILE,TZFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2[NF90_PUT_VAR] '//TRIM(TZFIELD%CMNHNAME),IRESP) KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_X2