From 5acedb8a4f7fe90489359bc86392b6a732f41e5f Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@inrae.fr> Date: Fri, 18 Oct 2024 17:30:31 +0200 Subject: [PATCH 1/8] refactor: change date management in crop parameter time series calculation (WIP) Refs #6 --- DESCRIPTION | 5 +- R/CW_create_input.R | 7 +- R/calc_Kc.R | 60 ++++--- R/calc_RAW.R | 17 +- R/calc_TAW.R | 24 +-- R/calc_isCycle.R | 11 +- R/calc_p.R | 34 ++-- R/calc_root_depth.R | 37 ++--- R/utils.R | 26 ++- README.Rmd | 2 +- README.md | 150 +++++++++--------- man/CW_create_input.Rd | 9 +- man/calc_Kc.Rd | 30 ---- man/calc_RAW.Rd | 29 ---- man/calc_TAW.Rd | 47 ------ man/calc_isCycle.Rd | 4 +- man/calc_p.Rd | 28 ---- man/calc_params.Rd | 79 +++++++++ man/calc_root_depth.Rd | 31 ---- tests/testthat.R | 12 ++ tests/testthat/test-calc_interpolated_param.R | 13 ++ 21 files changed, 281 insertions(+), 374 deletions(-) delete mode 100644 man/calc_Kc.Rd delete mode 100644 man/calc_RAW.Rd delete mode 100644 man/calc_TAW.Rd delete mode 100644 man/calc_p.Rd create mode 100644 man/calc_params.Rd delete mode 100644 man/calc_root_depth.Rd create mode 100644 tests/testthat.R create mode 100644 tests/testthat/test-calc_interpolated_param.R diff --git a/DESCRIPTION b/DESCRIPTION index f07d184..bff441d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -21,7 +21,8 @@ RoxygenNote: 7.3.2 Roxygen: list(markdown = TRUE) Suggests: knitr, - rmarkdown + rmarkdown, + testthat (>= 3.0.0) VignetteBuilder: knitr Imports: dplyr, @@ -29,7 +30,9 @@ Imports: lubridate, readr, rlang, + stats, tibble, tidyr Depends: R (>= 2.10) +Config/testthat/edition: 3 diff --git a/R/CW_create_input.R b/R/CW_create_input.R index 382b034..853f71c 100644 --- a/R/CW_create_input.R +++ b/R/CW_create_input.R @@ -28,8 +28,7 @@ #' plot(cw_input) #' CW_create_input <- function(crop, - year, - DatesR = seq(as.Date(paste0(year, "-01-01")), as.Date(paste0(year, "-12-31")), by = "1 day"), + DatesR, ETo, P, soil_depth, @@ -37,8 +36,8 @@ CW_create_input <- function(crop, cp = get_crop_params(crop), sowing_date = cp$sowing_date) { year <- lubridate::year(DatesR[1]) - Kc <- calc_Kc(cp, year = year, sowing_date = sowing_date) - isCycle <- calc_isCycle(cp, year = year, sowing_date = sowing_date) + Kc <- calc_Kc(cp, DatesR = DatesR, sowing_date = sowing_date) + isCycle <- calc_isCycle(cp, DatesR = DatesR, sowing_date = sowing_date) Zr <- calc_root_depth(cp, soil_depth, year, diff --git a/R/calc_Kc.R b/R/calc_Kc.R index cc413dd..1f2fca0 100644 --- a/R/calc_Kc.R +++ b/R/calc_Kc.R @@ -1,37 +1,59 @@ -#' Compute crop coefficient time series for one crop cycle or calendar year +#' Compute crop parameters time series from crop parameters pivot points +#' +#' These functions compute the following parameters: +#' +#' - `Calc_Kc`: crop coefficient $K_c$ +#' - `calc_p`: critical depletion fraction $p=RAW/TAW$ +#' - `calc_root_depth`: root depth in m +#' - `calc_RAW`: Readily Available Water (RAW) in mm +#' - `calc_TAW`: Total Available Water (TAW) in mm #' #' @param cp Crop parameters (See [get_crop_params]) -#' @param year Year of simulation (Only used for detecting leap year). +#' @param AWC Available Water Capacity (mm) +#' @param root_depth Root depth time series (m). See [calc_root_depth] +#' @param TAW Total Available Water (mm). See [calc_TAW] +#' @param p fraction of Readily Available Water time series. See [calc_p] +#' @param DatesR A [vector] of continuous [Date] #' If `NULL`, the calculation is limited to the crop cycle of the plant #' @param sowing_date Sowing date in format "MM-DD" #' -#' @return A [vector] of Kc for each day of the year or the crop cycle. +#' @return A [vector] of the parameter for each day of the crop cycle or the period defined by `DatesR`. +#' +#' @details +#' For `calc_TAW`, parameters `cp`, `year`, and `sowing_date` are useless if `root_depth` is +#' provided. +#' +#' #' @export +#' @rdname calc_params #' #' @examples -#' Kc <- calc_Kc(get_crop_params("SB2023-soja"), year = NULL) +#' # Compute Kc for the crop cycle +#' Kc <- calc_Kc(get_crop_params("SB2023-soja")) #' plot(Kc, type = "l") #' -#' Kc <- calc_Kc(get_crop_params("SB2023-soja"), year = 2024) +#' # Compute Kc for a given period (less than one year) +#' # with default sowing date defined in crop parameters +#' DatesR <- seq(as.Date("2010-03-01"), as.Date("2010-10-31"), by = "1 day") +#' Kc <- calc_Kc(get_crop_params("SB2023-soja"), DatesR = DatesR) #' plot(Kc, type = "l") #' +#' # Compute Kc for a given period with user defined sowing date +#' Kc <- calc_Kc(get_crop_params("FAO-MAIZE"), +#' DatesR = DatesR, +#' sowing_date = "05-01") +#' plot(Kc, type = "l") calc_Kc <- function(cp, - year, + DatesR = NULL, sowing_date = cp$sowing_date) { - # TODO: stopifnot cp, year, sowing_date format - kc <- c( - rep(cp$Kini, cp$Lini), - cp$Kini + ((0:(cp$Ldev - 1)) / (cp$Ldev)) * (cp$Kmax - - cp$Kini), - #pb dernière valeur égale à Kc_mid, 1 j trop tôt - rep(cp$Kmax, cp$Lmid), - cp$Kmax + ((1:cp$Lend) / cp$Lend) * (cp$Kend - cp$Kmax) + calc_interpolated_param( + DatesR, + sowing_date, + x = c(cp$Lini, cp$Ldev, cp$Lmid, cp$Lend), + y = c(cp$Kini, cp$Kmax, cp$Kmax, cp$Kend), + yleft = cp$Kini, + yright = cp$Kini ) - - if (!is.null(year)) { - kc <- complete_year(kc, year, sowing_date) - } - return(kc) } diff --git a/R/calc_RAW.R b/R/calc_RAW.R index 180f2bb..64ce44c 100644 --- a/R/calc_RAW.R +++ b/R/calc_RAW.R @@ -1,20 +1,5 @@ -#' Calculation of Readily Available Water (RAW) -#' -#' @param TAW Total Available Water (mm). See [calc_TAW] -#' @param p fraction of Readily Available Water time series. See [calc_p] -#' -#' @return A [vector] of Readily Available Water. #' @export -#' -#' @examples -#' cp <- get_crop_params("SB2023-soja") -#' TAW <- calc_TAW(cp, -#' AWC = 140, -#' soil_depth = 1.2, -#' year = 2024) -#' p <- calc_p(cp, year = 2024) -#' RAW <- calc_RAW(TAW, p) -#' plot(RAW, type = "l") +#' @rdname calc_params calc_RAW <- function(TAW, p) { return(p * TAW) } diff --git a/R/calc_TAW.R b/R/calc_TAW.R index 54e6061..c15c724 100644 --- a/R/calc_TAW.R +++ b/R/calc_TAW.R @@ -1,29 +1,11 @@ -#' Calculation of Total Available Water (TAW) -#' -#' @details -#' Parameters `cp`, `year`, and `sowing_date` are useless if `root_depth` is -#' provided. -#' -#' @inheritParams calc_root_depth -#' @param AWC Available Water Capacity (mm) -#' @param root_depth Root depth time series (m). See [calc_root_depth]. -#' -#' @return A [vector] of Total Available Water (mm) for each day of the year or the crop cycle. #' @export -#' -#' @examples -#' TAW <- calc_TAW(get_crop_params("SB2023-soja"), -#' AWC = 140, -#' soil_depth = 1.2, -#' year = 2024) -#' plot(TAW, type = "l") -#' +#' @rdname calc_params calc_TAW <- function(cp, AWC, soil_depth, - year, + DatesR = NULL, sowing_date = cp$sowing_date, - root_depth = calc_root_depth(cp, soil_depth, year, sowing_date)) { + root_depth = calc_root_depth(cp, soil_depth, DatesR, sowing_date)) { return(AWC / soil_depth * root_depth) } diff --git a/R/calc_isCycle.R b/R/calc_isCycle.R index 3fbd390..62ab734 100644 --- a/R/calc_isCycle.R +++ b/R/calc_isCycle.R @@ -8,10 +8,11 @@ #' @examples #' isCycle <- calc_isCycle(get_crop_params("SB2023-soja"), year = 2024) #' -calc_isCycle <- function(cp, year, sowing_date = cp$sowing_date) { - isCycle <- rep(TRUE, cp$Lini + cp$Ldev + cp$Lmid + cp$Lend) - if (!is.null(year)) { - isCycle <- complete_year(isCycle, year, sowing_date) - } +calc_isCycle <- function(cp, DatesR, sowing_date = cp$sowing_date) { + Ltot <- c(cp$Lini, cp$Ldev, cp$Lmid, cp$Lend) + l <- get_period(DatesR, sowing_date, Ltot) + isCycle <- c(rep(FALSE, l$doy_start), + rep(TRUE, sum(Ltot)), + rep(FALSE, max(0, length(DatesR) - sum(Ltot) - l$doy_start))) return(isCycle) } diff --git a/R/calc_p.R b/R/calc_p.R index 1a68c48..775183e 100644 --- a/R/calc_p.R +++ b/R/calc_p.R @@ -1,30 +1,14 @@ -#' Compute critical depletion fraction (p) time series for one crop cycle or calendar year -#' -#' *p* is the fraction RAW / TAW -#' -#' @inheritParams calc_Kc -#' -#' @return A [vector] of critical depletion fraction for each day of the year or the crop cycle. #' @export -#' -#' @examples -#' p <- calc_p(get_crop_params("SB2023-soja"), -#' year = 2024) -#' plot(p, type = "l") -#' +#' @rdname calc_params calc_p <- function(cp, - year, + DatesR = NULL, sowing_date = cp$sowing_date) { - p <- c( - cp$p_ini + (0:(cp$Lini + cp$Ldev - 1 - )) * (cp$p_mid - cp$p_ini) / (cp$Lini + cp$Ldev - 1) - , - rep(cp$p_mid, cp$Lmid) - , - cp$p_mid + (1:(cp$Lend)) * (cp$p_end - cp$p_mid) / (cp$Lend) + calc_interpolated_param( + DatesR, + sowing_date, + x = c(1, cp$Lini + cp$Ldev - 1, cp$Lmid, cp$Lend), + y = c(cp$p_ini, cp$p_mid, cp$p_mid, cp$p_end), + yleft = cp$p_ini, + yright = cp$p_ini ) - if (!is.null(year)) { - p <- complete_year(p, year, sowing_date) - } - return(p) } diff --git a/R/calc_root_depth.R b/R/calc_root_depth.R index 88965a9..15d8a5a 100644 --- a/R/calc_root_depth.R +++ b/R/calc_root_depth.R @@ -1,30 +1,17 @@ -#' Compute root depth time series for one crop cycle or calendar year -#' -#' @inheritParams calc_Kc -#' @param soil_depth Soil depth (m) -#' -#' @return A [vector] of root depth (m) for each day of the year or the crop cycle. #' @export -#' -#' @examples -#' Zr <- calc_root_depth(get_crop_params("SB2023-soja"), -#' soil_depth = 1.2, -#' year = 2024) -#' plot(Zr, type = "l") -#' +#' @rdname calc_params calc_root_depth <- function(cp, soil_depth, - year, + DatesR = NULL, sowing_date = cp$sowing_date) { - Zr <- c(cp$Zini + (0:(cp$Lini + cp$Ldev - 1) / (cp$Lini + cp$Ldev)) * (cp$Zend - cp$Zini), - rep(cp$Zend, cp$Lmid + cp$Lend)) - - if (!is.null(year)) { - Zr <- complete_year(Zr, year, sowing_date) - } - - # Root depth is limited by soil depth - Zr[Zr > soil_depth] <- soil_depth - - return(Zr) + Zini <- min(cp$Zini, soil_depth) + Zend <- min(cp$Zend, soil_depth) + calc_interpolated_param( + DatesR, + sowing_date, + x = c(1, cp$Lini + cp$Ldev - 1, cp$Lmid + cp$Lend), + y = c(Zini, Zend, Zend), + yleft = cp$Zini, + yright = cp$Zini + ) } diff --git a/R/utils.R b/R/utils.R index f6f612e..8221392 100644 --- a/R/utils.R +++ b/R/utils.R @@ -12,11 +12,23 @@ CW_data <- function(file) { system.file("extdata", file, package = "CropWat") } -complete_year <- function(x, year, sowing_date) { - # Cycle starting day (DOY) - doy_start <- julian(as.Date(paste0(year, "-", sowing_date)), origin = as.Date(paste0(year, "-01-01"))) + 1 - nb_days_year <- ifelse(lubridate::leap_year(year), 366, 365) - x_year <- rep(ifelse(is.logical(x), FALSE, x[1]), nb_days_year) - x_year[doy_start:(doy_start + length(x) - 1)] <- x - return(x_year) +calc_interpolated_param <- function(DatesR, sowing_date, x, y, yleft, yright) { + l <- get_period(DatesR, sowing_date, x) + stats::approx(x = l$doy_start + cumsum(x), y = y, xout = l$xout, yleft = yleft, yright = yright)$y +} + +get_period <- function(DatesR, sowing_date, x) { + if (!is.null(DatesR)) { + stopifnot(inherits(DatesR, 'Date'), + length(DatesR) < 367, + !is.na(sowing_date), + grepl("^[0-9]{1,2}-[0-9]{1,2}$", sowing_date)) + year <- lubridate::year(DatesR[1]) + doy_start <- julian(as.Date(paste0(year, "-", sowing_date)), origin = DatesR[1]) + xout <- seq_along(DatesR) + } else { + doy_start <- 0 + xout <- seq(sum(x)) + } + return(list(doy_start = doy_start, xout = xout)) } diff --git a/README.Rmd b/README.Rmd index 4a1c5a5..9c177ff 100644 --- a/README.Rmd +++ b/README.Rmd @@ -65,7 +65,7 @@ X <- CW_create_state(cw_input = cw_input) # Choose an irrigation management # Example: Fill Soil moisture depletion when half of RAW is reached -fun_irrig_half_RAW <- CW_irrig_fun_factory(RAW_ratio = 0.5, apply_Dr = TRUE) +fun_irrig_half_RAW <- CW_irrig_fun_factory(RAW_ratio = 1.25, apply_Dr = TRUE) # Simulate water balance with an irrigation management cw_output <- CW_run_simulation(X, cw_input, FUN_IRRIG = fun_irrig_half_RAW) diff --git a/README.md b/README.md index 963042f..0a6efce 100644 --- a/README.md +++ b/README.md @@ -1,75 +1,75 @@ - -<!-- README.md is generated from README.Rmd. Please edit that file --> - -# CropWat - -<!-- badges: start --> -<!-- badges: end --> - -CropWat is an R Implementation of the FAO CropWat Model. - -This implements the functions describing water balance on an irrigated -crop as described in FAO publications of the Irrigation and Drainage -Series, namely, No. 56 “Crop Evapotranspiration - Guidelines for -computing crop water requirements†and No. 33 titled “Yield response to -waterâ€. - -## Installation - -You can install the development version of CropWat like so: - -``` r -# install.packages("remotes") -remotes::install_git("https://forgemia.inra.fr/umr-g-eau/cropwat.git") -``` - -## Example - -This is a basic example which shows you how to simulate water balance of -an irrigated crop. - -``` r -# Load library -library(CropWat) - -# Import example climate dataset -data(ZH_3_clim) - -# Selecting year 2010 -meteo <- ZH_3_clim[ZH_3_clim$Date >= as.Date("2010-01-01") & - ZH_3_clim$Date <= as.Date("2010-12-31"), ] - -# Formatting model input -cw_input <- CW_create_input("SB2023-soja", - DatesR = meteo$Date, - ETo = meteo$ETP, - P = meteo$Ptot, - soil_depth = 1.2, - AWC = 140) -plot(cw_input) -``` - -<img src="man/figures/README-example-1.png" width="100%" /> - -``` r - -# Initial state of the model set up -X <- CW_create_state(cw_input = cw_input) - -# Choose an irrigation management -# Example: Fill Soil moisture depletion when half of RAW is reached -fun_irrig_half_RAW <- CW_irrig_fun_factory(RAW_ratio = 0.5, apply_Dr = TRUE) - -# Simulate water balance with an irrigation management -cw_output <- CW_run_simulation(X, cw_input, FUN_IRRIG = fun_irrig_half_RAW) -plot(cw_output) -``` - -<img src="man/figures/README-example-2.png" width="100%" /> - -``` r - -# Total amount of irrigation applied (mm) -sum(cw_output$Ir) -#> [1] 375.3663 -``` + +<!-- README.md is generated from README.Rmd. Please edit that file --> + +# CropWat + +<!-- badges: start --> +<!-- badges: end --> + +CropWat is an R Implementation of the FAO CropWat Model. + +This implements the functions describing water balance on an irrigated +crop as described in FAO publications of the Irrigation and Drainage +Series, namely, No. 56 “Crop Evapotranspiration - Guidelines for +computing crop water requirements†and No. 33 titled “Yield response to +waterâ€. + +## Installation + +You can install the development version of CropWat like so: + +``` r +# install.packages("remotes") +remotes::install_git("https://forgemia.inra.fr/umr-g-eau/cropwat.git") +``` + +## Example + +This is a basic example which shows you how to simulate water balance of +an irrigated crop. + +``` r +# Load library +library(CropWat) + +# Import example climate dataset +data(ZH_3_clim) + +# Selecting year 2010 +meteo <- ZH_3_clim[ZH_3_clim$Date >= as.Date("2010-01-01") & + ZH_3_clim$Date <= as.Date("2010-12-31"), ] + +# Formatting model input +cw_input <- CW_create_input("SB2023-soja", + DatesR = meteo$Date, + ETo = meteo$ETP, + P = meteo$Ptot, + soil_depth = 1.2, + AWC = 140) +plot(cw_input) +``` + +<img src="man/figures/README-example-1.png" width="100%" /> + +``` r + +# Initial state of the model set up +X <- CW_create_state(cw_input = cw_input) + +# Choose an irrigation management +# Example: Fill Soil moisture depletion when half of RAW is reached +fun_irrig_half_RAW <- CW_irrig_fun_factory(RAW_ratio = 0.5, apply_Dr = TRUE) + +# Simulate water balance with an irrigation management +cw_output <- CW_run_simulation(X, cw_input, FUN_IRRIG = fun_irrig_half_RAW) +plot(cw_output) +``` + +<img src="man/figures/README-example-2.png" width="100%" /> + +``` r + +# Total amount of irrigation applied (mm) +sum(cw_output$Ir) +#> [1] 375.3663 +``` diff --git a/man/CW_create_input.Rd b/man/CW_create_input.Rd index 9e8fc84..412e5c7 100644 --- a/man/CW_create_input.Rd +++ b/man/CW_create_input.Rd @@ -6,9 +6,7 @@ \usage{ CW_create_input( crop, - year, - DatesR = seq(as.Date(paste0(year, "-01-01")), as.Date(paste0(year, "-12-31")), by = - "1 day"), + DatesR, ETo, P, soil_depth, @@ -20,17 +18,12 @@ CW_create_input( \arguments{ \item{crop}{The code of the crop} -\item{year}{Year of simulation (Only used for detecting leap year). -If \code{NULL}, the calculation is limited to the crop cycle of the plant} - \item{DatesR}{Simulation period (\link{vector} of \link{Date})} \item{ETo}{Potential Evaporation (mm/day)} \item{P}{Precipitation (mm/day)} -\item{soil_depth}{Soil depth (m)} - \item{AWC}{Available Water Capacity (mm)} \item{cp}{Crop parameters (See \link{get_crop_params})} diff --git a/man/calc_Kc.Rd b/man/calc_Kc.Rd deleted file mode 100644 index 712604f..0000000 --- a/man/calc_Kc.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/calc_Kc.R -\name{calc_Kc} -\alias{calc_Kc} -\title{Compute crop coefficient time series for one crop cycle or calendar year} -\usage{ -calc_Kc(cp, year, sowing_date = cp$sowing_date) -} -\arguments{ -\item{cp}{Crop parameters (See \link{get_crop_params})} - -\item{year}{Year of simulation (Only used for detecting leap year). -If \code{NULL}, the calculation is limited to the crop cycle of the plant} - -\item{sowing_date}{Sowing date in format "MM-DD"} -} -\value{ -A \link{vector} of Kc for each day of the year or the crop cycle. -} -\description{ -Compute crop coefficient time series for one crop cycle or calendar year -} -\examples{ -Kc <- calc_Kc(get_crop_params("SB2023-soja"), year = NULL) -plot(Kc, type = "l") - -Kc <- calc_Kc(get_crop_params("SB2023-soja"), year = 2024) -plot(Kc, type = "l") - -} diff --git a/man/calc_RAW.Rd b/man/calc_RAW.Rd deleted file mode 100644 index 4759abf..0000000 --- a/man/calc_RAW.Rd +++ /dev/null @@ -1,29 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/calc_RAW.R -\name{calc_RAW} -\alias{calc_RAW} -\title{Calculation of Readily Available Water (RAW)} -\usage{ -calc_RAW(TAW, p) -} -\arguments{ -\item{TAW}{Total Available Water (mm). See \link{calc_TAW}} - -\item{p}{fraction of Readily Available Water time series. See \link{calc_p}} -} -\value{ -A \link{vector} of Readily Available Water. -} -\description{ -Calculation of Readily Available Water (RAW) -} -\examples{ -cp <- get_crop_params("SB2023-soja") -TAW <- calc_TAW(cp, - AWC = 140, - soil_depth = 1.2, - year = 2024) -p <- calc_p(cp, year = 2024) -RAW <- calc_RAW(TAW, p) -plot(RAW, type = "l") -} diff --git a/man/calc_TAW.Rd b/man/calc_TAW.Rd deleted file mode 100644 index 2fef094..0000000 --- a/man/calc_TAW.Rd +++ /dev/null @@ -1,47 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/calc_TAW.R -\name{calc_TAW} -\alias{calc_TAW} -\title{Calculation of Total Available Water (TAW)} -\usage{ -calc_TAW( - cp, - AWC, - soil_depth, - year, - sowing_date = cp$sowing_date, - root_depth = calc_root_depth(cp, soil_depth, year, sowing_date) -) -} -\arguments{ -\item{cp}{Crop parameters (See \link{get_crop_params})} - -\item{AWC}{Available Water Capacity (mm)} - -\item{soil_depth}{Soil depth (m)} - -\item{year}{Year of simulation (Only used for detecting leap year). -If \code{NULL}, the calculation is limited to the crop cycle of the plant} - -\item{sowing_date}{Sowing date in format "MM-DD"} - -\item{root_depth}{Root depth time series (m). See \link{calc_root_depth}.} -} -\value{ -A \link{vector} of Total Available Water (mm) for each day of the year or the crop cycle. -} -\description{ -Calculation of Total Available Water (TAW) -} -\details{ -Parameters \code{cp}, \code{year}, and \code{sowing_date} are useless if \code{root_depth} is -provided. -} -\examples{ -TAW <- calc_TAW(get_crop_params("SB2023-soja"), - AWC = 140, - soil_depth = 1.2, - year = 2024) -plot(TAW, type = "l") - -} diff --git a/man/calc_isCycle.Rd b/man/calc_isCycle.Rd index 53f5642..757a6a2 100644 --- a/man/calc_isCycle.Rd +++ b/man/calc_isCycle.Rd @@ -4,12 +4,12 @@ \alias{calc_isCycle} \title{Compute cycle period extend during the year} \usage{ -calc_isCycle(cp, year, sowing_date = cp$sowing_date) +calc_isCycle(cp, DatesR, sowing_date = cp$sowing_date) } \arguments{ \item{cp}{Crop parameters (See \link{get_crop_params})} -\item{year}{Year of simulation (Only used for detecting leap year). +\item{DatesR}{A \link{vector} of continuous \link{Date} If \code{NULL}, the calculation is limited to the crop cycle of the plant} \item{sowing_date}{Sowing date in format "MM-DD"} diff --git a/man/calc_p.Rd b/man/calc_p.Rd deleted file mode 100644 index 9438c02..0000000 --- a/man/calc_p.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/calc_p.R -\name{calc_p} -\alias{calc_p} -\title{Compute critical depletion fraction (p) time series for one crop cycle or calendar year} -\usage{ -calc_p(cp, year, sowing_date = cp$sowing_date) -} -\arguments{ -\item{cp}{Crop parameters (See \link{get_crop_params})} - -\item{year}{Year of simulation (Only used for detecting leap year). -If \code{NULL}, the calculation is limited to the crop cycle of the plant} - -\item{sowing_date}{Sowing date in format "MM-DD"} -} -\value{ -A \link{vector} of critical depletion fraction for each day of the year or the crop cycle. -} -\description{ -\emph{p} is the fraction RAW / TAW -} -\examples{ -p <- calc_p(get_crop_params("SB2023-soja"), - year = 2024) -plot(p, type = "l") - -} diff --git a/man/calc_params.Rd b/man/calc_params.Rd new file mode 100644 index 0000000..4cea212 --- /dev/null +++ b/man/calc_params.Rd @@ -0,0 +1,79 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/calc_Kc.R, R/calc_RAW.R, R/calc_TAW.R, +% R/calc_p.R, R/calc_root_depth.R +\name{calc_Kc} +\alias{calc_Kc} +\alias{calc_RAW} +\alias{calc_TAW} +\alias{calc_p} +\alias{calc_root_depth} +\title{Compute crop parameters time series from crop parameters pivot points} +\usage{ +calc_Kc(cp, DatesR = NULL, sowing_date = cp$sowing_date) + +calc_RAW(TAW, p) + +calc_TAW( + cp, + AWC, + soil_depth, + DatesR = NULL, + sowing_date = cp$sowing_date, + root_depth = calc_root_depth(cp, soil_depth, DatesR, sowing_date) +) + +calc_p(cp, DatesR = NULL, sowing_date = cp$sowing_date) + +calc_root_depth(cp, soil_depth, DatesR = NULL, sowing_date = cp$sowing_date) +} +\arguments{ +\item{cp}{Crop parameters (See \link{get_crop_params})} + +\item{DatesR}{A \link{vector} of continuous \link{Date} +If \code{NULL}, the calculation is limited to the crop cycle of the plant} + +\item{sowing_date}{Sowing date in format "MM-DD"} + +\item{TAW}{Total Available Water (mm). See \link{calc_TAW}} + +\item{p}{fraction of Readily Available Water time series. See \link{calc_p}} + +\item{AWC}{Available Water Capacity (mm)} + +\item{root_depth}{Root depth time series (m). See \link{calc_root_depth}} +} +\value{ +A \link{vector} of the parameter for each day of the crop cycle or the period defined by \code{DatesR}. +} +\description{ +These functions compute the following parameters: +} +\details{ +\itemize{ +\item \code{Calc_Kc}: crop coefficient $K_c$ +\item \code{calc_p}: critical depletion fraction $p=RAW/TAW$ +\item \code{calc_root_depth}: root depth in m +\item \code{calc_RAW}: Readily Available Water (RAW) in mm +\item \code{calc_TAW}: Total Available Water (TAW) in mm +} + +For \code{calc_TAW}, parameters \code{cp}, \code{year}, and \code{sowing_date} are useless if \code{root_depth} is +provided. +} +\examples{ +# Compute Kc for the crop cycle +Kc <- calc_Kc(get_crop_params("SB2023-soja")) +plot(Kc, type = "l") + +# Compute Kc for a given period (less than one year) +# with default sowing date defined in crop parameters +DatesR <- seq(as.Date("2010-03-01"), as.Date("2010-10-31"), by = "1 day") +Kc <- calc_Kc(get_crop_params("SB2023-soja"), DatesR = DatesR) +plot(Kc, type = "l") + +# Compute Kc for a given period with user defined sowing date +Kc <- calc_Kc(get_crop_params("FAO-MAIZE"), + DatesR = DatesR, + sowing_date = "05-01") +plot(Kc, type = "l") +} diff --git a/man/calc_root_depth.Rd b/man/calc_root_depth.Rd deleted file mode 100644 index 305afe7..0000000 --- a/man/calc_root_depth.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/calc_root_depth.R -\name{calc_root_depth} -\alias{calc_root_depth} -\title{Compute root depth time series for one crop cycle or calendar year} -\usage{ -calc_root_depth(cp, soil_depth, year, sowing_date = cp$sowing_date) -} -\arguments{ -\item{cp}{Crop parameters (See \link{get_crop_params})} - -\item{soil_depth}{Soil depth (m)} - -\item{year}{Year of simulation (Only used for detecting leap year). -If \code{NULL}, the calculation is limited to the crop cycle of the plant} - -\item{sowing_date}{Sowing date in format "MM-DD"} -} -\value{ -A \link{vector} of root depth (m) for each day of the year or the crop cycle. -} -\description{ -Compute root depth time series for one crop cycle or calendar year -} -\examples{ -Zr <- calc_root_depth(get_crop_params("SB2023-soja"), - soil_depth = 1.2, - year = 2024) -plot(Zr, type = "l") - -} diff --git a/tests/testthat.R b/tests/testthat.R new file mode 100644 index 0000000..80d0692 --- /dev/null +++ b/tests/testthat.R @@ -0,0 +1,12 @@ +# This file is part of the standard setup for testthat. +# It is recommended that you do not modify it. +# +# Where should you do additional test configuration? +# Learn more about the roles of various files in: +# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview +# * https://testthat.r-lib.org/articles/special-files.html + +library(testthat) +library(CropWat) + +test_check("CropWat") diff --git a/tests/testthat/test-calc_interpolated_param.R b/tests/testthat/test-calc_interpolated_param.R new file mode 100644 index 0000000..560597b --- /dev/null +++ b/tests/testthat/test-calc_interpolated_param.R @@ -0,0 +1,13 @@ +test_that("calc_interpolated_param works", { + x <- c(2, 2, 1) + y <- c(1, 3, 2) + expect_equal(calc_interpolated_param(NULL, NA, x, y, 1, 1), + c(1, 1, 2, 3, 2)) + DatesR <- seq(as.Date("2000-01-01"), as.Date("2000-01-07"), by = "1 day") + expect_error(calc_interpolated_param(DatesR, NA, x, y, 1, 1)) + expect_error(calc_interpolated_param(DatesR, "1-223", x, y, 1, 1)) + expect_error(calc_interpolated_param(DatesR, "04/04", x, y, 1, 1)) + expect_error(calc_interpolated_param(seq(as.Date("2000-01-01"), as.Date("2001-01-02"), by = "1 day"), "04-04", x, y, 1, 1)) + expect_equal(calc_interpolated_param(DatesR, "01-02", x, y, 1, 1), + c(1,1,1,2,3,2,1)) +}) -- GitLab From 1dc5eee6f633eb522ef066ccc39f7a568029a86e Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@inrae.fr> Date: Fri, 18 Oct 2024 18:38:27 +0200 Subject: [PATCH 2/8] fix: debugging CW_create_input And some doc fixes Refs #6 --- R/CW_create_input.R | 18 ++++++++++++------ R/calc_Kc.R | 1 + R/calc_isCycle.R | 4 +++- man/CW_create_input.Rd | 2 ++ man/calc_isCycle.Rd | 4 +++- man/calc_params.Rd | 2 ++ 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/R/CW_create_input.R b/R/CW_create_input.R index 853f71c..03fd416 100644 --- a/R/CW_create_input.R +++ b/R/CW_create_input.R @@ -35,15 +35,21 @@ CW_create_input <- function(crop, AWC, cp = get_crop_params(crop), sowing_date = cp$sowing_date) { - year <- lubridate::year(DatesR[1]) Kc <- calc_Kc(cp, DatesR = DatesR, sowing_date = sowing_date) isCycle <- calc_isCycle(cp, DatesR = DatesR, sowing_date = sowing_date) Zr <- calc_root_depth(cp, - soil_depth, - year, - sowing_date) - TAW <- calc_TAW(cp, AWC, soil_depth, year, sowing_date) - p <- calc_p(cp, year, sowing_date) + soil_depth = soil_depth, + DatesR = DatesR, + sowing_date = sowing_date) + TAW <- calc_TAW( + cp, + AWC = AWC, + soil_depth = soil_depth, + DatesR = DatesR, + sowing_date = sowing_date, + root_depth = Zr + ) + p <- calc_p(cp, DatesR, sowing_date) cw_input <- tibble( DatesR = DatesR, isCycle = isCycle, diff --git a/R/calc_Kc.R b/R/calc_Kc.R index 1f2fca0..202e2b0 100644 --- a/R/calc_Kc.R +++ b/R/calc_Kc.R @@ -10,6 +10,7 @@ #' #' @param cp Crop parameters (See [get_crop_params]) #' @param AWC Available Water Capacity (mm) +#' @param soil_depth Soil depth (m) #' @param root_depth Root depth time series (m). See [calc_root_depth] #' @param TAW Total Available Water (mm). See [calc_TAW] #' @param p fraction of Readily Available Water time series. See [calc_p] diff --git a/R/calc_isCycle.R b/R/calc_isCycle.R index 62ab734..ec44829 100644 --- a/R/calc_isCycle.R +++ b/R/calc_isCycle.R @@ -6,7 +6,9 @@ #' @export #' #' @examples -#' isCycle <- calc_isCycle(get_crop_params("SB2023-soja"), year = 2024) +#' DatesR <- seq(as.Date("2010-03-01"), as.Date("2010-10-31"), by = "1 day") +#' isCycle <- calc_isCycle(get_crop_params("SB2023-soja"), DatesR) +#' plot(isCycle) #' calc_isCycle <- function(cp, DatesR, sowing_date = cp$sowing_date) { Ltot <- c(cp$Lini, cp$Ldev, cp$Lmid, cp$Lend) diff --git a/man/CW_create_input.Rd b/man/CW_create_input.Rd index 412e5c7..41bb05e 100644 --- a/man/CW_create_input.Rd +++ b/man/CW_create_input.Rd @@ -24,6 +24,8 @@ CW_create_input( \item{P}{Precipitation (mm/day)} +\item{soil_depth}{Soil depth (m)} + \item{AWC}{Available Water Capacity (mm)} \item{cp}{Crop parameters (See \link{get_crop_params})} diff --git a/man/calc_isCycle.Rd b/man/calc_isCycle.Rd index 757a6a2..d7b0daf 100644 --- a/man/calc_isCycle.Rd +++ b/man/calc_isCycle.Rd @@ -21,6 +21,8 @@ A \link{vector} of \link{logical} of the crop cycle for each day of the year. Compute cycle period extend during the year } \examples{ -isCycle <- calc_isCycle(get_crop_params("SB2023-soja"), year = 2024) +DatesR <- seq(as.Date("2010-03-01"), as.Date("2010-10-31"), by = "1 day") +isCycle <- calc_isCycle(get_crop_params("SB2023-soja"), DatesR) +plot(isCycle) } diff --git a/man/calc_params.Rd b/man/calc_params.Rd index 4cea212..ab605bd 100644 --- a/man/calc_params.Rd +++ b/man/calc_params.Rd @@ -40,6 +40,8 @@ If \code{NULL}, the calculation is limited to the crop cycle of the plant} \item{AWC}{Available Water Capacity (mm)} +\item{soil_depth}{Soil depth (m)} + \item{root_depth}{Root depth time series (m). See \link{calc_root_depth}} } \value{ -- GitLab From 5e6b815f2bcb2cf14bd02b1cea720be0a7a5c93e Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@inrae.fr> Date: Fri, 18 Oct 2024 18:58:10 +0200 Subject: [PATCH 3/8] docs: update README --- README.Rmd | 1 + README.md | 6 +++--- man/figures/README-example-1.png | Bin 12709 -> 12756 bytes man/figures/README-example-2.png | Bin 10593 -> 10266 bytes 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.Rmd b/README.Rmd index 9c177ff..8933259 100644 --- a/README.Rmd +++ b/README.Rmd @@ -17,6 +17,7 @@ knitr::opts_chunk$set( # CropWat <!-- badges: start --> + <!-- badges: end --> CropWat is an R Implementation of the FAO CropWat Model. diff --git a/README.md b/README.md index 0a6efce..bd60af1 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ CropWat is an R Implementation of the FAO CropWat Model. This implements the functions describing water balance on an irrigated crop as described in FAO publications of the Irrigation and Drainage -Series, namely, No. 56 “Crop Evapotranspiration - Guidelines for +Series, namely, No. 56 “Crop Evapotranspiration - Guidelines for computing crop water requirements†and No. 33 titled “Yield response to waterâ€. @@ -58,7 +58,7 @@ X <- CW_create_state(cw_input = cw_input) # Choose an irrigation management # Example: Fill Soil moisture depletion when half of RAW is reached -fun_irrig_half_RAW <- CW_irrig_fun_factory(RAW_ratio = 0.5, apply_Dr = TRUE) +fun_irrig_half_RAW <- CW_irrig_fun_factory(RAW_ratio = 1.25, apply_Dr = TRUE) # Simulate water balance with an irrigation management cw_output <- CW_run_simulation(X, cw_input, FUN_IRRIG = fun_irrig_half_RAW) @@ -71,5 +71,5 @@ plot(cw_output) # Total amount of irrigation applied (mm) sum(cw_output$Ir) -#> [1] 375.3663 +#> [1] 212.4834 ``` diff --git a/man/figures/README-example-1.png b/man/figures/README-example-1.png index c6bb85000f3bbf6c9358008cd15ccca8ebc9f82e..9f8f587a5bdc8ff8ff63d3c933904a6506e083bd 100644 GIT binary patch literal 12756 zcmbVyc|29$*YLU5<)XO8WG<As!H`_!nv(gNXGNK($UGj2zLFthk(@H-nljHSO6F_I zoXlJyqLAS|>ic`1=ks~q_n-GT=Qw-sHSV?U*=wz{qww0QG}LU=007Xa-B8v803-we zh_94naF3SWMGCkvjMp?!ftvt;1pqq$8xPo30k4mMCVQZ{m6cVVmDPq-K8)2SlZ}l{ zTwELm!U9+<U<Y4VEPRj0+EroW;d2}Ym1mWgXSIPZd3pFACU27|9|oU|TE~Z*mR78m z8$l};K0n#~p=-lxWAg{WMm`LFvVo7xQM*5K*a3ESf7sYz<KZVe_^3L9Nw{gbxoO3^ z9Ut(W;6{MYPi};{pkg3Qo;B<b*RU{{ZCF@iW>{lmSmS8yAI7m-v9ZUPgxF7?Vm}?l zV}bZT(#OZc;>X92SH+Ky$B!Rn+OTHY$Y(Z&WsWvxj*b%Cv<Sy+VhOQY1i~i*VeZfE z6Jc(SFn3gC2UOW%tH$H2#*eCw#;cBw8pGuO@N8@x9c>Fb`V_16DHg`~!}HVJr=w4w zj^O)IcM33?X*1dwHaZG3fni6-<FSAE!<5FykB;UDZgYg#x#Qyq{+l~GT3K1y@o_z} z?t;0(bdNp}j){%OAG3uq<_LcX!y>@sj|m(d9fj>~v%rR>x_iU)9stm`9AAhw_xw8m za0XCQRxt2;zM2tzo1@LLExC2G@{I>IQ(g|uwQ(&y%1S||!j$YM&v9?kQPL4JD3Lt8 z6LaZ1hTz&VZ)73Rlvpfj$TxZTrmL%`$=5FA#|W&&l+?!L>e{z8cYFE0?m)Y<iZ79$ z6~`$cyx3VNABq59-9LqVL~TYXAmnh|VS92(;L^(>E?erDFgl{qkQRX+Pxk-W9z$$R zN9RRd+h#Fd9$sEt4~!P)y)7Rqe9&lkSt?Y5k8r}~y4y`T+u*Yo^c_wPGC<4bm4VID z{-psDb-x^KR?*~&GGt3XhcrG9tKEU+c@J#$3FpascdI^s#-<_5Z~dc>FnD7#SH4Cf zVCTc{E~kK`{hbQdT&|fkdBv{0@P8uHSCth2bzb*Qv6t>WPBt@H7pK@JWs*m0ykqyd z%@0cE5ZA7%#zoqCFVi2!ZY=Y>nzobCP4~yM>7T^2EC<~)(#Jhp;cz|2bS+@@@Zqox zVORIjUAz$s_w>Ey;Jv|5mXRGyY-Hrq3TmFqf<2ls=R$S)95q)bLRQR6CgZ9Fpb{cO zrf$db+2T>&2EVmF;l&AMiDW?u3TiSUQBL51N9}eRnsf4ZN3HIHLU)6Gxsfr~^z>r! zOY~4w>BPmo4%gXYX+o5(#MJepoE*Qss@sI4D?Q<C3*Tg0B|{(dEq(d%%Tifl!iC>S z922moXRp4&{XDjFSxs)~=XiC^Py>^@L({_=ZLY9=1-Vdejg6xAk|E4Z&wCkeA0?4a zXG)Bw?oCJL*Rc*$=7$lT;>038;;<l>2+c*=8&}3+v&wG85v!7Iy$47*gxucG42NGc zj7>v69LeN?kyS+^gmfb`_0l_bomW}D3@q5#<e)g3>TNR09#Ae^N;uF}lIX%Owh1*~ zAAG73BUE8LsYM_om%!Ft)70OIms@%##WlCuoxa+wjv9R8m9SGX6_v~KUS}q+K|spf zJjUmyc2i;DbzJoLU5COP#8T4E*|e@UvBwn)h)LO_gOTw5eKC*R{mu?2R7DNV!;fYN zKVp;>M_8htQU33roQKSB3dOffL*4lOvhUyFs!m=_e$_RD#pBe*q-8U&5@~@BxsZ1o zN=5s%hqvdpe%zIFpl^SHFpIa&u3T1-gc;{lUxMc&48T4i2Q0<x$HIcSBt&qNjw*Gm zuL4dkxwuMS_;7J0b*2T$<W#x$;#_JJSA`^QSw1=dk1_~2aqQEoI8KuoP~F}7kNbMv z2d~f#4*|?)G-UQr`7&Ccju>@*-EVS&!K3YN>M1NKI9Jo-mqj&SUd9W6+I$FHs+Y63 zJVNwG6!;#<I0MDB!e*m$6eXihwsa22cik|=Y1GpZs}K=p(igdy5Gpu1v!XhF<Regw z6*0Dd6--V8DD#CF_$dVvA9?_dXs@czxKKPQslDwg_=T*lwgZcRr&NL!V#IT7GvfJY z0j7c#3zndVG8xuw%TN7;mIy|Trl_ROcUOU3Ib#xXt38~nVMFdkYdr^x{7ae*#?PnM za}}<MT7IK_Z8Z8T;=7E9%xUzQW_wXcMNx)!sb46%$t3d0=NhzV(uJq;Jkp5<c;Ruf zidtERBSdgkm~~sCa$(!2RxaZE^qhqrw<*{LPPT#I*kiKzsq$YSSL5($=(aC->hSTB z@OiasT1&i*)@|P%JiM#IJ%G)pBsoZ;$m>O`3|iu5-K{CFtDz*7mqtHJ&pGB?!({^J zLI+3pp~xq>fY;1mxLvZ1+BGJpb4a1a2nvZRr}}e(WD>hVF^Sdf;cgfB1L^UoL6>o9 zsJ36_d8xh>_P4;k)A?T>F(8|=nTJeEKP%MW_3jb7hkA2*`Wv*9?Ga!}Pi`XUs^oTT z;5~FcBmBDjYralUn~u0J!-kOjM}iJw++cmLQCC^#3l>w7oq-ZuQG=<ijVZ|W-odq2 znv+C_1fSC{kIIkI^rT=@iq`T6;Imc}&|3TO1OFfXX>>$2iluC6+)L7A>21`YLp}9U zwkZx)wL84{2C^`z3h~!n2g76O@qcAzLykd1Gl4u1@dhJV+FNM_9Os8W{zK^yZggV3 zmgfWrKB`s$wIA41UR?fs?1sl)n~fIWeDcxuwBuheX(@1xHiL}qEYwqY>We<LLoBhF zEa3ZIeGD1fhwbed;e0FaD`Sr_|E#x)NoZgHabjJXAM9~Ex+TiW<tXi;G%@x<qOq-0 zK-1H8bHTVLCOWRo|Fl-iJUd=0Yggr$#S`=r4OHLRvk4_`4OF7LKk{w7e4b%K-Pi39 z(kHiwB8E%7@B)Y~2K?M~?o}L8vS!bpui8m8-+093t>9ZT07&$3o+CS_L@vS3(u;2O zwUKs%36uY_&_yjpqhmOX#CN|#n(2fLlh|>X<U2V-uz)P7TJmhU?m8ekx3DC$X2CTW zB+>l!#XXdRcH|QZa)aB;wKIgCj~{*@HvS8Z9v^eVnS(e{<9F>$lhQVnlC`_C{<_D8 z2TES8Daz*}zTt$l3)l2D7?1^wjvGHw@UPL@2|-k2C0<63-LT+=D4s-uR~)<#<Pby8 zALZtDRKY8OleLAcvw!CIo4a=YpU?N2FS4_-VS<O`kWBsQ#c?3pb+e?$I5r(I3|3pt zVWM78P<dH7t@Fn65bOj7!u^||_9HNs5jR?eHHsd0E4q$>UHh0UGro!p;VM*2j}N~= zK(ejdukg(S-IOZ0A{42B>27E)1aR^~7iQB|fo_*@E{W=lo?Z~-ft+^9yxv#OgRm2! zJu=1->Fk=<9A1~X!v5VrmZoJS3{=o@a5=)9{(V3GSueUDa_Ufnu>)3_l=(6Q=QSz| z+gui~KjfAdpQ6a*jZQMGBLlI}m-8r`^vQFAL7}L)c2O3A&Ea$!=qs&zVn^#>oqK*- zltH*0(a_Fqpqet9Lh0n)Ew@O8FYxlq{&}M%+dD(DLTBgOR&9%}0SArz>s|7)OPsRr zj-a|Sj%sB*fdCtv{441M<aGy`YLu<D$tB_Fmnk4CFqN~c5FNhosiat>P4tP81&dD? zE2KKCe=VH6;!?-cLxt{b&xs%8OYahvy+lO)iQh0zR>m@sNTH1Bs=6XXOp%w}srDbQ znH?D!akF21BVPEHnV<KWr}(~bl9mh4um8euUD_Bt|D*WBeO0z~p3H4CBr?sX0<B_Z zV|xWm{V^IfUo)xcZ&bVZNC>w_z<{U7<0=Y&@ULeT(kx{MwWqBPmU;p1ZaghtQ)hj| z=S}BdPzszTGD+3xGZLdt!9L~YPGWCQvKQV%Huo@(%uff^=rMx1lX6S@6^gilFTAqf zEyzfA9pWQ$E53zzek?!NAPqE|{lTj8n<_WpEk4is?Zvjt0zFal9IlNr{}QI-&eebW zFvRw&E#=fpH5A16<k8>))haLKmMa@RSsv2XfWQhOu~$%D-%jK68>GCk&o)o~W4s#s z1tHYOXUSom@RRD9a!}5LtEj0bGI^d)ww~{>83_w#-)|x{Rq(wd+oC1b@&ChqzI@Fq z(Zh_w*q^AL^qu;^<-rY-%I~MG^>5gGdiOYKf#ALOH#1F5Y7|4_OCrjHet#SATil3= zh_GLO&vi8~5>ASKCK32D&}1F=nGy5ZywLUQg2)<RtLt7|R)+mLm(_XMgmu5bvtRs! zW>KSRA<iAVP$CkFztM$ATTrIQD`goVj5q-G#>Ep-p(=uWQyW*NYIPd<m5g<I0Il(n zHtCd2F!%K}S%wqkbKk%4CaNWIc4b)GRXVUElC55T(Y$~5XoO#FUtFr(b@NU6Tdz|; zTc2?t((YUx*vm!{^HKRme7U>CLXRXwhx6~<WO{tOZUL|c$TjSDX)P$607-dknr?uW zrTxO<M`m2xbug9yE;t#rQ3?zS7y`cFn*OO@8eB;(EnHQ6<~ZRy3o@axZ4v&b&)-(U zm9L#M?KD^@`b(4+kwd$sNkyDxN12nU7a_VUZ9UEUjWm7=e9+9}f<|K>>^$zyrghe% zkRVJiG-Ka%sQxZnFGxbxYI{OcjX^np0Krb|`ztKCFy%#0OoA#<ynYvR!CaOu&${Ij z_?;K9w|O(eWYy$C{!nQkwa-W(@p?AG!J~bt)#eL5D;vMhlTQ+Ahl>@bZhC+2ynjS$ zRlnz{P!u_-Uy=0#JQX;ReM$-IjEz=q%F6ZCx3T@K6LVCsviJL5P9cwBuzw@_PSki0 znVH|fXANbkoWi_|NAry<CECD<c!Zrd1fKd*;h0^!0ZEQWB{N{0+$51^6Ol@{MR_sm z@Ol(OMmmpiay^G6-T3K`Z&Y>TApVC!)R5=D1iWfGir6iR&???qAGaX^12x-UGCtF8 z<|fqiL;C+K=ZPTyo9`I9pGOKYnyu<?+wnkRaKdBgp38y1ViGd_thx3bMQ@m@z*(rM zAl)b(vG=S#`6lqUC4<=dF6MxuM2;2IIab0;w2C4w&fOyFCxS}uZ=VWR5>Go2k^6(v zfk4U~x{$Dw*GwgR{y*qUat``N@<AICebOwcP7|b&&pJ~)^4yI9t`d7+`yDF0(?Xtm zx>ucoBrw!rOo*Y+Exl7SCF53F=G`uwlYxiV6gGwD+(}#qsrz?bukc|yaxtr#f`@&n zN8h&co;NtGgKjq)=Vr{b%sI)_<*TRmK0E(X#Weec{w|Ww<2LHEI#yGu^2CyG@6?pd za$MuSX}8s0ORslVID>@R-r-VbHCN+LclRltskQDkUMTf?N@(ZneN)cGmFHLSI{x^y z_lXi2b24f!@<CB^%IyyW%L6GL65M^ygc`M3wa27YrH$38+|wO5o_*insPXGUOjXaQ zt->NTkv4!Bi@?^YzU32?{XuS?cdg+{z)t@|pC?xCb{ItP{Gda0t~~8rFR2Gn7rf21 z@toJFdTZ$y<?C_x;CE~Er0#ELp_0Q8V~vg2!3sFjIht8-=q4x%7Pcmv4c+fygkqOC zyeqYG(~aPTchkO71I}V<5ra8!no}Ufh)8}dWyF1)=m_+P4^|~J52;>23hCc0%w@D# zvkKCC>fY!oEL;$0filQtWAuHfM0%|FQ^hcARHSg7$zIZRyyFq+3FQgm+?uU3ymt0t z(gqfU4kXOxTgKFH6Kc^#>8A2t$=uTZdctaemK<hVxn<gERZIdwhOO_m3tt;M+36vI zmMd=pYd70x6~6{8_8xS+y=^^=zYKjaw9n0P(M1F2+|v$Cy}MXAgATMM8o!@edbS+{ zbUQvQ4r;JEGYAmxFTV5`iV=JpU6SV42L<a6Ik~wJL#9T;8G6-5WcSI&ba!_?CT|OS zIWVl$YQ`mS_ZnSdCNtY%&wWwu!<v?;PUQ~7?~w}FU5c^WDrDVKuc`5jt8dV*)^-Of zfjB~^Ld*}4D`eZP;vNsXYeQ(tK6jk_AqKg$XBtq!cNy~UZE5OGc`5D47{xzrPl@m* zMW>-9(r6zpu0Jih<YYVeiVWwROqNvJ;~@X?`*-KKP(N|)2{?zo#6)aZeCd*QLFt}e zK!XDAbzgbh#2ya@d^8obh{%~uSW^Gg{?F{}ujb#CZ5yY^w>A~KJ<CgFmlizlG@R6O z2K&d*!%dWk<foR`{4FTEq80dpb$&p7J(<sA#4u(XFAU1`f=K=|)af%~5^t~m^HD`H zn13Vorgtd9((4Jjh*@5pF8i6z-bK+5ZJk~N8*N8SiwcCqX@M1m(fdjs@7+u=kH9gr zRi)@Td5vQ$_L~gq7hi0h-^%9N+L7_y-MMY`sDxJeCo$mxSmi3ohnwZ9(AJSB1o?1l zW$>SC%VD|t+9PuL-jd_j#Vh9=TPr=lE5Ib8YvPhU=wxD9pH<D})u$%sP;{$TfB{K8 zdYt9zi3<;xCZvAR<p0n{kH;7h$VA{E%#dTqrI#1-wrq1LGD0t%g|K3-an(+3CCuNu zE59jp{#QS&X0;A=To$^hpx?Xevy&~Tau@~%P$ccWT$A)Rs*8Qr#9Ml50K@**EB)Cv zJ@mXRe8Lj3_JeG-8e;df88x^;qx#rUv!auiesNWt!(psKeTQ6amdS`t!<WqohKN&% zI;cTmsC-=B<euzYi>iiR<;qhlixo5uC$1QbtgF{d^v#RPiA8hfBL~eb2ae@11W*;s zxTuxq%(D4SL&=<6K+!VR&bd+ur;6x)<xur8;BYgF?lDg{Kuk2VH&~4$G^Cn$hO;5f zc+CmS2%BqiTj-p|B;oK_CM1o_m&c49emtm_8v`v`M<=JnE3V9uAw*HRV1G}0+WnKe zQ1dIV<6&nS;%Ab=Bx0=al*ZIYp*FS6>^GFq<;=I_2{mWJ7ihoiaB0o#DpTrOk6bp{ zn~j^4^73KEn-k^{HDun?3dTZgi@*WPM}Dtow=aAuoee){H29VA?9=OMMo;)<-gSh3 zZhe_Ml*37x-}>#(?>Fz_{vNU$RAgD6yYEjd<aoZI6y^bf6t^lRaPRGB!57kje!C(; zFf}~amK+P{R9Toe%}M4Yobf2YH+gT*qlo@3JLF}te?n@~pJ=h{n|N*`hzB)$;{*a9 zOo)~thO2j7$dtW+vb(h=`|EUF*JT!$kqvL7qjrA9OR*9$m(y;qrs<E&vYA+pOlO^Q z>|Pm^63l!-QpgPaR=`w3cZrq`Z%LR{w|D1EX+$^)pqR>5>G4*}--^m_R0ET6^i@Vi z$U=Tpu>Q@5ET~8`#{MRiHkkY#(44=j_F_<-95<Z#ySLLA?9O>>91S{|bqi+%dz<ud zIG|;hrssv{jvSh?-9;m5@rVpsVPV>5CK*%HE#YEfFwk|}33L8nq<Z<??B{)B@t79b zr9i7ZV4Vr-qt%)*^$u0)cd+suV9@#EF<dwPA-U%TR%CJK8xnFcYal<J`S$9ipHN-6 zGO37fy{7UkcciFVL;t9boWn3M1nZ?f&fka(C{^xgv1H$z7AZy`PHC`H=HJBeE`Fdv z8QA#j&b<-2Wbi?;AE|#YBD>$Es*G_07+VnHRzTL77#uq6fFEa^Bl7Q@cH~0LI|gDR zgK82B#hS>Nx8K~F%m^!~(!z{w3UN>S6JNE7pqCz@UCX$<EKElT%Y0vAh7N#=_x7p? zOZWb8Ma0kxx063>B8`3_i62z_!S9Iqi0tfgD_e_(#Q7R}{E?A3{n4m5F1p}xv~LAR zwarG49ir0k;lm(-UFXxpmXgC{ZPj^Yw%Hj@(Y8q;DAI^uhJs60AhY>{hXzAu=oMNA zZ$XmC_v!gXu9inq<T>E^WXMs@!PX*Z)pKI+zGRuyWr1rX6tq#QJS<0I88VVuRk(OF zDt2nv=Os+FJ7u=mt<yL)!xz(G&vkbq-I4y5_W;<xx9$B<f6CzF2lfkXmZNK@pzwWK z47j;#KJhajJ@ih>LRSY-xee*`&L!-0)cC3T!}TpENmwdJmeg!y#XR5PgPtU*s7;V- z>S|z6__k>-te})-Y<-!irR9|`pKqE{{jAwD`c09fTGM&qf+Klwr`kUEc*=}mTCHTg z@a#+mT(odB)$za2h{L3e+_CqWpH2b1pP?-c$Zv#8zCaHdvl25HX{5aSG4h}uTA4w! zbF-8RB0GWG-4~^;uMsIg-i^RGRP-!8h>@YVt``kzFaNImsgeTHI+5Kd^!f6^_A(ug z#t=xlqnPD=>pJ4J+Sq<=claqG?#CT1;b9I+p4vZ6L+{)1CR$tE!@blUMc}+qkNL!L zG^f57OD3F8N|~P?ab)u+zB8FqKtGbrPp`3)Ic12@I}43g@#Er(FPdMBVn#xz%pMH8 zMNV1Qwj<ik37Uy<#z<SeDvGS~Cj!7wHFi|@8*<DaQ&(PE3b;liuP59xx4^9TgntYg zE8f&4_lh4cZdSyB1<1KU1TN|`OAu2+1He|2SRo{Y!6c>LAxS{d1;B2M8=zkC#ZPX@ zMC?_IEf;JH<d_<6I4mocp15(<50`U$PDlm|2wV-8imUK4mykM*B)RRrX+orVF(Rl= zt6c}x0~1XUX^f?14Q9HT<7aC=LRT*Be5r3S<mXHg4xg)|%})WJFr9{K_3v*(=#u7o z(yJCv?|2SmLAj`jt=$?TWAgA_S|V*{9rL<Y$&f$AHE$bjXuf9m>V@?A8p1fGL*r0= zr-Xm?da1=Mo%uH8!pe4VL5pbJR(mn}#tC|2*!P4DYe7itunVx2YcY0ZcW4Vk7Bq87 z-5I&e-DX?O;p<%=veEMv;Jk|T0>~xYtW2tU!avi9!!f^t$}A7$C8{i^K+(P7Vd2y1 zVSLW*uDe5*#~?W_>*{LRTImEeR5_zME1Tb<n^9}swsG}B=X{OuxFSY~+c0ld;Tc9x z!utwh=`9<6Jb*an@qLwlWADBnKG*Xa6P;SY>e!I2B@&xsi`9*Jb(*M9CzlUkFCo1k zatD=ubjj2UGF)`l<9f=ah28Z5`q29m7A1(H%>0)(LA%;B*J3+;q}MupX1S8W1PgRI zl9~vrOBe6o2}!S_oi|UQs4P<SSka$IXhnxGDM`xBDP5v%x(O~sa{lnJsDf3gS}{uX zrp?d4PQRw0A8Nd!fcDR#XkQx)r`_>(k<G7qOqys}*LAni+5sOqF`*qd3Fsvp3o+~$ zpOu8J5`k+FUxYNP_RG76BljmF;7YJibub{5ue(L#&}3U_jf)VEIs<6~hFy0FC-R}| zmmL?sQ#ic9qnHYP5Jjd91A-6(AsC4zA_fEKH&jp(_F5Q#6GfhXz%w)R+HHXvFNHN7 z`1Zv@qd^b~f84wv=WwU?pPD-b>9t6v)98ZL4pNzw>=KT`A+{|As5DcasKGL>D6CWw zz=BhHWymDww`>tJK2XPlTj5^4U^O32*^fulqs#^6(eoE%zvi8M^zP2bQBj@?>Csej z`G-EX$M4AbygOW8_(cUOoqd+|>8C%S@aO0ljiux@?XGZI5!w81o*7DqzO+~}>?g7g zdUeJl9>`-Da{{NYh!(=R+DWS5qCcCEnNgI9;?T3%8|Bit#AbjMN{RkQga3pQuAXcO zLJ1so(-t5&=l+S67D-A&fwX5pv!2q&U`pY#02Iyug^NK^{BxtKWH@vsxJfu|O7oBT zu8U6*k`1$a>xWQ|bHM7r*)zZS@AMXne;XMR;?CjB$@N_XKkvN4;_jIk0i4RS6*mmY zy&wvS`e{EmgzbUCD3bDbsAtOltD^*N8^@C}J{4mgwyG`Q=gRgZL^q%w+V(DC!imBm zNImK0Y3>^*Or#4Kap-UldZNX);Ek^}hFx|n0JQaE=U_c#)njW*ikrLnXn0ErOVqzT z@`jMS&>{0kIc2wkqM}&V0wuv8BGOUYe3GcZ3GIuW!-?OG2G57mQ1z7=-#$aA^FcFj zM>8iQa=4Npwf<i%C12$B$3lY_FYKmR8o=bThGGdq7ruV`{$A7DRgCIE`{J#5gUPnv zWmCHcY6pRC?B98PpXA?_ui42o+}<Ak3N3Sb>fH?S==&I6CM%#dt(K;}nbCUh+JQ)W zR08IiL?mau+3JWGSd8|rBjv0B{l5AkKi-+RK5tzg7?q22Z;i;w5SB51bx^)3lHXH$ z+nB&<PC*PFx?tSs#f95*(~GdH^yl(=2&(D%8AVRXZ?vTM4fG!3uMPk6v2-?f6G}r^ z%qfKX5B2*d3P})L7woVKvi7Z{6xySI;sf>%-9MoNo!~jI8hc|29OyNa8(y45$2X;K zrei)jrR(iKo7$r-q0T8So0rPzXZ5kjN3X_WoqP-n?!PYkI(8S3h9aG6Tg23r{(d_Z zNQ$7t8xR$7x(X){D&$3_04I6wHS<aOvyj;KC@B`sR$liSwP8)vSze1_*Ur3c^Sz@= zkAJr3A~~@2K79GR?T=Ynq;mSA?E|<1u|4V}^x1iTsV<&-$ODad<?u`AKmF>Sv0< zl`X^FH~xA30A7n>Hr-;O`YH0+8ErJN^;DOB|3W|ccYxFW@QP_>;rsiqzs|-Y@ljOC z$d0|f^0VAn_&WhHg*?VJWp{k8Gl7-Eml<@z7Gj_+DCjI(hC*8r0O#EjLqC40##uF9 zVGF+NC^3fBlGm0zDsWw+bB<;W?KxD`B#y+2ho-l@gp!J|Ya*cLC0r#1XZ5@ScgW$X zgRwno|Gr;K&2y>)C1V|=uKixid-u)?K##gIH*4YmCSuH^0?>&D>&8M{t!~;LJLqe< z_+=_&rFZ$^kom7$-mg{(i`OyD-|I7*Y(oXXcE{CP05jyljj(wqoBtV_^+B9-NZ2~) zOLdnESe^RPq|(G5GE`;6U#IHHkGa_}H>2kieXnw{@|pZGQVk9y9rMB`<R%93Z#>7` z<dN3h?E6Njs!DT?uG4;@_9nUiD?nOAFz>wi3(Jf*GU2)S`%6w>>UHzQZ)MOS5WLlq z^F$t}l%HvA{Iv~<D3DsJF~q4+_jY{$?;-{{24mE=_tjtz^;6GWq(sh``xiZU0=e|& z3p8tlXjGM>SDWQN;5zI5yXfLbqX))F-1W)HrB95|!1Udq+ejM#z@#4U1u!)VEXJ<! z;<SZuF@s#txch+d{?d^1xbbV9y|)FY2HBwohF?h-Tpmj%he**Q=U&6MVALmqDtHAt zH0`G5_tIukSgj?&b4`BihP_T#W=9PkNBma@(TP-d$16YfH)T8vT>j80I{)B?u%7`; z<i-QAV^E*qo65W;a6EkMzIjILA^Hk&GcdWR_ehD_z)`mD)rCd0x3zcRk8tgWo>xh6 zM>DZJ;786u1jFAv^DNYDvfM$+3eBIA{~g%AF>3aCCI1jvo++>nVB+)lKeZ>CQ6XGE zs%sGJx!ckCy`TAbNAd^-FVg$o^`}=ei>3-O76{3EZe|-P;?m#r_mgzKB%ddgkC#L* zKP$2fdd0W3w3mLw8z&S&CHWVQ8bNfD|EBoRrQUe8l~e}=GK`vQ4U_*9BKYciBKMn+ zXRl@}3=`;u8gLcAQw!&KY2kw3^?6loIL$$Hxm8<xebQV5CKFMms3bc&!P{t!ZNoW< zjU2g$Ds5S#ZA#bkFTL&Co{q?5Q2bzwe~Kqyu`0ckMgW(W633Zan6WcZeZ^#;kkwAu zxu%4sRj)ot_54f96YH}}d#Mi&<PFXb794B+am>CY){t{aSP>Uylv2%(l6aLN-oz)^ zddahOKX^0ihi~?6@ue|4)NE+O;bv$wS-V!g{_c}R{_d?UazpgqqcOCX62ln_+^;(b z5g=#fl~{!jdE>)`R^x)#&+%2otd{ZxM(T{pf9B+Mto!qr7l$9YuMtQpnJh@^^0J0W zCMdlu`<Z&mj<#`P&THlfzt3c*g9uZ{`!~GF+un<p<;3<{^wkOc1wILRY(GI^7ABRW zE)s6OS`OrUCh){+dgiE@>bI|u79HVOr}JZZ#fdr>kwz<^+b1OIgu^o(V=$!aE#1sJ zQrss6>ph);5R#ld_d#J(T4E%0W`J39g-k&6uN!!BTIDt|BDP=2MQ7RQuAe8rz31t* z)f0Da-uL>j*N)condzD!zMd8#t@!*7yXo#$vbj2nrAUdlLH@)MdG+Y2sh!a=l8cs} zpY@CNTWTYeOeMb?gt5g}6kcue^6RiUXWqf_qAFMkoiab?5L<|hvOAJL<Ak_{-1&@i zy3?7~>Ne>|P%k^;p34d{W`=A$aK??^<hXgUrqt!q_aPpLj$pb$@s&Gjy?#e|>Ci@y zGJ~o^^)BOszfPwIU^zDtdG#0hZ>l(pASUC{Pg!t@E-(A#uLFKba?eoWmvCBie=KjN zMtdANGGf#<f?5+dOI}Idqgr~w15!bSepx@`=vLWw<pUXy<#?TZMom_9moxY`?GcYm zXw0Xzswk#L1>~woKLC03yQI~eQnoj{l$b;1?G+mgsE><MKHDca#AKi+@hHlHaG_ms z;ScGOQ&*ESsQx<mbuI~e8l)2g^o3N+XcjUzr&feQz#roUkY@1(ezOXQr+6k5er!D= zc_x)Jb!KJf1UFGGNB5&vM&t+fRO+`6?wb{%T^Wd7BjGvI<QmQERQMk=G2-O66m?yz z_*?~aE}<m|6*;2|lXI9(qSH+-CPUquh;Fg2LYLI7$;%bk=G!{V0K)rq6Ee+E`VQBi z)~YB(NN{vNZ(t~jtb2Lw9S6}O$MxEZi-TkU@$;ZDP8_42{vwa%`MHh20s#K-owG;n zkb)MK09nmqz^dGz=iR`H^7QHt_Q_Rla!W6S03^w1)t^Z7mg@61R4DxJuHTokuu}+E zts+F-OX_%(=UxF#k+$!**GRsXba+)o+*vqVasKz8(+MJtAt+&R16+HJ%zpRZ<4#n^ z10tu9*x_T)pf;Eh3zDRL2In8A{_sEn-Z{W@o)T)1k8knVU@rhH!n(Urt2qxEpG{C9 z1=e+!?`rBfgKTD;>m&N)Hy&^eW=O!viN^-<%Foh|A9x{A$|Q7*c;?#25AOL$KI)F} zWB!V`NvfpQwu7*Vm}pfTJwE>o=sCQ60j^E*KzK(#y#4HqlmS970tKs$JC7R7!1?39 zWc3@$2_Op`w`B<tDSYkkE$3ZPUTYDcVpZFG@;n{>=D(_LV)9+4i#vR}w|w6kXV^Zq zcfRnE?<};MUji;*X^A-pg^P9xMV#iNVPKs;Y(gQ|6V3&H=KTEn?96uBa18tGJ@M#2 zdqK>%&Jb5JkCkn&M<-thHW|J06EbZ>U}w*n1H|{Fjt<Wyh2YmPWx4$D*Y5C!l{t2z zSSHsdv_48^W?FLsv7G}u#LCrD$IMn<sOT7S!H%cdWiekBXP#(}6LxO9LXodQAP9G! zg_`DAh@}4KlmhBPD1%1J7Iq{_gEBvW9pS1Ao5T0S3T@}ziLG8xt~hFl(jgs*VDqgm z&8&Hu4t^G$hyeE(94vw+Cf|n;Ign0v+p;IFlvA#_S<88ZEA(Q9#idRIX7v{sV47!e zvume5GfFvZ#r0<NSD{sK=FEO>x$aYMUeufga5Q&_zO?n@wTuFoy%&j5>`ti*C%=S$ zzBm!VHJA$J_|05%<#)s3w2EHXEAV5=Gv8K)%qyXo&LuaeWV<1SOiXDJ+viXQO|Tb> zxP#Ow3(7cMxSr7O+SlPpnSb&4302{`i!`W^upa@bS=JPB!R^DXG?6hR(Q4RbiU`$Q z5;q++WT@FpVHy{7K<eRGS8Af-;?U$vR%qsru}Q+vZY&v`!AFBWhQZ_#!`n_iztJ8H zC6m!Z6~+ud?L7JA!AF1aEMPp_7TNqew$fWr6a33Nk@)Z|G?~nTI|t8xCVG-nPjtmR z28@K7kY-B_P74aQf2@H*B{ka29zvo(TDt5>#A+D`_NOV&dTf;CNVAhwSh2w$U=%1R z1PE#pT#18PxSYRO>3fkwd}*=K)s8yuC8AbM|C#bM<pGb4{>t0o+YqJ0X=H44CbO&n z^S&W3RAtm#eg@o3Q-*~Ma_qq)3`LI3nQ&b)ak|D2H8@7{H=5ms9wlSw@ks_%qH65w z%MGI)RePK4>=Y#dI)VcZ2&*rf6!)@EeU7d^`4!HUHGqMUOzz_tB?`ncAjcjjQ|9yj z+e}z3y=|D7SEe?o1RUtUuL!sh0baQW7r>v;5$)Fg!gtBh<5f2$w`r(t`A|&E75_5> z5S4+8Sr=p-WZ+0Y`=M4bYwpkwL18#l<I;S1v6}tNm~6@KV#DE+10?BW8n~wJ>u}L- zBl<htnMXcH20ttbe-MO(F?DME->%j*P1pepHU+!?!H|adSR`#(i^5BW+bS}F^3YJa z<p$>=$(D+M5L;S-ZWY(E%j)R_R|=@#Z@9oY(s6sgg9D!uJ;qnelb%M%01O7KgMov; z1MkDjECv_u3J4VkocKEU?NZT;o2+C7T`CcDxT7Svb(<BDW~3B7BmDr_%X{Fs{k#)J zw2<@)z995(M?)t-q=N%z!|A%?@rlmX@JPITNip^CwR4(;MaxLFAim;AT0Zbl(ArFH zy`S7m-Pr4iq0+;@46ZwpVH<bmZaEt2(QqpMnQb=aWn_ovu2(ExSJI0Tv86*b;KY>7 z1-Vdsf6W)7L<xneKQ+qAmq_#@k!AOB{0E6Oc}C5k(^*~dFF<djCSYmQ>iL%dsWz1g znlktwO$0RXk|$+_Z2vfFJrFI_rh-2brXnEKqcc}8{SH(E;czuH?~uAYGv6IS3&@{y zAuL+m#lexPYCvMDAnS>1mWDqs$(RKEsCq?%cMLyPFGd}O-b(bHUmp1Ob7kh&C384l z*e#ALZr+vmxw4eWkUx~K%%&!5sd;5D=eu{vChzAKT_#XeRb#4hhq^wry@PHBP-lk~ z9&%!0@ye;qY`wU0OASA)nRs~&ZOrj?_H5wrdq8#gAxnt*7Z^q87<RzPKpThibtK!A zFsFROlk!+CAgb4G>ZR(3vol;ws>98E-_%}KC>&e!`aDW!M(W|sgk*{l8M@|noe;0X zSg#~9%WvtxM%?htL-*T%xf}2R5Fc~&R9|sEyLQ53HOb^==PII<C4Q7haiD*{g3XWt zAZnSiwee|u%q29GJS(``wYT}GZnMCZD1Yt-LHC>>B4)+<&PLb%0|D0Cl9CcRkNNaz z`-Ls`rzEX))GBHA@=%VF1w4`vclqg*RK_J;Yjt&fUD89l;|TG6d?a*(qmj4Zo9^ge zYYXWi)F&UvM&?~qRbAgV(POY%cf{`J-mP)9=%-tx7&@Na?4kSuCh%kIb+%sge*(gj zx30~>0paua>TG?*OIP2*(ksH!^InGZQ?7l8y}qn8-`!nc;Ff5kXWS2t!_4qTS;`E^ zjt(k7RjDFyBZ~N>Rj*;?8I=9f8n*FS(-;Qzgx0oQ;hZdMclB+yq~QCgd#vEG+9Cv9 zWIJFxkE+Z<I1YCuo*wzy?-FX1g-SS;;J~(cKKa$XQ%~F9QrO!CR<aoi`wL!sfR!a< zM_!Tv828SqNa|B=JbutqZos^KwhQHQO9`+;-%{kxb|FcK@Lx?1qd`371gYfWsqsHN z@5```(1D|fr$qF$=fwYIGj{~o;T3c{jHDbgb#zcJF!J8iJ+eEF4*v|!25d8X<+Od} zf~RxOm~3rzF}tU9$G{_3{U4@^Z}NfHSNMe<;!_lHw(6h8r4<f%wOW@KO;d8^15?-Q z;cct}aMj^K!@(k#_{F*(-z-TAaqe^szApm18U)ow{7VnWHD@wTAd&^iw?^xmUyb4w z`64_s19TL>4fIaTznf8H*j%=v%-590sB_M}e=mNLn2}9v;!6E)TAF8HN;d_<qIf>* zZ0YQs(3D-$HY$*B&=kw^xTHCqP6y|y#Z25XeIwxsB_b!KKZO^`2Uc^6{}zEovXB#q z*j#>Q@1|#x$SHDB{U5Crg*Qy=7BH)ZEymxf31kNsUf#>NBeNVrQkiveG-8i%RqOd* gyWs!d9Y>hk8gJJfRK4N7`v9P(qODx4c<cWE0cMpNtpET3 literal 12709 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 diff --git a/man/figures/README-example-2.png b/man/figures/README-example-2.png index 606f7e098a670e0967f2f68d1f06767df333a118..fbb354504bcd7097d6a3cefcc919f4fb96cccf40 100644 GIT binary patch literal 10266 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 literal 10593 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 -- GitLab From e509fb3833154910c2e162618bbac7f85a1e89f6 Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@inrae.fr> Date: Sat, 19 Oct 2024 17:28:56 +0200 Subject: [PATCH 4/8] feat(CW_create_input): multi years support Refs #6 --- R/CW_create_input.R | 65 ++++++++++++++----------- R/utils.R | 21 +++++++- man/CW_create_input.Rd | 4 +- tests/testthat/test-get_yearly_cycles.R | 46 +++++++++++++++++ 4 files changed, 105 insertions(+), 31 deletions(-) create mode 100644 tests/testthat/test-get_yearly_cycles.R diff --git a/R/CW_create_input.R b/R/CW_create_input.R index 03fd416..f2d37ea 100644 --- a/R/CW_create_input.R +++ b/R/CW_create_input.R @@ -13,9 +13,9 @@ #' # Import example climate dataset #' data(ZH_3_clim) #' str(ZH_3_clim) -#' # Selecting year 2010 +#' # Selecting years 2010 and 2011 #' meteo <- -#' ZH_3_clim[ZH_3_clim$Date >= as.Date("2010-01-01") & ZH_3_clim$Date <= as.Date("2010-12-31"), ] +#' ZH_3_clim[ZH_3_clim$Date >= as.Date("2010-01-01") & ZH_3_clim$Date <= as.Date("2011-12-31"), ] #' # Create model input #' cw_input <- CW_create_input("SB2023-soja", #' DatesR = meteo$Date, @@ -35,32 +35,41 @@ CW_create_input <- function(crop, AWC, cp = get_crop_params(crop), sowing_date = cp$sowing_date) { - Kc <- calc_Kc(cp, DatesR = DatesR, sowing_date = sowing_date) - isCycle <- calc_isCycle(cp, DatesR = DatesR, sowing_date = sowing_date) - Zr <- calc_root_depth(cp, - soil_depth = soil_depth, - DatesR = DatesR, - sowing_date = sowing_date) - TAW <- calc_TAW( - cp, - AWC = AWC, - soil_depth = soil_depth, - DatesR = DatesR, - sowing_date = sowing_date, - root_depth = Zr - ) - p <- calc_p(cp, DatesR, sowing_date) - cw_input <- tibble( - DatesR = DatesR, - isCycle = isCycle, - P = P, - Kc = Kc, - Zr = Zr, - ETc = Kc * ETo, - p = p, - TAW = TAW, - RAW = calc_RAW(TAW, p) - ) + + cycles <- get_yearly_cycles(DatesR) + + l <- lapply(cycles, function(cycle) { + dates <- cycle$dates + Kc <- calc_Kc(cp, DatesR = dates, sowing_date = sowing_date) + isCycle <- calc_isCycle(cp, DatesR = dates, sowing_date = sowing_date) + Zr <- calc_root_depth( + cp, + soil_depth = soil_depth, + DatesR = dates, + sowing_date = sowing_date + ) + TAW <- calc_TAW( + cp, + AWC = AWC, + soil_depth = soil_depth, + DatesR = dates, + sowing_date = sowing_date, + root_depth = Zr + ) + p <- calc_p(cp, dates, sowing_date) + cw_input <- tibble( + DatesR = dates, + isCycle = isCycle, + P = P[cycle$which], + Kc = Kc, + Zr = Zr, + ETc = Kc * ETo[cycle$which], + p = p, + TAW = TAW, + RAW = calc_RAW(TAW, p) + ) + }) + cw_input <- bind_rows(l) attr(cw_input, "crop_params") <- cp attr(cw_input, "soil_params") <- list(soil_depth = soil_depth, AWC = AWC) class(cw_input) <- c("CW_input", "CW_TS", class(cw_input)) diff --git a/R/utils.R b/R/utils.R index 8221392..21b3a2a 100644 --- a/R/utils.R +++ b/R/utils.R @@ -20,7 +20,7 @@ calc_interpolated_param <- function(DatesR, sowing_date, x, y, yleft, yright) { get_period <- function(DatesR, sowing_date, x) { if (!is.null(DatesR)) { stopifnot(inherits(DatesR, 'Date'), - length(DatesR) < 367, + DatesR[length(DatesR)] <= DatesR[1] + lubridate::years(), !is.na(sowing_date), grepl("^[0-9]{1,2}-[0-9]{1,2}$", sowing_date)) year <- lubridate::year(DatesR[1]) @@ -32,3 +32,22 @@ get_period <- function(DatesR, sowing_date, x) { } return(list(doy_start = doy_start, xout = xout)) } + +get_yearly_cycles <- function(DatesR) { + years <- unique(lubridate::year(DatesR)) + start_dates <- rep(DatesR[1], length(years)) + lubridate::year(start_dates) <- years + end_dates <- start_dates - lubridate::days() + lubridate::years() + end_dates[length(end_dates)] <- last(DatesR) + if (last(end_dates) <= last(start_dates)) { + years <- years[- length(years)] + } + lapply(setNames(seq_along(years), years), function(i) { + dates <- seq(start_dates[i], end_dates[i], by = "1 day") + list(year = years[i], + start = start_dates[i], + end = end_dates[i], + dates = dates, + which = which(DatesR %in% dates)) + }) +} diff --git a/man/CW_create_input.Rd b/man/CW_create_input.Rd index 41bb05e..dee6296 100644 --- a/man/CW_create_input.Rd +++ b/man/CW_create_input.Rd @@ -42,9 +42,9 @@ Create CropWat model input # Import example climate dataset data(ZH_3_clim) str(ZH_3_clim) -# Selecting year 2010 +# Selecting years 2010 and 2011 meteo <- - ZH_3_clim[ZH_3_clim$Date >= as.Date("2010-01-01") & ZH_3_clim$Date <= as.Date("2010-12-31"), ] + ZH_3_clim[ZH_3_clim$Date >= as.Date("2010-01-01") & ZH_3_clim$Date <= as.Date("2011-12-31"), ] # Create model input cw_input <- CW_create_input("SB2023-soja", DatesR = meteo$Date, diff --git a/tests/testthat/test-get_yearly_cycles.R b/tests/testthat/test-get_yearly_cycles.R new file mode 100644 index 0000000..2947a9f --- /dev/null +++ b/tests/testthat/test-get_yearly_cycles.R @@ -0,0 +1,46 @@ +test_that("get_yearly_cycles works", { + # Regular calendar year + DatesR <- seq(as.Date("2019-01-01"), as.Date("2019-12-31"), by = "1 day") + expect_equal(get_yearly_cycles(DatesR), list("2019" = + list( + year = 2019, + start = DatesR[1], + end = last(DatesR), + dates = DatesR, + which = seq(365) + ))) + # Calendar leap year + DatesR <- seq(as.Date("2020-01-01"), as.Date("2020-12-31"), by = "1 day") + expect_equal(get_yearly_cycles(DatesR), list("2020" = + list( + year = 2020, + start = DatesR[1], + end = last(DatesR), + dates = DatesR, + which = seq(366) + ))) + # Not calendar year + DatesR <- seq(as.Date("2020-06-01"), as.Date("2021-05-31"), by = "1 day") + expect_equal(get_yearly_cycles(DatesR), list("2020" = + list( + year = 2020, + start = DatesR[1], + end = last(DatesR), + dates = DatesR, + which = seq(365) + ))) + # Not complete year into calendar year + DatesR <- seq(as.Date("2020-06-01"), as.Date("2020-12-31"), by = "1 day") + expect_equal(get_yearly_cycles(DatesR), list("2020" = + list( + year = 2020, + start = DatesR[1], + end = last(DatesR), + dates = DatesR, + which = seq(length(DatesR)) + ))) + # 2 years + DatesR <- seq(as.Date("2019-01-01"), as.Date("2020-12-31"), by = "1 day") + cycles <- get_yearly_cycles(DatesR) + +}) -- GitLab From 2be79863b01d700786ebdb0b0574efa6b3270050 Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@inrae.fr> Date: Sat, 19 Oct 2024 18:53:20 +0200 Subject: [PATCH 5/8] fix(CW_model): Ks and ETc_adj should not be impacted outside crop cycles --- R/CW_model.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/CW_model.R b/R/CW_model.R index d56564e..351a836 100644 --- a/R/CW_model.R +++ b/R/CW_model.R @@ -27,13 +27,13 @@ CW_model <- function(X, input, FUN_IRRIG = CW_irrig_Dr) { Dr <- X$Dr - if (input$isCycle == 0 && X$isCycle == 1) { - # TODO Check what does that mean + if (!input$isCycle && X$isCycle) { + # What happens during the harvest day? Dr <- Dr * input$TAW / X$TAW - input$P # ??? } Dr <- max(0, Dr - input$P) - if (Dr > input$RAW) { + if (input$isCycle && Dr > input$RAW) { Ks <- max(0, (input$TAW - Dr) / (input$TAW - input$RAW)) } else { Ks <- 1 -- GitLab From e3003fcd9c59c4ac67faffc768a9d81b2137786b Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@inrae.fr> Date: Sat, 19 Oct 2024 18:53:50 +0200 Subject: [PATCH 6/8] docs: update README with multi years simulation Refs #6 --- README.Rmd | 5 +++-- README.md | 22 +++++++++++++++++++--- man/figures/README-example-1.png | Bin 12756 -> 12238 bytes man/figures/README-example-2.png | Bin 10266 -> 9539 bytes 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/README.Rmd b/README.Rmd index 8933259..ddef639 100644 --- a/README.Rmd +++ b/README.Rmd @@ -44,13 +44,14 @@ irrigated crop. ```{r example} # Load library library(CropWat) +library(dplyr) # Import example climate dataset data(ZH_3_clim) # Selecting year 2010 meteo <- ZH_3_clim[ZH_3_clim$Date >= as.Date("2010-01-01") & - ZH_3_clim$Date <= as.Date("2010-12-31"), ] + ZH_3_clim$Date <= as.Date("2014-12-31"), ] # Formatting model input cw_input <- CW_create_input("SB2023-soja", @@ -73,6 +74,6 @@ cw_output <- CW_run_simulation(X, cw_input, FUN_IRRIG = fun_irrig_half_RAW) plot(cw_output) # Total amount of irrigation applied (mm) -sum(cw_output$Ir) +cw_output |> group_by(lubridate::year(DatesR)) |> summarise(irrig_volume = sum(Ir)) ``` diff --git a/README.md b/README.md index bd60af1..6c63728 100644 --- a/README.md +++ b/README.md @@ -31,13 +31,22 @@ an irrigated crop. ``` r # Load library library(CropWat) +library(dplyr) +#> +#> Attaching package: 'dplyr' +#> The following objects are masked from 'package:stats': +#> +#> filter, lag +#> The following objects are masked from 'package:base': +#> +#> intersect, setdiff, setequal, union # Import example climate dataset data(ZH_3_clim) # Selecting year 2010 meteo <- ZH_3_clim[ZH_3_clim$Date >= as.Date("2010-01-01") & - ZH_3_clim$Date <= as.Date("2010-12-31"), ] + ZH_3_clim$Date <= as.Date("2014-12-31"), ] # Formatting model input cw_input <- CW_create_input("SB2023-soja", @@ -70,6 +79,13 @@ plot(cw_output) ``` r # Total amount of irrigation applied (mm) -sum(cw_output$Ir) -#> [1] 212.4834 +cw_output |> group_by(lubridate::year(DatesR)) |> summarise(irrig_volume = sum(Ir)) +#> # A tibble: 5 × 2 +#> `lubridate::year(DatesR)` irrig_volume +#> <dbl> <dbl> +#> 1 2010 212. +#> 2 2011 191. +#> 3 2012 287. +#> 4 2013 213. +#> 5 2014 139. ``` diff --git a/man/figures/README-example-1.png b/man/figures/README-example-1.png index 9f8f587a5bdc8ff8ff63d3c933904a6506e083bd..d62834a14498b9cdd3eb6d90a38d1534e19ac27f 100644 GIT binary patch literal 12238 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 Fe*n6Qvi<-7 literal 12756 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 diff --git a/man/figures/README-example-2.png b/man/figures/README-example-2.png index fbb354504bcd7097d6a3cefcc919f4fb96cccf40..5b4f760f3d13b51e0c1ed62638d01263517166ba 100644 GIT binary patch literal 9539 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 JIehN7{|8Z6FHQge literal 10266 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 -- GitLab From 8a5d039c247729b0277303efee94d56734755c76 Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@inrae.fr> Date: Sun, 20 Oct 2024 17:06:13 +0200 Subject: [PATCH 7/8] tests: various combinations of crop cycles and sowing dates Refs #6 --- R/CW_create_input.R | 5 +++ man/CW_create_input.Rd | 5 +++ tests/testthat/test-calc_interpolated_param.R | 31 +++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/R/CW_create_input.R b/R/CW_create_input.R index f2d37ea..9e67d4e 100644 --- a/R/CW_create_input.R +++ b/R/CW_create_input.R @@ -1,5 +1,10 @@ #' Create CropWat model input #' +#' @details +#' The crop cycle begins at the first matching sowing date in the simulation +#' period. So, first time steps of simulation if are not in a crop cycle even +#' if they occur during the crop cycle. +#' #' @inheritParams get_crop_params #' @inheritParams calc_TAW #' @param DatesR Simulation period ([vector] of [Date]) diff --git a/man/CW_create_input.Rd b/man/CW_create_input.Rd index dee6296..7fc559e 100644 --- a/man/CW_create_input.Rd +++ b/man/CW_create_input.Rd @@ -38,6 +38,11 @@ A \link{tibble} containing the input times series. \description{ Create CropWat model input } +\details{ +The crop cycle begins at the first matching sowing date in the simulation +period. So, first time steps of simulation if are not in a crop cycle even +if they occur during the crop cycle. +} \examples{ # Import example climate dataset data(ZH_3_clim) diff --git a/tests/testthat/test-calc_interpolated_param.R b/tests/testthat/test-calc_interpolated_param.R index 560597b..6cca315 100644 --- a/tests/testthat/test-calc_interpolated_param.R +++ b/tests/testthat/test-calc_interpolated_param.R @@ -11,3 +11,34 @@ test_that("calc_interpolated_param works", { expect_equal(calc_interpolated_param(DatesR, "01-02", x, y, 1, 1), c(1,1,1,2,3,2,1)) }) +test_that("calc_interpolated_param works over new year's day :)", { + cp <- get_crop_params("SB2023-soja") + sowing_date = "11-01" + x <- c(cp$Lini, cp$Ldev, cp$Lmid, cp$Lend) + y <- c(cp$Kini, cp$Kmax, cp$Kmax, cp$Kend) + yleft <- cp$Kini + yright <- cp$Kini + DatesR <- seq(as.Date("2000-10-01"), as.Date("2001-09-30"), by = "1 day") + p <- calc_interpolated_param( + DatesR, + sowing_date = sowing_date, + x = x, + y = y, + yleft = yleft, + yright = yright + ) + expect_equal(p[cp$Lini + 31], cp$Kini) # 10-31 + expect_gt(p[cp$Lini + 32], cp$Kini) # 11-01 = sowing date + expect_lt(p[cp$Lini + cp$Ldev + 30], cp$Kmax) # Day before end of dev + expect_equal(p[cp$Lini + cp$Ldev + 31], cp$Kmax) # Max plateau + DatesR <- seq(as.Date("2001-01-01"), as.Date("2001-10-31"), by = "1 day") + p <- calc_interpolated_param( + DatesR, + sowing_date = sowing_date, + x = x, + y = y, + yleft = yleft, + yright = yright + ) + expect_true(all(p == cp$Kini)) +}) -- GitLab From 0088e701fdfd63c162cfafd536ce1db005fbecb7 Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@inrae.fr> Date: Sun, 20 Oct 2024 19:03:45 +0200 Subject: [PATCH 8/8] chore: upgrade to v0.1.0.9000 Refs #14 --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index bff441d..2fbd176 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: CropWat Type: Package Title: R Implementation of the FAO CropWat Model -Version: 0.1.0 +Version: 0.1.0.9000 Authors@R: c( person("David", "Dorchies", , "david.dorchies@inrae.fr", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-6595-7984")), -- GitLab