function [sys,x0,str,Tarray] = sfundiskret(t,x,u,flagg)

%Switch-struktur for å velge relevant funksjon i S-funksjonen ut fra verdien av flagg-argumentet:
switch flagg,

  case 0, %Initialisering
    [sys,x0,str,Tarray]=mdlInitializeSizes;

  case 2, %Beregner oppdatering av tilstand, dvs. x ved tidsskritt k+1:
    sys=mdlUpdate(t,x,u);

  case 3, %Beregner utganger
    sys=mdlOutputs(t,x,u);

  case {2,4}, %For ubrukte eller ubehandlede flaggverdier
    sys = [];

  case 9, %Aktiviteter ved simuleringens avslutning
    mdlTerminate

 otherwise %Uventede flaggverdier
    error(['Unhandled flag = ',num2str(flag)]);

end
% end sfundiskret

%-----------------------------------------------------------

%S-funksjonens funksjoner er som følger: 
 
%----------------------------------------------------------

function [sys,x0,str,Tarray]=mdlInitializeSizes

global xinit K1 K2 K3 Ts

%%%Definerer karakteristika for systemet:
sizes = simsizes; %Lager en struktur-variabel med navn sizes.
%Gir verdier til feltene i strukturen sizes:
%Begin
sizes.NumContStates  = 0; %Antall tidskontinuerlige tilstandsvariable i systemet 
sizes.NumDiscStates  = 1; %Antall tidsdiskrete tilstandsvariable i systemet
sizes.NumOutputs     = 1; %Antall utgangsvariable
sizes.NumInputs      = 1; %Antall inngangsvariable
sizes.DirFeedthrough = 1; %1 (ja) eller 0 (nei). Angir om det er direktekopling fra
%inngang til utgang i systemet. Viktig å sette riktig! I dette eksempelet 
%er svaret ja (= 1). 
sizes.NumSampleTimes = 1; %Antall samplingsintervaller. Sett verdi 1 for 
%rent tidskontinuerlige systemer og for rent tidsdiskrete systemer.
%End

%%%Angir retur-argumenter for S-funksjonen:
sys = simsizes(sizes); 
x0  = xinit; 
str = [];
T = Ts; 
T_offset = 0;
Tarray  = [T T_offset]; 

% end mdlInitializeSizes

%----------------------------------------------------------

function sys=mdlUpdate(t,x,u)

global xinit K1 K2 K3 Ts

sys = x(1) + Ts*(K1*x(1) + K2*(u(1))^2); %sys angir verdien av tilstanden x for neste tidsskritt (nr. k+1). 

% end mdlDerivatives

%----------------------------------------------------------

function sys=mdlOutputs(t,x,u)

global xinit K1 K2 K3 Ts

sys = x(1) + K3*u(1); %sys angir verdien av systemets utgangsvariable. 

% end mdlOutputs

%----------------------------------------------------------

function mdlTerminate

disp('Simuleringen er avsluttet!')

%end mdlTerminate
