Overview
Comment: | Many bug fixes to the named port version + tied up the logic and supporting comments. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | origin/master | trunk |
Files: | files | file ages | folders |
SHA3-256: |
f7ba5ad7f25e744ae1efa731c56580fa |
User & Date: | gawthrop@users.sourceforge.net on 1997-08-04 12:50:39 |
Other Links: | branch diff | manifest | tags |
Context
1997-08-04
| ||
13:11:19 |
Only change to component-orientated causality for simple components NOT for compound components. check-in: bd79acf2f3 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
12:50:39 |
Many bug fixes to the named port version + tied up the logic and supporting comments. check-in: f7ba5ad7f2 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
12:49:17 |
Modified to use named (as opposed to numbered) ports. Generates a list of component ports in the .rbg file. As octave handles string vectors properly, the .cmp file format is not really necessary - but I've let it be for the moment. check-in: a524632e5a user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
Changes
Modified mttroot/mtt/bin/trans/m/rbg2abg.m from [7cea7c30eb] to [2b60e62d75].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function [bonds,components] = rbg2abg(name,rbonds,rstrokes,rcomponents,port_coord,port_name,infofile) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% Version control history % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% $Id$ % %% $Log$ % %% Revision 1.11 1997/04/29 09:12:37 peterg % %% Added error message if port label near to >1 bond. % %% % %% Revision 1.10 1997/03/17 13:45:42 peterg % %% Added more error info. % %% % %% Revision 1.9 1996/12/31 11:25:57 peterg | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function [bonds,components] = rbg2abg(name,rbonds,rstrokes,rcomponents,port_coord,port_name,infofile) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% Version control history % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% $Id$ % %% $Log$ % %% Revision 1.12 1997/08/02 19:37:53 peterg % %% Now uses named ports. % %% % %% Revision 1.11 1997/04/29 09:12:37 peterg % %% Added error message if port label near to >1 bond. % %% % %% Revision 1.10 1997/03/17 13:45:42 peterg % %% Added more error info. % %% % %% Revision 1.9 1996/12/31 11:25:57 peterg |
︙ | ︙ | |||
68 69 70 71 72 73 74 | if (columns ~= 6)&(n_bonds>0) error('Incorrect rbonds matrix: must have 6 columns'); end; % Find number of components [n_components,columns] = size(rcomponents); | | | | > | | < > > > > > > > | > > > | | < < | | | < | | | > > > > > > > > | > > > > > > | | > | 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 170 171 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 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | if (columns ~= 6)&(n_bonds>0) error('Incorrect rbonds matrix: must have 6 columns'); end; % Find number of components [n_components,columns] = size(rcomponents); % Find the number of ports refered to within the component [n_ports,columns] = size(port_coord) % Determine coordinates of the arrow end of the bond and the other end other_end_1 = rbonds(:,1:2); arrow_end = rbonds(:,3:4); other_end_2 = rbonds(:,5:6); distance_1 = length2d(other_end_1 - arrow_end); distance_2 = length2d(other_end_2 - arrow_end); which_end = (distance_1>distance_2)*[1 1]; one = ones(size(which_end)); other_end = which_end.*other_end_1 + (one-which_end).*other_end_2; arrow_vector = ( which_end.*other_end_2 + (one-which_end).*other_end_1 ) - ... arrow_end; % Locate the bond end nearest to each port % col 1 of port_near_bond contains a signed bond number (+ for arrow end) % col 2 of port_near_bond contains the corresponding port index for i = 1:n_ports near_bond = adjbond(port_coord(i,1:2),arrow_end,other_end); [rows,cols]=size(near_bond); if rows>1 error(sprintf ... ("A port is near to more than one bond at coordinates %g,%g\n", ... port_coord(i,1)/scale, port_coord(i,2)/scale)); end; %The (signed) bond corresponding to the ith port label port_bond(i) = near_bond(1)*sign(1.5-near_bond(2)); end; %We now have the (signed) bond (port_bond(i)) correponding to the % ith port label within the component % Locate the components at the ends of each bond % col 1 of comp_near_bond contain the component nearest to the arrow end % col 2 of comp_near_bond contain the component nearest to the other end for i = 1:n_bonds comp_near_bond(i,:) = adjcomp(arrow_end(i,:),other_end(i,:),rcomponents); end; %We now have a list (comp_near_bond) of the component(s) at each end %of each bond % Produce a list of bonds on each component (within this component) % - sorted if explicit port numbers for i = 1:n_components %Get component type eval(['[comp_type, comp_name] = ', name, '_cmp(i)']); %Convert junction names if comp_type=='0' comp_type = 'zero'; end if comp_type=='1' comp_type = 'one'; end %Find the port list for this component if exist([comp_type, '_cause'])==0 eval(['[junk1,junk2,junk3,junk4,junk5,port_list]=', comp_type, '_rbg;']); else port_list=comp_ports(comp_type); end; % There are n_comp_bonds bonds on this component with corresponding index [index,n_comp_ports] = getindex(comp_near_bond,i); % Error message in case we need it! port_error = sprintf(... 'Component at (%1.3f,%1.3f) has inconsistent port numbers', ... rcomponents(i,1)/scale, rcomponents(i,2)/scale); if index(1,1) ~= 0 % Then its a genuine component % Create the signed list of bonds on this component one = ones(n_comp_ports,1); bond_list = index(:,1); % bond at component bond_end = index(:,2); % which end of bond at component? direction = -sign(bond_end-1.5*one); signed_bond_list = bond_list.*direction; unsorted_port_list=""; if n_ports>0 % then there are some numbered ports % so find those associated with the bonds on this component. k=0; for j = 1:n_comp_ports b = signed_bond_list(j); % Find the port label on component end of bond (if any) [port_index,m] = getindex(port_bond,b); if m==1 k=k+1; unsorted_port_list(k,:) = port_name(port_index,:); end; end; %Either all or non ports should be labelled - write error %message if this is not so if (k~=0)&(k~=n_comp_ports) 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_ports), infofile); end; [n_unsorted_ports,m_unsorted_ports] = size(unsorted_port_list); if m_unsorted_ports<2 n_unsorted_ports = 0; end; unsorted_port_list % One port defaults: if n_comp_ports==1 if n_unsorted_ports==0 unsorted_port_list(1,:) = port_list(1,:); end; end; % Junctions (order of ports unimportant) if (comp_type=='zero')|(comp_type=='one') for j = 1:n_comp_ports components(i,j) = signed_bond_list(j); end else %Order of ports is important %Write out the signed bond list in the correct order for j = 1:n_comp_ports name_k = unsorted_port_list(j,:); k = name_in_list(name_k, port_list) if k==0 mtt_info(['Component ', comp_name, ' (', comp_type, ') has an unrecognised port: ', name_k], infofile); else components(i,j) = signed_bond_list(k); end; end; end; end; end; end; % Deduce causality from the strokes (if any). causality = zeros(n_bonds,2); |
︙ | ︙ | |||
236 237 238 239 240 241 242 243 244 | causality(j,1+flow_side) = 2*which_end-1; end; end; end; bonds = causality; fclose(fnum); | > > | 261 262 263 264 265 266 267 268 269 270 271 | causality(j,1+flow_side) = 2*which_end-1; end; end; end; bonds = causality; fclose(fnum); |