#' @param FUN_TRANSFO (optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined
#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
#' @param InputsCrit [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details
#' @param CalibOptions [object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details
#' @param FUN_MOD [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)
#' @param FUN_CRIT [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)
#' @param FUN_TRANSFO (optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined
#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
### if(!quiet){ cat(paste("\t Iter ",formatC(ITER,format="d",width=3)," Crit ",formatC(CritOptim,format="f",digits=4)," Pace ",formatC(Pace,format="f",digits=4),"\n",sep="")); }
### if(verbose){ cat(paste("\t Iter ",formatC(ITER,format="d",width=3)," Crit ",formatC(CritOptim,format="f",digits=4)," Pace ",formatC(Pace,format="f",digits=4),"\n",sep="")); }
#' @param FUN_MOD [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)
#' @param DatesR [POSIXlt] vector of dates required to create the GR model and CemaNeige module inputs
#' @param Precip [numeric] time series of total precipitation (catchment average) [mm], required to create the GR model and CemaNeige module inputs
#' @param PotEvap [numeric] time series of potential evapotranspiration (catchment average) [mm], required to create the GR model inputs
#' @param TempMean (optional) [numeric] time series of mean air temperature [degC], required to create the CemaNeige module inputs
#' @param TempMin (optional) [numeric] time series of min air temperature [degC], possibly used to create the CemaNeige module inputs
#' @param TempMax (optional) [numeric] time series of max air temperature [degC], possibly used to create the CemaNeige module inputs
#' @param ZInputs (optional) [numeric] real giving the mean elevation of the Precip and Temp series (before extrapolation) [m]
#' @param HypsoData (optional) [numeric] vector of 101 reals: min, q01 to q99 and max of catchment elevation distribution [m], required to create the GR model inputs, if not defined a single elevation is used for CemaNeige
#' @param NLayers (optional) [numeric] integer giving the number of elevation layers requested [-], required to create the GR model inputs, default=5
#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
#' @return [list] object of class \emph{InputsModel} containing the data required to evaluate the model outputs; it can include the following:
#' \tabular{ll}{
#' \emph{$DatesR } \tab [POSIXlt] vector of dates \cr
#' \emph{$Precip } \tab [numeric] time series of total precipitation (catchment average) [mm] \cr
#' \emph{$PotEvap } \tab [numeric] time series of potential evapotranspiration (catchment average) [mm], \cr\tab defined if FUN_MOD includes GR4H, GR4J, GR5J, GR6J, GR2M or GR1A \cr \cr
#' \emph{$LayerPrecip } \tab [list] list of time series of precipitation (layer average) [mm], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr
#' \emph{$LayerTempMean } \tab [list] list of time series of mean air temperature (layer average) [degC], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr
#' \emph{$LayerFracSolidPrecip} \tab [list] list of time series of solid precip. fract. (layer average) [-], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr
BOOL_NA_TMP<-(Precip<0)|is.na(Precip);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(!quiet){warning("\t Values < 0 or NA values detected in Precip series \n");}}
BOOL_NA_TMP<-(PotEvap<0)|is.na(PotEvap);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(!quiet){warning("\t Values < 0 or NA values detected in PotEvap series \n");}}
BOOL_NA_TMP<-(Precip<0)|is.na(Precip);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(verbose){warning("\t Values < 0 or NA values detected in Precip series \n");}}
BOOL_NA_TMP<-(PotEvap<0)|is.na(PotEvap);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(verbose){warning("\t Values < 0 or NA values detected in PotEvap series \n");}}
}
if("CemaNeige"%in%ObjectClass){
BOOL_NA_TMP<-(Precip<0)|is.na(Precip);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(!quiet){warning("\t Values < 0 or NA values detected in Precip series \n");}}
BOOL_NA_TMP<-(TempMean<(-150))|is.na(TempMean);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(!quiet){warning("\t Values < -150) or NA values detected in TempMean series \n");}}
BOOL_NA_TMP<-(Precip<0)|is.na(Precip);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(verbose){warning("\t Values < 0 or NA values detected in Precip series \n");}}
BOOL_NA_TMP<-(TempMean<(-150))|is.na(TempMean);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(verbose){warning("\t Values < -150) or NA values detected in TempMean series \n");}}
if(!is.null(TempMin)&!is.null(TempMax)){
BOOL_NA_TMP<-(TempMin<(-150))|is.na(TempMin);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(!quiet){warning("\t Values < -150) or NA values detected in TempMin series \n");}}
BOOL_NA_TMP<-(TempMax<(-150))|is.na(TempMax);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(!quiet){warning("\t Values < -150) or NA values detected in TempMax series \n");}}}
BOOL_NA_TMP<-(TempMin<(-150))|is.na(TempMin);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(verbose){warning("\t Values < -150) or NA values detected in TempMin series \n");}}
BOOL_NA_TMP<-(TempMax<(-150))|is.na(TempMax);if(sum(BOOL_NA_TMP)!=0){BOOL_NA<-BOOL_NA|BOOL_NA_TMP;if(verbose){warning("\t Values < -150) or NA values detected in TempMax series \n");}}}