ExportMaps Subroutine

public subroutine ExportMaps(time, dt, temp, precipitation, rh, radiation, netradiation, windspeed, swe, sm, runoff, infiltration, percolation, et, pet)

Update and export maps

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time
integer(kind=short), intent(in) :: dt

time step (s)

type(grid_real), intent(in) :: temp

air temperarure (°C)

type(grid_real), intent(in) :: precipitation

precipitation rate (m/s)

type(grid_real), intent(in) :: rh

air relative humidity (0-100)

type(grid_real), intent(in) :: radiation

solar radiation (w/m2)

type(grid_real), intent(in) :: netradiation

net radiation (w/m2)

type(grid_real), intent(in) :: windspeed

wind speed (m/s)

type(grid_real), intent(in) :: swe

snow water equivalent (m)

type(grid_real), intent(in) :: sm

soil moisture (-)

type(grid_real), intent(in) :: runoff

runoff (m/s)

type(grid_real), intent(in) :: infiltration

infiltration (m/s)

type(grid_real), intent(in) :: percolation

deep percolation (m/s)

type(grid_real), intent(in) :: et

actual evapotranspiration (m/s)

type(grid_real), intent(in) :: pet

potential evapotranspiration (m/s)


Variables

Type Visibility Attributes Name Initial
integer(kind=short), public :: i
integer(kind=short), public :: j
character(len=300), public :: string
character(len=16), public :: string16

Source Code

SUBROUTINE ExportMaps   & 
!
 (time, dt, temp, precipitation, rh, radiation, netradiation, windspeed, &
  swe, sm, runoff, infiltration, percolation, et, pet) 

IMPLICIT NONE

!arguments with intent in:
TYPE (DateTime),  INTENT(IN) :: time
INTEGER (KIND = short), INTENT(IN) :: dt !! time step (s)
TYPE (grid_real), INTENT(IN) :: temp !!air temperarure (°C)
TYPE (grid_real), INTENT(IN) :: precipitation !!precipitation rate (m/s)
TYPE (grid_real), INTENT(IN) :: rh !!air relative humidity (0-100)
TYPE (grid_real), INTENT(IN) :: radiation !!solar radiation (w/m2)
TYPE (grid_real), INTENT(IN) :: netradiation !!net radiation (w/m2)
TYPE (grid_real), INTENT(IN) :: windspeed !!wind speed (m/s)
TYPE (grid_real), INTENT(IN) :: swe !!snow water equivalent (m)
TYPE (grid_real), INTENT(IN) :: sm !!soil moisture (-)
TYPE (grid_real), INTENT(IN) :: runoff !!runoff (m/s)
TYPE (grid_real), INTENT(IN) :: infiltration !!infiltration (m/s)
TYPE (grid_real), INTENT(IN) :: percolation !!deep percolation (m/s)
TYPE (grid_real), INTENT(IN) :: et !!actual evapotranspiration (m/s)
TYPE (grid_real), INTENT(IN) :: pet !!potential evapotranspiration (m/s)

!local declarations:
INTEGER (KIND = short) :: i, j
CHARACTER (LEN = 300) :: string
CHARACTER (LEN = 16)  :: string16
!--------------------------end of declarations---------------------------------

