function [sys,x0,str,ts] = H(t,x,u,flag,xi0,dxi0,m,d)
% initital values: x0, dx0

% states:
% x = [x1, dx1]

% inputs:
% u = [Fext, k]   % (k=adjustable stiffness)
% m = mass (constant input)
% d = damping (constant input)

switch flag,

  %%%%%%%%%%%%%%%%%%
  % Initialization %
  %%%%%%%%%%%%%%%%%%
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes(xi0,dxi0);

  %%%%%%%%%%%%%%%
  % Derivatives %
  %%%%%%%%%%%%%%%
  case 1,
    sys=mdlDerivatives(t,x,u,m,d);

  %%%%%%%%%%%
  % Outputs %
  %%%%%%%%%%%
  case 3,
    sys=mdlOutputs(t,x,u,m,d);

  %%%%%%%%%%%%%%%%%%%
  % Unhandled flags %
  %%%%%%%%%%%%%%%%%%%
  case { 2, 9 },
    sys = [];

  %%%%%%%%%%%%%%%%%%%%
  % Unexpected flags %
  %%%%%%%%%%%%%%%%%%%%
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);

end
% end csfunc

%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts]=mdlInitializeSizes(xi0,dxi0)

sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 0;   % 0 ==> state derivatives available
sizes.NumSampleTimes = 1;

sys = simsizes(sizes);
x0(1)  = xi0;
x0(2)  = dxi0;
str = [];
ts  = [0];

% end mdlInitializeSizes
%
%=============================================================================
% mdlDerivatives
% Return the derivatives for the continuous states.
%=============================================================================
%
function sys=mdlDerivatives(t,x,u,m,d)
% u = [Fext, k]   % (k=adjustable stiffness)
% m = mass (constant input)

% state space model

sys(1)=x(2);
sys(2)=1/m*(u(1)-d*x(2)-u(2)*x(1));

% end mdlDerivatives
%
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(t,x,u,m,d)

sys = x;

% end mdlOutputs