\encoding{UTF-8}


\name{CreateIniStates}
\alias{CreateIniStates}


\title{Creation of the IniStates object possibly required by the CreateRunOptions functions}


\usage{
CreateIniStates(FUN_MOD, InputsModel,
  ProdStore = 0.3, RoutStore = 0.5, ExpStore = NULL,
  UH1 = NULL, UH2 = NULL,
  GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL,
  verbose = TRUE)
}


\arguments{
\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)}

\item{InputsModel}{[object of class \code{InputsModel}] see \code{\link{CreateInputsModel}} for details}

\item{ProdStore}{[numeric] production store level [mm]}

\item{RoutStore}{[numeric] routing store level [mm]}

\item{ExpStore}{(optional) [numeric] series of exponential store level (negative) [mm] for the GR6J model}

\item{UH1}{(optional) [numeric] unit hydrograph 1 levels [mm]}

\item{UH2}{(optional) [numeric] unit hydrograph 2 levels [mm]}

\item{GCemaNeigeLayers}{(optional) [numeric] snow pack [mm], possibly used to create the CemaNeige model initial state}

\item{eTGCemaNeigeLayers}{(optional) [numeric] snow pack thermal state [°C], possibly used to create the CemaNeige model initial state}

\item{verbose}{(optional) [boolean] boolean indicating if the function is run in verbose mode or not, \code{default = TRUE}}

}


\value{
[list] object of class \code{IniStates} containing the initial model internal states; it always includes the following:
         \tabular{ll}{
         \emph{$Store          }  \tab  [numeric] list of store levels (\emph{$Prod}, \emph{$Rout} and \emph{$Exp}) \cr
         \emph{$UH             }  \tab  [numeric] list of unit hydrographs levels (\emph{$UH1} and \emph{$UH2}) \cr
         \emph{$CemaNeigeLayers}  \tab  [numeric] list of CemaNeige variables (\emph{$G} and \emph{$eTG})
         }
}


\description{
Creation of the \code{IniStates} object possibly required by the \code{\link{CreateRunOptions}} functions
}

\details{
20 numeric values are required for UH1 and 40 numeric values are required for UH2 if GR4J, GR5J or GR6J are used (respectivly 20*24 and 40*24 for the daily model GR4H). \cr
GCemaNeigeLayers and eTGCemaNeigeLayers require each numeric values as many as given in \code{\link{CreateInputsModel}} with the NLayersargument. \cr
The structure of the object of class \code{IniStates} returned is always exactly the same for all models (except for the unit hydrographs levels that contain more values with GR4H), even if some states do nt exist (e.g. \emph{$UH$UH1} for GR2M).  \cr
If CemaNeige is not used, \emph{$CemaNeigeLayers$G} and \emph{$CemaNeigeLayers$eTG} are set to \code{NA}. \cr

Nota: the \code{StateEnd} objects from the outputs of \code{RunModel*} functions already respect the format given by the \code{CreateIniStates} function. 
}


\examples{
library(airGR)

## loading catchment data
data(L0123001)

## preparation of the InputsModel object
InputsModel <- CreateInputsModel(FUN_MOD = RunModel_GR4J, DatesR = BasinObs$DatesR, 
                                 Precip = BasinObs$P, PotEvap = BasinObs$E)

## run period selection
Ind_Run <- seq(which(format(BasinObs$DatesR, format = "\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), 
               which(format(BasinObs$DatesR, format = "\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))


## preparation of the IniStates object
IniStates <- CreateIniStates(FUN_MOD = RunModel_GR4J, InputsModel = InputsModel,
                             ProdStore = 0.1, RoutStore = 0.6, ExpStore = NULL,
                             UH1 = c(0.52, 0.54, 0.15, rep(0, 17)),
                             UH2 = c(0.057, 0.042, 0.015, 0.005, rep(0, 36)),
                             GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL)
str(IniStates)  

## preparation of the RunOptions object
RunOptions <- CreateRunOptions(FUN_MOD = RunModel_GR4J, InputsModel = InputsModel, 
                               IndPeriod_Run = Ind_Run, IniStates = IniStates)
                           
}


\author{
Olivier Delaigue
}


\seealso{
\code{\link{CreateRunOptions}}
}