diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 index 238b603567a3d855ed2a043d74ca74fc28f45dfa..ec999a10b96ea86a8a5daa4b24cd1419bdbd3ffd 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 @@ -194,7 +194,7 @@ end if end subroutine IO_Field_header_split_write_nc4 -SUBROUTINE IO_Field_attr_write_nc4( TPFILE, TPFIELD, KVARID, OEXISTED, KSHAPE, HCALENDAR, OISCOORD, KBOXID ) +SUBROUTINE IO_Field_attr_write_nc4( TPFILE, TPFIELD, KVARID, OEXISTED, KSHAPE, HCALENDAR, OISCOORD, KBOXID, KVERTLEVEL ) ! USE MODD_CONF, ONLY: CPROGRAM, LCARTESIAN USE MODD_CONF_n, ONLY: CSTORAGE_TYPE @@ -208,6 +208,7 @@ INTEGER(KIND=CDFINT), DIMENSION(:), OPTIONAL, INTENT(IN) :: KSHAPE CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HCALENDAR LOGICAL, OPTIONAL, INTENT(IN) :: OISCOORD ! Is a coordinate variable (->do not write coordinates attribute) INTEGER, OPTIONAL, INTENT(IN) :: KBOXID +INTEGER, OPTIONAL, INTENT(IN) :: KVERTLEVEL ! Vertical level ! CHARACTER(LEN=:), ALLOCATABLE :: YCOORDS INTEGER(KIND=CDFINT) :: INCID @@ -278,6 +279,13 @@ ELSE IF (TPFIELD%NGRID>0) THEN //trim(TPFIELD%CMNHNAME)) ENDIF ! +IF ( PRESENT( KVERTLEVEL ) ) THEN + ! LEVEL attribute definition + istatus = NF90_PUT_ATT( INCID, KVARID, 'level', KVERTLEVEL ) + IF ( istatus /= NF90_NOERR ) CALL IO_Err_handle_nc4( istatus, 'IO_Field_attr_write_nc4', 'NF90_PUT_ATT', 'level for ' & + // trim(TPFIELD%CMNHNAME) ) +END IF +! ! COMMENT attribute definition IF(LEN_TRIM(TPFIELD%CCOMMENT)==0) THEN CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%CCOMMENT not set for variable '//TRIM(TPFIELD%CMNHNAME)) @@ -417,7 +425,7 @@ ENDIF END SUBROUTINE IO_Field_attr_write_nc4 -subroutine IO_Field_create_nc4( tpfile, tpfield, kshape, hcalendar, oiscoord, kboxid, kvarid, oisempty ) +subroutine IO_Field_create_nc4( tpfile, tpfield, kshape, hcalendar, oiscoord, kboxid, kvertlevel, kvarid, oisempty ) use modd_field, only: NMNHDIM_TIME, TYPECHAR, TYPEDATE, TYPEINT, TYPELOG, TYPEREAL, TYPEUNDEF use modd_precision, only: MNHINT_NF90, MNHREAL_NF90 @@ -428,6 +436,7 @@ integer, dimension(:), intent(in), optional :: kshape character(len=*), intent(in), optional :: hcalendar logical, intent(in), optional :: oiscoord ! Is a coordinate variable (->do not write coordinates attribute) integer, intent(in), optional :: kboxid +integer, intent(in), optional :: kvertlevel integer(kind=CDFINT), intent(out), optional :: kvarid logical, intent(out), optional :: oisempty @@ -578,7 +587,7 @@ end if ! Write metadata call IO_Field_attr_write_nc4( tpfile, tpfield, ivarid, gexisted, kshape = ishape, hcalendar = hcalendar, & - oiscoord = oiscoord, kboxid = kboxid ) + oiscoord = oiscoord, kboxid = kboxid, kvertlevel = kvertlevel ) if ( Present( kvarid ) ) kvarid = ivarid @@ -660,7 +669,7 @@ call IO_Select_split_file( tpfile, tpfield, tzfile, tzfield, kvertlevel, kzfile CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X2',TRIM(TZFILE%CNAME)//': writing '//TRIM(TZFIELD%CMNHNAME)) ! call IO_Field_create_nc4( tzfile, tzfield, kshape = Shape( pfield ), oiscoord = oiscoord, kboxid = kboxid, & - kvarid = ivarid, oisempty = gisempty ) + kvertlevel = kvertlevel, kvarid = ivarid, oisempty = gisempty ) ! Write the data if ( .not. gisempty ) then