172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
-
+
-
+
|
eval(['[comp_type, comp_name] = ', name, '_cmp(i)']);
% There are n_comp_bonds bonds on this component with corresponding index
[index,n_comp_bonds] = getindex(comp_near_bond,i);
if index(1,1)==0
mtt_info(sprintf("Component %s (%s) has no bonds", comp_name,
comp_type),infofile);
comp_type),fnum);
end;
% Create the signed list of bonds on this component
one = ones(n_comp_bonds,1);
bond_list = index(:,1); % bond at component
% Check that all bonds are unique -- error if not
if unique(bond_list)==0
mtt_info(sprintf("Component %s (%s) is at both ends of a bond", comp_name,
comp_type),infofile);
comp_type),fnum);
end;
bond_end = index(:,2); % which end of bond at component?
direction = -sign(bond_end-1.5*one);
signed_bond_list = bond_list.*direction;
components = add_bond(components,signed_bond_list',i);
end;
|
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
|
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
|
-
+
-
+
-
-
+
+
|
signed_bond_index = port_bond(i);
[other_bond_index,n_other] = getindex(port_bond,-signed_bond_index);
if n_other == 1
other_port_name = port_name(other_bond_index,:);
other_subport = split(other_port_name, ',');
[n_other_subports,junk] = size(other_subport);
if n_other_subports~=n_subports
mtt_info(['Vector ports ', port_name_i, ' and ', other_port_name, 'are not compatible'],infofile);
mtt_info(['Vector ports ', port_name_i, ' and ', other_port_name, 'are not compatible'],fnum);
end
else
mtt_info(['Vector port ', port_name_i, ' has no matching port'], infofile);
mtt_info(['Vector port ', port_name_i, ' has no matching port'], fnum);
end;
if other_bond_index>i %then its not been done yet
mtt_info(['Vector port: ', port_name_i],infofile);
mtt_info(['matching: ', other_port_name],infofile);
mtt_info(['Vector port: ', port_name_i],fnum);
mtt_info(['matching: ', other_port_name],fnum);
% Remove sign info.
bond_index = abs(signed_bond_index);
sig = sign(signed_bond_index);
% Put the first element of each port list in the expanded list
exp_port_name = [exp_port_name; subport(1,:)];
exp_port_name = [exp_port_name; other_subport(1,:)];
|
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
|
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
|
-
-
+
+
-
+
-
+
-
+
-
+
-
+
+
-
-
+
+
+
-
+
-
+
-
+
|
else
k=0;
end;
%Either all ports or no ports should be labelled - write error
%message if this is not so
if (k~=0)&(k~=n_comp_bonds)
mtt_info(['Component ', comp_name, ' (', comp_type, ') has wrong number of labels'], infofile);
mtt_info(sprintf("\tit has %1.0f labels but should have 0 or %1.0f",k,n_comp_bonds), infofile);
mtt_info(['Component ', comp_name, ' (', comp_type, ') has wrong number of labels'], fnum);
mtt_info(sprintf("\tit has %1.0f labels but should have 0 or %1.0f",k,n_comp_bonds), fnum);
end;
%Compute the number of labeled ports
[n_unsorted_ports,m_unsorted_ports] = size(unsorted_port_list);
if m_unsorted_ports==0
n_unsorted_ports = 0;
end;
n_unsorted_ports,n_comp_bonds
% One port defaults:
if (n_comp_bonds==1)&(n_unsorted_ports==0)
%if (direction(1)<0) & ~strcmp(comp_type,'SS') % Wrong way for default
% mtt_info(['One-port ', comp_name, ' (', comp_type, ') has the sign pointing the wrong way '], infofile);
% mtt_info(['One-port ', comp_name, ' (', comp_type, ') has the sign pointing the wrong way '], fnum);
%end;
unsorted_port_list = port_list;
end;
%Two port defaults
if (n_comp_bonds==2)&(n_unsorted_ports==0)
if direction(1)==direction(2) % Wrong way for default
% mtt_info(['Two-port ', comp_name, ' (', comp_type, ') does not have through-pointing arrows'], infofile);
% mtt_info(['Two-port ', comp_name, ' (', comp_type, ') does not have through-pointing arrows'], fnum);
end;
if direction(1)==1 %in
% mtt_info([comp_name, ' in'],infofile);
% mtt_info([comp_name, ' in'],fnum);
unsorted_port_list = ['in';'out'];
else %reverse the order
% mtt_info([comp_name, ' out'],infofile);
% mtt_info([comp_name, ' out'],fnum);
unsorted_port_list = ['out';'in'];
end;
end;
% Recompute the number of unsorted ports
[n_unsorted_ports,m_unsorted_ports] = size(unsorted_port_list);
if m_unsorted_ports==0
n_unsorted_ports = 0;
end;
% Junctions or no lables(order of ports unimportant)
if strcmp(comp_type,'zero')|strcmp(comp_type,'one')
for j = 1:n_comp_bonds
components(i,j) = signed_bond_list(j);
end
else %Order of ports is important
unsorted_port_list, port_list
if n_unsorted_ports==0
mtt_info(['Component ', comp_name, ' (', comp_type, ') has no labeled ports'], infofile);
mtt_info(['Component ', comp_name, ' (', comp_type, ') has no labeled ports'], fnum);
end;
%Write out the signed bond list in the correct order
unsorted_port_list
for j = 1:n_comp_bonds
name_k = unsorted_port_list(j,:);
for j = 1:n_comp_bonds
j
name_k = unsorted_port_list(j,:)
k = name_in_list(name_k, port_list);
% Check that it only appears once in port list
if length(k)>1
mtt_info(['Component ', comp_name, ' (', comp_type, ') has ports with the same name: ', name_k], infofile);
mtt_info(['Component ', comp_name, ' (', comp_type, ') has ports with the same name: ', name_k], fnum);
end;
%Check that it only appears one in the label list
kk = name_in_list(name_k,unsorted_port_list);
if length(kk)>1
mtt_info(['Component ', comp_name, ' (', comp_type, ') has multiple port labels: ', name_k], infofile);
mtt_info(['Component ', comp_name, ' (', comp_type, ') has multiple port labels: ', name_k], fnum);
end;
if k==0
mtt_info(['Component ', comp_name, ' (', comp_type, ') has an unrecognised port: ', name_k], infofile);
mtt_info(['Component ', comp_name, ' (', comp_type, ') has an unrecognised port: ', name_k], fnum);
else
components(i,k) = signed_bond_list(j);
end;
end;
end;
end;
|