text:
!------------------------------------------------------------------------------------------
! File:   HMC_Module_Data_Output_Gridded.f90
! Author(s): Fabio Delogu, Francesco Silvestro, Simone Gabellani
!
! Created on May 6, 2015, 4:36 PM
!------------------------------------------------------------------------------------------

!------------------------------------------------------------------------------------------
! Module Header
module HMC_Module_Data_Output_Gridded

    !------------------------------------------------------------------------------------------
    ! External module(s) for all subroutine in this module
#ifdef LIB_NC
    use netcdf
#endif

    use HMC_Module_Namelist,        only:   oHMC_Namelist
    use HMC_Module_Vars_Loader,     only:   oHMC_Vars

#ifdef LIB_NC
    use HMC_Module_Tools_IO,        only:   HMC_Tools_IO_Put2d_Binary_INT, &
                                            HMC_Tools_IO_Put2d_Binary_DBL, &
                                            HMC_Tools_IO_Put3d_Binary, &
                                            HMC_Tools_IO_Put2d_NC, &
                                            HMC_Tools_IO_Put3d_NC, &
                                            HMC_Tools_IO_PutTime_DBL_NC, &
                                            HMC_Tools_IO_PutTime_STR_NC, &
                                            check
#else
    use HMC_Module_Tools_IO,        only:   HMC_Tools_IO_Put2d_Binary_INT, &
                                            HMC_Tools_IO_Put2d_Binary_DBL, &
                                            HMC_Tools_IO_Put3d_Binary

#endif

    use HMC_Module_Tools_Debug
    use HMC_Module_Tools_Generic,   only:   HMC_Tools_Generic_ReplaceText, &
                                            HMC_Tools_Generic_CreateFolder, &
                                            HMC_Tools_Generic_ZipFile, &
                                            HMC_Tools_Generic_RemoveFile, &
                                            transpose3Dvar

    use HMC_Module_Tools_Time,      only:   HMC_Tools_Time_DateDiff

    ! Implicit none for all subroutines in this module
    implicit none
    !------------------------------------------------------------------------------------------

contains

    !------------------------------------------------------------------------------------------
    ! Subroutine to manage output gridded data
    subroutine HMC_Data_Output_Gridded_Cpl( iID, sTime, &
                                            iRowsStart, iRowsEnd, iColsStart, iColsEnd, &
                                            iTime, iDaySteps)

        !------------------------------------------------------------------------------------------
        ! Variable(s)
        integer(kind = 4)           :: iID
        integer(kind = 4)           :: iRows, iCols
        integer(kind = 4)           :: iRowsStart, iRowsEnd, iColsStart, iColsEnd
        integer(kind = 4)           :: iTime, iDaySteps

        integer(kind = 4)           :: iActData_Generic, iActData_Flooding, iActData_Snow
        integer(kind = 4)           :: iAccumData_Hour, iStepData_Hour

        integer(kind = 4)           :: iFlagTypeData_Output, iFlagSnow, iFlagFlood
        integer(kind = 4)           :: iScaleFactor

        character(len = 19)         :: sTime
        character(len = 700)        :: sPathData_Output
        character(len = 700)        :: sCommandCreateFolder

        real(kind = 4), dimension(iRowsEnd - iRowsStart + 1, iColsEnd - iColsStart + 1)     ::  a2dVarDEM, a2dVarS

        real(kind = 4), dimension(iRowsEnd - iRowsStart + 1, &
                                  iColsEnd - iColsStart + 1)     ::  a2dVarRain
        real(kind = 4), dimension(iRowsEnd - iRowsStart + 1, &
                                  iColsEnd - iColsStart + 1)     ::  a2dVarLST, &
                                                                     a2dVarH, a2dVarLE, &
                                                                     a2dVarETCum, a2dVarVTot, &
                                                                     a2dVarETPotCum, a2dVarET, a2dVarETPot, &
                                                                     a2dVarQout, &
                                                                     a2dVarSM, &
                                                                     a2dVarQfloodCR, &
                                                                     a2dVarQfloodCL, &
                                                                     a2dVarLat, a2dVarLon

        real(kind = 4), dimension(iRowsEnd - iRowsStart + 1, &
                          iColsEnd - iColsStart + 1)             ::  a2dVarWSRunoff, a2dVarWDL

        integer(kind = 4), dimension(iRowsEnd - iRowsStart + 1, &
                                     iColsEnd - iColsStart + 1)  ::  a2iVarAgeS
        real(kind = 4), dimension(iRowsEnd - iRowsStart + 1, &
                                  iColsEnd - iColsStart + 1)     ::  a2dVarSWE, &
                                                                     a2dVarMeltingS, a2dVarAlbedoS, &
                                                                     a2dVarRhoS, a2dVarMeltingSDayCum, &
                                                                     a2dVarSnowFall, a2dVarSnowMask
        real(kind = 4), dimension(iRowsEnd - iRowsStart + 1, &
                                  iColsEnd - iColsStart + 1, iDaySteps) :: a3dVarET, a3dVarETpot

        real(kind = 4), dimension(iRowsEnd - iRowsStart + 1, &
                                  iColsEnd - iColsStart + 1, iDaySteps) :: a3dVarMeltingS
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Initialize variable(s)
        a2dVarDEM = 0.0; a2dVarS = 0.0; a2dVarLat = 0.0; a2dVarLon = 0.0

        a2dVarRain = 0.0
        a2dVarLST = 0.0; a2dVarH = 0.0; a2dVarLE = 0.0;
        a2dVarET = 0.0; a2dVarETCum = 0.0; a2dVarETPotCum = 0.0;
        a2dVarVTot = 0.0; a2dVarQout = 0.0; a2dVarSM = 0.0

        a2dVarSWE = 0.0; a2iVarAgeS = 0; a2dVarMeltingS = 0.0; a2dVarAlbedoS = 0.0; a2dVarRhoS = 0.0;

        a2dVarQfloodCR = 0.0; a2dVarQfloodCL = 0.0;

        a3dVarET = 0.0; a3dVarETpot = 0.0
        a3dVarMeltingS = 0.0

        a2dVarWSRunoff = 0.0; a2dVarWDL = 0.0

        sCommandCreateFolder = ""
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Defining iRows and iCols (output data)
        iRows = iRowsEnd - iRowsStart + 1
        iCols = iColsEnd - iColsStart + 1
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Get global information
        sPathData_Output = oHMC_Namelist(iID)%sPathData_Output_Gridded
        iFlagTypeData_Output = oHMC_Namelist(iID)%iFlagTypeData_Output_Gridded
        iScaleFactor = oHMC_Namelist(iID)%iScaleFactor
        sCommandCreateFolder = oHMC_Namelist(iID)%sCommandCreateFolder
        iFlagSnow = oHMC_Namelist(iID)%iFlagSnow
        iDaySteps = oHMC_Namelist(iID)%iDaySteps
        iFlagFlood = oHMC_Namelist(iID)%iFlagFlood

        iActData_Generic = oHMC_Namelist(iID)%iActiveData_Output_Generic
        iActData_Flooding = oHMC_Namelist(iID)%iActiveData_Output_Flooding
        iActData_Snow = oHMC_Namelist(iID)%iActiveData_Output_Snow

        iAccumData_Hour = oHMC_Namelist(iID)%iAccumData_Output_Hour

        ! Info start
        call mprintf(.true., iINFO_Extra, ' Data :: Output gridded ... ' )
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Replace general path with specific time feature(s)
        call HMC_Tools_Generic_ReplaceText(sPathData_Output, '$yyyy', sTime(1:4))
        call HMC_Tools_Generic_ReplaceText(sPathData_Output, '$mm', sTime(6:7))
        call HMC_Tools_Generic_ReplaceText(sPathData_Output, '$dd', sTime(9:10))
        call HMC_Tools_Generic_ReplaceText(sPathData_Output, '$HH', sTime(12:13))
        call HMC_Tools_Generic_ReplaceText(sPathData_Output, '$MM', sTime(15:16))
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Create output folder
        call HMC_Tools_Generic_CreateFolder(sCommandCreateFolder, sPathData_Output, .true.)
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Get variable(s) from global workspace (LSM and convolution physics)
        a2dVarRain = oHMC_Vars(iID)%a2dRain
        a2dVarLST = oHMC_Vars(iID)%a2dLST
        a2dVarH = oHMC_Vars(iID)%a2dH; a2dVarLE = oHMC_Vars(iID)%a2dLE;
        a2dVarVTot = oHMC_Vars(iID)%a2dVTot;

        a2dVarQout = oHMC_Vars(iID)%a2dQout;
        a2dVarQfloodCR = oHMC_Vars(iID)%a2dQfloodCR
        a2dVarQfloodCL = oHMC_Vars(iID)%a2dQfloodCL

        a2dVarET = oHMC_Vars(iID)%a2dAE
        a2dVarETpot = oHMC_Vars(iID)%a2dAEpot

        a3dVarET = oHMC_Vars(iID)%a3dAE
        a3dVarETpot = oHMC_Vars(iID)%a3dAEpot

        a2dVarDEM = oHMC_Vars(iID)%a2dDem; a2dVarS = oHMC_Vars(iID)%a2dS;
        a2dVarLat = oHMC_Vars(iID)%a2dLat; a2dVarLon = oHMC_Vars(iID)%a2dLon;

        read(sTime(12:13) , *) iStepData_Hour
        if( (iStepData_Hour .eq. iAccumData_Hour) .and. (iTime .ge. iDaySteps) ) then
            a2dVarETCum = sum(a3dVarET(:, :, 1:int(iDaySteps)), dim=3)
            a2dVarETPotCum = sum(a3dVarETPot(:, :, 1:int(iDaySteps)), dim=3)
        endif

        !set no valid cells as no data
        where (a2dVarDEM.le.0.0)
            a2dVarETCum = -9999.0
            a2dVarETPotCum = -9999.0
        endwhere

        ! Compute derived information
        where (a2dVarDEM.gt.0.0)
            a2dVarSM = a2dVarVTot/a2dVarS
        elsewhere
            a2dVarSM = -9999.0
        endwhere

        a2dVarWSRunoff = oHMC_Vars(iID)%a2dWSRunoff
        a2dVarWDL = oHMC_Vars(iID)%a2dWDL

        ! Get variable(s) from global workspace (snow physics)
        if (iFlagSnow.eq.1) then
            a2dVarSWE = oHMC_Vars(iID)%a2dSWE
            a2iVarAgeS = oHMC_Vars(iID)%a2iAge
            a2dVarMeltingS = oHMC_Vars(iID)%a2dMelting

            a3dVarMeltingS = oHMC_Vars(iID)%a3dMelting
            !a2dVarMeltingSDayCum = oHMC_Vars(iID)%a2dMeltingDayCum
            a2dVarAlbedoS = oHMC_Vars(iID)%a2dAlbedo_Snow
            a2dVarRhoS = oHMC_Vars(iID)%a2dRhoS
            a2dVarSnowFall = oHMC_Vars(iID)%a2dSnowFall

            a2dVarSnowMask = oHMC_Vars(iID)%a2dMaskS

            if( (iStepData_Hour .eq. iAccumData_Hour) .and. (iTime .ge. iDaySteps) ) then
                a2dVarMeltingSDayCum = sum(a3dVarMeltingS(:, :, 1:int(iDaySteps)), dim=3)
            endif

        else
            a2iVarAgeS = -9999
            a2dVarSWE = -9999.0; a2dVarAlbedoS = -9999.0; a2dVarRhoS = -9999.0
            a2dVarMeltingS = -9999.0; a2dVarMeltingSDayCum = -9999.0; a2dVarSnowFall = -9999.0
            a2dVarSnowMask = -9999.0
        endif
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Subroutine for writing sequential netCDF output data
        if (iFlagTypeData_Output == 2) then

            !------------------------------------------------------------------------------------------
            ! Call subroutine to write gridded data
