function [bonds,status] = C_cause(bonds);
% C_cause - Unicausal multiport C component
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%% Model Transformation Tools %%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Matlab function C_cause
% [bonds,status] = C_cause(bonds)
%SUMMARY C: elementary C component
%DESCRIPTION Single port dynamic component
%DESCRIPTION Preferred integral causality (flow input)
%DESCRIPTION Cannot be bicausal
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.1 1996/11/01 12:35:36 peterg
% %% Initial revision
% %%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright (c) P.J. Gawthrop, 1996.
% Unicausal multiport C component
% Same causal pattern as R component
% [bonds,status] = R_cause(bonds);
% Set causality to preferred if not already set.
% Find the number of ports
[ports,junk] = size(bonds);
% default undercausal status
statuses = -ones(ports,1);
% Force unicausality but DONT set if not already set
preferred = -1;
for i = 1:ports
if (bonds(i,1)~=0)&(bonds(i,2)~=0) % Both bonds set
statuses(i) = bonds(i,1)~=bonds(i,2);
elseif bonds(i,2)~=0 % Bond 1 set
bonds(i,1) = bonds(i,2);
statuses(i) = 0;
elseif bonds(i,1)~=0 % Bond 2 set
bonds(i,2) = bonds(i,1);
statuses(i) = 0;
else # Don't set
# bonds(i,1) = preferred;
# bonds(i,2) = preferred;
# statuses(i) = 0;
end;
end;
if max(statuses)==1
status = 1;
elseif min(statuses)==-1
status = -1;
else
status = 0;
end;