diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90 index 97cea1c4e5a0094153635d6bf2cbf9033df904a5..42697f4b798307a3beb99d78dbfab41e895575bf 100644 --- a/src/MNH/write_diachro.f90 +++ b/src/MNH/write_diachro.f90 @@ -667,6 +667,7 @@ integer(kind=CDFINT) :: idimid integer(kind=CDFINT) :: igrpid integer(kind=CDFINT) :: istatus logical :: gdistributed +logical :: ggroupdefined logical :: gsplit type(tfielddata) :: tzfield type(tfiledata) :: tzfile @@ -715,9 +716,14 @@ else end if MASTER: if ( isp == tzfile%nmaster_rank) then + ggroupdefined = .false. + istatus = NF90_INQ_NCID( tzfile%nncid, trim( hgroup ), igrpid ) if ( istatus == NF90_NOERR ) then - call Print_msg( NVERB_WARNING, 'IO', 'Write_diachro_nc4', trim(tzfile%cname)//': group '//trim(hgroup)//' already defined' ) + ggroupdefined = .true. + if ( .not. gsplit ) then + call Print_msg( NVERB_WARNING, 'IO', 'Write_diachro_nc4', trim(tzfile%cname)//': group '//trim(hgroup)//' already defined' ) + end if else istatus = NF90_DEF_GRP( tzfile%nncid, trim( hgroup ), igrpid ) if ( istatus /= NF90_NOERR ) & @@ -728,50 +734,52 @@ MASTER: if ( isp == tzfile%nmaster_rank) then isavencid = tzfile%nncid tzfile%nncid = igrpid - istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'type', trim( htype ) ) - if (istatus /= NF90_NOERR ) & - call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'type for '//trim(hgroup)//' group' ) - - if ( trim ( htype ) == 'CART' .or. trim ( htype ) == 'MASK' .or. trim ( htype ) == 'SPXY') then - istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'min x index', kil ) + if ( .not. ggroupdefined ) then + istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'type', trim( htype ) ) if (istatus /= NF90_NOERR ) & - call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'min x index for '//trim(hgroup)//' group' ) + call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'type for '//trim(hgroup)//' group' ) - istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'max x index', kih ) - if (istatus /= NF90_NOERR ) & - call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'max x index for '//trim(hgroup)//' group' ) + if ( trim ( htype ) == 'CART' .or. trim ( htype ) == 'MASK' .or. trim ( htype ) == 'SPXY') then + istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'min x index', kil ) + if (istatus /= NF90_NOERR ) & + call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'min x index for '//trim(hgroup)//' group' ) - istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'min y index', kjl ) - if (istatus /= NF90_NOERR ) & - call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'min y index for '//trim(hgroup)//' group' ) + istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'max x index', kih ) + if (istatus /= NF90_NOERR ) & + call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'max x index for '//trim(hgroup)//' group' ) - istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'max y index', kjh ) - if (istatus /= NF90_NOERR ) & - call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'max y index for '//trim(hgroup)//' group' ) + istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'min y index', kjl ) + if (istatus /= NF90_NOERR ) & + call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'min y index for '//trim(hgroup)//' group' ) - istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'min z index', kkl ) - if (istatus /= NF90_NOERR ) & - call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'min z index for '//trim(hgroup)//' group' ) + istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'max y index', kjh ) + if (istatus /= NF90_NOERR ) & + call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'max y index for '//trim(hgroup)//' group' ) - istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'max z index', kkh ) - if (istatus /= NF90_NOERR ) & - call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'max z index for '//trim(hgroup)//' group' ) - end if + istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'min z index', kkl ) + if (istatus /= NF90_NOERR ) & + call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'min z index for '//trim(hgroup)//' group' ) - if ( trim ( htype ) == 'CART' ) then - istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'averaged on x dimension', icompx ) - if (istatus /= NF90_NOERR ) & - call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'averaged on x dimension '//trim(hgroup)//' group' ) + istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'max z index', kkh ) + if (istatus /= NF90_NOERR ) & + call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'max z index for '//trim(hgroup)//' group' ) + end if - istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'averaged on y dimension', icompy ) - if (istatus /= NF90_NOERR ) & - call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'averaged on y dimension '//trim(hgroup)//' group' ) - end if + if ( trim ( htype ) == 'CART' ) then + istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'averaged on x dimension', icompx ) + if (istatus /= NF90_NOERR ) & + call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'averaged on x dimension '//trim(hgroup)//' group' ) - if ( trim ( htype ) == 'CART' .or. trim ( htype ) == 'MASK' .or. trim ( htype ) == 'SPXY') then - istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'averaged on z dimension', icompz ) - if (istatus /= NF90_NOERR ) & - call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'averaged on z dimension '//trim(hgroup)//' group' ) + istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'averaged on y dimension', icompy ) + if (istatus /= NF90_NOERR ) & + call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'averaged on y dimension '//trim(hgroup)//' group' ) + end if + + if ( trim ( htype ) == 'CART' .or. trim ( htype ) == 'MASK' .or. trim ( htype ) == 'SPXY') then + istatus = NF90_PUT_ATT( igrpid, NF90_GLOBAL, 'averaged on z dimension', icompz ) + if (istatus /= NF90_NOERR ) & + call IO_Err_handle_nc4( istatus, 'Write_diachro_nc4', 'NF90_PUT_ATT', 'averaged on z dimension '//trim(hgroup)//' group' ) + end if end if end if MASTER