function structure = cieqn(name, bond_number,bonds,direction,cr,args, ...
structure,CorI,eqnfile);
% cieqn - Equation function for a (multi-port) unicausal C or I component
% CorI = 1 for C, -1 for I
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%% Model Transformation Tools %%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Matlab function cieqn
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright (c) P.J. Gawthrop, 1996.
if nargin<8
eqnfile = 'stdout';
end;
% Find the number of ports
[ports,junk] = size(bonds);
% Right-hand side causality
RHS_cause = (bonds(:,1)==CorI*ones(ports,1))*CorI
state_cause = 0; % State causality
for outport = 1:ports
LHS_number = bond_number(outport);
if bonds(outport,1) == -CorI % Integral causality on this port
state = structure(1)+1;
LHS_cause = CorI;
% Print equation of form x_i = MTTx(i)
fprintf(eqnfile, '%s := MTTx(%1.0f,1);\n', ...
varname(name,LHS_number, state_cause), state);
% Print equation of form xdot = input
fprintf(eqnfile, 'MTTdX(%1.0f,1) := %s;\n', state, ...
varname(name,LHS_number,-LHS_cause));
% Print equation of form output = CR (state)
eqn = equation(name,cr,args,LHS_number,LHS_cause,outport, ...
bond_number,state_cause,1:ports);
fprintf(eqnfile, '%s',eqn);
structure(1) = state;
else % Derivative causality
nonstate = structure(2)+1;
LHS_cause = -CorI;
% Print equation of form zdot = MTTdz(i)
fprintf(eqnfile, '%s := MTTdz(%1.0f,1);\n', ...
varname(name,LHS_number,LHS_cause), ...
nonstate);
% Print equation of form MTTz(i) = z_i
fprintf(eqnfile, 'MTTz(%1.0f,1) := %s;\n', nonstate, ...
varname(name,LHS_number, state_cause));
% Print equation of form z_i = CR(input)
eqn = equation(name,cr,args,LHS_number,state_cause, outport, ...
bond_number,RHS_cause,1:ports);
fprintf(eqnfile, '%s',eqn);
structure(2) = nonstate;
end;
end;