Commit 5cd2a6ad authored by Dorchies David's avatar Dorchies David
Browse files

feat(saveFlowDB): add monthly means

Refs #12
parent a129b993
Pipeline #32022 passed with stages
in 33 minutes and 14 seconds
......@@ -22,6 +22,9 @@ S3method(convertUnitQ,data.frame)
export(addReservoirsGRiwrm)
export(addReservoirsQ)
export(areaPoly)
export(calcMonthlyInterannualMean)
export(calcMonthlyMean)
export(calcMonthlyMeanQuantile)
export(calcQA)
export(calcQJXA)
export(calcQJXA10)
......
#' Compute monthly mean
#'
#' @description
#' Compute montly means, interannual monthly means and quantile of interannual monthly means.
#'
#' @param x a [data.frame] with a first column containing dates in [POSIXt] format and one [numeric] column per gauging station
#' @inheritParams calcQMNA
#' @param prob [numeric], non-exceedance probability
#'
#' @return [matrix] with one row by station and one column by month
#'
#' @rdname calcMonthlyMean
#' @export
#'
calcMonthlyInterannualMean <- function(x, threshold = 0.8) {
dfMY <- calcMonthlyMean(x, threshold)
dfM <- SeriesAggreg(dfMY, Format = "%m", rep("mean_na_rm", ncol(x)-1))
dfM2 <- as.matrix(dfM[, -1, drop = FALSE])
rownames(dfM2) <- lubridate::month(dfM[, 1])
dfM2[as.character(seq.int(12)), ]
}
#' @rdname calcMonthlyMean
#' @export
calcMonthlyMean <- function(x, threshold = 0.8) {
# Calculate monthly mean flow
QM <- SeriesAggreg(x, Format = "%Y%m", rep("mean_na_rm", ncol(x)-1))
nDaysNotNA <- SeriesAggreg(x, Format = "%Y%m", rep("not_na_count", ncol(x)-1))
nDaysNotNA <- nDaysNotNA[, -1, drop = FALSE]
DatesR <- QM[, 1]
QM <- QM[, -1, drop = FALSE]
QM[nDaysNotNA < threshold * 31] <- NA
cbind(DatesR, QM)
}
#' @rdname calcMonthlyMean
#' @export
calcMonthlyMeanQuantile <- function(x, prob, threshold = 0.8) {
dfMY <- calcMonthlyMean(x, threshold)
dfMY[, 1] <- lubridate::month(dfMY[, 1])
l <- lapply(seq.int(12),
function(mo) {
apply(dfMY[dfMY[, 1] == mo, -1], 2, quantile, probs = prob, type = 8)
})
dfMMQ <- do.call(rbind, l)
rownames(dfMMQ) <- seq.int(12)
dfMMQ
}
......@@ -59,13 +59,7 @@ calcQMNA <- function(x, ...) {
#' @rdname calcQMNA
calcQMNA.data.frame <- function(x, threshold = 0.8, ...) {
# Calculate monthly mean flow
QM <- SeriesAggreg(x, Format = "%Y%m", rep("mean_na_rm", ncol(x)-1))
nDaysNotNA <- SeriesAggreg(x, Format = "%Y%m", rep("not_na_count", ncol(x)-1))
nDaysNotNA <- nDaysNotNA[, -1, drop = FALSE]
DatesR <- QM[, 1]
QM <- QM[, -1, drop = FALSE]
QM[nDaysNotNA < threshold * 31] <- NA
QM <- cbind(DatesR, QM)
QM <- calcMonthlyMean(x, threshold)
# Calculate minimum of monthly mean flow
QMNA <- SeriesAggreg(QM, Format = "%Y", rep("min_na_rm", ncol(x)-1))
......
......@@ -44,6 +44,7 @@ saveFlowDB <- function(path, InputsModel, OutputsModel, indicators_periods = NUL
# Global hydrological indicators
if (!is.null(indicators_periods)) {
lapply(indicators_periods, function(period) {
# global indicators
Qsim <- attr(OutputsModel, "Qm3s")
Qsim <- Qsim[Qsim$DatesR >= period[1] & Qsim$DatesR <= period[2], ]
dfInd <- calcHydrologicalIndicators(Qsim)
......@@ -53,6 +54,22 @@ saveFlowDB <- function(path, InputsModel, OutputsModel, indicators_periods = NUL
paste0("Q_indicators_",
paste(y, collapse = "-"),
".tsv")))
# Monthly regime
QMIA <- calcMonthlyInterannualMean(Qsim)
QMIA <- cbind(Id = colnames(QMIA), t(QMIA))
readr::write_tsv(as.data.frame(QMIA),
file.path(path,
paste0("Q_monthly_",
paste(y, collapse = "-"),
".tsv")))
# Monthly 5 years dry regime
QM5<- calcMonthlyMeanQuantile(Qsim, 0.2)
QM5 <- cbind(Id = colnames(QM5), t(QM5))
readr::write_tsv(as.data.frame(QM5),
file.path(path,
paste0("Q_monthly_5years_",
paste(y, collapse = "-"),
".tsv")))
})
}
......
# Données de débits naturalisés
Données de débits naturalisés
=============================
Le jeu de données de ce répertoire provient d'une extraction réalisée à l'aide du package R 'seinebasin2'.
......@@ -10,10 +11,14 @@ Il contient les fichiers suivants:
- ts_Qsim.tsv
- ts_Qcontrib.tsv
- Q_indicators_[DDDD]-[FFFF].tsv
- Q_monthly_[DDDD]-[FFFF].tsv
- Q_monthly_5years_[DDDD]-[FFFF].tsv
Ce sont des fichiers texte avec séparateur tabulation (Tab-Separated-Values).
## Description du fichier "stations.tsv"
Description du fichier "stations.tsv"
-------------------------------------
Ce fichier contient la liste des stations hydrométriques utilisées dans le modèle 'seinebasin2' avec les colonnes suivantes:
......@@ -27,7 +32,9 @@ Ce fichier contient la liste des stations hydrométriques utilisées dans le mod
Les sites issus de la banque hydro ont un identifiant commençant par la lettre `H`. Les sites supplémentaires (`A_PMARNE`, `TRANN_01`, `CHAUM_07`) proviennent de stations gérées par l'EPTB Seine Grands Lacs.
## Description du fichier "ts_Qsim.tsv"
Description du fichier "ts_Qsim.tsv"
------------------------------------
Ce fichier contient les séries chronologiques des débits moyens journaliers modélisés sur chacune des stations hydrométriques.
......@@ -35,7 +42,9 @@ La première colonne `DatesR` contient la date de la données moyenne journaliè
Les colonnes suivantes portent le nom de la station hydrométique correspondant à la colonne `CdSiteHydro` du fichier `stations.tsv` et elles contiennent le débit moyen journalier modélisé en m<sup>3</sup>/s.
## Description du fichier "ts_Qcontrib.tsv"
Description du fichier "ts_Qcontrib.tsv"
----------------------------------------
Ce fichier contient les séries chronologiques de la contribution moyenne journalière modélisée sur chaque bassin versant intermédiaire. Les bassins versants intermédiaires sont délimités par le bassin versant dont l'exutoire est la station hydrométrique donnant son nom au bassin versant auquels on soustrait tous les bassins versants identifiés à l'amont.
......@@ -43,9 +52,11 @@ La première colonne `DatesR` contient la date de la données moyenne journaliè
Les colonnes suivantes portent le nom de la station hydrométique correspondant à la colonne `CdSiteHydro` du fichier `stations.tsv` et elles contiennent la contribution moyenne journalière du bassin versant intermédiaire modélisée en m<sup>3</sup>/s.
## Description des fichiers "Q_indicators_[DDDD]-[FFFF].tsv"
Ce fichier contient des indicateurs hydrologiques calculés entre l'année `[DDDD]` et l'année `[FFFF]`. Les indicateurs calculés sont les suivants (unités m³/s):
Description des fichiers "Q_indicators_[DDDD]-[FFFF].tsv"
---------------------------------------------------------
Ces fichiers contiennent des indicateurs hydrologiques calculés entre l'année `[DDDD]` et l'année `[FFFF]`. Les indicateurs calculés sont les suivants (unités m³/s):
- `QA`: débit annuel moyen
- `VCN10_2`, `VCN30_2`, `VCN10_5`, `VCN_30_5`, `VCN10_10`, `VCN30_10`: avec `VCN[k]_[Y]` le débit moyen minimum sur une durée de `k` jours de période de retour `Y` ans
......@@ -57,3 +68,19 @@ Pour chaque indicateur, le fichier contient:
- l'indicateur calculé sur les débits observés (colonnes `[indicateur].obs`)
- l'indicateur calculé sur les débits simulés sur la période de débits observés (colonnes `[indicateur].sim`)
- le rapport entre l'indicateur calculé sur les débits simulés et celui sur les débits observés (colonnes `R-[indicateur]`)
Description des fichiers "Q_monthly_[DDDD]-[FFFF].tsv"
------------------------------------------------------
Ces fichiers contiennent les débits moyens mensuels inter-annuels calculés entre l'année `[DDDD]` et l'année `[FFFF]` (unités m³/s).
Le fichier est structuré avec une ligne par station et une colonne par mois de l'année.
Description des fichiers "Q_monthly_5years_[DDDD]-[FFFF].tsv"
-------------------------------------------------------------
Ces fichiers contiennent les débits moyens mensuels inter-annuels quiquennaux secs calculés entre l'année `[DDDD]` et l'année `[FFFF]` (unités m³/s).
Le fichier est structuré avec une ligne par station et une colonne par mois de l'année.
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/calcMonthlyMean.R
\name{calcMonthlyInterannualMean}
\alias{calcMonthlyInterannualMean}
\alias{calcMonthlyMean}
\alias{calcMonthlyMeanQuantile}
\title{Compute monthly mean}
\usage{
calcMonthlyInterannualMean(x, threshold = 0.8)
calcMonthlyMean(x, threshold = 0.8)
calcMonthlyMeanQuantile(x, prob, threshold = 0.8)
}
\arguments{
\item{x}{a \link{data.frame} with a first column containing dates in \link{POSIXt} format and one \link{numeric} column per gauging station}
\item{threshold}{\link{numeric} minimum ratio of available data in a year or a month to take it into account}
\item{prob}{\link{numeric}, non-exceedance probability}
}
\value{
\link{matrix} with one row by station and one column by month
}
\description{
Compute montly means, interannual monthly means and quantile of interannual monthly means.
}
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/loadQsim.R
% Please edit documentation in R/readQsim.R
\name{readQsim}
\alias{readQsim}
\title{Load simulated flows recorded with \link{saveFlowDB}}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment