︙ | | |
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
+
+
+
|
# [bonds,status] = abg2cbg(system_name, system_type, full_name, port_bonds, infofile)
# ###############################################################
# ## Version control history
# ###############################################################
# ## $Id$
# ## $Log$
# ## Revision 1.44 1999/03/11 23:54:11 peterg
# ## Include possibility of vector SS when finding port_bond_index
# ##
# ## Revision 1.43 1998/12/14 15:19:36 peterg
# ## Added missing "derivative_causality," argument to recursive call of
# ## this function
# ##
# ## Revision 1.42 1998/12/03 14:55:40 peterg
# ## Now uses number of components with complete causality to measure
# ## progress of algorithm -- Done.
|
︙ | | |
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
+
+
|
# ## Now recursively does causality on subsystems.
# ##
# ## Revision 1.1 1996/08/04 17:55:55 peter
# ## Initial revision
# ##
# ###############################################################
mtt_info(sprintf("\nCompleting causality for subsystem %s", system_name), infofile);
pc = '%';
if nargin<1
system_name = 'no_name';
end;
if nargin<4
port_bonds = [];
|
︙ | | |
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
|
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
|
+
+
+
+
+
+
+
-
+
|
# of the bonds in the encapsulating system -- but not at top level
Flipped.ports="";Flipped.subs="";Flipped.cons="";
if (n_ports>0)&&(!at_top_level) # Coerce directions
for i=1:n_ports
name = deblank(ABG.portlist(i,:)); # Name of this port
eval(["port = ABG.ports.",name,";"]); # Extract port info
disp ("----");
i
name
port
port_bond_direction
port.connections
if (sign(port.connections)!=port_bond_direction(i)) # Direction different?
eval(["ABG.ports.",name,".connections = - port.connections;"]); # Flip direction at port
Flipped.ports=[Flipped.ports;name]; # Remember which port has been flipped
bond_index=abs(port.connections); # Index of bond on port
mtt_info(sprintf("Flip port %s on %s"\
,name,full_name),infofile); # And report
for [subsystem,name] = ABG.subsystems # and at the other end
for k=1:length(subsystem.connections)
if (abs(subsystem.connections(k))==bond_index)
if (abs(subsystem.connections(k))==bond_index) # Then flip the connection
eval(["ABG.subsystems.",name,".connections(k) = -subsystem.connections(k);"]);
Flipped.subs=[Flipped.subs;name]; # Remember which subsystem has been flipped
Flipped.cons=[Flipped.cons;k]; # Remember which connection has been flipped
mtt_info(sprintf("Flip subsystem %s on %s"\
,name,full_name),infofile); # And report
endif
endfor
|
︙ | | |
389
390
391
392
393
394
395
396
397
398
399
400
401
402
|
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
|
+
|
if exist(cause_name)==2 # If there is a predefined causality function; use it
comp_bonds = comp_bonds.*(port_bond_direction*[1 1]); # Convert from arrow orientated to component orientated causality
eval([ "[comp_bonds] = ", cause_name, "(comp_bonds);" ]); # Evaluate the built-in causality procedure
comp_bonds = comp_bonds.*(port_bond_direction*[1 1]); # and convert from component orientated to arrow orientated causality
end;
port_bond_direction,comp_bonds
[comp_bonds,subsystem.status] = abg2cbg(name, subsystem.type, full_name,
comp_bonds, port_bond_direction, port_status, ...
derivative_causality, ...
typefile, infofile, errorfile);
# # Create a single status from the status vector s
# if max(abs(s)) == 0 # Causal
# status(i) = 0;
|
︙ | | |