Irrigation Module

History

current version 1.9 - 19th March 2025

version date comment
1.0 27/Jun/2012 Original code
1.1 10/Oct/2023 an irrigated area can accept multiple sources from different intakes
1.2 13/Nov/2023 changed District to Intake and eta (irrigation efficiency) added
1.3 04/Dec/2023 maximum discharge and eflow are defined daily. function SetDailyArray added
1.4 06/May/2024 id written as header in output file instead of name
1.5 04/Jun/2024 output file for both diverted and downstream discharge
1.6 05/Jun/2024 multiple intakes in one cell are allowed
1.7 31/Jul/2024 output files are not created when dtOut = 0
1.8 21/Aug/2024 upstream discharge written to output file
1.9 19/Mar/2025 fluxQ set to zero when out of irrigation period

License

license: GNU GPL http://www.gnu.org/licenses/

Module Description

routines to model water intakes from river for irrigation purposes



Variables

Type Visibility Attributes Name Initial
type(grid_real), public :: Qirrigation
integer(kind=short), public :: dtIrrigation
type(Intakes), public :: fields
type(grid_real), public :: irrigationFlux
type(grid_real), private :: cpQriver

local copy of river discharge

character(len=15), private :: epsg
integer(kind=short), private :: unitIrrigationDiverted
integer(kind=short), private :: unitIrrigationDownstream
integer(kind=short), private :: unitIrrigationUpstream

Derived Types

type, public ::  Intake

Components

Type Visibility Attributes Name Initial
real(kind=float), public :: area

surface (m2)

integer(kind=short), public :: c

row and column number in the local coordinate of raster domain

integer(kind=short), public :: doy_start

day of year intake starts taking water

integer(kind=short), public :: doy_stop

day of year intake stops taking water

real(kind=float), public :: e_flow(365)

minimum environmental flow for every day of the year (m3/s)

real(kind=float), public :: eta

irrigation efficiency (0-1)

real(kind=float), public :: fluxQ

actual diverted discharge (m3/s)

character(len=300), public :: id
type(grid_integer), public :: mask
real(kind=float), public :: max_discharge(365)

maximum concessed discharge for every day of the year (m3/s)

character(len=300), public :: name
integer(kind=short), public :: r

row and column number in the local coordinate of raster domain

real(kind=float), public :: sat_max

district averaged soil saturation above which irrigation is stopped

type(Coordinate), public :: xy

easting and northing

type, public ::  Intakes

Components

Type Visibility Attributes Name Initial
integer(kind=short), public :: count

number of intakes

type(Intake), public, ALLOCATABLE :: elem(:)

Functions

private function SetDailyArray(value) result(array)

populate array of daily values

Arguments

Type IntentOptional Attributes Name
character(len=*) :: value

Return Value real(kind=float), (365)


Subroutines

public subroutine IrrigationConfig(file, path_out, dtOut)

configure irrigation

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: file
character(len=*), intent(in) :: path_out
integer(kind=short), intent(in) :: dtOut

dt out irrigation

public subroutine IrrigationUpdate(time, sat, Qriver, dtOut, timeOut)

update irrigation and write output

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time

current time

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

soil saturation (0-1)

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

river discharge at current time

integer(kind=short), intent(in) :: dtOut

time step for output

type(DateTime), intent(inout) :: timeOut