!update precipitation
IF ( varOut (1) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (precipitation, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterPrecipitation % mat (i,j) = rasterPrecipitation % mat (i,j) + &
                          gridTemp2 % mat (i,j) * dt * 1000.
                ELSE
                    rasterPrecipitation % mat (i,j) =  rasterPrecipitation % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterPrecipitation % mat (i,j) =   rasterPrecipitation % mat (i,j) + &
                          precipitation % mat (i,j)  * dt * 1000.
                END IF
            END DO
        END DO
    END IF
END IF


!update temperature
IF ( varOut (2) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (temp, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterTemperature % mat (i,j) =   &
                          ( countSteps * rasterTemperature % mat (i,j) + &
                          gridTemp2 % mat (i,j) ) / ( countSteps + 1)
                ELSE
                    rasterTemperature % mat (i,j) =  rasterTemperature % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterTemperature % mat (i,j) =   &
                          ( countSteps * rasterTemperature % mat (i,j) + &
                          temp % mat (i,j) ) / ( countSteps + 1)
                END IF
            END DO
        END DO
    END IF
END IF


!update relative humidity
IF ( varOut (3) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (rh, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterRH % mat (i,j) =   &
                          ( countSteps * rasterRH % mat (i,j) + &
                          gridTemp2 % mat (i,j) ) / ( countSteps + 1)
                ELSE
                    rasterRH % mat (i,j) =  rasterRH % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterRH % mat (i,j) =   &
                          ( countSteps * rasterRH % mat (i,j) + &
                          rh % mat (i,j) ) / ( countSteps + 1)
                END IF
            END DO
        END DO
    END IF
END IF


!update radiation
IF ( varOut (4) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (radiation, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterRad % mat (i,j) =   &
                          ( countSteps * rasterRad % mat (i,j) + &
                          gridTemp2 % mat (i,j) ) / ( countSteps + 1)
                ELSE
                    rasterRad % mat (i,j) =  rasterRad % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterRad % mat (i,j) =   &
                          ( countSteps * rasterRad % mat (i,j) + &
                          radiation % mat (i,j) ) / ( countSteps + 1)
                END IF
            END DO
        END DO
    END IF
END IF


!update net radiation
IF ( varOut (5) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (netradiation, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterNetRad % mat (i,j) =   &
                          ( countSteps * rasterNetRad % mat (i,j) + &
                          gridTemp2 % mat (i,j) ) / ( countSteps + 1)
                ELSE
                    rasterNetRad % mat (i,j) =  rasterNetRad % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterNetRad % mat (i,j) =   &
                          ( countSteps * rasterNetRad % mat (i,j) + &
                          netradiation % mat (i,j) ) / ( countSteps + 1)
                END IF
            END DO
        END DO
    END IF
END IF


!update wind speed
IF ( varOut (6) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (windspeed, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterWS % mat (i,j) =   &
                          ( countSteps * rasterWS % mat (i,j) + &
                          gridTemp2 % mat (i,j) ) / ( countSteps + 1)
                ELSE
                    rasterWS % mat (i,j) =  rasterWS % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterWS % mat (i,j) =   &
                          ( countSteps * rasterWS % mat (i,j) + &
                          windspeed % mat (i,j) ) / ( countSteps + 1)
                END IF
            END DO
        END DO
    END IF
END IF

!update snow water equivalent
IF ( varOut (7) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (swe, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterSWE % mat (i,j) =   &
                          ( countSteps * rasterSWE % mat (i,j) + &
                          gridTemp2 % mat (i,j) * 1000. ) / ( countSteps + 1)
                ELSE
                    rasterSWE % mat (i,j) =  rasterSWE % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterSWE % mat (i,j) =   &
                          ( countSteps * rasterSWE % mat (i,j) + &
                          swe % mat (i,j) * 1000. ) / ( countSteps + 1)
                END IF
            END DO
        END DO
    END IF
END IF

!update soil moisture
IF ( varOut (8) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (sm, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterSM % mat (i,j) =   &
                          ( countSteps * rasterSM % mat (i,j) + &
                          gridTemp2 % mat (i,j) ) / ( countSteps + 1)
                ELSE
                    rasterSM % mat (i,j) =  rasterSM % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterSM % mat (i,j) =   &
                          ( countSteps * rasterSM % mat (i,j) + &
                          sm % mat (i,j) ) / ( countSteps + 1)
                END IF
            END DO
        END DO
    END IF
END IF

!update runoff
IF ( varOut (9) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (runoff, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterRunoff % mat (i,j) = rasterRunoff % mat (i,j) + &
                          gridTemp2 % mat (i,j) * dt * 1000.
                ELSE
                    rasterRunoff % mat (i,j) =  rasterRunoff % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterRunoff % mat (i,j) =   rasterRunoff % mat (i,j) + &
                          runoff % mat (i,j)  * dt * 1000.
                END IF
            END DO
        END DO
    END IF
END IF

!update infiltration
IF ( varOut (10) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (infiltration, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterInfiltration % mat (i,j) = rasterInfiltration % mat (i,j) + &
                          gridTemp2 % mat (i,j) * dt * 1000.
                ELSE
                    rasterInfiltration % mat (i,j) =  rasterInfiltration % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterInfiltration % mat (i,j) =   rasterInfiltration % mat (i,j) + &
                          infiltration % mat (i,j)  * dt * 1000.
                END IF
            END DO
        END DO
    END IF
END IF

!update percolation
IF ( varOut (11) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (percolation, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterPercolation % mat (i,j) = rasterPercolation % mat (i,j) + &
                          gridTemp2 % mat (i,j) * dt * 1000.
                ELSE
                    rasterPercolation % mat (i,j) =  rasterPercolation % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterPercolation % mat (i,j) =   rasterPercolation % mat (i,j) + &
                          percolation % mat (i,j)  * dt * 1000.
                END IF
            END DO
        END DO
    END IF
END IF

!update actual evapotranspiration
IF ( varOut (12) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (et, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterET % mat (i,j) = rasterET % mat (i,j) + &
                          gridTemp2 % mat (i,j) * dt * 1000.
                ELSE
                    rasterET % mat (i,j) =  rasterET % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterET % mat (i,j) =   rasterET % mat (i,j) + &
                          et % mat (i,j)  * dt * 1000.
                END IF
            END DO
        END DO
    END IF
END IF

!update potential evapotranspiration
IF ( varOut (13) ) THEN
    IF ( useTemplate ) THEN !need to convert maps
        CALL GridConvert (pet, gridTemp)
        CALL GridResample (gridTemp, gridTemp2)
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. &
                     gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN
                    rasterPET % mat (i,j) = rasterPET % mat (i,j) + &
                          gridTemp2 % mat (i,j) * dt * 1000.
                ELSE
                    rasterPET % mat (i,j) =  rasterPET % nodata
                END IF
            END DO
        END DO
    ELSE
        DO  j = 1, rasterTemplate % jdim
            DO i = 1, rasterTemplate % idim
                IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN
                    rasterPET % mat (i,j) =   rasterPET % mat (i,j) + &
                          pet % mat (i,j)  * dt * 1000.
                END IF
            END DO
        END DO
    END IF
END IF


countSteps = countSteps + 1

IF (CronIsTime (time, cron) ) THEN
    !set path
    timeString = time  !convert to string  'YYYY-MM-DDThh:mm:ssTZD'
    string16 = timeString (1:16)
    string16 (14:14) = '-'
    
    !precipitation
    IF (varOut (1) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_precipitation.asc'
        CALL ExportGrid (rasterPrecipitation, string, ESRI_ASCII)
        !reset raster
        rasterPrecipitation = 0.
    END IF
    
    !air temperature
    IF (varOut (2) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_temperature.asc'
        CALL ExportGrid (rasterTemperature, string, ESRI_ASCII)
        !reset raster
        rasterTemperature = 0.
    END IF
    
    !air relative humidity
    IF (varOut (3) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_rh.asc'
        CALL ExportGrid (rasterRH, string, ESRI_ASCII)
        !reset raster
        rasterRH = 0.
    END IF
    
    !radiation
    IF (varOut (4) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_rad.asc'
        CALL ExportGrid (rasterRad, string, ESRI_ASCII)
        !reset raster
        rasterRad = 0.
    END IF
    
    !net radiation
    IF (varOut (5) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_netrad.asc'
        CALL ExportGrid (rasterNetRad, string, ESRI_ASCII)
        !reset raster
        rasterNetRad = 0.
    END IF
    
    !wind speed
    IF (varOut (6) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_windspeed.asc'
        CALL ExportGrid (rasterWS, string, ESRI_ASCII)
        !reset raster
        rasterWS = 0.
    END IF
    
    !snow water equivalent
    IF (varOut (7) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_swe.asc'
        CALL ExportGrid (rasterSWE, string, ESRI_ASCII)
        !reset raster
        rasterSWE = 0.
    END IF
    
    !soil moisture
    IF (varOut (8) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_soil-moisture.asc'
        CALL ExportGrid (rasterSM, string, ESRI_ASCII)
        !reset raster
        rasterSM = 0.
    END IF
    
    !runoff
    IF (varOut (9) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_runoff.asc'
        CALL ExportGrid (rasterRunoff, string, ESRI_ASCII)
        !reset raster
        rasterRunoff = 0.
    END IF
    
    !infiltration
    IF (varOut (10) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_infiltration.asc'
        CALL ExportGrid (rasterInfiltration, string, ESRI_ASCII)
        !reset raster
        rasterInfiltration = 0.
    END IF
    
    !percolation
    IF (varOut (11) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_percolation.asc'
        CALL ExportGrid (rasterPercolation, string, ESRI_ASCII)
        !reset raster
        rasterPercolation = 0.
    END IF
    
    !actual evapotranspiration
    IF (varOut (12) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_et.asc'
        CALL ExportGrid (rasterET, string, ESRI_ASCII)
        !reset raster
        rasterET = 0.
    END IF
    
    !potential evapotranspiration
    IF (varOut (13) ) THEN 
        string = TRIM (pathout) // TRIM (string16) // '_pet.asc'
        CALL ExportGrid (rasterPET, string, ESRI_ASCII)
        !reset raster
        rasterPET = 0.
    END IF
    
    !reset counter
    countSteps = 0
 
END IF

RETURN
END SUBROUTINE ExportMaps