From f35cfd17e73c81125ae2eb6f1e601afac83fd8f0 Mon Sep 17 00:00:00 2001
From: David <david.dorchies@inrae.fr>
Date: Mon, 2 Dec 2024 17:09:40 +0100
Subject: [PATCH] fix: Missing attributes for some RunModel

Use complete_OutputsModel for all

Refs #177
---
 R/RunModel.GR.R          | 10 ++++++----
 R/RunModel.InputsModel.R | 12 +-----------
 R/RunModel_Routing.R     | 13 ++++---------
 R/utils.RunModel.R       | 15 +++++++++++++++
 4 files changed, 26 insertions(+), 24 deletions(-)

diff --git a/R/RunModel.GR.R b/R/RunModel.GR.R
index 234fdfe..2c9ba19 100644
--- a/R/RunModel.GR.R
+++ b/R/RunModel.GR.R
@@ -1,8 +1,11 @@
 #' Run of a rainfall-runoff model on a sub-basin
 #'
+#' Run ONLY the rainfall-runoff model, upstream flow routing and Diversions are
+#' not processed.
+#'
 #' @details
-#' This function runs [airGR::RunModel] and add an item `Qsim_m3` to the returned
-#' *OutputsModel* object.
+#' This function runs [airGR::RunModel] (without lag) and add an item `Qsim_m3`
+#' to the returned *OutputsModel* object.
 #'
 #' @param x \[object of class `InputsModel`\] `InputsModel` for [airGR::RunModel]
 #' @param RunOptions \[object of class *RunOptions*\] see [airGR::CreateRunOptions] for details
@@ -28,8 +31,7 @@ RunModel.GR <- function(x, RunOptions, Param, ...) {
   FUN_MOD <- match.fun(x$FUN_MOD)
   OutputsModel <- FUN_MOD(x, RunOptions = RunOptions,
           Param = Param[iFirstParamRunOffModel:length(Param)])
-  # Add Qsim_m3 in m3/timestep
-  OutputsModel$Qsim_m3 <- OutputsModel$Qsim * sum(x$BasinAreas) * 1e3
+  OutputsModel <- complete_OutputsModel(OutputsModel, RunOptions, x$BasinAreas)
 
   return(OutputsModel)
 }
diff --git a/R/RunModel.InputsModel.R b/R/RunModel.InputsModel.R
index 0693e44..4764459 100644
--- a/R/RunModel.InputsModel.R
+++ b/R/RunModel.InputsModel.R
@@ -62,17 +62,7 @@ RunModel.InputsModel <- function(x = NULL,
     OutputsModel <- calcOverAbstraction(OutputsModel, FALSE)
     OutputsModel$RunOptions <- calcOverAbstraction(OutputsModel$RunOptions, TRUE)
   }
-  OutputsModel$RunOptions$TimeStep <- RunOptions$FeatFUN_MOD$TimeStep
-  if (is.null(OutputsModel$Qsim_m3)) {
-    # Add Qsim_m3 in m3/timestep
-    OutputsModel$Qsim_m3 <-
-      OutputsModel$Qsim * sum(x$BasinAreas, na.rm = TRUE) * 1e3
-  }
-  if ("WarmUpQsim" %in% RunOptions$Outputs_Sim &&
-      is.null(OutputsModel$RunOptions$WarmUpQsim_m3)) {
-    OutputsModel$RunOptions$WarmUpQsim_m3 <-
-      OutputsModel$RunOptions$WarmUpQsim * sum(x$BasinAreas, na.rm = TRUE) * 1e3
-  }
+  OutputsModel <- complete_OutputsModel(OutputsModel, RunOptions, x$BasinAreas)
   if (x$hasDiversion && !x$isReservoir) {
     OutputsModel <- RunModel_Diversion(x, RunOptions, OutputsModel)
   }
diff --git a/R/RunModel_Routing.R b/R/RunModel_Routing.R
index 5463c6a..461b870 100644
--- a/R/RunModel_Routing.R
+++ b/R/RunModel_Routing.R
@@ -20,20 +20,15 @@ RunModel_Routing <- function(x, RunOptions, Param, QcontribDown = NULL, ...) {
     x$BasinAreas[length(x$BasinAreas)] <- 1E-6
   }
   OutputsModel <- RunModel_Lag_enhanced(x,
-                                          RunOptions = RunOptions,
-                                          Param = Param[1],
-                                          QcontribDown = QcontribDown)
+                                        RunOptions = RunOptions,
+                                        Param = Param[1],
+                                        QcontribDown = QcontribDown)
   if (is.null(OutputsModel$DatesR)) {
     OutputsModel$DatesR <- x$DatesR[RunOptions$IndPeriod_Run]
   }
-  if ("WarmUpQsim" %in% RunOptions$Outputs_Sim) {
-    OutputsModel$RunOptions$WarmUpQsim_m3 <-
-      OutputsModel$RunOptions$WarmUpQsim * sum(x$BasinAreas, na.rm = TRUE) * 1e3
-  }
+  OutputsModel <- complete_OutputsModel(OutputsModel, RunOptions, x$BasinAreas)
   OutputsModel <- calcOverAbstraction(OutputsModel, FALSE)
   OutputsModel$RunOptions <- calcOverAbstraction(OutputsModel$RunOptions, TRUE)
-
-  OutputsModel$RunOptions$TimeStep <- RunOptions$FeatFUN_MOD$TimeStep
   return(OutputsModel)
 }
 
diff --git a/R/utils.RunModel.R b/R/utils.RunModel.R
index 4515e2e..dbf187b 100644
--- a/R/utils.RunModel.R
+++ b/R/utils.RunModel.R
@@ -149,3 +149,18 @@ add_OutputsModel_attributes <- function(InputsModel, OutputsModel, IndPeriod_Run
   attr(OutputsModel, "TimeStep") <- attr(InputsModel, "TimeStep")
   return(OutputsModel)
 }
+
+complete_OutputsModel <- function(OutputsModel, RunOptions, BasinAreas) {
+  OutputsModel$RunOptions$TimeStep <- RunOptions$FeatFUN_MOD$TimeStep
+  if (is.null(OutputsModel$Qsim_m3)) {
+    # Add Qsim_m3 in m3/timestep
+    OutputsModel$Qsim_m3 <-
+      OutputsModel$Qsim * sum(BasinAreas, na.rm = TRUE) * 1e3
+  }
+  if ("WarmUpQsim" %in% RunOptions$Outputs_Sim &&
+      is.null(OutputsModel$RunOptions$WarmUpQsim_m3)) {
+    OutputsModel$RunOptions$WarmUpQsim_m3 <-
+      OutputsModel$RunOptions$WarmUpQsim * sum(BasinAreas, na.rm = TRUE) * 1e3
+  }
+  return(OutputsModel)
+}
\ No newline at end of file
-- 
GitLab