function [bonds,status] = AE_cause(bonds);
% AE_cause - Causality for effort amplifier component
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%% Model Transformation Tools %%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Matlab function AE_cause
% [bonds,status] = AE_cause(bonds)
%SUMMARY AE: effort amplifier
%DESCRIPTION Port[1]: amplifier effort input e_1 (f_1=0)
%DESCRIPTION Port[2]: amplifier effort output e_2
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.1 1996/08/30 19:05:21 peter
% %% Initial revision
% %%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright (c) P.J. Gawthrop, 1996.
status = -1;
% Check that there are exactly two bonds.
if check_bonds(bonds,2,'AE')==0
return
end
% There are 2 ports; extract the information
e_1 = bonds(1,1);
f_1 = bonds(1,2);
e_2 = bonds(2,1);
f_2 = bonds(2,2);
% Port 1 must impose (zero) flow and port 2 have flow imposed
if (f_1==-1)|(f_2==1) % Conflict
status = 1;
else % Do the rest of the causality
if f_1 == 0 % Set port 1 effort
f_1 = 1;
end;
if f_2 == 0 % Set port 2 effort
f_2 = -1;
end;
number_set = sum(sum([e_1 e_2]~=zeros(1,2) ));
if number_set==0 % Under causal
status = -1;
elseif number_set==1 % Set the causality
if e_1 == 0
e_1 = -e_2;
else
e_2 = -e_1;
end
status = 0;
elseif number_set==2 % Check the causality
if e_1==-e_2
status = 0;
else
status = 1;
end
end;
end;
bonds = [e_1 f_1
e_2 f_2];