Overview
Comment: | Implemented Runge-Kutta IV fixed-step method (-i rk4). |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | origin/merging-ode2odes-exe | trunk |
Files: | files | file ages | folders |
SHA3-256: |
247243a401c2f38c2534001982c73bfa |
User & Date: | geraint@users.sourceforge.net on 2001-03-17 09:51:07 |
Other Links: | branch diff | manifest | tags |
Context
2001-03-19
| ||
00:29:08 |
Parse switches (-A) before calling def2write_r. Update $1_def.* instead of removing. check-in: d1ee2bdeb3 user: geraint@users.sourceforge.net tags: origin/merging-ode2odes-exe, trunk | |
2001-03-17
| ||
09:51:07 | Implemented Runge-Kutta IV fixed-step method (-i rk4). check-in: 247243a401 user: geraint@users.sourceforge.net tags: origin/merging-ode2odes-exe, trunk | |
2001-03-16
| ||
03:56:54 | Convert variable names to lower case. check-in: 2dfeaa8a10 user: geraint@users.sourceforge.net tags: origin/merging-ode2odes-exe, trunk | |
Changes
Modified mttroot/mtt/bin/mtt from [e8d02e781f] to [c2edfed68a].
︙ | ︙ | |||
11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # Copyright (C) 2000 by Peter J. Gawthrop ############################################################### ## Version control history ############################################################### ## $Header$ ## $Log$ ## Revision 1.293.2.5 2001/03/03 00:27:14 geraint ## Fixed ar options to work with GNU ar. Allow mtt to create dependencies for mtt_%.cc when making mtt_%.oct. ## ## Revision 1.293.2.4 2001/03/02 00:45:21 geraint ## Separated Euler and Implicit methods in .cc code and dependencies. ## ## Revision 1.293.2.3 2001/03/01 05:05:53 geraint | > > > | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # Copyright (C) 2000 by Peter J. Gawthrop ############################################################### ## Version control history ############################################################### ## $Header$ ## $Log$ ## Revision 1.293.2.6 2001/03/03 06:50:38 geraint ## Added #SUMMARY lines for ode2odes. ## ## Revision 1.293.2.5 2001/03/03 00:27:14 geraint ## Fixed ar options to work with GNU ar. Allow mtt to create dependencies for mtt_%.cc when making mtt_%.oct. ## ## Revision 1.293.2.4 2001/03/02 00:45:21 geraint ## Separated Euler and Implicit methods in .cc code and dependencies. ## ## Revision 1.293.2.3 2001/03/01 05:05:53 geraint |
︙ | ︙ | |||
1079 1080 1081 1082 1083 1084 1085 1086 | integration_method=euler; mtt_switches="$mtt_switches euler"; ;; implicit) integration_method=implicit; mtt_switches="$mtt_switches implicit"; ;; *) | > > > > | | 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 | integration_method=euler; mtt_switches="$mtt_switches euler"; ;; implicit) integration_method=implicit; mtt_switches="$mtt_switches implicit"; ;; rk4) integration_method=rk4; mtt_switches="$mtt_switches rk4"; ;; *) echo $1 is an unknown integration method - use euler, rk4 or implicit; exit;; esac;; -s ) mtt_switches="$mtt_switches $1"; sensitivity=sensitivity ;; -ss ) mtt_switches="$mtt_switches $1"; |
︙ | ︙ | |||
1217 1218 1219 1220 1221 1222 1223 | echo ' -D debug -- leave log files etc' echo ' -I prints more information' echo ' -abg start at abg.m representation' echo ' -c c-code generation' echo ' -d <dir> use directory <dir>' echo ' -dc Maximise derivative (not integral) causality' echo ' -dc Maximise derivative (not integral) causality' | | | 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 | echo ' -D debug -- leave log files etc' echo ' -I prints more information' echo ' -abg start at abg.m representation' echo ' -c c-code generation' echo ' -d <dir> use directory <dir>' echo ' -dc Maximise derivative (not integral) causality' echo ' -dc Maximise derivative (not integral) causality' echo ' -i <implicit|euler|rk4> Use implicit, euler or rk4 integration' echo ' -o ode is same as dae' echo ' -oct use oct files in place of m files where appropriate' echo ' -opt optimise code generation' echo ' -p print environment variables' echo ' -partition partition hierachical system' echo ' -r reset time stamp on representation' echo ' -s try to generate sensitivity BG (experimental)' |
︙ | ︙ | |||
2092 2093 2094 2095 2096 2097 2098 | @echo > /dev/null $1_ode2odes_common.o : $1_input.o $1_logic.o $1_numpar.o $1_simpar.o $1_state.o @echo "Creating $1_ode2odes_common.o" ar -cr \$@ \$^ $1_ode2odes_common.oct : $1_input.oct $1_logic.oct $1_numpar.oct $1_simpar.oct $1_state.oct @echo > /dev/null | | | | | | 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 | @echo > /dev/null $1_ode2odes_common.o : $1_input.o $1_logic.o $1_numpar.o $1_simpar.o $1_state.o @echo "Creating $1_ode2odes_common.o" ar -cr \$@ \$^ $1_ode2odes_common.oct : $1_input.oct $1_logic.oct $1_numpar.oct $1_simpar.oct $1_state.oct @echo > /dev/null $1_ode2odes_euler.m $1_ode2odes_rk4.m : $1_ode.m $1_odeo.m @echo > /dev/null $1_ode2odes_euler.cc $1_ode2odes_rk4.cc : $1_ode.cc $1_odeo.cc @echo > /dev/null $1_ode2odes_euler.o $1_ode2odes_rk4.o : $1_ode.o $1_odeo.o mtt_euler.o @echo "Creating \$@" ar -cr \$@ \$^ $1_ode2odes_euler.oct : $1_ode.oct $1_odeo.oct mtt_euler.oct @echo > /dev/null $1_ode2odes_implicit.m : $1_cseo.m $1_csex.m $1_smxa.m $1_smxax.m @echo > /dev/null $1_ode2odes_implicit.cc : $1_cseo.cc $1_csex.cc $1_smxa.cc $1_smxax.cc |
︙ | ︙ | |||
2411 2412 2413 2414 2415 2416 2417 | ifeq ($using_oct,yes) touch $1_ode2odes.m # Create a dummy which wont' be used mtt $mtt_switches -q -u $1 ode2odes oct else make_ode2odes $1 m $integration_method endif endif | | | 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 | ifeq ($using_oct,yes) touch $1_ode2odes.m # Create a dummy which wont' be used mtt $mtt_switches -q -u $1 ode2odes oct else make_ode2odes $1 m $integration_method endif endif ifneq ($integration_method,implicit) $1_ode2odes.m : $1_def.r $1_sympars.txt\ $1_simpar.m $1_numpar.m $1_state.m $1_input.m \ $1_ode.m $1_odeo.m $1_logic.m ifeq ($using_oct,yes) echo "*** Warning: Shouldn't be here! Creating dummy $1_ode2odes.m" touch $1_ode2odes.m # Create a dummy which wont' be used mtt $mtt_switches -q -u $1 ode2odes oct |
︙ | ︙ | |||
2494 2495 2496 2497 2498 2499 2500 | ifeq ($integration_method,implicit) $1_ode2odes.p : $1_ode2odes.m $1_def.r $1_smxa.p $1_smxax.p\ $1_simpar.p $1_numpar.p $1_state.p $1_input.p \ $1_csex.p $1_cseo.p $1_logic.p mtt_m2p $1_ode2odes.m $integration_method $stdin endif | | | 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 | ifeq ($integration_method,implicit) $1_ode2odes.p : $1_ode2odes.m $1_def.r $1_smxa.p $1_smxax.p\ $1_simpar.p $1_numpar.p $1_state.p $1_input.p \ $1_csex.p $1_cseo.p $1_logic.p mtt_m2p $1_ode2odes.m $integration_method $stdin endif ifneq ($integration_method,implicit) $1_ode2odes.p : $1_ode2odes.m $1_def.r\ $1_simpar.p $1_numpar.p $1_state.p $1_input.p \ $1_ode.p $1_odeo.p $1_logic.p mtt_m2p $1_ode2odes.m $integration_method $stdin endif $1_ode2odes.c: $1_ode2odes.p |
︙ | ︙ |
Modified mttroot/mtt/bin/trans/make_ode2odes from [0693b22b21] to [1a5aa47365].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #! /bin/sh ###################################### ##### Model Transformation Tools ##### ###################################### ############################################################### ## Version control history ############################################################### ## $Id$ ## $Log$ ## Revision 1.51.2.5 2001/03/12 23:16:37 geraint ## Minor improvements to signal handling (.exe). ## ## Revision 1.51.2.4 2001/03/12 03:59:30 geraint ## SIGINT (C-c C-c) now causes simulation data to be dumped to MTT.core. ## SIGQUIT (C-c C-\) as for SIGINT, then raises default SIGQUIT. ## SIGFPE as for SIGINT, then raises default SIGABRT. | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #! /bin/sh ###################################### ##### Model Transformation Tools ##### ###################################### ############################################################### ## Version control history ############################################################### ## $Id$ ## $Log$ ## Revision 1.51.2.6 2001/03/16 03:56:13 geraint ## Removed psignal/siginfo.h - problematic and unnecessary. ## ## Revision 1.51.2.5 2001/03/12 23:16:37 geraint ## Minor improvements to signal handling (.exe). ## ## Revision 1.51.2.4 2001/03/12 03:59:30 geraint ## SIGINT (C-c C-c) now causes simulation data to be dumped to MTT.core. ## SIGQUIT (C-c C-\) as for SIGINT, then raises default SIGQUIT. ## SIGFPE as for SIGINT, then raises default SIGABRT. |
︙ | ︙ | |||
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | mttj = 0; for it = 1:ilast #Integration loop [u] = ${sys}_input(x,y,t,par); # Input [y] = ${sys}_$odeo(x,u,t,par); # Output if mttj==0 mtt_write(t,x,y,$Nx,$Ny); # Write it out endif [dx] = ${sys}_$ode(x,u,t,par); # State derivative EOF if [ "$method" = "implicit" ]; then cat<< EOF >> $filename [AA] = ${sys}_smxa(x,u,ddt,par); # (I-Adt) and (I-Adt)x [AAx] = ${sys}_smxax(x,u,ddt,par); # (I-Adt) and (I-Adt)x | > > > > > > > > > > > > > | 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | mttj = 0; for it = 1:ilast #Integration loop [u] = ${sys}_input(x,y,t,par); # Input [y] = ${sys}_$odeo(x,u,t,par); # Output if mttj==0 mtt_write(t,x,y,$Nx,$Ny); # Write it out endif EOF if [ "$method" = "rk4" ]; then cat << EOF >> $filename [k1] = ddt * ${sys}_${ode}(x,u,t,par); [k2] = ddt * ${sys}_${ode}(x+k1/2,u,t+ddt/2,par); [k3] = ddt * ${sys}_${ode}(x+k2/2,u,t+ddt/2,par); [k4] = ddt * ${sys}_${ode}(x+k3,u,t+ddt,par); [dx] = [k1 + 2.0 * [k2 + k3] + k4] / (6.0 * ddt); EOF else cat << EOF >> $filename [dx] = ${sys}_$ode(x,u,t,par); # State derivative EOF fi if [ "$method" = "implicit" ]; then cat<< EOF >> $filename [AA] = ${sys}_smxa(x,u,ddt,par); # (I-Adt) and (I-Adt)x [AAx] = ${sys}_smxax(x,u,ddt,par); # (I-Adt) and (I-Adt)x |
︙ | ︙ | |||
780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 | { y = mtt_${odeo} (x, u, t, par); u = mtt_input (x, y, t, par); if (0 == j) { mtt_write (t, x, y, nrows); } dx = mtt_${ode} (x, u, t, par); EOF if [ "$method" = "implicit" ]; then cat <<EOF >> $filename AA = mtt_smxa (x, u, ddt, par); AAx = mtt_smxax (x, u, ddt, par); EOF | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 | { y = mtt_${odeo} (x, u, t, par); u = mtt_input (x, y, t, par); if (0 == j) { mtt_write (t, x, y, nrows); } EOF if [ "$method" = "rk4" ]; then cat << EOF >> $filename { static ColumnVector k1 (MTTNX,0.0), k2 (MTTNX,0.0), k3 (MTTNX,0.0), k4 (MTTNX,0.0); const double t1 = t + ddt/2.0, t2 = t + ddt; ColumnVector x1 (x), x2 (x), x3 (x); k1 = ddt * mtt_${ode} (x , u, t , par); x1 += k1 * 0.5; k2 = ddt * mtt_${ode} (x1, u, t1, par); x2 += k2 * 0.5; k3 = ddt * mtt_${ode} (x2, u, t1, par); x3 += k3; k4 = ddt * mtt_${ode} (x3, u, t2, par); dx = (k1 + 2.0 * (k2 + k3) + k4) / (6.0 * ddt); } EOF else cat << EOF >> $filename dx = mtt_${ode} (x, u, t, par); EOF fi if [ "$method" = "implicit" ]; then cat <<EOF >> $filename AA = mtt_smxa (x, u, ddt, par); AAx = mtt_smxax (x, u, ddt, par); EOF |
︙ | ︙ |