SQLITE_NOTICE(283): recovered 5 frames from WAL file /data/mtt.fossil-wal
Artifact a9e0b889bf7111b6fa15b9a4817c0a0fc02aee89a9fd513805ec87e55ba16ebe:
- Executable file
mttroot/mtt/bin/trans/mtt_r2m
— part of check-in
[a13084497f]
at
2000-08-28 20:17:59
on branch origin/master
— Put in Winfried Neun's bug fix
-- prevents segmentation violation using optimised gentran when matrix
comtains a number (user: gawthrop@users.sourceforge.net, size: 8208) [annotate] [blame] [check-ins using]
#! /bin/sh ###################################### ##### Model Transformation Tools ##### ###################################### # Bourne shell script: mtt_r2m # Reduce to octave conversion # Based on obsolete ode_r2m and ode_r2lang # P.J.Gawthrop 14 June 1991, 12 Jan 1994, April 1994, Jan 95, May 1998 # July 1998 # Copyright (c) P.J.Gawthrop 1991, 1994, 1995, 1996, 1998 ############################################################### ## Version control history ############################################################### ## $Id$ ## $Log$ ## Revision 1.18 2000/08/24 17:11:40 peterg ## Now optimises as well as segmenting - uses the SCOPE package ## ## Revision 1.17 2000/05/20 15:23:56 peterg ## Paramererised version of sm etc etc (using -parameter switch) ## ## Revision 1.16 2000/04/18 11:14:18 peterg ## Put in the -parameters option ## ## Revision 1.15 2000/02/10 14:58:57 peterg ## *** empty log message *** ## ## Revision 1.14 1999/12/08 02:06:00 peterg ## Now incudes csm rep. ## ## Revision 1.13 1999/11/23 00:59:14 peterg ## Now does ssm.m ## ## Revision 1.12 1999/11/15 22:57:20 peterg ## Removed a debugging line ## ## Revision 1.11 1999/11/01 21:20:14 peterg ## Removed the E matrix from the cse file. ## ## Revision 1.10 1999/10/27 07:38:30 peterg ## Now does cse version -- but not needed now exept for Euler integration ## ## Revision 1.9 1999/10/26 23:47:58 peterg ## Now does cse.m file ## ## Revision 1.8 1999/07/26 06:07:19 peterg ## Reinstated removal of the odeo.p file ## ## Revision 1.7 1999/03/16 00:38:06 peterg ## Done some more tidying up ## ## Revision 1.6 1999/03/15 07:29:25 peterg ## Fixed various obscure reduce bugs ## THIS NEEDS A MAJOR REWRITE!!!! ## ## Revision 1.5 1998/08/13 16:25:07 peterg ## Removed some documentation form odeo.m ## ## Revision 1.4 1998/08/13 15:10:47 peterg ## Change temp var name to mtt_t1 etc ## ## Revision 1.3 1998/08/13 12:43:19 peterg ## Cahnged tmp variable to mtt_1 etc ## ## Revision 1.2 1998/07/27 20:26:44 peterg ## Put in correct N and M values for dm rep ## ## Revision 1.1 1998/07/27 16:30:26 peterg ## Initial revision ## ############################################################### # Args while [ -n "`echo $1 | grep '^-'`" ]; do case $1 in -noglobals) noglobals='-noglobals'; ;; -parameters) parameters='-parameters'; par='mttpar' ;; *) echo $1 is an unknown option exit;; esac shift done # Set up the language specific stuff rep=$2 ext='m'; codegenerator='PASCAL' Lc='#'; Rc='#'; Lb='('; Rb=')'; outfile=$1"_"$rep ## Find som constants Nx=`grep "MTTNx " <$1_def.r | awk '{print $3}' | sed 's/;//'` #Set up gentran cat <<EOF >mtt_setreduce.r % Set up the code generator % Load the general translator package LOAD GENTRAN; LOAD SCOPE; GENTRANLANG!* := '$codegenerator; ON GENTRANSEG; % Segmentation ON GENTRANOPT; % Code optimise using scope OFF GENDECS; % No declarations MAXEXPPRINTLEN!* := 80; TEMPVARNUM!* := 1; TEMPVARNAME!* := 'mtt_s; % Matrix output function in"$MTTPATH/trans/lang_matrix.r"; %Read the reduce definitions file in "$1_def.r"; %Read the reduce $REP file in "$1_$rep.r"; %Read the substitution file in "$1_subs.r"; %%% The following is a bug fix from ZIB to fix %%% segmentation violation problem symbolic procedure maxtype type; % ------------------------------------------------------------------- ; % A type may be a pair (l u) wher l is the minimum type for a variable; % and u is the maximum type. This procedure returns the maximum type.; % ------------------------------------------------------------------- ; if atom type then type else if pairp cdr type then cadr type else car type; % This fix handles the case that the type is a list with ONE entry. % Should never happen ?? W.N. %%%%%% End of bug fix END; EOF #Inform user echo Creating $outfile.m # Remove the old log file rm -f mtt_r2m.log if [ "$rep" = "ode" ]||[ "$rep" = "cse" ]; then #echo Creating $1_odea.$ext outfileo=$outfile"o" echo Creating $outfileo.m #rm -f $1_odea.$ext.1; #Header lang_header $noglobals $parameters $1 $rep $ext 'mttx,mttu,mttt,mttpar' mttdx > $1_$2.pas lang_header $noglobals $parameters $1 $2o $ext 'mttx,mttu,mttt,mttpar' mtty > $1_$2o.pas rm -f mtt_ode mtt_odeo # Use reduce to accomplish the transformation $SYMBOLIC > mtt_r2m.log <<EOF %Set up the code generator in"mtt_setreduce.r"; % The body of the odeo function GENTRANOUT "mtt_odeo"; mtt_matrix := MTTy$ mtt_matrix_n := MTTNy$ mtt_matrix_m := 1$ lang_matrix(); GENTRANSHUT "mtt_odeo"; END;; EOF if [ "$rep" = "ode" ]; then # Use reduce to accomplish the transformation $SYMBOLIC >> mtt_r2m.log <<EOF %Set up the code generator in"mtt_setreduce.r"; % The body of the ode function GENTRANOUT "mtt_ode"; mtt_matrix := MTTdX$ mtt_matrix_n := MTTNx$ mtt_matrix_m := 1$ lang_matrix(); GENTRANSHUT "mtt_ode"; END;; EOF else ## cse representation $SYMBOLIC >> mtt_r2m.log <<EOF %Set up the code generator in"mtt_setreduce.r"; % The body of the cse function GENTRANOUT "mtt_ode"; mtt_matrix := MTTEdX$ mtt_matrix_n := MTTNx$ mtt_matrix_m := 1$ lang_matrix(); GENTRANSHUT "mtt_ode"; % GENTRANOUT "mtt_odee"; % mtt_matrix := MTTE$ % mtt_matrix_n := MTTNx$ % mtt_matrix_m := MTTNx$ % lang_matrix(); % GENTRANSHUT "mtt_odee"; END;; EOF fi #if [ "$rep" = "ode" ]; then # touch mtt_odee #fi sed 's/mtt_matrix/mttdx/' <mtt_ode >> $1_$2.pas #sed 's/mtt_matrix/mtte/' <mtt_odee >> $1_$2.pas sed 's/mtt_matrix/mtty/' <mtt_odeo >> $1_$2o.pas #rm -f mtt_odeo mtt_ode #mtt_odee # Convert from Pascal syntax to Octave syntax mtt_p2m<$1_$2o.pas > $1_$2o.m rm -f $1_odeo.pas fi if [ "$rep" = "sm" ]||[ "$rep" = "ssm" ]||[ "$rep" = "dm" ]||\ [ "$rep" = "csm" ]||[ "$rep" = "obs" ]; then if [ "$rep" = "sm" ]||[ "$rep" = "ssm" ]; then #Header lang_header $noglobals $parameters $1 $rep $ext "$par" [mtta,mttb,mttc,mttd] > $outfile.pas Symbols='a b c d' fi if [ "$rep" = "dm" ]||[ "$rep" = "csm" ]; then #Header lang_header $noglobals $parameters $1 $rep $ext "$par" [mtta,mttb,mttc,mttd,mtte] > $outfile.pas Symbols='a b c d e' fi if [ "$rep" = "obs" ]; then # Is the system affine (look in the _obs.r file affine=`grep 'affine :=' $1_obs.r | awk '{print $3}' | sed 's/;//'` echo 'affine = ' $affine #Header if [ "$affine" = "1" ]; then lang_header $noglobals $parameters $1 obs m mttx [mttobs_o,mttobs_h] > $outfile.pas else lang_header $noglobals $parameters $1 obs m mttx,mttu mttyy > $outfile.pas fi Symbols='obs_o obs_h' fi for Symbol in $Symbols; do rm -f $outfile.1 echo Doing $Symbol if [ "$rep" = "sm" ]||[ "$rep" = "ssm" ]||[ "$rep" = "csm" ]||[ "$rep" = "obs" ]; then case $Symbol in a) N=MTTNx; M=MTTNx ;; b) N=MTTNx; M=MTTNu ;; c) N=MTTNy; M=MTTNx ;; d) N=MTTNy; M=MTTNu ;; e) N=MTTNx; M=MTTNx ;; obs_o) N=MTTNyy; M=1 ;; obs_h) N=MTTNyy; M=MTTNuu ;; *) esac else NN=MTTNx+2*MTTNz+MTTNyz case $Symbol in a) N=$NN; M=$NN ;; b) N=$NN; M=MTTNu ;; c) N=MTTNy; M=$NN ;; d) N=MTTNy; M=MTTNu ;; e) N=$NN; M=$NN ;; *) esac fi # Set up the matrices rm -f mtt_zero.m $SYMBOLIC << EOF >>mtt_r2m.log write "Doing ", "$Symbol"; %Set up the code generator in"mtt_setreduce.r"; OUT "mtt_zero.m"; write "mtt$Symbol = zeros(", $N, ",", $M , ");" ; SHUT "mtt_zero.m"; GENTRANOUT "$outfile.1"; mtt_matrix := MTT$Symbol; mtt_matrix_n := $N; mtt_matrix_m := $M; lang_matrix(); GENTRANSHUT "$outfile.1"; END; EOF echo "%$Symbol matrix#" >> $outfile.pas cat mtt_zero.m >> $outfile.pas sed "s/mtt_matrix/mtt$Symbol/" < $outfile.1 |\ grep -v '=0\.0;' >> $outfile.pas echo Done $Symbol done fi # Convert from Pascal syntax to Octave syntax mtt_p2m <$outfile.pas > $outfile.m rm -f $outfile.pas rm -f mtt_zero.m #rm -f $outfile.1 # Now invoke the standard error handling. mtt_error_r mtt_r2m.log