Toymodel <- function(alpha=0.1,beta=0.4,gamma=1,sig=1,trend=0,nstartd=30,nleadt=4,nmemb=10,obsini='',fxerr='') {
 
 time <- seq(1,nstartd) # time vector
 
 if (is.numeric(obsini)){ 
   # Observations provided by input
   # compute forecast parameters from observations
   obs_ano <- obsini
 } else {
   # Create observations for selected period
   obs_ano<-array(rnorm(nleadt*nstartd,mean=0,sd=sig)
            ,dim=c(1,1,nstartd,nleadt))
   obs_trend<-array(t(time)*rep(trend,times=nstartd),
            ,dim=c(1,1,nstartd,nleadt))
   obs<-obs_ano+obs_trend

   trend=rep(c(trend),times=nleadt) # same trend in all lead-times
   sig=rep(c(sig),times=nleadt) # same variability in all lead-times
 }

 forecast <- array(dim=c(length(gamma),nmemb,nstartd,nleadt))

 # Allocate observations and forecast according to s2dverification standards
 for (j in 1:nstartd){
   for (f in 1:nleadt){
     for (g in 1:length(gamma)){
       auto_term <- alpha*obs_ano[1,1,j,f] # Predictability term
       if (is.numeric(fxerr)){
         conf_term <- fxerr # Forecast error term, fixed by input
       } else {
         conf_term <- rnorm(1,mean=0,sd=beta) # Forecast error term, random
       }
       trend_term <- gamma[g]*trend[f]*j # Trend term
       var_corr <- rnorm(nmemb,mean=0,sd=sqrt(sig[f]-alpha^2-beta^2)) 
       forecast[g,,j,f] <- matrix(auto_term,c(nmemb,1))+
         matrix(conf_term,c(nmemb,1))+matrix(trend_term,c(nmemb,1))+var_corr
     }  
   }
 }

 toyforecast <- list()
 toyforecast$mod <- forecast
 toyforecast$obs <- obs_ano

 return(toyforecast)

}
