Index: mttroot/mtt/bin/trans/ode2odes_r2c ================================================================== --- mttroot/mtt/bin/trans/ode2odes_r2c +++ mttroot/mtt/bin/trans/ode2odes_r2c @@ -2,11 +2,11 @@ ###################################### ##### Model Transformation Tools ##### ###################################### -# Bourne shell script: ode2odesol_r2c +# Bourne shell script: ode2odes_r2c # Reduce ordinary differential equations to differential-algebraic # equations solution in the form of a c program. # Euler integration of the state is included. @@ -18,21 +18,24 @@ ############################################################### ## Version control history ############################################################### ## $Id$ ## $Log$ +## Revision 1.1 1997/01/21 22:54:54 peterg +## Initial revision +## ############################################################### # Inform user -echo Creating $1_odesol.c +echo Creating $1_odes.c # Remove the old log file rm -f ode_r2c.log # Use reduce to accomplish the transformation -reduce >ode2odesol_r2c.log << EOF +reduce >ode2odes_r2c.log << EOF %Read the reduce definitions file in "$1_def.r"; %Set up the number of argument variables to zero in case the user has forgotten @@ -46,37 +49,33 @@ %OFF Nat; ON NERO; % Suppress zero elements %Generate the Header part -OUT "$1_odesol.c"; +OUT "$1_odes.c"; write "/*"$ write "Program to solve ode for system $1"$ write "NB Arrays are defined to be one larger than expected"$ write " - the 0 element is not used."$ -write "File $1_odesol.c"$ +write "File $1_odes.c"$ write "Generated by MTT"$ write "*/"$ write " "$ %Program heading write "#include "$ +write "#include ""$1_sympar.h"" "$ -%Set up some variables - need to do this better sometime -write "/* Set up some variables - need to do this better sometime */"$ -write "#define DT 0.1 /* Time step (for printing) */"$ -write "#define LAST 10.0 /* Last time */"$ -write "#define STEPFACTOR 1000 /* Integration steps per time step */"$ write "/* Declare standard arrays */"$ -write "float y[", MTTNy+1, "]; /* $1_ode output */"$ -write "float dx[", MTTNx+1, "]; /* $1_ode state derivative */"$ -write "float x[", MTTNx+1, "]; /* $1_ode state */"$ -write "float u[", MTTNu+1, "]; /* $1_ode input */"$ +write "double y[", MTTNy+1, "]; /* $1_ode output */"$ +write "double dx[", MTTNx+1, "]; /* $1_ode state derivative */"$ +write "double x[", MTTNx+1, "]; /* $1_ode state */"$ +write "double u[", MTTNu+1, "]; /* $1_ode input */"$ %External (global) variable list write "/* External (global) variable list */ "$ IF MTTNvar>0 THEN BEGIN @@ -86,58 +85,36 @@ BEGIN % Do nowt END ELSE BEGIN - write "float ", MTTVar(i,1), ";"$ + write "double ", MTTVar(i,1), ";"$ END$ END$ -write "/* File */ "$ -write " FILE *fopen(), *fp;"$ +write "/* Files */ "$ +write " FILE *fopen(), *fps, *fpso;"$ write "main()"$ write " "$ write "{"$ -write "/* Declare standard arrays */"$ -write " extern float y[", MTTNy+1, "]; /* $1_ode output */"$ -write " extern float dx[", MTTNx+1, "]; /* $1_ode state derivative */"$ -write " extern float x[", MTTNx+1, "]; /* $1_ode state */"$ -write " extern float u[", MTTNu+1, "]; /* $1_ode input */"$ - - -%External (global) variable list -write "/* External (global) variable list */ "$ -IF MTTNvar>0 THEN -BEGIN - FOR i := 1:MTTNvar DO - IF numberp(MTTVar(i,1)) - THEN - BEGIN - % Do nowt - END - ELSE - BEGIN - write " extern float ", MTTVar(i,1), ";"$ - END$ -END$ - write "/* Counters etc*/ "$ -write " float time;"$ -write " float dt;"$ +write " double time;"$ +write " double dt;"$ write " int i;"$ write " int k;"$ -write "/* functions */ "$ +write "/*functions */ "$ write " extern $1_numpar();"$ -%Open the output file +%Open the output files write "/* %Open the output file */"$ -write "fp = fopen(""$1_odes.m"", ""w""); "$ +write "fps = fopen(""$1_odes.m"", ""w""); "$ +write "fpso = fopen(""$1_odeso.m"", ""w""); "$ %Set up user-defined constants write "/* Set up user-defined constants */"$ write " $1_numpar();"$ @@ -146,41 +123,84 @@ write " time = 0;"$ write " dt = DT/STEPFACTOR;"$ write " for (i=1; i<=", MTTNx, "; i++)"$ write " x[i] = 0.0;"$ +%Set up system inputs +write "/* Set up system inputs */"$ write " for (i=1; i<=", MTTNu, "; i++)"$ write " u[i] = 1.0;"$ -write " fprintf(fp, ""data = [\n"");"$ +write " $1_input(0.0);"$ + +write " fprintf(fps, ""function data = ", "$1_odes \n"");"$ +write " fprintf(fps, ""data = [\n"");"$ +write " fprintf(fpso, ""function data = ", "$1_odeso \n"");"$ +write " fprintf(fpso, ""data = [\n"");"$ +% Compute the first output +write "/* Compute the first output */"$ +write " $1_ode(y,dx,x,u);"$ %Main (Euler) integration loop write "/* Main (Euler) integration loop */"$ + write " while (time