diff --git a/R/RunModel.GRiwrmOutputsModel.R b/R/RunModel.GRiwrmOutputsModel.R index cf8d00daae411a0ad29deccf41e662f5fabfd53e..878e614c2dced2902480983869edbabbba82a701 100644 --- a/R/RunModel.GRiwrmOutputsModel.R +++ b/R/RunModel.GRiwrmOutputsModel.R @@ -73,7 +73,7 @@ RunModel.GRiwrmOutputsModel <- function(x, for (id in names(RunOptions)) { # Run model for the sub-basin and one time step RunOptions[[id]]$IniResLevels <- NULL - RunOptions[[id]]$IniStates <- serializeIniStates(x[[id]]$StateEnd) + RunOptions[[id]]$IniStates <- serializeIniStates(x[[id]]$StateEnd, InputsModel[[id]]) RunOptions[[id]]$IndPeriod_WarmUp <- 0L RunOptions[[id]]$IndPeriod_Run <- IndPeriod_Run } diff --git a/R/RunModel.Supervisor.R b/R/RunModel.Supervisor.R index 57a59f2cf0112f237578a40a04b3cae268c67c47..29591227d920cbad99303c0b707a06a457555497 100644 --- a/R/RunModel.Supervisor.R +++ b/R/RunModel.Supervisor.R @@ -120,7 +120,7 @@ RunModel.Supervisor <- function(x, RunOptions, Param, ...) { # Loop over sub-basin using SD model for (id in SD_Ids) { # Run model for the sub-basin and one time step - RunOptions[[id]]$IniStates <- serializeIniStates(x$OutputsModel[[id]]$StateEnd) + RunOptions[[id]]$IniStates <- serializeIniStates(x$OutputsModel[[id]]$StateEnd, x$InputsModel[[id]]) RunOptions[[id]]$IndPeriod_Run <- iTS # Route upstream flows for SD nodes if (x$InputsModel[[id]]$isReservoir) { diff --git a/R/utils.RunModel.R b/R/utils.RunModel.R index dbf187bfb894844598d9b09ad1382b72f0005228..a881b678b9bbb0760449be014e5e798723709e5a 100644 --- a/R/utils.RunModel.R +++ b/R/utils.RunModel.R @@ -60,8 +60,26 @@ OutputsModelQsim <- function(InputsModel, OutputsModel, IndPeriod_Run) { #' @return A vector as in `RunOptions$IniStates` #' @noRd #' -serializeIniStates <- function(IniStates) { +serializeIniStates <- function(IniStates, InputsModel) { + ObjectClass <- class(InputsModel) + if (!"CemaNeige" %in% ObjectClass && any(is.na(IniStates$CemaNeigeLayers$G))) { + IniStates$CemaNeigeLayers$G <- NULL + } + if (!"CemaNeige" %in% ObjectClass && any(is.na(IniStates$CemaNeigeLayers$eTG))) { + IniStates$CemaNeigeLayers$eTG <- NULL + } + if (!"CemaNeige" %in% ObjectClass && any(is.na(IniStates$CemaNeigeLayers$Gthr))) { + IniStates$CemaNeigeLayers$Gthr <- NULL + } + if (!"CemaNeige" %in% ObjectClass && any(is.na(IniStates$CemaNeigeLayers$Glocmax))) { + IniStates$CemaNeigeLayers$Glocmax <- NULL + } + IniStates$Store$Rest <- rep(NA, 3) IniStates <- unlist(IniStates) + IniStates[is.na(IniStates) & !grepl("SD", names(IniStates))] <- 0 + if ("monthly" %in% ObjectClass) { + IniStates <- IniStates[seq_len(NState)] + } return(IniStates) }