function [sys,x0]=tank(t,x,u,flag,li,L,r,A,ht,hv,p,type_nivaamaaler) 

% Dette er S-funksjonen tank som finner tilstandene vannivå, totalt væskenivå og trykk i separatoren 

%Beskrivelse av parametre:	li=lengde av største kammer i separatoren		L=total lengde av separatoren
%									A=avstand mellom målepkt. på nivåmåleren		r=radius av separatoren								
%									ht=totalt væskenivå i tanken						hv=vannivået i tanken
%									type_nivaamaaler=type nivåmåler					p=trykket i tanken									

switch flag
case 0
   %Beregner først de initielle betingelsene i tanken
    Vv=li*(((pi*r^2)/2)+((hv-r)*sqrt((r^2)-(hv-r)^2))+(r^2*asin((hv-r)/r))); 	%volumet av vann i separatoren, initielt 
    Vo=(L*(((pi*r^2)/2)+((ht-r)*sqrt((r^2)-(ht-r)^2))+(r^2*asin((ht-r)/r))))-Vv; 	%volumet av olje i separatoren, initielt
    
    x0=[hv;ht;Vv;Vo;p]; %Dette er initialverdier for vannivået, totalt væskenivå, volum av vann, volum av olje og trykket
     
    nx=5;
    nu=6;
    ny=3;
    sys=[nx;0;ny;nu;0;1]; 
case 1
    %definerer de deriverte dxdt=f(x,u)
    sys=massebal(u,x,li,L,r);	%Dette kallet må stemme med første linje i massebal
case 3
   %definerer målinger/outputs y=g(x,u)
    if type_nivaamaaler== 1  % kontinuerlig nivåmåler
      x(1)=x(1);  % vannivået i tanken 
      x(2)=x(2);  % totalt væskenivå i tanken
   
    elseif type_nivaamaaler== 2   % diskret nivåmåler med A avstand mellom målepunktene
      x(1)=round(x(1)/A)*A;  % vannivået i tanken  
      x(2)=round(x(2)/A)*A;  % totalt væskenivå  
         
    else
       disp('velg riktig nivåmåler!')
     return
   
   end

    sys(1)=x(1);  % vannivået i tanken
    sys(2)=x(2);  % totalt væskenivå i tanken
    sys(3)=x(5);  % trykket i tanken
otherwise
    sys=[];
end