#ifdef LIB_NC
            call HMC_Data_Output_Gridded_NC(iID, &
                                    sPathData_Output, &
                                    iRows, iCols, &
                                    iTime, sTime, iDaySteps, &
                                    iFlagSnow, &
                                    iFlagFlood, &
                                    iActData_Generic, iActData_Flooding, iActData_Snow, &
                                    iStepData_Hour, iAccumData_Hour, &
                                    a2dVarRain, &
                                    a2dVarLST, a2dVarH, a2dVarLE, &
                                    a2dVarETCum, a2dVarETPotCum, a2dVarET, a2dVarETpot, &
                                    a2dVarVTot, &
                                    a2dVarQout, a2dVarQfloodCR, a2dVarQfloodCL, &
                                    a2dVarSWE, a2iVarAgeS, a2dVarMeltingS, a2dVarMeltingSDayCum, &
                                    a2dVarAlbedoS, a2dVarRhoS, a2dVarSnowFall, a2dVarSnowMask, &
                                    a2dVarSM, &
                                    a2dVarWSRunoff, a2dVarWDL, &
                                    a2dVarLat, a2dVarLon)
#else
            ! Redefinition of output data flag (if netCDF library is not linked)
            iFlagTypeData_Output = 1
            call mprintf(.true., iWARN, ' '// &
                                        'Output gridded data type selected was netCDF but library is not linked! '// &
                                        'Will be used data in binary format!')
#endif
            !------------------------------------------------------------------------------------------

        endif
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Subroutine for writing sequential binary output data
        if (iFlagTypeData_Output == 1) then

            !------------------------------------------------------------------------------------------
            ! Call subroutine to read data
            call HMC_Data_Output_Gridded_Binary(iID, &
                                    sPathData_Output, &
                                    iRows, iCols, &
                                    iTime, sTime, iDaySteps, &
                                    iFlagSnow, iFlagFlood, &
                                    iActData_Generic, iActData_Flooding, iActData_Snow, &
                                    iStepData_Hour, iAccumData_Hour, &
                                    iScaleFactor, &
                                    a2dVarRain, &
                                    a2dVarLST, a2dVarH, a2dVarLE, &
                                    a2dVarETCum, a2dVarETPotCum, a2dVarET, a2dVarETpot, &
                                    a2dVarVTot, a2dVarQout, a2dVarQfloodCR, a2dVarQfloodCL, &
                                    a2dVarSWE, a2iVarAgeS, a2dVarMeltingS, a2dVarMeltingSDayCum, &
                                    a2dVarAlbedoS, a2dVarRhoS, a2dVarSnowFall, a2dVarSnowMask, &
                                    a2dVarSM, &
                                    a2dVarWSRunoff, a2dVarWDL, &
                                    a2dVarLat, a2dVarLon)

            !------------------------------------------------------------------------------------------

        endif
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Info end
        call mprintf(.true., iINFO_Extra, ' Data :: Output gridded ... OK' )
        !------------------------------------------------------------------------------------------

    end subroutine HMC_Data_Output_Gridded_Cpl
    !------------------------------------------------------------------------------------------

    !------------------------------------------------------------------------------------------
    ! Subroutine to write netCDF gridded data output
