Index: mttroot/mtt/bin/trans/m/cbg2ese.m ================================================================== --- mttroot/mtt/bin/trans/m/cbg2ese.m +++ mttroot/mtt/bin/trans/m/cbg2ese.m @@ -1,7 +1,7 @@ function structure = cbg2ese(system_name, system_type, system_cr, ... - system_args, full_name, ... + system_args, full_name, full_name_repetition, ... repetition,... structure, infofile) % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%% Model Transformation Tools %%%%% @@ -14,10 +14,13 @@ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% Version control history % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% $Id$ % %% $Log$ +% %% Revision 1.8 1996/08/30 16:36:08 peter +% %% More info written to ese files. +% %% % %% Revision 1.7 1996/08/30 11:23:13 peter % %% Argument substitution implemented. % %% % %% Revision 1.6 1996/08/27 08:04:52 peterg % %% Handles complex components and repetative components. @@ -48,45 +51,55 @@ if nargin<4 infofile = 'stdout'; end; % Create the (full) system name -if length(full_name)==0 +if strcmp(full_name,'') full_name = system_name; + full_name_repetition = system_name; system_type = system_name; else full_name = [full_name, '_', system_name]; + full_name_repetition = [full_name_repetition, ... + '_', system_name, '_', num2str(repetition)]; end; -full_name_type = [full_name, '_', system_type]; -cbg_name = [full_name_type, '_cbg']; -abg_name = [system_type, '_abg']; -cmp_name = [system_type, '_cmp']; +% $$$ full_name_type = [full_name, '_', system_type]; +% $$$ cbg_name = [full_name_type, '_cbg']; +cbg_name = [full_name, '_cbg']; % Return if cbg file doesn't exist if exist(cbg_name)~=2 + disp([cbg_name, ' does not exist']); return end; % Setup file -ese_name = sprintf('%s_%1.0f_ese.r', full_name, repetition); +ese_name = [full_name_repetition, '_ese.r']; filenum = fopen(ese_name, 'w'); fprintf(filenum, '\n%s%s Equation file for system %s (file %s)\n', ... - pc, pc, full_name, ese_name); + pc, pc, full_name_repetition, ese_name); fprintf(filenum, '%s%s Generated by MTT\n\n', pc, pc); % Evaluate the system function to get the bonds + eval(['[bonds,status,system_type] = ', cbg_name, ';']); + abg_name = [system_type, '_abg']; + cmp_name = [system_type, '_cmp']; eval(['[junk,components]=', abg_name, ';']); - eval(['bonds=', cbg_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); n_components = n_components + + % Set up the first dummy bond number - needed for repetative components + next_bond = max(max(abs(components)))+1; + 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 @@ -122,16 +135,16 @@ end; if repetitions>1 odd_bonds = bond_list(1:2:ports-1); even_bonds = bond_list(2:2:ports); - next_bond = max(max(abs(components)))+1; end; for k = 1:repetitions if repetitions>1 + if k==1 bond_list(1:2:ports-1) = odd_bonds; else bond_list(1:2:ports-1) = bond_list(2:2:ports); end; @@ -141,45 +154,50 @@ else new_bonds = [next_bond:next_bond+port_pairs-1]; next_bond = next_bond+port_pairs; bond_list(2:2:ports) = new_bonds; end; + end; % Invoke the appropriate equation-generating procedure - name_r = sprintf('%s_%1.0f', full_name, repetition); + name_r = full_name_repetition; eqn_name = [comp_type, '_eqn'] if exist(eqn_name)~=2 % Try a compound component disp('---PUSH---'); - structure = cbg2ese(comp_name, comp_type, cr, args, full_name, k, ... - structure, infofile); + structure = cbg2ese(comp_name, comp_type, cr, args, ... + full_name, full_name_repetition, ... + k, structure, infofile); % Link up the bonds fprintf(filenum, ... '\n\t%s Equations linking up subsystem %s (%s)\n\n', ... pc, comp_name, comp_type); - name_comp_name = sprintf('%s_%s_%1.0f', full_name, comp_name, k); + % $$$ name_comp_name = sprintf('%s_%s_%1.0f', ... + % $$$ full_name_repetition, comp_name, k); + name_comp_name = sprintf('%s_%s_%1.0f', ... + full_name_repetition, comp_name, k); + for port_number=1:length(bond_list) - % Effort if comp_bonds(port_number,1)==1 % Source - fprintf(filenum, '%s_MTT_inport_%1.0f := %s;\n', ... + fprintf(filenum, '%s_MTTu%1.0f := %s;\n', ... name_comp_name, port_number, varname(name_r, ... bond_list(port_number),1)); else % sensor - fprintf(filenum, '%s := %s_MTT_outport_%1.0f;\n', ... + fprintf(filenum, '%s := %s_MTTy%1.0f;\n', ... varname(name_r, ... bond_list(port_number),1), name_comp_name, port_number); end; % flow if comp_bonds(port_number,2)==-1 % Source - fprintf(filenum, '%s_MTT_inport_%1.0f := %s;\n', ... + fprintf(filenum, '%s_MTTu%1.0f := %s;\n', ... name_comp_name, port_number, varname(name_r, ... bond_list(port_number),-1)); else % sensor - fprintf(filenum, '%s := %s_MTT_outport_%1.0f;\n', ... + fprintf(filenum, '%s := %s_MTTy%1.0f;\n', ... varname(name_r, ... bond_list(port_number),-1), name_comp_name, port_number); end; end;