Skip to contents

Models the water balance of a flooded rice system with a two-layer structure: a ponded water layer above a saturated soil profile. This is physically distinct from the upland soil water balance in [calc_water_balance()]. Water is managed to maintain a target flood depth, with support for mid-season drainage events.

Usage

calc_water_balance_rice(
  et,
  precip,
  flood_target,
  flood_min,
  flood_max,
  seepage,
  drain = NULL,
  pond_init = flood_target
)

Arguments

et

Numeric vector. Daily reference ET. During flooded periods this is treated as open-water ET; no crop coefficient is applied here but you can pre-multiply if needed.

precip

Numeric vector. Daily precipitation.

flood_target

Numeric scalar. Target ponded water depth. Irrigation refills to this level.

flood_min

Numeric scalar. Minimum acceptable pond depth before irrigation is triggered.

flood_max

Numeric scalar. Maximum pond depth before bund overflow / runoff occurs.

seepage

Numeric scalar. Daily seepage + percolation loss Represents losses through the bund and downward percolation through the hardpan (if any). Typical range: 1-5 mm/day for well-puddled California soils.

drain

Logical vector (same length as et). TRUE on days when an intentional drainage event occurs (e.g., mid-season drain, pre-harvest drawdown). Pond is set to 0 on these days and irrigation is suppressed.

pond_init

Numeric scalar. Initial pond depth at t = 1. Defaults to flood_target.

Value

A list with numeric vectors of length n:

pond_depth

Ponded water depth at end of each day

irr

Irrigation applied

runoff

Bund overflow / surface runoff

Details

The soil profile is assumed to be continuously saturated during flooded periods, so plant-available soil water is not tracked separately. ET is applied directly to the pond layer (open-water ET during flooded periods).

Irrigation is triggered when pond_depth falls below flood_min. Farmers refill to flood_target. Runoff (bund overflow) occurs when pond_depth exceeds flood_max.

Mid-season drainage is specified as a logical vector (`drain[t] = TRUE` means the field is intentionally drained on day t). During drainage days, the pond is drawn down to pond_depth = 0 and irrigation is suppressed. This represents practices such as weed control or pre-harvest drainage.