From dd803b191062925eda830543236836e7822fd884 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Thu, 11 Jun 2015 16:57:43 +0200 Subject: Add UK tier 1 drainage PEC calculations --- pkg/R/SSLRC_mobility_classification.R | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 pkg/R/SSLRC_mobility_classification.R (limited to 'pkg/R/SSLRC_mobility_classification.R') diff --git a/pkg/R/SSLRC_mobility_classification.R b/pkg/R/SSLRC_mobility_classification.R new file mode 100644 index 0000000..e04d472 --- /dev/null +++ b/pkg/R/SSLRC_mobility_classification.R @@ -0,0 +1,42 @@ +# Copyright (C) 2015 Johannes Ranke +# Contact: jranke@uni-bremen.de +# This file is part of the R package pfm + +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. + +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. + +# You should have received a copy of the GNU General Public License along with +# this program. If not, see + +#' Determine the SSLRC mobility classification for a chemical substance from its Koc +#' +#' This implements the method specified in the UK data requirements handbook and was +#' checked against the spreadsheet published on the CRC website +#' +#' @param Koc The sorption coefficient normalised to organic carbon in L/kg +#' @return A list containing the classification and the percentage of the +#' compound transported per 10 mm drain water +#' @export +#' @author Johannes Ranke +#' @examples +#' SSLRC_mobility_classification(Koc) +SSLRC_mobility_classification <- function(Koc) +{ + if (!is.numeric(Koc) | length(Koc) != 1) stop("Please give a single number") + result <- list("Non mobile", 0.01) + if (Koc < 4000) result <- list("Slightly mobile", 0.02) + if (Koc < 1000) result <- list("Slightly mobile", 0.5) + if (Koc < 500) result <- list("Moderately mobile", 0.7) + if (Koc < 75) result <- list("Mobile", 1.9) + if (Koc < 15) result <- list("Very mobile", 1.9) + names(result) <- c("Mobility classification", + "Percentage drained per mm of drain water") + return(result) +} -- cgit v1.2.3 From 9b8e5cb80ba4a89578d979bee134f8342ca0a527 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Thu, 11 Jun 2015 17:38:01 +0200 Subject: Now we pass R CMD check --- pkg/R/PEC_sw_drainage_UK.R | 33 +++++++++++++++++++++----------- pkg/R/SSLRC_mobility_classification.R | 2 +- pkg/man/PEC_sw_drainage_UK_ini.Rd | 14 ++++++++++++-- pkg/man/SSLRC_mobility_classification.Rd | 2 +- 4 files changed, 36 insertions(+), 15 deletions(-) (limited to 'pkg/R/SSLRC_mobility_classification.R') diff --git a/pkg/R/PEC_sw_drainage_UK.R b/pkg/R/PEC_sw_drainage_UK.R index 03c56c0..8402d95 100644 --- a/pkg/R/PEC_sw_drainage_UK.R +++ b/pkg/R/PEC_sw_drainage_UK.R @@ -23,28 +23,39 @@ #' @param rate Application rate in g/ha #' @param interception The fraction of the application rate that does not reach the soil #' @param Koc The sorption coefficient normalised to organic carbon in L/kg +#' @param latest_application Latest application date, formatted as e.g. "01 July" +#' @param soil_DT50 Soil degradation half-life, if SFO kinetics are to be used +#' @param model The degradation model to be used. Either one of "FOMC", "DFOP", +#' "HS", or "IORE", or an mkinmod object +#' @param model_parms A named numeric vector containing the model parameters #' @return The predicted concentration in surface water in µg/L #' @export #' @author Johannes Ranke #' @examples -#' PEC_sw_drainage_UK_ini(100) +#' PEC_sw_drainage_UK_ini(150, Koc = 100) PEC_sw_drainage_UK_ini <- function(rate, interception = 0, Koc, - latest_application = NULL, soil_DT50 = NULL) + latest_application = NULL, soil_DT50 = NULL, + model = NULL, model_parms = NULL) { percentage_lost <- SSLRC_mobility_classification(Koc)[[2]] amount_available <- rate * (1 - interception) # g/ha if (!missing(latest_application)) { - if (missing(soil_DT50)) stop("You need to supply a soil DT50 value") - k = log(2)/soil_DT50 - as.Date(paste(latest_application, "1999"), "%d %B %Y") + if (!missing(soil_DT50)) { + k = log(2)/soil_DT50 + as.Date(paste(latest_application, "1999"), "%d %B %Y") - lct <- Sys.getlocale("LC_TIME") - tmp <- Sys.setlocale("LC_TIME", "C") - latest <- as.Date(paste(latest_application, "1999"), "%d %b %Y") - tmp <- Sys.setlocale("LC_TIME", lct) - degradation_time <- as.numeric(difftime(as.Date("1999-10-01"), units = "days", latest)) - amount_available <- amount_available * exp(-k * degradation_time) + lct <- Sys.getlocale("LC_TIME") + tmp <- Sys.setlocale("LC_TIME", "C") + latest <- as.Date(paste(latest_application, "1999"), "%d %b %Y") + tmp <- Sys.setlocale("LC_TIME", lct) + degradation_time <- as.numeric(difftime(as.Date("1999-10-01"), units = "days", latest)) + amount_available <- amount_available * exp(-k * degradation_time) + if (!missing(model)) stop("You already supplied a soil_DT50 value, implying SFO kinetics") + } + if (!missing(model)) { + amount_available <- pfm_degradation(model, parms = model_parms, times = degradation_time) + } } volume = 130000 # L/ha diff --git a/pkg/R/SSLRC_mobility_classification.R b/pkg/R/SSLRC_mobility_classification.R index e04d472..deda5cf 100644 --- a/pkg/R/SSLRC_mobility_classification.R +++ b/pkg/R/SSLRC_mobility_classification.R @@ -26,7 +26,7 @@ #' @export #' @author Johannes Ranke #' @examples -#' SSLRC_mobility_classification(Koc) +#' SSLRC_mobility_classification(100) SSLRC_mobility_classification <- function(Koc) { if (!is.numeric(Koc) | length(Koc) != 1) stop("Please give a single number") diff --git a/pkg/man/PEC_sw_drainage_UK_ini.Rd b/pkg/man/PEC_sw_drainage_UK_ini.Rd index c39a5c9..1b2009d 100644 --- a/pkg/man/PEC_sw_drainage_UK_ini.Rd +++ b/pkg/man/PEC_sw_drainage_UK_ini.Rd @@ -5,7 +5,8 @@ \title{Calculate initial predicted environmental concentrations in surface water due to drainage using the UK method} \usage{ PEC_sw_drainage_UK_ini(rate, interception = 0, Koc, - latest_application = NULL, soil_DT50 = NULL) + latest_application = NULL, soil_DT50 = NULL, model = NULL, + model_parms = NULL) } \arguments{ \item{rate}{Application rate in g/ha} @@ -13,6 +14,15 @@ PEC_sw_drainage_UK_ini(rate, interception = 0, Koc, \item{interception}{The fraction of the application rate that does not reach the soil} \item{Koc}{The sorption coefficient normalised to organic carbon in L/kg} + +\item{latest_application}{Latest application date, formatted as e.g. "01 July"} + +\item{soil_DT50}{Soil degradation half-life, if SFO kinetics are to be used} + +\item{model}{The degradation model to be used. Either one of "FOMC", "DFOP", +"HS", or "IORE", or an mkinmod object} + +\item{model_parms}{A named numeric vector containing the model parameters} } \value{ The predicted concentration in surface water in µg/L @@ -22,7 +32,7 @@ This implements the method specified in the UK data requirements handbook and wa published on the CRC website } \examples{ -PEC_sw_drainage_UK_ini(100) +PEC_sw_drainage_UK_ini(150, Koc = 100) } \author{ Johannes Ranke diff --git a/pkg/man/SSLRC_mobility_classification.Rd b/pkg/man/SSLRC_mobility_classification.Rd index a1bb413..62a345b 100644 --- a/pkg/man/SSLRC_mobility_classification.Rd +++ b/pkg/man/SSLRC_mobility_classification.Rd @@ -18,7 +18,7 @@ This implements the method specified in the UK data requirements handbook and wa checked against the spreadsheet published on the CRC website } \examples{ -SSLRC_mobility_classification(Koc) +SSLRC_mobility_classification(100) } \author{ Johannes Ranke -- cgit v1.2.3