diff --git a/.Rbuildignore b/.Rbuildignore index f76658445b7ff5ef00ad552ea55869bffd2a3cfa..d49c07a32f73664f4572f8af050eacd3fe03882a 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,3 +1,4 @@ ^griwrm\.Rproj$ ^\.Rproj\.user$ ^LICENSE\.md$ +\.gitlab-ci\.yml diff --git a/.gitignore b/.gitignore index b082f28ca71075d9ad8b27aae96cc0f256b385cf..de3a5744bd3f47a5d1338aae01b8796290369a17 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ # Man pages generated by Roxygen man/*.Rd +/.vscode/ ############################################################################### @@ -52,3 +53,4 @@ vignettes/*.pdf # pkgdown site docs/ +inst/doc diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 06637072446fdc088f05f0fb7d92684b985edb2f..91d5e2f4a1561cd895778f20544b4a72e88fbf7f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ default: tags: [docker] image: r-base:latest before_script: - - Rscript -e 'install.packages("remotes")' + - Rscript -e 'install.packages("remotes", "dplyr")' - Rscript -e 'remotes::install_gitlab("HYCAR-Hydro/airgr@sd", host = "gitlab.irstea.fr")' - R CMD build ../griwrm diff --git a/DESCRIPTION b/DESCRIPTION index a2dd4e5dc542754785841ccaa67bde76ac2da49c..73e5abd1deeb0c486ee7a72e3c1ae260392ed9ce 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -8,7 +8,7 @@ Authors@R: email = "david.dorchies@inrae.fr", comment = c(ORCID = "0000-0002-6595-7984")) Description: This R package aims to model water basin with a airGR based semi-distributive hydrology with the integration of human infrastructures and their management. -License: LGPL (>= 2.1) +License: AGPL-3 Encoding: UTF-8 LazyData: true Roxygen: list(markdown = TRUE) @@ -16,8 +16,11 @@ RoxygenNote: 7.1.0 Imports: dplyr, utils, - airGR (>= 1.6.1.11) -Suggests: + airGR (>= 1.6.1.11), + methods +Suggests: knitr, - rmarkdown + rmarkdown, + lattice VignetteBuilder: knitr +URL: https://gitlab.irstea.fr/in-wop/griwrm diff --git a/R/CreateInputsModel.Griwrm.R b/R/CreateInputsModel.Griwrm.R index 9dc04d85f42a6f40231fcbfadf6e54e3c5527873..60ee8b08eddd50cd7646db4fe16396433b85185a 100644 --- a/R/CreateInputsModel.Griwrm.R +++ b/R/CreateInputsModel.Griwrm.R @@ -1,20 +1,19 @@ #' Create InputsModel object for a GRIWRM network #' -#' @param ginet -#' @param girop -#' @param gits +#' @param x Ginet object describing the diagram of the semi-distributed model, see \code{[Ginet]}. +#' @param girop Girop object giving the run-off model parameters, see \code{[Girop]}. +#' @param gits Gits object giving the observation time series, see \code{[Gits]}. +#' @param ... further arguments passed to \code{\link[airGR]{CreateInputsModel}}. #' -#' @return +#' @return GriwrmInputsModel object equivalent to airGR InputsModel object for a semi-distributed model (See \code{\link[airGR]{CreateInputsModel}}) #' @export -#' -#' @examples -CreateInputsModel.Griwrm <- function(ginet, girop, gits, verbose = TRUE) { +CreateInputsModel.Griwrm <- function(x, girop, gits, ...) { InputsModel <- CreateEmptyGriwrmInputsModel() - for(id in getNodeRanking(ginet)) { + for(id in getNodeRanking(x)) { if(verbose) cat("CreateInputsModel.griwrm: Treating sub-basin", id, "...\n") - InputsModel[[id]] <- CreateOneGriwrmInputsModel(id, ginet, girop, gits) + InputsModel[[id]] <- CreateOneGriwrmInputsModel(id, x, girop, gits, ...) } return(InputsModel) } @@ -22,9 +21,7 @@ CreateInputsModel.Griwrm <- function(ginet, girop, gits, verbose = TRUE) { #' Create an empty InputsModel object for GRIWRM nodes #' -#' @return -#' -#' @examples +#' @return \emph{GriwrmInputsModel} empty object CreateEmptyGriwrmInputsModel <- function() { InputsModel <- list() class(InputsModel) <- append(class(InputsModel), "GriwrmInputsModel") @@ -34,14 +31,12 @@ CreateEmptyGriwrmInputsModel <- function() { #' Create one InputsModel for a GRIWRM node #' -#' @param ginet -#' @param girop -#' @param gits -#' @param id -#' -#' @return +#' @param id string of the node identifier +#' @param ginet See \code{[Ginet]}. +#' @param girop See \code{[Girop]}. +#' @param gits See \code{[Gits]}. #' -#' @examples +#' @return \emph{InputsModel} object for one. CreateOneGriwrmInputsModel <- function(id, ginet, girop, gits) { node <- ginet[ginet$id == id,] FUN_MOD <- girop$model[girop$id == id] diff --git a/R/CreateInputsModel.R b/R/CreateInputsModel.R index af0e7728de4c7f42efcb9448434de75521eb9513..5e7012b48e81a60759cfbb15460da712af9c55ac 100644 --- a/R/CreateInputsModel.R +++ b/R/CreateInputsModel.R @@ -1,12 +1,10 @@ -#' Create InputsModel object for either airGR or GRIWRM +#' Create InputsModel object for either airGR or GR-IWRM #' -#' @param x -#' @param ... +#' @param x First parameter determining which InputsModel object is created +#' @param ... further arguments passed to or from other methods. #' -#' @return +#' @return InputsModel or GriwrmInputsObject object #' @export -#' -#' @examples CreateInputsModel <- function(x, ...) { UseMethod("CreateInputsModel", x) } diff --git a/R/CreateInputsModel.default.R b/R/CreateInputsModel.default.R index 6af61896d4bc7354053b30c1db7d27e9e95a5d66..3b3e5bab1c9ac8f57576a50b8c09d45b261624e0 100644 --- a/R/CreateInputsModel.default.R +++ b/R/CreateInputsModel.default.R @@ -1,35 +1,15 @@ #' Wrapper for the airGR::CreateInputsModel function #' -#' @param FUN_MOD -#' @param DatesR -#' @param Precip -#' @param PrecipScale -#' @param PotEvap -#' @param TempMean -#' @param TempMin -#' @param TempMax -#' @param ZInputs -#' @param HypsoData -#' @param NLayers -#' @param QobsUpstr -#' @param LengthHydro -#' @param BasinAreas -#' @param verbose +#' @param x hydrological model function (e.g. \code{\link[airGR]{RunModel_GR4J}}, \code{\link[airGR]{RunModel_CemaNeigeGR4J}}) +#' @param ... further arguments passed to \code{\link[airGR]{CreateInputsModel}}. #' -#' @return +#' @return object of class \emph{InputsModel}, see \code{\link[airGR]{CreateInputsModel}} for details. #' @import airGR #' @export +#' @seealso The original function in airGR package: \code{\link[airGR]{CreateInputsModel}}. #' -#' @examples -CreateInputsModel.default <- function(FUN_MOD, - DatesR, - Precip, PrecipScale = TRUE, - PotEvap = NULL, - TempMean = NULL, TempMin = NULL, TempMax = NULL, - ZInputs = NULL, HypsoData = NULL, NLayers = 5, - QobsUpstr = NULL, LengthHydro = NULL, BasinAreas = NULL, - verbose = TRUE) { - airGR::CreateInputsModel(FUN_MOD, DatesR, Precip, PrecipScale, PotEvap, - TempMean, TempMin, TempMax, ZInputs, HypsoData, NLayers, - QobsUpstr, LengthHydro, BasinAreas, verbose) +CreateInputsModel.default <- function(x, + ...) { + + airGR::CreateInputsModel(FUN_MOD = x, ...) } diff --git a/R/CreateRunOptions.GriwrmInputsModel.R b/R/CreateRunOptions.GriwrmInputsModel.R index a67b084cf7c57b0beecdbf68dbed19f0b5dd9100..f51a0a6233fdc281d2a7a475ab1515e29de65293 100644 --- a/R/CreateRunOptions.GriwrmInputsModel.R +++ b/R/CreateRunOptions.GriwrmInputsModel.R @@ -1,44 +1,17 @@ -#' Title +#' Create \emph{GriwrmRunOptions} object for running and calibrating model in GR-IWRM. #' -#' @param InputsModel -#' @param IndPeriod_WarmUp -#' @param IndPeriod_Run -#' @param IniStates -#' @param IniResLevels -#' @param Imax -#' @param Outputs_Cal -#' @param Outputs_Sim -#' @param MeanAnSolidPrecip -#' @param IsHyst -#' @param warnings -#' @param verbose +#' @param InputsModel object of class \emph{GriwrmInputsModel}, see \code{\link{CreateInputsModel.Griwrm}} for details. +#' @param ... further arguments passed to \code{\link[airGR]{CreateOptions}}. #' -#' @return +#' @return \emph{GriwrmRunOptions} object for running and calibrating model in GR-IWRM. #' @export -#' -#' @examples -CreateRunOptions.GriwrmInputsModel <- function(InputsModel, IndPeriod_WarmUp = NULL, IndPeriod_Run, - IniStates = NULL, IniResLevels = NULL, Imax = NULL, - Outputs_Cal = NULL, Outputs_Sim = "all", - MeanAnSolidPrecip = NULL, IsHyst = FALSE, - warnings = TRUE, verbose = TRUE) { +CreateRunOptions.GriwrmInputsModel <- function(InputsModels, ...) { + RunOptions <- list() class(RunOptions) <- append(class(RunOptions), "GriwrmRunOptions") - for(InputsModelBasin in InputsModel) { - RunOptions[[InputsModelBasin$id]] <- CreateRunOptions( - InputsModel = InputsModelBasin, - IndPeriod_WarmUp = IndPeriod_WarmUp, - IndPeriod_Run = IndPeriod_Run, - IniStates = IniStates, - IniResLevels = IniResLevels, - Imax = Imax, - Outputs_Cal = Outputs_Cal, - Outputs_Sim = Outputs_Sim, - MeanAnSolidPrecip = MeanAnSolidPrecip, - IsHyst = IsHyst, - warnings = warnings, - verbose = verbose - ) + + for(InputsModelBasin in InputsModels) { + RunOptions[[InputsModelBasin$id]] <- CreateRunOptions(InputsModel = InputsModelBasin, ...) } return(RunOptions) } diff --git a/R/CreateRunOptions.InputsModel.R b/R/CreateRunOptions.InputsModel.R index f451e687f8b7a3675e7dbfca7ce88f2f0fbe9139..ef6979194d59f0ded0589e2c4b3d2b55f00a2891 100644 --- a/R/CreateRunOptions.InputsModel.R +++ b/R/CreateRunOptions.InputsModel.R @@ -1,40 +1,13 @@ -#' Title +#' Create \emph{RunOptions} object for airGR. See \code{\link[airGR]{CreateOptions}}. #' -#' @param FUN_MOD -#' @param InputsModel -#' @param IndPeriod_WarmUp -#' @param IndPeriod_Run -#' @param IniStates -#' @param IniResLevels -#' @param Imax -#' @param Outputs_Cal -#' @param Outputs_Sim -#' @param MeanAnSolidPrecip -#' @param IsHyst -#' @param warnings -#' @param verbose +#' @param InputsModel object of class \emph{InputsModel}, see \code{\link[airGR]{CreateInputsModel}} for details. +#' @param ... further arguments passed to \code{\link[airGR]{CreateOptions}}. #' -#' @return +#' @return See \code{\link[airGR]{CreateOptions}}. #' @export -#' -#' @examples -CreateRunOptions.InputsModel <- function(InputsModel, - IndPeriod_WarmUp = NULL, IndPeriod_Run, - IniStates = NULL, IniResLevels = NULL, Imax = NULL, - Outputs_Cal = NULL, Outputs_Sim = "all", - MeanAnSolidPrecip = NULL, IsHyst = FALSE, - warnings = TRUE, verbose = TRUE) { +CreateRunOptions.InputsModel <- function(InputsModel, ...) { + airGR::CreateRunOptions(FUN_MOD = InputsModel$FUN_MOD, InputsModel = InputsModel, - IndPeriod_WarmUp = IndPeriod_WarmUp, - IndPeriod_Run = IndPeriod_Run, - IniStates = IniStates, - IniResLevels = IniResLevels, - Imax = Imax, - Outputs_Cal = Outputs_Cal, - Outputs_Sim = Outputs_Sim, - MeanAnSolidPrecip = MeanAnSolidPrecip, - IsHyst = IsHyst, - warnings = warnings, - verbose = verbose) + ...) } diff --git a/R/CreateRunOptions.R b/R/CreateRunOptions.R index 55b0a8046c4da5ef7fd7aac8e04f07edfb0727e2..a535d8640aa5cec277674f1e0c46b61b26969554 100644 --- a/R/CreateRunOptions.R +++ b/R/CreateRunOptions.R @@ -1,12 +1,10 @@ -#' Title +#' Create \emph{RunOptions} object for airGR and GR-IWRM. See \code{\link[airGR]{CreateOptions}} and \code{[CreateOptions.GriwrmInputsModel]}. #' -#' @param ... -#' @param InputsModel +#' @param InputsModel object of class \emph{InputsModel} (see \code{\link[airGR]{CreateInputsModel}}) or \emph{GriwrmInputsModel} (See \code{[CreateInputsModel.Griwrm]}). +#' @param ... further arguments passed to or from other methods. #' -#' @return +#' @return Object of \emph{RunOptions} class family #' @export -#' -#' @examples CreateRunOptions <- function(InputsModel, ...) { UseMethod("CreateRunOptions", InputsModel) } diff --git a/R/RunModel.GriwrmInputsModel.R b/R/RunModel.GriwrmInputsModel.R index 87e2210dc79c7015970e9fd4c5a4a42ac7f8856a..e508ba6b051bb401d44e68195c32393e42724177 100644 --- a/R/RunModel.GriwrmInputsModel.R +++ b/R/RunModel.GriwrmInputsModel.R @@ -1,46 +1,31 @@ #' Title #' -#' @param ginet -#' @param girop -#' @param gits -#' @param IndPeriod_Run -#' @param IndPeriod_WarmUp +#' @param InputsModel object of class \emph{GriwrmInputsModel}, see \code{[CreateInputsModel.Griwrm]} for details. +#' @param RunOptions object of class \emph{GriwrmRunOptions}, see \code{[CreateRunOptions.Griwrm]} for details. +#' @param girop Girop object giving the run-off model parameters, see \code{[Girop]}. +#' @param verbose (optional) boolean indicating if the function is run in verbose mode or not, default = \code{TRUE} +#' @param ... Mandatory for S3 method signature function compatibility with generic. #' -#' @return +#' @return \emph{GriwrmOutputsModel} object which is a list of \emph{OutputsModel} objects (See \code{\link[airGR]{RunModel}}) for each node of the semi-distributed model. #' @export -#' -#' @examples -RunModel.GriwrmInputsModel <- function(InputsModel, RunOptions, girop, verbose = TRUE) { +RunModel.GriwrmInputsModel <- function(InputsModel, RunOptions, girop, verbose = TRUE, ...) { - OutputsModels <- list() + OutputsModel <- list() + class(OutputsModel) <- append(class(OutputsModel), "GriwrmOutputsModel") for(IM in InputsModel) { if(verbose) cat("RunModel.GriwrmInputsModel: Treating sub-basin", IM$id, "...\n") # Update InputsModel$QobsUpstr with simulated upstream flows - if(length(IM$UpstreamNodes) > 0) { - for(i in 1:length(IM$UpstreamNodes)) { - QobsUpstr1 <- matrix( - c( - rep(0, length(RunOptions[[IM$id]]$IndPeriod_WarmUp)), - OutputsModels[[IM$UpstreamNodes[i]]]$Qsim - ), ncol = 1 - ) - if(i == 1) { - IM$QobsUpstr <- QobsUpstr1 - } else { - IM$QobsUpstr <- cbind(IM$QobsUpstr, QobsUpstr1) - } - } - } + IM <- UpdateQsimUpstream(IM, OutputsModel) # Run the model for the sub-basin - OutputsModels[[IM$id]] <- RunModel( + OutputsModel[[IM$id]] <- RunModel( InputsModel = IM, RunOptions = RunOptions[[IM$id]], Param = unlist(girop$params[girop$id == IM$id]) ) } - return(OutputsModels) + return(OutputsModel) } diff --git a/R/RunModel.InputsModel.R b/R/RunModel.InputsModel.R index 5aef686331dc21f2e5682e7e7983f632a71c3482..3b94045a3c66301260ec283d35909774804f208a 100644 --- a/R/RunModel.InputsModel.R +++ b/R/RunModel.InputsModel.R @@ -7,9 +7,7 @@ #' #' @return #' @export -#' -#' @examples -RunModel.InputsModel <- function(InputsModel, RunOptions, Param, FUN_MOD = NULL) { +RunModel.InputsModel <- function(InputsModel, RunOptions, Param, FUN_MOD = NULL, ...) { if(is.null(FUN_MOD)) { FUN_MOD <- InputsModel$FUN_MOD } diff --git a/R/RunModel.R b/R/RunModel.R index 89b202eb98c1c608196d8f82922c24ba4d7700a3..fdd50dce2960cce3ccc3839af2cd2cb15e0a7f8b 100644 --- a/R/RunModel.R +++ b/R/RunModel.R @@ -1,12 +1,10 @@ #' RunModel function for both airGR and GriwrmInputsModel object #' -#' @param InputsModel -#' @param ... +#' @param InputsModel object of class \emph{InputsModel}, see \code{\link[airGR]{CreateInputsModel}} for details. +#' @param ... further arguments passed to or from other methods. #' #' @return #' @export -#' -#' @examples RunModel <- function(InputsModel, ...) { UseMethod("RunModel", InputsModel) } diff --git a/R/UpdateQsimUpstream.R b/R/UpdateQsimUpstream.R new file mode 100644 index 0000000000000000000000000000000000000000..560984ac03f20153f9a27cc03afea5149b1e85ef --- /dev/null +++ b/R/UpdateQsimUpstream.R @@ -0,0 +1,27 @@ +#' Update InputsModel$QobsUpstr with simulated upstream flows provided by GriwrmOutputsModels object. +#' +#' @param InputsModel \emph{GriwrmInputsModel} object. See \code{[CreateInputsModel.Griwrm]}. +#' @param OutputsModels \emph{GriwrmOutputsModel} object provided by \code{[RunModel.GriwrmInputsModel]}. +#' +#' @description This function is used by \code{\link{RunModel.GriwrmInputsModel}} and \code{\link{Calibration.GriwrmInputsModel}} in order to provide upstream simulated flows to a node. +#' +#' @return InputsModel object with updated QobsUpsr +#' +UpdateQsimUpstream <- function(InputsModel, OutputsModels) { + if(length(InputsModel$UpstreamNodes) > 0) { + for(i in 1:length(InputsModel$UpstreamNodes)) { + QobsUpstr1 <- matrix( + c( + rep(0, length(RunOptions[[InputsModel$id]]$IndPeriod_WarmUp)), + OutputsModels[[InputsModel$UpstreamNodes[i]]]$Qsim + ), ncol = 1 + ) + if(i == 1) { + InputsModel$QobsUpstr <- QobsUpstr1 + } else { + InputsModel$QobsUpstr <- cbind(InputsModel$QobsUpstr, QobsUpstr1) + } + } + } + return(InputsModel) +} diff --git a/R/ginet.R b/R/ginet.R index 7a95be07465ec835393d61a95cbb0214f6364d3c..15512295019177dae7f2a5e1bdddb65deb93bd23 100644 --- a/R/ginet.R +++ b/R/ginet.R @@ -1,14 +1,12 @@ #' Generate a network description containing all hydraulic nodes and the description #' of their connections #' -#' @param db A tibble or a dataframe containing at least the id and the description of the connections -#' @param cols +#' @param db A tibble or a data frame containing at least columns with the id (column `id`), the id and the hydraulic distance to the node downstream (columns `down` and `length`) and a boolean determining whether the node is a rainfall run-off model or not (column `runoff`). The last downstream node should have fields `down` and `length` set to `NA`. +#' @param cols named list or vector for matching columns of `db` parameter. By default, mandatory columns names are: `id`, `down`, `length`. But other names can be handled with a named list or vector containing items defined as `"required name" = "column name in db"`. #' @param keep_all Keep all column of `db` or keep only columns defined in `cols` #' -#' @return +#' @return `Ginet` class object containing the description of diagram of the semi-distributed catchment model #' @export -#' -#' @examples Ginet <- function(db, cols = list(id = "id", down = "down", length = "length", runoff = "runoff"), keep_all = FALSE) { colsDefault <- list(id = "id", down = "down", length = "length", runoff = "runoff") cols <- utils::modifyList(colsDefault, as.list(cols)) @@ -20,14 +18,12 @@ Ginet <- function(db, cols = list(id = "id", down = "down", length = "length", r db } -#' Title +#' Sort the nodes from upstream to downstream. #' -#' @param ginet +#' @param ginet See \code{[Ginet]}. #' -#' @return +#' @return vector with the ordered node names. #' @export -#' -#' @examples getNodeRanking <- function(ginet) { if(!is(ginet, "Ginet")) { stop("getNodeRanking: ginet argument should be of class Ginet") diff --git a/R/girop.R b/R/girop.R index 45861aad6c4abb3b3dc9fd647311d83c82a8ca87..7225bdcde2eadcf5dee35b2c24e4481681dd7ce9 100644 --- a/R/girop.R +++ b/R/girop.R @@ -1,13 +1,11 @@ #' Generate the list of run-off models and their parameters #' -#' @param db dataframe containing at least the id and the area of the sub-basin -#' @param cols +#' @param db data frame containing at least the id the area and the model of the sub-basin. +#' @param cols named list or vector for matching columns of `db` parameter. By default, mandatory columns names are: `id`, `area`, `model`. But other names can be handled with a named list or vector containing items defined as `"required name" = "column name in db"`. #' @param keep_all Keep all column of `db` or keep only columns defined in `cols` #' -#' @return +#' @return \emph{Girop} object. #' @export -#' -#' @examples Girop <- function(db, cols = c(id = "id", area = "area", model = "model", params = "params"), keep_all = FALSE) { colsDefault <- list(id = "id", area = "area", model = "model", params = "params") cols <- utils::modifyList(colsDefault, as.list(cols)) diff --git a/R/gits.R b/R/gits.R index ad0f31ad232704494c5ab656551e9e3005dd81cc..929fbc38b2e52eb1b3ba1eed7f891ca09e8f7e53 100644 --- a/R/gits.R +++ b/R/gits.R @@ -1,13 +1,11 @@ #' Title #' -#' @param id -#' @param ts -#' @param cols +#' @param id string of the id of the node +#' @param ts numeric matrix or data frame containing 3 columns for precipitation, evaporation, and observed flow +#' @param cols named list or vector used for matching the columns of ts with the required columns names which are "Precip", "PotEvap", and "Qobs". #' -#' @return +#' @return \emph{Gits} class object which is a list containing a `date` element (Vector of PosiXlt timestamps) and an element named the id of the node containing a dataframe with observed data. #' @export -#' -#' @examples Gits <- function(id, ts, cols = list(date = "date", Precip = "Precip", PotEvap = "PotEvap", Qobs = "Qobs")) { @@ -28,16 +26,15 @@ Gits <- function(id, ts, gitsOut } -#' Title +#' Merge two gits objects with identical date time series. #' -#' @param x -#' @param y +#' @param x Gits object to merge (See [Gits]). +#' @param y Gits object to merge (See [Gits]). +#' @param ... For merge generic function compatibility. #' -#' @return +#' @return Gits object merged with one item `Date` and Items corresponding to each node. #' @export -#' -#' @examples -merge.Gits <- function(x, y) { +merge.Gits <- function(x, y, ...) { if(!is(y, "Gits")) { stop("A Gits class object can only be merged with a Gits class object") } diff --git a/vignettes/V01_First_network.Rmd b/vignettes/V01_First_network.Rmd index 8e7974f884df3f452a3a32a601afdffa5e2050f9..d2fc99f550778aff4c65b7c931938aa65f1bed47 100644 --- a/vignettes/V01_First_network.Rmd +++ b/vignettes/V01_First_network.Rmd @@ -1,8 +1,10 @@ --- title: 'Tutorial: structuration of a semi-distributive GR model' author: "David Dorchies" -date: "19 mai 2020" -output: html_document +vignette: > + %\VignetteIndexEntry{Tutorial: structuration of a semi-distributive GR model} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} --- ```{r setup, include=FALSE} diff --git a/vignettes/v02_First_run.Rmd b/vignettes/v02_First_run.Rmd index e965f2906502e8b1b4c1d431cdd13ef99be392fa..d65efb7763203774fe370484299adaa72c4e0b42 100644 --- a/vignettes/v02_First_run.Rmd +++ b/vignettes/v02_First_run.Rmd @@ -1,8 +1,10 @@ --- title: "First run of the model" author: "David Dorchies" -date: "20 mai 2020" -output: html_document +vignette: > + %\VignetteIndexEntry{First run of the model} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} --- ```{r setup, include=FALSE}