% toSI converts the units to SI.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% DESCRIPTION: toSI converts the units to SI base units.
% 
%       Expand units to be combinations of 
%         {'m', 'kg', 's', 'A', 'mol', 'cd'}
%
% CALL:        u_out = toSI(i_in);
%
% VERSION:     $Id: toSI.m,v 1.1 2011/03/07 17:29:57 hewitson Exp $
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function varargout = toSI(vi)

  % process the units and exponents
  v = unit;  
  for kk=1:numel(vi.strs)
    s = unit(siForUnit(vi.strs{kk}));
    s.exps = vi.exps(kk).*s.exps;
    v = v.*s;
  end  
  v.simplify;
  
  % Either modify the input or set the output
  if nargout == 0
    vi.strs = v.strs;
    vi.exps = v.exps;
    vi.vals = v.vals;
  else 
    varargout{1} = v;
  end
  
end


function s = siForUnit(u)

  % output == input in default case
  s = u;
  switch u
    case 'rad'
      s = 'm m^-1';
    case 'sr'
      s = 'm^2 m^-2';
    case 'Hz'
      s = 's^-1';
    case 'N'
      s = 'kg m s^-2';
    case 'Pa'
      s = 'm^-1 kg s^-2';
    case 'J'
      s = 'kg m^2 s^-2';
    case 'W'
      s = 'm^2 kg s^-3';
    case 'C'
      s = 's A';
    case 'V'
      s = 'm^2 kg s^-3 A^-1';
    case 'F'
      s = 'm^-2 kg^-1 s^4 A^2';
    case 'Ohm'
      s = 'm^2 kg s^-3 A^-2';
    case 'S'
      s = 'm^-2 kg^-1 s^3 A^2';
    case 'Wb'
      s = 'm^2 kg s^-2 A^-1';
    case 'T'
      s = 'kg s^-2 A^-1';
    case 'H'
      s = 'm^2 kg s^-2 A^-2';
    case 'degC'
      s = 'K';
  end
end
