function [varargout] = schwarz(varargin)
%1='m','h','alfam','alfah','betam','betah'
%2=V[1:#node]
%3 (for m&h, old mgate & hgate have to be supplied
%4 = dt
%-----------------------------------
persistent q10_Naf_m q10_Naf_h q10_Nap_m q10_Ks_s
action = varargin{1};
switch action
case 'Initial'
model=[];
%-----------------------------------------------------------
model.name='schwarz';
%-----------------------------------------------------------
model.gate{1}='Naf_m';
model.gate{2}='Naf_h';
model.gate{3}='Nap_m';
model.gate{4}='Ks_s';
%-----------------------------------------------------------
model.I{1}.name='Naf';
model.I{1}.G=3000; %(kOhm-Cm^2)^-1
model.I{1}.E=50; %(mV)
model.I{1}.gate=[1 3;
2 1]; %gate1^3.gate2^1
model.I{2}.name='Nap';
model.I{2}.G=5;
model.I{2}.E=50;
model.I{2}.gate=[3 3];
model.I{3}.name='Ks';
model.I{3}.G=80;
model.I{3}.E=-84;
model.I{3}.gate=[4 1];
model.I{4}.name='Lk';
model.I{4}.G=80;
model.I{4}.E=-83.38;
model.I{4}.gate=[];
%[mS/cm^2 mV - -]
%-----------------------------------------------------------
%optional
model.vini=-82;
model.temperature=37;
%-----------------------------------------------------------
varargout{1}=model;
case 'setting'
%Setting is called every calculation
temperature=varargin{2};
q10_Naf_m=2.2^((temperature-20)/10);
q10_Naf_h=2.9^((temperature-20)/10);
q10_Nap_m=2.2^((temperature-20)/10);
q10_Ks_s=3.0^((temperature-20)/10);
case 'Naf_m'
%v=varargin{2};
%gate=varargin{3};
%dt=varargin{4};
%q10=2.2^((temperature-20)/10);
alfam=q10_Naf_m*schwarz('Naf_m_alfa',varargin{2});
betam=q10_Naf_m*schwarz('Naf_m_beta',varargin{2});
varargout{1}=Gate_Trap(varargin{3},varargin{4},alfam,betam);
case 'Naf_m_alfa'
%v=varargin{2};
varargout{1}=1.86*(varargin{2}+25.4)./(1-exp(-(varargin{2}+25.4)/10.3));
case 'Naf_m_beta'
%v=varargin{2};
varargout{1}=-0.086*(varargin{2}+29.7)./( 1-exp((varargin{2}+29.7)/9.16) );
case 'Naf_h'
%v=varargin{2};
% gate=varargin{3};
% dt=varargin{4};
% q10=2.9^((temperature-20)/10);
alfah=q10_Naf_h*schwarz('Naf_h_alfa',varargin{2});
betah=q10_Naf_h*schwarz('Naf_h_beta',varargin{2});
varargout{1}=Gate_Trap(varargin{3},varargin{4},alfah,betah);
case 'Naf_h_alfa'
%v=varargin{2};
varargout{1}=-0.0336*(varargin{2}+118)./(1-exp((varargin{2}+118)/11));
case 'Naf_h_beta'
%v=varargin{2};
varargout{1}=(2.3)./( 1+exp(-(varargin{2}+35.8)/13.4) );
case 'Nap_m'
%v=varargin{2};
%gate=varargin{3};
%dt=varargin{4};
%q10=2.2^((temperature-20)/10);
alfam=q10_Nap_m*schwarz('Nap_m_alfa',varargin{2});
betam=q10_Nap_m*schwarz('Nap_m_beta',varargin{2});
varargout{1}=Gate_Trap(varargin{3},varargin{4},alfam,betam);
case 'Nap_m_alfa'
%v=varargin{2};
varargout{1}=0.186*(varargin{2}+48.4)./(1-exp(-(varargin{2}+48.4)/10.3));
case 'Nap_m_beta'
%v=varargin{2};
varargout{1}=-0.0086*(varargin{2}+42.7)./( 1-exp((varargin{2}+42.7)/9.16) );
case 'Ks_s'
%v=varargin{2};
% gate=varargin{3};
% dt=varargin{4};
% q10=3.0^((temperature-20)/10);
alfam=q10_Ks_s*schwarz('Ks_s_alfa',varargin{2});
betam=q10_Ks_s*schwarz('Ks_s_beta',varargin{2});
varargout{1}=Gate_Trap(varargin{3},varargin{4},alfam,betam);
case 'Ks_s_alfa'
%v=varargin{2};
varargout{1}=0.00122*(varargin{2}+19.5)./(1-exp(-(varargin{2}+19.5)/23.6));
case 'Ks_s_beta'
%v=varargin{2};
varargout{1}=-0.000739*(varargin{2}+87.1)./( 1-exp((varargin{2}+87.1)/21.8) );
otherwise
%disp(':(')
end