#ifdef LIB_NC
    subroutine HMC_Data_Output_Gridded_NC(iID,  &
                                          sPathData_Output, &
                                          iRows, iCols, &
                                          iTime, sTime, iDaySteps, &
                                          iFlagSnow, &
                                          iFlagFlood, &
                                          iActData_Generic, iActData_Flooding, iActData_Snow, &
                                          iStepData_Hour, iAccumData_Hour, &
                                          a2dVarRain, &
                                          a2dVarLST, a2dVarH, a2dVarLE, &
                                          a2dVarETCum, a2dVarETPotCum, a2dVarET, a2dVarETpot, &
                                          a2dVarVTot, &
                                          a2dVarQout, a2dVarQfloodCR, a2dVarQfloodCL, &
                                          a2dVarSWE, a2iVarAgeS, a2dVarMeltingS, a2dVarMeltingSDayCum, &
                                          a2dVarAlbedoS, a2dVarRhoS, a2dVarSnowFall, a2dVarSnowMask, &
                                          a2dVarSM, &
                                          a2dVarWSRunoff, a2dVarWDL, &
                                          a2dVarLat, a2dVarLon)

        !------------------------------------------------------------------------------------------
        ! Variable(s)
        integer(kind = 4)                       :: iID

        character(len = 700), intent(in)        :: sPathData_Output
        character(len = 700)                    :: sFileNameData_Output
        character(len = 700)                    :: sCommandZipFile
        character(len = 256)                    :: sVarName, sVarNameLong
        character(len = 256)                    :: sVarGridMap, sVarDescription, sVarCoords
        character(len = 256)                    :: sVarUnits
        integer(kind = 4), intent(in)           :: iRows, iCols

        integer(kind = 4)                       :: iTime, iDaySteps, iTimeStep
        character(len = 19)                     :: sTime, sTimeSave, sTimeRef

        integer(kind = 4)                       :: iFlagSnow, iFlagFlood
        integer(kind = 4)                       :: iActData_Generic, iActData_Flooding, iActData_Snow
        integer(kind = 4)                       :: iStepData_Hour, iAccumData_Hour

        real(kind = 4)                          :: dVarMissingValue, dScale_Factor
        real(kind = 4)                          :: dVarXLLCorner, dVarYLLCorner
        real(kind = 4)                          :: dVarCellSizeX, dVarCellSizeY

        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarRain
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarLST
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarH
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarLE
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarETCum
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarETPotCum
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarET
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarETPot

        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarVTot
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarQout
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarQfloodCR, a2dVarQfloodCL

        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarLat
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarLon
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarSM
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarWSRunoff, a2dVarWDL

        integer(kind = 4), dimension(iRows, iCols), intent(in)      :: a2iVarAgeS
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarSWE
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarMeltingS
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarMeltingSDayCum
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarAlbedoS
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarRhoS
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarSnowFall
        real(kind = 4), dimension(iRows, iCols), intent(in)         :: a2dVarSnowMask

        integer(kind = 4)       :: iErr

        integer(kind = 4)       :: iFileID
        integer(kind = 4)       :: iID_Dim_Rows, iID_Dim_Cols, iID_Dim_Time_DBL, iID_Dim_Time_STR
        integer(kind = 4)       :: iID_Dim_Day1Steps

        real(kind = 8)          :: dTimeHours_Diff, dTimeSeconds_Diff
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Initialize variable(s)
        sCommandZipFile = ""
        sTimeRef = '1970-01-01_00:00:00'
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Get information from global workspace
        sCommandZipFile = oHMC_Namelist(iID)%sCommandZipFile

        dVarXLLCorner = oHMC_Namelist(iID)%dXLLCornerL
        dVarYLLCorner = oHMC_Namelist(iID)%dYLLCornerL
        dVarCellSizeX = oHMC_Namelist(iID)%dXCellSizeL
        dVarCellSizeY = oHMC_Namelist(iID)%dYCellSizeL
        !dVarMissingValue = oHMC_Namelist(iID)%dNoDataL

        ! Info start
        call mprintf(.true., iINFO_Extra, ' Data :: Output gridded :: NetCDF ... ' )
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Define elapsed hours from reference date
        call HMC_Tools_Time_DateDiff(sTime, sTimeRef, dTimeSeconds_Diff, dTimeHours_Diff)
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Filename output (example: hmc.outputdata.201404300000.nc)
        sFileNameData_Output = trim(sPathData_Output)//"hmc.output-grid."// &
        sTime(1:4)//sTime(6:7)//sTime(9:10)// &
        sTime(12:13)//sTime(15:16)// &
        ".nc"

        ! Info netCDF filename
        call mprintf(.true., iINFO_Verbose, ' Save filename (result gridded): '//trim(sFileNameData_Output)//' ... ')
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Create netcdf file
        call check( nf90_create(trim(sFileNameData_Output), NF90_NETCDF4, iFileID) )

        ! Dimension(s)
        call check( nf90_def_dim(iFileID, "time", 1, iID_Dim_Time_DBL) )
        call check( nf90_def_dim(iFileID, "time_str_length", 19, iID_Dim_Time_STR) )
        call check( nf90_def_dim(iFileID, "south_north", iRows, iID_Dim_Rows) )
        call check( nf90_def_dim(iFileID, "west_east", iCols, iID_Dim_Cols) )
        call check( nf90_def_dim(iFileID, "day1_steps", iDaySteps, iID_Dim_Day1Steps) )
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Global attribute(s)
        sTimeSave(1:len_trim(sTime)) = sTime
        call check( nf90_put_att(iFileID, NF90_GLOBAL, "time_coverage_end", sTimeSave) )
        call check( nf90_put_att(iFileID, NF90_GLOBAL, "xllcorner", dVarXLLCorner) )
        call check( nf90_put_att(iFileID, NF90_GLOBAL, "yllcorner", dVarYLLCorner) )
        call check( nf90_put_att(iFileID, NF90_GLOBAL, "xcellsize", dVarCellSizeX) )
        call check( nf90_put_att(iFileID, NF90_GLOBAL, "ycellsize", dVarCellSizeY) )
        call check( nf90_put_att(iFileID, NF90_GLOBAL, "nrows", iRows) )
        call check( nf90_put_att(iFileID, NF90_GLOBAL, "ncols", iCols) )
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Definition mode OFF - Data mode ON
        call check( nf90_enddef(iFileID))
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Writing time variable(s) in netcdf output file
        ! TIMES
        sVarName = 'times'; sVarNameLong = 'times definition of output datasets';
        sVarDescription = 'times';
        sVarUnits = 'time units';
        sVarCoords = ''; iTimeStep = 1
        call HMC_Tools_IO_PutTime_STR_NC(iFileID, iID_Dim_Time_STR, &
                             sVarName, sVarNameLong, sVarDescription, &
                             sVarUnits, sVarCoords, &
                             iTimeStep, sTimeSave)
        ! TIME
        sVarName = 'time'; sVarNameLong = 'time definition of output datasets';
        sVarDescription = 'synthesized time coordinate from Times(time)'; sVarUnits = 'secs since '//trim(sTimeRef);
        sVarCoords = 't'; iTimeStep = 1
        call HMC_Tools_IO_PutTime_DBL_NC(iFileID, iID_Dim_Time_DBL, &
                             sVarName, sVarNameLong, sVarDescription, &
                             sVarUnits, sVarCoords, &
                             iTimeStep, dTimeSeconds_Diff)
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Writing static variable(s) in netcdf output file
        ! LONGITUDE
        sVarName = 'Longitude'; sVarNameLong = 'longitude coordinate'; sVarDescription = 'longitude';
        sVarUnits = 'degree_east'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
        sVarCoords = '';
        call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                             sVarName, sVarNameLong, sVarDescription, &
                             sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                             iCols, iRows, transpose(a2dVarLon))
        ! LATITUDE
        sVarName = 'Latitude'; sVarNameLong = 'latitude coordinate'; sVarDescription = 'latitude';
        sVarUnits = 'degree_north'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
        sVarCoords = '';
        call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                             sVarName, sVarNameLong, sVarDescription, &
                             sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                             iCols, iRows, transpose(a2dVarLat))
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Writing dynamic variable(s) in netCDF output file

        ! BASIC DATASETS
        ! Soil Moisture
        sVarName = 'SM'; sVarNameLong = 'soil_moisture'; sVarDescription = 'soil moisture';
        sVarUnits = '-'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
        sVarCoords = 'Longitude Latitude';
        call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                             sVarName, sVarNameLong, sVarDescription, &
                             sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                             iCols, iRows, transpose(a2dVarSM))

        ! Qout (Distributed discharge values)
        sVarName = 'Discharge'; sVarNameLong = 'discharge'; sVarDescription = 'discharge';
        sVarUnits = 'm^3/s'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
        sVarCoords = 'Longitude Latitude';
        call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                             sVarName, sVarNameLong, sVarDescription, &
                             sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                             iCols, iRows, transpose(a2dVarQout))

        ! Actual Evapotranspiration
        sVarName = 'ET'; sVarNameLong = 'et';
        sVarDescription = 'actual evapotranspiration';
        sVarUnits = 'mm'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
        sVarCoords = 'Longitude Latitude';
        call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                             sVarName, sVarNameLong, sVarDescription, &
                             sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                             iCols, iRows, transpose(a2dVarET))

        ! Actual ETCum
        if( (iStepData_Hour .eq. iAccumData_Hour) .and. (iTime .ge. iDaySteps) ) then
            sVarName = 'ETCum'; sVarNameLong = 'et_accumulated';
            sVarDescription = 'actual evapotranspiration accumulated over 1 day';
            sVarUnits = 'mm'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarETCum))
        endif

        ! EXTENDED DATASETS
        if( iActData_Generic .ge. 2) then

            ! Effective Rain
            sVarName = 'REff'; sVarNameLong = 'effective_rain'; sVarDescription = 'effective rain';
            sVarUnits = 'mm'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarRain))

            ! H
            sVarName = 'H'; sVarNameLong = 'sensible_heat'; sVarDescription = 'sensible heat flux';
            sVarUnits = 'W/m^2'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarH))
            ! LE
            sVarName = 'LE'; sVarNameLong = 'latent_heat'; sVarDescription = 'latent heat flux';
            sVarUnits = 'W/m^2'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarLE))

            ! LST
            sVarName = 'LST'; sVarNameLong = 'land_surface_temperature'; sVarDescription = 'land surface temperature';
            sVarUnits = 'K'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarLST))
            ! VTOT
            sVarName = 'VTot'; sVarNameLong = 'volume_tot'; sVarDescription = 'total volume';
            sVarUnits = 'mm'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarVTot))

            ! ETPotCum
            if( (iStepData_Hour .eq. iAccumData_Hour) .and. (iTime .ge. iDaySteps) ) then
                sVarName = 'ETPotCum'; sVarNameLong = 'potential_et_accumulated';
                sVarDescription = 'potential evapotranspiration accumulated over 1 day';
                sVarUnits = 'mm'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
                sVarCoords = 'Longitude Latitude';
                call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                     sVarName, sVarNameLong, sVarDescription, &
                                     sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                     iCols, iRows, transpose(a2dVarETPotCum))
            endif

        endif

        ! DEBUG DATASETS
        if( iActData_Generic .ge. 3) then

            ! Watertable source routing
            sVarName = 'WaterTSources'; sVarNameLong = 'water_table_sources'; sVarDescription = 'watertable sources ';
            sVarUnits = 'm^3/s'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarWSRunoff))

            ! Watertable deep losses
            sVarName = 'WaterTLosses'; sVarNameLong = 'water_table_deep_losses'; sVarDescription = 'water table deep losses ';
            sVarUnits = 'm^3/s'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarWDL))

        endif
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Flooding variable(s)
        if ( (iFlagFlood .eq. 1) .and. (iActData_Flooding .eq. 1) ) then

            ! Q flooding right banks (Distributed discharge values)
            sVarName = 'QfloodR'; sVarNameLong = 'Right Banks Flood Discharges';
            sVarDescription = 'right banks flood discharges';
            sVarUnits = 'm^3/s'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                     sVarName, sVarNameLong, sVarDescription, &
                     sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                     iCols, iRows, transpose(a2dVarQfloodCR))
            ! Q flooding left banks (Distributed discharge values)
            sVarName = 'QfloodL'; sVarNameLong = 'Left Banks Flood Discharges';
            sVarDescription = 'left banks flood discharges';
            sVarUnits = 'm^3/s'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                     sVarName, sVarNameLong, sVarDescription, &
                     sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                     iCols, iRows, transpose(a2dVarQfloodCL))
        endif
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Snow variable(s)
        if ( (iFlagSnow .eq. 1) .and. (iActData_Snow .eq. 1) ) then

            ! SWE
            sVarName = 'SWE'; sVarNameLong = 'snow water equivalent'; sVarDescription = 'SWE)';
            sVarUnits = 'mm'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarSWE))
            ! Snow Melting
            sVarName = 'MeltingS'; sVarNameLong = 'snow melting'; sVarDescription = 'meltings';
            sVarUnits = 'mm'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarMeltingS))

            ! Snow density
            sVarName = 'RhoS'; sVarNameLong = 'snow density'; sVarDescription = 'rhos (snow>=0, no_snow=-9999)';
            sVarUnits = 'kg/m^3'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarRhoS))
            ! Snowfall
            sVarName = 'SnowFall'; sVarNameLong = 'snowfall'; sVarDescription = 'snowfall';
            sVarUnits = 'mm'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarSnowFall))

            ! Snowmask
            sVarName = 'SnowMask'; sVarNameLong = 'snowmask'; sVarDescription = 'snow mask (snow=1, no_snow=0)';
            sVarUnits = ''; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
            sVarCoords = 'Longitude Latitude';
            call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                 sVarName, sVarNameLong, sVarDescription, &
                                 sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                 iCols, iRows, transpose(a2dVarSnowMask))

            ! Daily variable(s)
            if( iStepData_Hour .eq. iAccumData_Hour ) then
                ! Snow albedo
                sVarName = 'AlbedoS'; sVarNameLong = 'snow albedo'; sVarDescription = 'albedos';
                sVarUnits = '-'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
                sVarCoords = 'Longitude Latitude';
                call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                     sVarName, sVarNameLong, sVarDescription, &
                                     sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                     iCols, iRows, transpose(a2dVarAlbedoS))
                ! Snow age
                sVarName = 'AgeS'; sVarNameLong = 'snow age'; sVarDescription = 'ages';
                sVarUnits = 'timestep'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
                sVarCoords = 'Longitude Latitude';
                call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                     sVarName, sVarNameLong, sVarDescription, &
                                     sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                     iCols, iRows, transpose(real(a2iVarAgeS)))
                ! Snow melting daily cumulated
                sVarName = 'MeltingSDayCum'; sVarNameLong = 'daily cumulated snow melting'; sVarDescription = 'meltingsdaycum';
                sVarUnits = 'mm'; sVarGridMap = 'epsg:4326'; dVarMissingValue = -9E15;
                sVarCoords = 'Longitude Latitude';
                call HMC_Tools_IO_Put2d_NC(iFileID, iID_Dim_Cols, iID_Dim_Rows, &
                                     sVarName, sVarNameLong, sVarDescription, &
                                     sVarUnits, sVarCoords, sVarGridMap, dVarMissingValue, &
                                     iCols, iRows, transpose(a2dVarMeltingSDayCum))
            endif

        endif
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Close
        call check( nf90_close(iFileID) )
        ! Info
        call mprintf(.true., iINFO_Verbose, ' Save filename (result gridded): '//trim(sFileNameData_Output)//' ... OK')
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Zip file
        call HMC_Tools_Generic_ZipFile(sCommandZipFile, &
                                       sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
        ! Remove un-zipped file
        !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false.)

        ! Info end
        call mprintf(.true., iINFO_Extra, ' Data :: Output gridded :: NetCDF ... OK ' )
        !------------------------------------------------------------------------------------------

    end subroutine HMC_Data_Output_Gridded_NC
#endif
    !------------------------------------------------------------------------------------------

    !------------------------------------------------------------------------------------------
    ! Subroutine to write Binary data output
    subroutine  HMC_Data_Output_Gridded_Binary(iID, &
                                    sPathData_Output, &
                                    iRows, iCols, &
                                    iTime, sTime, iDaySteps, &
                                    iFlagSnow, iFlagFlood, &
                                    iActData_Generic, iActData_Flooding, iActData_Snow, &
                                    iStepData_Hour, iAccumData_Hour, &
                                    iVarScale, &
                                    a2dVarRain, &
                                    a2dVarLST, a2dVarH, a2dVarLE, &
                                    a2dVarETCum, a2dVarETPotCum, a2dVarET, a2dVarETpot, &
                                    a2dVarVTot, a2dVarQout, a2dVarQfloodCR, a2dVarQfloodCL, &
                                    a2dVarSWE, a2iVarAgeS, a2dVarMeltingS, a2dVarMeltingSDayCum, &
                                    a2dVarAlbedoS, a2dVarRhoS, a2dVarSnowFall, a2dVarSnowMask, &
                                    a2dVarSM, &
                                    a2dVarWSRunoff, a2dVarWDL, &
                                    a2dVarLat, a2dVarLon)

        !------------------------------------------------------------------------------------------
        ! Variable(s)
        integer(kind = 4)                       :: iID

        character(len = 700), intent(in)        :: sPathData_Output
        character(len = 700)                    :: sFileNameData_Output
        character(len = 256)                    :: sVarName
        integer(kind = 4), intent(in)           :: iRows, iCols
        integer(kind = 4)                       :: iNSection, iNData
        integer(kind = 4)                       :: iNLake, iNDam, iNPlant, iNJoint, iNCatch, iNRelease

        integer(kind = 4)                       :: iFlagSnow, iFlagFlood
        integer(kind = 4)                       :: iActData_Generic, iActData_Flooding, iActData_Snow
        integer(kind = 4)                       :: iStepData_Hour, iAccumData_Hour

        integer(kind = 4)                       :: iVarScale

        integer(kind = 4)                       :: iTime, iDaySteps
        character(len = 19), intent(in)         :: sTime

        real(kind = 4), dimension(iCols, iRows)                 :: a2dVarData

        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarRain
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarLST
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarH
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarLE
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarETCum
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarETPotCum
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarET
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarETpot

        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarVTot
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarQout
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarQfloodCR, a2dVarQfloodCL

        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarLat
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarLon
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarSM
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarWSRunoff, a2dVarWDL

        integer(kind = 4), dimension(iRows, iCols)              :: a2iVarAgeS
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarSWE
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarMeltingS
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarMeltingSDayCum
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarAlbedoS
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarRhoS
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarSnowFall
        real(kind = 4), dimension(iRows, iCols)                 :: a2dVarSnowMask

        character(len = 256)    :: sVarUnits
        integer(kind = 4)       :: iErr
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Initialize variable(s)
        a2dVarData = 0.0
        ! Info start
        call mprintf(.true., iINFO_Extra, ' Data :: Output gridded :: Binary ... ' )
        ! Info filename(s) at each step
        call mprintf(.true., iINFO_Verbose, ' Save (result gridded) at time: '//trim(sTime)//' ... ')
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Writing dynamic variable(s) in binary output file

        ! BASIC DATASETS
        ! SM
        iVarScale = 10000
        sFileNameData_Output = trim(sPathData_Output)//"SM_"// &
                           sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                           ".bin"
        call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
        call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarSM, iRows, iCols, iVarScale, .true., iErr)
        call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                       sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
        !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

        ! Evapotranspiration
        iVarScale = 10000
        sFileNameData_Output = trim(sPathData_Output)//"ET_"// &
                           sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                           ".bin"
        call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
        call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarET, iRows, iCols, iVarScale, .true., iErr)
        call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                       sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
        !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

        ! Qout (Distributed discharge values)
        iVarScale = 10000
        sFileNameData_Output = trim(sPathData_Output)//"Q_"// &
                           sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                           ".bin"
        call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
        call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarQout, iRows, iCols, iVarScale, .true., iErr)
        call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                       sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
        !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

        ! ETCum (accumulated actual evapotranspiration)
        if( (iStepData_Hour .eq. iAccumData_Hour) .and. (iTime .ge. iDaySteps) ) then
            iVarScale = 10000
            sFileNameData_Output = trim(sPathData_Output)//"ETCum_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarETCum, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                           sFileNameData_Output//'.gz', sFileNameData_Output, .false.)

        endif

        ! EXTENDED DATASETS
        if( iActData_Generic .ge. 2) then

            ! Effective Rain
            iVarScale = 10
            sFileNameData_Output = trim(sPathData_Output)//"REff_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarRain, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                           sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false.)

            ! H
            iVarScale = 10000
            sFileNameData_Output = trim(sPathData_Output)//"H_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarH, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                           sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false.)

            ! LE
            iVarScale = 10000
            sFileNameData_Output = trim(sPathData_Output)//"LE_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarLE, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                           sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

            ! LST
            iVarScale = 10000
            sFileNameData_Output = trim(sPathData_Output)//"LST_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarLST, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                           sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false.)

            ! VTOT
            iVarScale = 10000
            sFileNameData_Output = trim(sPathData_Output)//"VTot_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarVTot, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                           sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

            ! ETpot
            iVarScale = 10000
            sFileNameData_Output = trim(sPathData_Output)//"ETpot_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarETpot, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                           sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

            ! ETCum
            if( (iStepData_Hour .eq. iAccumData_Hour) .and. (iTime .ge. iDaySteps) ) then
                iVarScale = 10000
                sFileNameData_Output = trim(sPathData_Output)//"ETPotCum_"// &
                                   sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                                   ".bin"
                call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
                call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarETPotCum, iRows, iCols, iVarScale, .true., iErr)
                call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                               sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
                !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false.)
            endif

        endif

        ! DEBUG DATASETS
        if( iActData_Generic .ge. 2) then

            ! Watertable sources
            iVarScale = 10000
            sFileNameData_Output = trim(sPathData_Output)//"wts_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarWSRunoff, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                           sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false.)

            ! Watertable deep losses
            iVarScale = 10000
            sFileNameData_Output = trim(sPathData_Output)//"wtl_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarWDL, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                           sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false.)

        endif
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Flooding variable(s)
        if ( (iFlagFlood .eq. 1) .and. (iActData_Flooding .eq. 1) )then
            ! Q flooding right banks (Distributed discharge values)
            iVarScale = 10000
            sFileNameData_Output = trim(sPathData_Output)//"Qfr_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarQfloodCR, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                            sFileNameData_Output//'.gz', sFileNameData_Output, .false.)

            ! Q flooding left banks (Distributed discharge values)
            iVarScale = 10000
            sFileNameData_Output = trim(sPathData_Output)//"Qfl_"// &
                               sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                               ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_INT(sFileNameData_Output, a2dVarQfloodCL, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                                            sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
        endif
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Snow variable(s)
        if ( (iFlagSnow .eq. 1) .and. (iActData_Snow .eq. 1) ) then

            ! SWE
            iVarScale = 1;
            sFileNameData_Output = trim(sPathData_Output)//"SWE_"// &
                                sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                                ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_DBL(sFileNameData_Output, a2dVarSWE, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                        sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

            ! Snow melting
            iVarScale = 1;
            sFileNameData_Output = trim(sPathData_Output)//"Melting_"// &
                                sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                                ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_DBL(sFileNameData_Output, a2dVarMeltingS, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                        sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

            ! Snow density
            iVarScale = 1;
            sFileNameData_Output = trim(sPathData_Output)//"Density_"// &
                                sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                                ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_DBL(sFileNameData_Output, a2dVarRhoS, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                        sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

            ! Snowfall
            iVarScale = 1;
            sFileNameData_Output = trim(sPathData_Output)//"Snowfall_"// &
                                sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                                ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_DBL(sFileNameData_Output, a2dVarSnowFall, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                        sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

            ! Snowmask
            iVarScale = 1;
            sFileNameData_Output = trim(sPathData_Output)//"Snowmask_"// &
                                sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                                ".bin"
            call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
            call HMC_Tools_IO_Put2d_Binary_DBL(sFileNameData_Output, a2dVarSnowMask, iRows, iCols, iVarScale, .true., iErr)
            call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                        sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
            !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

            ! Daily variable(s)
            if ( iStepData_Hour .eq. iAccumData_Hour ) then

                ! Snow albedo
                iVarScale = 1;
                sFileNameData_Output = trim(sPathData_Output)//"AlbedoS_"// &
                                    sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                                    ".bin"
                call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
                call HMC_Tools_IO_Put2d_Binary_DBL(sFileNameData_Output, a2dVarAlbedoS, iRows, iCols, iVarScale, .true., iErr)
                call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                            sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
                !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

                ! Snow melting daily cumulated
                iVarScale = 1;
                sFileNameData_Output = trim(sPathData_Output)//"MeltingDay_"// &
                                    sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                                    ".bin"
                call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
                call HMC_Tools_IO_Put2d_Binary_DBL(sFileNameData_Output, a2dVarMeltingSDayCum, iRows, iCols, &
                                                   iVarScale, .true., iErr)
                call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                            sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
                !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

                ! Snow age
                iVarScale = 1;
                sFileNameData_Output = trim(sPathData_Output)//"Age_"// &
                                    sTime(1:4)//sTime(6:7)//sTime(9:10)//sTime(12:13)//sTime(15:16)// &
                                    ".bin"
                call mprintf(.true., iINFO_Extra, ' Save filename: '//trim(sFileNameData_Output) )
                call HMC_Tools_IO_Put2d_Binary_DBL(sFileNameData_Output, real(a2iVarAgeS), iRows, iCols, iVarScale, .true., iErr)
                call HMC_Tools_Generic_ZipFile(oHMC_Namelist(iID)%sCommandZipFile, &
                            sFileNameData_Output//'.gz', sFileNameData_Output, .false.)
                !call HMC_Tools_Generic_RemoveFile(oHMC_Namelist(iID)%sCommandRemoveFile, sFileNameData_Output, .false. )

            endif
        endif
        !------------------------------------------------------------------------------------------

        !------------------------------------------------------------------------------------------
        ! Info filename(s) at each step
        call mprintf(.true., iINFO_Verbose, ' Save (result gridded) at time: '//trim(sTime)//' ... OK')
        ! Info end
        call mprintf(.true., iINFO_Extra, ' Data :: Output gridded :: Binary ... OK' )
        !------------------------------------------------------------------------------------------

    end subroutine HMC_Data_Output_Gridded_Binary
    !------------------------------------------------------------------------------------------

end module HMC_Module_Data_Output_Gridded
!------------------------------------------------------------------------------------------

max_stars_repo_name: c-hydro/hmc-dev

max_issues_repo_name: c-hydro/hmc-dev

max_forks_repo_name: c-hydro/hmc-dev


text:
      module mod_uscr_end
      use mod_INSERTING
      use mod_INS_ROUTINER
      use properties
      contains
      subroutine uscr_end(a,istat)
      implicit none
      integer ,intent(inout)::a,istat
      integer::prpty,rest,b
      type(i_matrix),pointer ::ipmatrix
      type(d_matrix),pointer ::dpmatrix
      type(s_matrix),pointer ::spmatrix
      type(c_matrix),pointer ::cpmatrix
      type(z_matrix),pointer ::zpmatrix
      b=-a
      rest = modulo(b,no_of_types)
      select case(rest)
      case(ISP_MATRIX)
! **********************************************************************
      istat=-1
      call access_matrix(ipmatrix ,a,istat)
      if(istat.ne.0) return
      prpty= ipmatrix %property
      select case(ipmatrix %format)
      case('block')
         call iuscr_blockend (a,prpty,istat)
         if(istat.ne.0) return
      case('vblock')
         call iuscr_varend  (a,prpty,istat)
         if(istat.ne.0) return
      case('normal')
         call iuscr_normend (a,prpty,istat)
         if(istat.ne.0) return
      case default
         istat = blas_error_param
         return
      end select
!!***************************************************************************
! **********************************************************************
      case(SSP_MATRIX)
! **********************************************************************
      istat=-1
      call access_matrix(spmatrix ,a,istat)
      if(istat.ne.0) return
      prpty= spmatrix %property
      select case(spmatrix %format)
      case('block')
         call suscr_blockend (a,prpty,istat)
         if(istat.ne.0) return
      case('vblock')
         call suscr_varend  (a,prpty,istat)
         if(istat.ne.0) return
      case('normal')
         call suscr_normend (a,prpty,istat)
         if(istat.ne.0) return
      case default
         istat = blas_error_param
         return
      end select
! **********************************************************************
!!***************************************************************************
      case(DSP_MATRIX)
! **********************************************************************
      istat=-1
      call access_matrix(dpmatrix ,a,istat)
      if(istat.ne.0) return
      prpty= dpmatrix %property
      select case(dpmatrix %format)
      case('block')
         call duscr_blockend (a,prpty,istat)
         if(istat.ne.0) return
      case('vblock')
         call duscr_varend  (a,prpty,istat)
         if(istat.ne.0) return
      case('normal')
         call duscr_normend (a,prpty,istat)
         if(istat.ne.0) return
      case default
         istat = blas_error_param
         return
      end select
! **********************************************************************
!!***************************************************************************
      case(CSP_MATRIX)
! **********************************************************************
      istat=-1
      call access_matrix(cpmatrix ,a,istat)
      if(istat.ne.0) return
      prpty= cpmatrix %property
      select case(cpmatrix %format)
      case('block')
         call cuscr_blockend (a,prpty,istat)
         if(istat.ne.0) return
      case('vblock')
         call cuscr_varend  (a,prpty,istat)
         if(istat.ne.0) return
      case('normal')
         call cuscr_normend (a,prpty,istat)
         if(istat.ne.0) return
      case default
         istat = blas_error_param
         return
      end select
! **********************************************************************
!!***************************************************************************
      case(ZSP_MATRIX)
! **********************************************************************
      istat=-1
      call access_matrix(zpmatrix ,a,istat)
      if(istat.ne.0) return
      prpty= zpmatrix %property
      select case(zpmatrix %format)
      case('block')
         call zuscr_blockend (a,prpty,istat)
         if(istat.ne.0) return
      case('vblock')
         call zuscr_varend  (a,prpty,istat)
         if(istat.ne.0) return
      case('normal')
         call zuscr_normend (a,prpty,istat)
         if(istat.ne.0) return
      case default
         istat = blas_error_param
         return
      end select
! **********************************************************************
!!***************************************************************************
! **********************************************************************
      case default
         istat = blas_error_param
         return
      end select
      end subroutine uscr_end
      end module mod_uscr_end

max_stars_repo_name: ittnas/qsc

max_issues_repo_name: ittnas/qsc

max_forks_repo_name: ittnas/qsc


text:
Debats du Senat (hansard)
1ere Session, 36 e Legislature,
Volume 137, Numero 134
Le jeudi 29 avril 1999
L'honorable Gildas L. Molgat, President
Vaclav Havel, president de la Republique tcheque
La duree limite des discours et des declarateurs de senateurs-Le respect du Reglement
La fermeture possible d'un centre a Ottawa
National Youth Achievement Award
Projet de loi modificatif-Premiere lecture
L'Association parlementaire Canada-Europe
Regie interne, budgets et administration
Reponse differee a une question orale
L'Association des comptables generaux accredites du Canada-Message des communes
Projet de loi sur les perquisitions et les saisies internationales
Deuxieme lecture-Suite du debat
Le budget des depenses pour 1998-1999
L'etat du systeme financier
L'etude du rapport provisoire du comite des banques et du commerce-Suite du debat
L'expose du ministre des Finances-Interpellation-Suite du debat
L'etat des flottes d'helicopteres-Interpellation-Suite du debat
L'acces a l'information relative aux recensements
La situation actuelle et l'avenir de la foresterie-Adoption du rapport budgetaire du comite
La commission royale sur les peuples autochtones-Adoption du rapport budgetaire du comite
Le jeudi 29 avril 1999
La seance est ouverte a 14 heures, le President etant au fauteuil.
Vaclav Havel, president de la Republique tcheque
L'honorable Sharon Carstairs (leader adjoint du gouvernement) :
Son Honneur le President :
Est-ce d'accord, honorables senateurs?
( Le texte des discours figurent en annexe, p. 3213)
Jason Lang, age de 17 ans, est decede.
Taber n'est qu'a 30 milles de Lethbridge, qui est ma ville natale.
C'est a Taber que la betterave est traitee.
Taber est une collectivite ou regne la securite.
Cette image de paix s'est envolee avec les evenements d'hier.
Les debats sur le controle des armes a feu se multiplient.
Honorables senateurs, pensez a vos propres collectivites.
Au Canada, cela n'est pas cense se produire.
Ils ont dans leur vie des influences qui peuvent etre difficiles a comprendre pour nous.
C'est ce qui se produit aujourd'hui a Taber.
Honorables senateurs, Taber est differente.
C'est vraiment la petite ville typique de l'Alberta et du Canada rural.
L'honorable Nicholas W. Taylor :
Honorables senateurs, je voudrais moi aussi dire quelques mots au sujet de cette tragedie.
Je suis ne a quelque 30 milles de la localite de Taber.
Les habitants de Taber ont grandi dans la crainte de Dieu.
J'ai communique avec d'autres assemblees legislatives, aujourd'hui, avant de faire cette intervention.
Ce serait tres apprecie.
Son Honneur le President :
La duree limite des discours et des declarateurs de senateurs-Le respect du Reglement
Le senateur Lois M. Wilson :
Il s'agit de la duree limite des discours.
Personnellement, je n'ai pas de tels scrupules.
C'est tres souvent le cas dans la pratique.
Par contre, si un senateur repond non, on lui en veut un peu.
Pis encore, cela fausse les regles du jeu.
L'autre disposition est le paragraphe 37(4), qui dit:
... aucun senateur ne parle pendant plus de 15 minutes...
... et je souligne ce qui suit:
Cela signifie 10 minutes plus les commentaires et les questions.
D'habitude, je trouve que l'atmosphere au Senat est detendue.
Il n'y a aucune limite de temps.
Cela dit, je pense qu'un mot suffit aux sages.
La fermeture possible d'un centre a Ottawa
L'honorable Francis William Mahovlich :
Honorables senateurs, j'interviens aujourd'hui a propos des sans-abri.
Le probleme des sans-abri releve-t-il du gouvernement federal?
C'est un probleme qui concerne tout le monde, Frank.
Honorables senateurs, les problemes des sans-abri sont de plus en plus apparents.
On vient d'aviser les responsables qu'ils devront quitter les lieux dans quelques mois.
La directrice du centre est Mme Mary-Martha Hale.
Je sais qu'il y a des problemes partout au Canada, notamment a Toronto.
Cette annee, le Maple Leaf Gardens a ferme ses portes.
National Youth Achievement Award
L'honorable Pierre Claude Nolin :
Je suis attriste par cette tragedie, mais il faut aussi regarder l'avenir.
La jeunesse canadienne merite que l'on s'attarde a sa reussite.
Nos pages en sont de tres bons exemples.
Ces 30 Canadiens me font regarder l'avenir avec optimisme et amour.
J'aurais souhaite que plusieurs de mes collegues assistent a cette soiree.
Projet de loi modificatif-Premiere lecture
L'honorable Therese Lavoie-Roux :
(Le projet de loi est lu une premiere fois.)
Son Honneur le President :
Honorables senateurs, quand lirons-nous ce projet de loi une deuxieme fois?
L'Association parlementaire Canada-Europe
L'honorable Jerahmiel S. Grafstein :
L'honorable J. Michael Forrestall :
Le ministre peut-il confirmer ou infirmer ces informations?
L'honorable B. Alasdair Graham (leader du gouvernement) :
Honorables senateurs, je ne suis pas au courant de l'emploi d'armes chimiques.
Le ministre peut-il confirmer cette nouvelle?
Je suis desole, mais je n'ai pas de renseignements a ce sujet.
L'honorable A. Raynell Andreychuk :
L'honorable B. Alasdair Graham (leader du gouvernement) :
Honorables senateurs, ma question s'adresse au leader du gouvernement au Senat.
L'honorable B. Alasdair Graham (leader du gouvernement) :
Que faut-il conclure de tout cela?
L'honorable B. Alasdair Graham (leader du gouvernement) :
La Societe de developpement du Cap-Breton
L'honorable B. Alasdair Graham (leader du gouvernement) :
Regie interne, budgets et administration
L'honorable Gerald J. Comeau :
Honorables senateurs, ma question s'adresse au president du comite de la regie interne.
Est-ce ce a quoi nous devons nous attendre?
Honorables senateurs, le comite des peches recoit toujours une priorite elevee.
Cela etant dit, il faut tenir compte du processus budgetaire.
Nous avons retabli trois sous-comites au sein du comite de la regie interne.
L'un d'eux s'occupe des budgets.
La raison de cela est le respect des delais.
Certains de ces comites devaient faire rapport au plus tard en juin.
Honorables senateurs, je suggere que la realite est tout autre.
Le senateur a dit que le president du sous-comite avait rencontre plusieurs presidents.
Cependant, ce n'est pas ce qui s'est passe.
L'honorable Raymond J. Perrault :
L'honorable Noel A. Kinsella (chef adjoint de l'opposition) :
Le haut-commissaire des Nations Unies pour le statut des refugies est ensuite intervenu.
L'honorable B. Alasdair Graham (leader du gouvernement) :
Honorables senateurs, la situation dans les camps de refugies a atteint un niveau critique.
Le senateur a mentionne la Macedoine, le Montenegro et l'Albanie.
Il semble que la situation soit particulierement critique dans les camps en Macedoine.
La premiere de ces familles est arrivee au Canada lundi.
Je crois savoir que 45 autres personnes arrivent aujourd'hui.
Le Canada est toujours pret a accueillir 5 000 refugies.
Ce n'est pas tout a fait exact.
A l'autre endroit aussi, certains ont exprime un interet.
Comment en est-on arrive au nombre de 5 000 refugies?
Si les memes criteres etaient appliques aujourd'hui, ce chiffre serait-il encore realiste?
Honorables senateurs, je ne crois pas que le chiffre de 5 000 constituait une limite.
Je ne veux pas laisser entendre qu'il s'agit la d'un nombre maximum.
Bien au contraire, honorables senateurs.
La ministre joue un role tres actif dans ce dossier.
Soit dit en passant, les Americains ont dit que c'etait la responsabilite du Canada.
Ils s'en lavent les mains.
L'honorable B. Alasdair Graham (leader du gouvernement) :
Honorables senateurs, j'ai une question complementaire.
Honorables senateurs, une question semblable a ete posee par le senateur Wilson l'autre jour.
L'honorable Pierre Claude Nolin :
L'honorable B. Alasdair Graham (leader du gouvernement) :
Honorables senateurs, non, je n'ai pas parle de soldats du genie.
Il y aura plusieurs membres du genie.
Je ne sais pas s'ils seront deployes en tant que combattants.
L'honorable Jean-Claude Rivest :
Le leader du gouvernement peut-il s'informer aupres de son collegue?
L'honorable B. Alasdair Graham (leader du gouvernement) :
Honorables senateurs, la reponse est oui.
Ils devraient avoir les memes possibilites que les etudiants du reste du pays.
Reponse differee a une question orale
L'honorable Sharon Carstairs (leader adjoint du gouvernement) :
( Reponse a la question posee par l'honorable Lois M. Wilson le 21 avril 1999 )
En effet, ces combustibles sont utilises dans les centrales nucleaires de plusieurs pays d'Europe.
L'Association des comptables generaux accredites du Canada-Message des communes
Projet de loi sur les perquisitions et les saisies internationales
Deuxieme lecture-Suite du debat
L'honorable Sharon Carstairs (leader adjoint du gouvernement) :
Nous esperons que c'est pour bientot.
(Sur la motion du senateur Carstairs, au nom du senateur Grafstein, le debat est ajourne.)
Le budget des depenses pour 1998-1999
L'honorable Sharon Carstairs (leader adjoint du gouvernement) :
Honorables senateurs, cet article a ete ajourne au nom du senateur Cools.
(La motion est adoptee, et le rapport est adopte.)
L'etat du systeme financier
L'etude du rapport provisoire du comite des banques et du commerce-Suite du debat
L'honorable Noel A. Kinsella (chef adjoint de l'opposition) :
Honorables senateurs, le comite n'etait pas unanime au sujet de ce rapport.
J'esperais que le senateur Tkachuk se joindrait a nous.
Son Honneur le President :
Honorables senateurs, la situation n'est pas tres reglementaire.
Comme le debat avait ete ajourne, on ne devrait pas en discuter maintenant.
Honorables senateurs, je dirai donc quelques mots a ce sujet.
(Sur la motion du senateur Kinsella, le debat est ajourne.)
L'expose du ministre des Finances-Interpellation-Suite du debat
J'ai entendu bon nombre interventions eloquentes de la part de mes collegues.
Le senateur Spivak a parle de la non-indexation des tranches d'imposition.
Le solde de cette annee est tombe a zero.
Un budget devrait etre un plan.
Il devrait traduire une determination, s'attaquer aux problemes actuels et preparer l'avenir.
Ce budget est un echec sur tous ces plans.
Meme certains membres du caucus liberal sont inquiets, c'est evident.
Malheureusement, il n'y a aucune vision venant du gouvernement a ce stade-ci.
La productivite n'est pas un probleme seulement pour les entreprises et les exportateurs canadiens.
[...] il n'y a pas eu d'allegements fiscaux.
Le message est de plus en plus clair.
L'entreprise est au Canada pratiquement depuis que le Canada existe.
Meme les employes du gouvernement ont un sens diffus de derive.
Le gouvernement ne me donne pas l'impression de respecter la fonction publique.
Cela conduit tout droit a un mur.
La fonction publique vit actuellement une crise tranquille.
(Sur la motion du Senateur Lynch-Staunton, le debat est ajourne.)
L'honorable A. Raynell Andreychuk :
Je felicite le senateur Spivak d'avoir porte cette question a notre attention.
L'adjonction de cafeine ne doit pas etre prise a la legere.
Je ne pense pas que c'est la vraie raison.
Nous savons que la cafeine est un probleme pour les femmes enceintes.
En consequence, l'ajout de la cafeine ne saurait se justifier.
Je ne pense pas que Pepsi ni Sante Canada ne l'aient prouve.
Des produits de remplacement peuvent etre trouves.
Par consequent, le debat doit se poursuivre.
(Sur la motion du senateur Carstairs, le debat est ajourne.)
L'honorable Lois M. Wilson :
Toutefois, la restriction de ce principe a un nombre insuffisant de pays est problematique.
Le Canada propose une remise de dette dans le cas des pays qui:
La resolution de 1997 de la Commission des droits de l'homme des Nations Unies:
Les problemes exigent une approche plus generale que la relation creancier-debiteur, foncierement biaisee.
L'efficience et la productivite ne sont pas des aspects economiques exclusifs du developpement.
Elles devraient etre validees pour les fins des depenses et investissements sociaux.
Un tribunal pourrait intervenir en cas d'impossibilite de parvenir a une telle entente.
La campagne du Jubile 2000 pour l'Amerique latine prevoit des ententes selon lesquelles:
... creanciers et debiteurs nommeront un nombre egal de juges au tribunal d'arbitrage.
Les honorables senateurs recevront une copie de la petition en temps utile.
L'honorable John B. Stewart :
Son Honneur le President :
Malgre cela, peut-etre ne reste-t-il pas suffisamment de temps?
Mes questions n'ont rien d'hostile, elles visent seulement a obtenir des clarifications.
Voila ma premiere question.
Peut-elle le faire?
La deuxieme question a trait aux dangers dits moraux.
Nous connaissons tous l'expression.
C'est un cas classique de ces dangers moraux.
Je ne sais pas si le senateur Wilson est d'accord avec cela?
Je suis loin d'avoir toutes les reponses.
En realite, la dette retombe sur le dos des pauvres.
Ils sont a la merci des instruments financiers internationaux.
Cette mesure pourrait peut-etre corriger la situation.
Ils savent tous bien que l'argent est accapare par quelqu'un.
Tout d'abord, nous felicitons le premier ministre de son initiative.
Nous avons deja annule un certain nombre de dettes.
Son Honneur le President :
Honorables senateurs, cette question est inscrite au nom de l'honorable senateur Forrestall.
(Sur la motion du senateur Kinsella, au nom du senateur Andreychuk, le debat est ajourne.)
L'honorable Catherine S. Callbeck :
En tant que pays, nous nous sommes engages a faire respecter ces principes.
Ces projets tirent parti des capacites individuelles de chaque societe.
Ce n'est pas un lien abstrait.
Ce qui est egalement tres revelateur, ce sont les donnees sur le travail des enfants.
La description des femmes des pays en developpement est generalement un bien sombre tableau.
Elle permet aux femmes de participer pleinement a leur societe en tant que partenaires egales.
Un demi-million de femmes meurent chaque annee des complications de l'accouchement.
La malaria entraine 2 millions de deces chaque annee, surtout dans les pays en developpement.
Separer les aspirations economiques de la condition sociale est de la folie pure et simple.
Elles sont peut-etre elles-memes battues ou pire encore.
(Sur la motion du senateur Corbin, le debat est ajourne.)
Son Honneur le President informe le Senat qu'il a recu la communication suivante:
Le secretaire du Gouverneur general,
L'etat des flottes d'helicopteres-Interpellation-Suite du debat
L'honorable Norman K. Atkins :
Mais pas les liberaux.
Il semble bien qu'il dirait aujourd'hui: Qu'est-ce qu'un milliard?
Personne ne mourra a cause d'un helicoptere?
Personne ne mourra a cause d'un helicoptere?
Je vais maintenant parler de notre marine.
(Sur la motion du senateur Di Nino, le debat est ajourne.)
L'acces a l'information relative aux recensements
L'honorable Thelma J. Chalifoux :
C'est pourquoi j'appuie les declarations du senateur Milne.
Son Honneur le President :
Honorables senateurs, l'interpellation sera ajournee au nom de l'honorable senateur Johnson.
2) le sous-ministre de la Defense nationale a l'epoque;
3) le chef interimaire d'etat-major de la Defense nationale a l'epoque;
4) le conseiller special du ministre de la Defense nationale a l'epoque (M. Campbell);
5) le conseiller special du ministre de la Defense nationale a l'epoque (J.
6) les personnes occupant le poste de juge-avocat general durant la periode en question;
7) le juge-avocat general adjoint (litiges) a l'epoque; et
8) le chef d'etat-major de la Defense a l'epoque.
9) l'actuel ministre de la Defense nationale..-(
L'honorable Noel A. Kinsella (chef adjoint de l'opposition) :
Le troisieme sens donne a cette expression est crucial.
Toutefois, je ne suis pas le seul a les avoir decrites.
Monsieur, j'ai oublie beaucoup de choses au cours des deux dernieres annees.
Honorables senateurs, deux possibilites s'offrent a nous.
(Sur la motion du senateur Kinsella, au nom du senateur Meighen, le debat est ajourne.)
La situation actuelle et l'avenir de la foresterie-Adoption du rapport budgetaire du comite
Permission ayant ete accordee de revenir au point no 10, Rapports de comites:
L'honorable Nicholas William Taylor propose l'adoption du rapport.
Son Honneur le President :
Plait-il aux honorables senateurs d'adopter la motion?
(La motion est adoptee, et le rapport est adopte.)
La commission royale sur les peuples autochtones-Adoption du rapport budgetaire du comite
L'honorable Charlie Watt propose l'adoption du rapport.
Son Honneur le President :
Plait-il aux honorables senateurs d'adopter la motion?
(La motion est adoptee, et le rapport est adopte.)
L'honorable Nicholas W. Taylor , conformement a l'avis donne le 28 avril 1999, propose:
Son Honneur le President :
Plait-il aux honorables senateurs d'adopter la motion?
Son Honneur le President :
(Le Senat s'ajourne a loisir.)
L'honorable Peter deC.
Loi concernant l'Association des comptables generaux accredites du Canada (Projet de loi S-25)
La Chambre des communes se retire.
Il plait a l'honorable suppleant de Son Excellence le Gouverneur general de se retirer.
Le Senat reprend sa seance.
Permission ayant ete accordee de revenir aux avis de motion du gouvernement:
L'honorable Sharon Carstairs (leader adjoint du gouvernement) :
Son Honneur le President :
La permission est-elle accordee, honorables senateurs?
(Le Senat s'ajourne au mardi 4 mai 1999, a 14 heures.)
Son Excellence Vaclav Havel,
president de la Republique tcheque
devant les deux Chambres du Parlement
a la Chambre des communes, a Ottawa.
Le jeudi 29 avril 1999
L'honorable Gilbert Parent (President de la Chambre des communes) :
Le tres honorable Jean Chretien.
Le tres honorable Jean Chretien (Premier ministre):
Je veux parler, bien sur, du President de la Republique tcheque, Vaclav Havel.
Un regime qui a choisi d'etouffer vos aspirations pour l'avenir.
Et par vos paroles et vos actes, vous avez contribue a sa perte.
Vous vous demandez peut-etre de quelle republique je reve.
M. Vaclav Havel (President de la Republique tcheque) :
Mais ou trouverons-nous les differentes fonctions qu'exerce aujourd'hui l'Etat?
Parlons d'abord des fonctions emotionnelles.
Vers le haut signifie vers diverses communautes ou organisations regionales, supranationales ou mondiales.
D'ailleurs, ce transfert de fonctions a deja commence.
Dans certains secteurs, il est bien avance; dans d'autres, il l'est moins.
Permettez-moi de vous citer un exemple.
Qu'ai-je voulu montrer avec cet exemple?
Il doit refleter equitablement le monde multipolaire d'aujourd'hui.
Des voies multiples signifient un plus grand equilibre et un controle reciproque plus vaste.
Je parle ici d'autre chose.
Cette valeur, c'est l'humanite.
Les droits de la personne passent avant les droits des Etats.
Les libertes individuelles sont une valeur superieure a la souverainete de l'Etat.
La categorie des interets divise plus qu'elle ne rapproche.
Nous avons chacun des interets propres.
Les principes nous unissent plus souvent qu'ils ne nous divisent.
Et pourtant, l'Alliance lutte.
Cette guerre fait passer les droits de la personne avant ceux de l'Etat.
Je crois qu'il s'agit d'un precedent important pour l'avenir.
L'honorable Gildas Molgat (President du Senat) :
Vous vous etes heurte au totalitarisme.
Vous avez ete harcele et emprisonne pour vos opinions et vos activites.
On vous a refuse la possibilite de terminer les etudes de votre choix.
Mais vous n'avez pas flanche.
Le monde libre vous admire.
Nous vous remercions de votre allocution.
C'est le temoignage d'un attachement indefectible aux principes politiques les plus nobles.
Notre pays a la bonne fortune de connaitre la democratie depuis sa creation.
Merci d'etre avec nous aujourd'hui.

ext: f


text:
       blockdata plt_scratch
       include '../include/plt_basic_defn.inc'
       include '../include/plt_scratch_defn.inc'
       end

max_stars_repo_name: CavendishAstrophysics/anmap

max_issues_repo_name: CavendishAstrophysics/anmap

max_forks_repo_name: CavendishAstrophysics/anmap