ADDED mttroot/mtt/bin/trans/ode_r2m Index: mttroot/mtt/bin/trans/ode_r2m ================================================================== --- /dev/null +++ mttroot/mtt/bin/trans/ode_r2m @@ -0,0 +1,130 @@ +#! /bin/sh + + ###################################### + ##### Model Transformation Tools ##### + ###################################### + +# Bourne shell script: ode_r2m +# Reduce ODE to simulab ODE +# P.J.Gawthrop 14 June 1991, 12 Jan 1994, April 1994, Jan 95. +# Copyright (c) P.J.Gawthrop 1991, 1994, 1995, 1996 + +############################################################### +## Version control history +############################################################### +## $Id$ +## $Log$ +############################################################### + +#Inform user +echo Creating $1_ode.m +echo Creating $1_odeo.m + + +# Remove the old log file +rm -f ode_r2m.log + +# Use reduce to accomplish the transformation +reduce >ode_r2m.log << EOF + +%Read the reduce definitions file +in "$1_def.r"; + +%Read the reduce ODE file +in "$1_ode.r"; + +%Set up the number of argument variables to zero in case the user has forgotten +MTTNVar := 0; + +%Read the parameter file +in "$1_sympar.r"; + + +ON NERO; % Suppress zero elements + +%Define the common part of the functions. + +PROCEDURE common; +BEGIN + IF MTTNvar>0 THEN + BEGIN + write "% Read in the parameters"; + write "[ ...;;"; + FOR i := 1:MTTNvar DO + BEGIN + IF i0 THEN + FOR i := 1:MTTNu DO + BEGIN + write "MTTu", i, " = u(", i, ");"; + END; +END; + +% Firstly do the dx = f(x,t) function. +OUT "$1_ode.m"; + +write "function MTTdX = $1_ode(x,t);"; +write "% dX = $1_ode(x,t);"; +write "%ODE in Simulab form for system $1;;"; +write "%File $1_ode.m;;"; +write "%Generated by MTT;;"; + +common(); + +%Fortran switches - one line expressions +OFF echo; +ON fort$ +cardno!* := 1$ +fortwidth!* := 100$ +OFF period$ + +MTTdx := MTTdx; + +SHUT "$1_ode.m"; +OFF fort; +% Now do the y = g(x,t) function. +OUT "$1_odeo.m"; + +write "function MTTy = $1_odeo(x,t);"; +write "% dX = $1_odeo(x,t);"; +write "%ODE in Simulab form for system $1;;"; +write "%File $1_odeo.m;;"; +write "%Generated by MTT;;"; + +common(); + +%Fortran switches - one line expressions +OFF echo; +ON fort$ +cardno!* := 1$ +fortwidth!* := 100$ +OFF period$ + +MTTy := MTTy; + +SHUT "$1_odeo.m"; + + + + + + + +