Overview
| Comment: | Now recursively does causality on subsystems. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | origin/master | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
0476f9f15253359a5d8d4da4a7016168 |
| User & Date: | gawthrop@users.sourceforge.net on 1996-08-05 15:41:41.000 |
| Other Links: | branch diff | manifest | tags |
Context
|
1996-08-05
| ||
| 18:12:25 | Initial revision check-in: 8024abf9e9 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
| 15:41:41 | Now recursively does causality on subsystems. check-in: 0476f9f152 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
| 12:22:16 | Initial revision check-in: f15a184147 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
Changes
Modified mttroot/mtt/bin/trans/m/abg2cbg.m
from [ffe620077d]
to [88d6038942].
|
| | > > | > > > | > > > > > > > > < | > > > > > > > > > > > > | | | | | | > | | > > > > > > > > > > > > > > > > > > | | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | > > | | | | | | | | | | | | | | | | | < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
function [bonds, status] = abg2cbg(system_name, ...
system_type, full_name, ...
port_bonds,infofile)
% [bonds,status] = abg2cbg(system_name,infofile)
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%% Model Transformation Tools %%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Matlab function abg2cbg.m
% Acausal bond graph to causal bond graph: mfile format
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.1 1996/08/04 17:55:55 peter
% %% Initial revision
% %%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pc = '%';
if nargin<1
system_name = 'no_name';
end;
if nargin<4
port_bonds = [];
end;
if nargin<5
infofile = 'stdout';
end;
fun_name = [system_type, '_abg']
% If no such function - then there is nothing to be done.
if exist(fun_name)~=2
mtt_info(['m-file ', fun_name, ' does not exist'], infofile);
bonds = [];
status = [];
return
end;
% Create the (full) system name
if length(full_name)==0
full_name = system_name;
else
full_name = [full_name, '_', system_name];
end;
% Evaluate the system function to get the bonds
eval(['[bonds,components,n_ports]=', fun_name, ';']);
% Find number of bonds
[n_bonds,columns] = size(bonds);
if (columns ~= 2)&(n_bonds>0)
error('Incorrect bonds matrix: must have 2 columns');
end;
% Find number of components
[n_components,columns] = size(components);
if n_components==0 % there is nothing to be done
return
end;
% Find number of port bonds
[n_port_bonds,columns] = size(port_bonds);
if n_port_bonds~=n_ports
mtt_info(sprintf('%1.0f port bonds incompatible with %1.0f ports', ...
n_port_bonds, n_ports), infofile);
else % Copy the port bonds
for i = 1:n_ports
bonds(i,:) = port_bonds(i,:);
end;
end;
bonds,port_bonds
% Set initial status
status = -ones(n_components,1);
total = 2*n_bonds;
done = sum(sum(abs(bonds)))/total*100;
% $$$ mtt_info(sprintf('Initial causality is %3.0f%s complete.', done, pc), infofile);
% Set the causality of the ports
old_done = inf;
while done~=old_done
disp(sprintf('Causality is %3.0f%s complete.', done, pc));
old_done = done;
for i = 1:n_components
comp = nozeros(components(i,:));
bond_list = abs(comp);
direction = sign(comp)'*[1 1];
% Convert from arrow orientated to component orientated causality
comp_bonds = bonds(bond_list,:).*direction;
eval([ '[comp_type,name,cr,arg] = ', system_type, '_cmp(i);' ]);
% change name of 0 and 1 components -- matlab doesn't like numbers here
if strcmp(comp_type,'0')
comp_type = 'zero';
end;
if strcmp(comp_type,'1')
comp_type = 'one';
end;
% Invoke the appropriate causality procedure
cause_name = [comp_type, '_cause'];
if exist(cause_name)~=2 % Try a compound component
disp('------------PUSH-----------------');
[b,s] = abg2cbg(name, comp_type, full_name, comp_bonds, ...
infofile)
status(i)=max(s);
disp('------------POP-----------------');
else % its a simple component
cause_name
eval([ '[comp_bonds,status(i)] = ', cause_name, '(comp_bonds);' ]);
% Convert from component orientated to arrow orientated causality
bonds(bond_list,:) = comp_bonds.*direction;
end;
end;
done = sum(sum(abs(bonds)))/total*100;
% mtt_info(sprintf('Causality is %3.0f%s complete.', done, pc), infofile);
end;
final_done = (sum(status==zeros(n_components,1))/n_components)*100;;
mtt_info(sprintf('Final causality is %3.0f%s complete.', final_done, pc),
infofile);
% List overcausal bonds
[over_causal_bonds,n] = getindex(status,1)
if n>0
for i=over_causal_bonds'
eval([ '[comp_type,name] = ', system_type, '_cmp(i);' ]);
mtt_info(sprintf('Component %s (%s) is overcausal', name, comp_type), ...
infofile);
end;
end;
% List undercausal bonds
[under_causal_bonds,n] = getindex(status,-1)
if n>0
for i=under_causal_bonds'
eval([ '[comp_type,name] = ', system_type, '_cmp(i);' ]);
mtt_info(sprintf('Component %s (%s) is undercausal', name, comp_type), ...
infofile);
end;
end;
write_cbg(full_name,bonds,status);
disp('----------------------');
|
| ︙ | ︙ |