SQLITE_NOTICE(283): recovered 5 frames from WAL file /data/mtt.fossil-wal
File mttroot/mtt/bin/trans/rbg2abg_m artifact 4cb8efbc5f part of check-in 00291aba3e
#! /bin/sh ###################################### ##### Model Transformation Tools ##### ###################################### # Bourne shell script: rbg2abg_m # ############################################################### ## Version control history ############################################################### ## $Id$ ## $Log$ ## Revision 1.18 2001/03/30 15:13:58 gawthrop ## Rationalised simulation modes to each return mtt_data ## ## Revision 1.17 2000/12/05 12:04:03 peterg ## Changed function name to name() ## ## Revision 1.16 2000/12/05 09:04:08 peterg ## Fixed function () compatibility problem. ## ## Revision 1.15 2000/11/03 14:53:33 peterg ## Copy NOTPAR as well ## ## Revision 1.14 2000/09/14 08:41:35 peterg ## Strip off the additional direction info from rbonds ## ## Revision 1.13 2000/03/16 12:53:26 peterg ## Added copy of the %VAR declarations ## Put in the endfunction statement ## ## Revision 1.12 1998/07/28 19:07:48 peterg ## Writes out N_ports as well as n_ports ## ## Revision 1.11 1998/07/25 16:14:44 peterg ## *** empty log message *** ## ## Revision 1.10 1998/07/08 15:34:56 peterg ## Sorted out error exit status ## ## Revision 1.9 1998/07/08 08:24:26 peterg ## Added -I option -- if set prints out the indormation messages ## ## Revision 1.8 1998/02/19 08:57:02 peterg ## Fixed mtt-info bug -- confused filename with number ## ## Revision 1.7 1997/08/05 08:38:23 peterg ## Added n-ports to the argument list in the comment. ## ## Revision 1.6 1996/12/04 21:52:01 peterg ## Uses filenum and fopen instead of filename. ## ## Revision 1.5 1996/08/25 09:20:32 peter ## General error handling. ## ## Revision 1.4 1996/08/24 17:57:41 peter ## Removed `touch mtt_info.txt' ## ## Revision 1.3 1996/08/24 14:58:56 peter ## Fixed missprint - mtt_err --> mtt_error ## ## Revision 1.2 1996/08/24 14:33:07 peter ## Error handling included. ## ## Revision 1.1 1996/08/05 12:22:16 peter ## Initial revision ## ############################################################### # Raw bond graph to structured acausal bond graph: mfile format # The structured BG is described by four matrices: # junctions: describes the junctions - # Column 1 Index of component (see components) # Column 2.. Indices of bonds on junction (see jbonds) # rows may be padded with zeros # # jbonds: describes the true bonds - # Column 1 Index of component (see components) # Column 2 Direction # 1 away from junction # -1 towards junction # Column 3 Causality # 1 stroke at arrow end # -1 stroke at other end # 0 no stroke (ie acausal) # Columns 4:5 x,y coordinates of non-arrow end (in Fig) # Columns 6:7 x,y coordinates of arrow end (in Fig) # # mbonds: describes the modulation bonds - # Column 1 Index of component at non-arrow end # Column 2 Index of component at arrow end # Columns 4:5 x,y coordinates of non-arrow end (in Fig) # Columns 6:7 x,y coordinates of arrow end (in Fig) # # components: describes the comonents - # Column 1 Type of component # 0 0-junction # 1 1-junction # 2 R component # 3 C component # 4 I component # 11 TF component # 12 GY component # 13 A component # Column 2 Flag for explicit junction # 4 Explicit component (4 means text type) # 0 Implicit component # Column 3-14 fig file information (see fig documentation) # # P.J.Gawthrop May 1996 # Copyright (c) P.J.Gawthrop, 1996. while [ -n "`echo $1 | grep '^-'`" ]; do case $1 in -I ) info=info;; -nounits ) units=no;; *) echo "$1 is an invalid argument - ignoring" ;; esac shift done ## Set up some vars sys=$1 lbl_file=${sys}_lbl.txt abg_file=${sys}_abg.m # Remove the old log file rm -f rbg2abg_m.log rm -f ${abg_file} #Inform user echo Creating ${abg_file} # Use matrix manipulation to accomplish the transformation $MATRIX > rbg2abg_m.log 2>mtt_error.txt << EOF name = '$1' infofile = fopen('mtt_info.txt', 'w'); errorfile = fopen('mtt_error.txt', 'w'); %Convert from the fig version of the bonds to a structured version [rbonds,rstrokes,rcomponents,port_coord,port_name,port_list] = $1_rbg; [n_ports, junk] = size(port_list); N_ports = 0; for i=1:n_ports # Count the true number of ports. [subport,n_sub] = split_port(port_list(i,:), ','); N_ports = N_ports+n_sub; end; rbonds = rbonds(:,1:6); # Strip the directional information [bonds,components,n_vector_bonds] = rbg2abg(name,rbonds,rstrokes,rcomponents,port_coord,port_name,\ infofile,errorfile); %Write the function m-file for the causal bond graph write_abg(name,bonds,components,n_vector_bonds); EOF ## Sets the units for the abg file test_units() { grep '^[\s]*[#|%]UNITS' < ${lbl_file} >/dev/null if [ $? = "0" ]; then grep '^[\s]*[#|%]UNITS' < ${lbl_file} |\ gawk '{ printf("mtt_units.sh %s %s %s %s %s\n", sys, $2, $3, $4, $5) }' sys=${sys} | sh | grep ERROR if [ $? = "0" ]; then echo " " *MTT_ERRROR: domains and units are not OK - exiting exit 1 else echo " " domains and units are OK fi else echo " no domains or units declared" fi } check_ports_exist() { declared_ports=`grep '^[\s]*[#|%]UNITS' < ${lbl_file} | gawk '{print $2}'` for declared_port in $declared_ports; do grep "${sys}\.ports\.${declared_port}\.type" ${abg_file} >/dev/null if [ $? = "1" ]; then echo "*MTT_ERRROR: Units declared for non-existent port ${declared_port}" exit 1 fi done } set_units() { grep '^[\s]*[#|%]UNITS' < ${lbl_file} |\ gawk '{ printf(" %s.ports.%s.domain = \"%s\";\n", sys, $2, $3); printf(" %s.ports.%s.units.effort = \"%s\";\n", sys, $2, $4); printf(" %s.ports.%s.units.flow = \"%s\";\n", sys, $2, $5); }' sys=${sys} } if [ -z "$units" ]; then echo Checking port domains and units check_ports_exist; test_units; echo "## Port domain and units" >> ${abg_file} set_units >> ${abg_file} fi # Append any VAR declarations if [ -f "$1_lbl.txt" ]; then echo "## Explicit variable declarations" >> ${abg_file} grep '^[\s]*[%|#][V|P]AR' $1_lbl.txt | tr '%' '#' >> ${abg_file} grep '^[\s]*[%|#]NOT[V|P]AR' $1_lbl.txt | tr '%' '#' >> ${abg_file} fi ## Close off the function echo "endfunction" >> ${abg_file} ## Errors and info if [ "$info" = "info" ]; then cat mtt_info.txt fi if mtt_error mtt_error.txt then exit 0 else exit 1 fi