From aad9d1db53219ba9af6f3c18decfbc28db63007b Mon Sep 17 00:00:00 2001
From: Dorchies David <david.dorchies@inrae.fr>
Date: Thu, 17 Jun 2021 11:56:29 +0200
Subject: [PATCH] feat: add WarmUpQsim item in OutputsModel

- add the item in the OutputsModel object
- optimisation of CreateRunOptions on Outputs_Sim and Outputs_Cal items.
- add exception in SeriesAggreg.OutputsModel

Refs #123
---
 R/CreateRunOptions.R          | 37 ++++++-----------------------------
 R/SeriesAggreg.OutputsModel.R |  2 +-
 R/UtilsRunModel.R             | 18 +++++++++--------
 3 files changed, 17 insertions(+), 40 deletions(-)

diff --git a/R/CreateRunOptions.R b/R/CreateRunOptions.R
index 39caf909..d43e99b7 100644
--- a/R/CreateRunOptions.R
+++ b/R/CreateRunOptions.R
@@ -295,31 +295,7 @@ CreateRunOptions <- function(FUN_MOD, InputsModel,
   ##check_Outputs_Cal_and_Sim
 
   ##Outputs_all
-  Outputs_all <- NULL
-  if (identical(FUN_MOD, RunModel_GR4H) | identical(FUN_MOD, RunModel_CemaNeigeGR4H)) {
-    Outputs_all <- c(Outputs_all, .FortranOutputs(GR = "GR4H")$GR)
-  }
-  if (identical(FUN_MOD, RunModel_GR5H) | identical(FUN_MOD, RunModel_CemaNeigeGR5H)) {
-    Outputs_all <- c(Outputs_all, .FortranOutputs(GR = "GR5H")$GR)
-  }
-  if (identical(FUN_MOD, RunModel_GR4J) | identical(FUN_MOD, RunModel_CemaNeigeGR4J)) {
-    Outputs_all <- c(Outputs_all, .FortranOutputs(GR = "GR4J")$GR)
-  }
-  if (identical(FUN_MOD, RunModel_GR5J) | identical(FUN_MOD, RunModel_CemaNeigeGR5J)) {
-    Outputs_all <- c(Outputs_all, .FortranOutputs(GR = "GR5J")$GR)
-  }
-  if (identical(FUN_MOD, RunModel_GR6J) | identical(FUN_MOD, RunModel_CemaNeigeGR6J)) {
-    Outputs_all <- c(Outputs_all, .FortranOutputs(GR = "GR6J")$GR)
-  }
-  if (identical(FUN_MOD, RunModel_GR2M)) {
-    Outputs_all <- c(Outputs_all, .FortranOutputs(GR = "GR2M")$GR)
-  }
-  if (identical(FUN_MOD, RunModel_GR1A)) {
-    Outputs_all <- c(Outputs_all, .FortranOutputs(GR = "GR1A")$GR)
-  }
-  if ("CemaNeige" %in% ObjectClass) {
-    Outputs_all <- c(Outputs_all, .FortranOutputs(GR = NULL, isCN = TRUE)$CN)
-  }
+  Outputs_all <- c("DatesR", unlist(FortranOutputs), "WarmUpQsim", "StateEnd")
 
   ##check_Outputs_Sim
   if (!is.vector(Outputs_Sim)) {
@@ -332,9 +308,9 @@ CreateRunOptions <- function(FUN_MOD, InputsModel,
     stop("'Outputs_Sim' must not contain NA")
   }
   if ("all" %in% Outputs_Sim) {
-    Outputs_Sim <- c("DatesR", Outputs_all, "StateEnd")
+    Outputs_Sim <- Outputs_all
   }
-  Test <- which(!Outputs_Sim %in% c("DatesR", Outputs_all, "StateEnd"))
+  Test <- which(!Outputs_Sim %in% Outputs_all)
   if (length(Test) != 0) {
     stop(paste0( "'Outputs_Sim' is incorrectly defined: ",
                  paste(Outputs_Sim[Test], collapse = ", "), " not found"))
@@ -342,7 +318,7 @@ CreateRunOptions <- function(FUN_MOD, InputsModel,
   Outputs_Sim <- Outputs_Sim[!duplicated(Outputs_Sim)]
 
 
-  ##check_Outputs_Cal
+    ##check_Outputs_Cal
   if (is.null(Outputs_Cal)) {
     if ("GR" %in% ObjectClass) {
       Outputs_Cal <- c("Qsim")
@@ -366,10 +342,9 @@ CreateRunOptions <- function(FUN_MOD, InputsModel,
     }
   }
   if ("all" %in% Outputs_Cal) {
-    Outputs_Cal <- c("DatesR", Outputs_all, "StateEnd")
-
+    Outputs_Cal <- Outputs_all
   }
-  Test <- which(!Outputs_Cal %in% c("DatesR", Outputs_all, "StateEnd"))
+  Test <- which(!Outputs_Cal %in% Outputs_all)
   if (length(Test) != 0) {
     stop(paste0("'Outputs_Cal' is incorrectly defined: ",
                 paste(Outputs_Cal[Test], collapse = ", "), " not found"))
diff --git a/R/SeriesAggreg.OutputsModel.R b/R/SeriesAggreg.OutputsModel.R
index 3bf0d8ae..d065182b 100644
--- a/R/SeriesAggreg.OutputsModel.R
+++ b/R/SeriesAggreg.OutputsModel.R
@@ -2,6 +2,6 @@ SeriesAggreg.OutputsModel <- function(x, Format, ...) {
   SeriesAggreg.list(x,
                     Format,
                     ConvertFun = NA,
-                    except = "StateEnd",
+                    except = c("WarmUpQsim", "StateEnd"),
                     ...)
 }
diff --git a/R/UtilsRunModel.R b/R/UtilsRunModel.R
index c5f861fb..b79809f6 100644
--- a/R/UtilsRunModel.R
+++ b/R/UtilsRunModel.R
@@ -18,15 +18,11 @@
   IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries
   FortranOutputs <- RunOptions$FortranOutputs$GR
 
-  if ("all" %in% RunOptions$Outputs_Sim) {
-    IndOutputs <- as.integer(1:length(FortranOutputs))
-  } else {
-    IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim)
-  }
+  IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim)
 
   OutputsModel <- list()
 
-  if("DatesR" %in% RunOptions$Outputs_Sim) {
+  if ("DatesR" %in% RunOptions$Outputs_Sim) {
     OutputsModel$DatesR <- InputsModel$DatesR[RunOptions$IndPeriod_Run]
   }
 
@@ -36,11 +32,17 @@
   OutputsModel <- c(OutputsModel,
                     lapply(seqOutputs, function(i) RESULTS$Outputs[IndPeriod2, i]))
 
-  if(!is.null(CemaNeigeLayers)) {
+  if (!is.null(CemaNeigeLayers)) {
     OutputsModel$CemaNeigeLayers <- CemaNeigeLayers
   }
 
-  if("StateEnd" %in% RunOptions$Outputs_Sim) {
+  if ("WarmUpQsim" %in% RunOptions$Outputs_Sim) {
+    OutputsModel$WarmUpQsim <- RESULTS$Outputs[seq_len(length(RunOptions$IndPeriod_WarmUp)),
+                                               which(FortranOutputs == "Qsim")]
+    class(OutputsModel$WarmUpQsim) <- c("WarmUpOutputsModelItem", class(OutputsModel$WarmUpQsim))
+  }
+
+  if ("StateEnd" %in% RunOptions$Outputs_Sim) {
     OutputsModel$StateEnd <- RESULTS$StateEnd
   }
 
-- 
GitLab