function [sys,x0,str,ts] = s_pctest(t,x,u,flag)
% t,x,u og flag sendes automatisk til denne s-funksjonen av simulink. u er
% inngangene (pådrag).
% u = wl, wv, Htotco2, wng og Hng
global b
switch flag

  % INITALIZATION
  % -------------
  case 0,
    [sys,x0,str,ts]=Initialize;

    
  % DERIVATIVES
  % -----------
  case 1,
    dy = pc(t,x,u);   % x er tilstandene TVN og p (y el dydt i pc.m)
    sys= dy;
    
  % OUTPUTS 
  % -------
  case 3,
    Tl = x(1:b.n);              % Kolonnevektorer (nedover)
    Vl = x(b.n+1:2*b.n);
    Nl = x(2*b.n+1:3*b.n);
    Tv = x(3*b.n+1:4*b.n);
    Vv = b.V_pc(1)-Vl;
    Nv = x(4*b.n+1:5*b.n);
    Tng= x(5*b.n+1:6*b.n);
    Vng= x(6*b.n+1:7*b.n);
    Nng= x(7*b.n+1:8*b.n);
    Tvegg= x(8*b.n+1:9*b.n);
    for i=1:b.n
        Al = co2_sw([Tl(i),Vl(i),Nl(i)]');
        Av = co2_sw([Tv(i),Vv(i),Nv(i)]');
        Ang = ng_pr([Tng(i),Vng(i),Nng(i),Nng(i)*1e-6,Nng(i)*1e-6]');
        pl(i)  = -Al.g(2); % trykk i hvert kontr.volum
        pv(i)  = -Av.g(2);
        png(i) = -Ang.g(2);
    end
   xv = (Nv)./(Nl+Nv);
    
    sys = [Tl; Vl; Nl; pl';
           Tv; Vv; Nv; pv'; xv;
           Tng; Vng; Nng; png'; 
           Tvegg];

%     for i=1:b.n
%         l=isreal(pl(i)); 
%         if l==0, 
%             disp('Komplekse elementer i pl'),disp(Tl(i)),disp(Vl(i)),disp(Nl(i))
%        
%     end
%     l=isreal(png);if l==0, disp('Komplekse elementer i png'),end
    
%     l=isreal(Tv); if l==0, disp('Komplekse elementer i Tv'), end

    
  case {2,4,9}
    sys=[];
    
  % UNEXPECTED FLAGS
  % ----------------
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);
    
end

% end sfuntmpl

% Initialiseringsfunksjon:
function [sys,x0,str,ts]=Initialize
global b

sizes = simsizes;

sizes.NumContStates  = 9*b.n; % TVN(liq) TN(vap) TVN(ng) T(vegg)
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 14*b.n; % TVNp(liq) TVNp(vap) xl TVNp(ng) T(vegg)
sizes.NumInputs      = 5; % wl, wv, Htot og wng, Hng
sizes.DirFeedthrough = 1; % 0 hvis utgang ikke direkte funksjon av inngang, ellers 1
sizes.NumSampleTimes = 1; % at least one sample time is needed

sys = simsizes(sizes);

load initial
% initialize the initial conditions
x0 = y0; % TVN(liq) TN(vap) TVN(ng) T(vegg)

% str is always an empty matrix
str = [];

% initialize the array of sample times
ts  = [0 0];
%data=initialize;
% end mdlInitializeSizes

