Overview
Comment: | Added -i dassl for -cc and -oct. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | origin/master | trunk |
Files: | files | file ages | folders |
SHA3-256: |
9a2641223c49f9d56ba9bfe65b314035 |
User & Date: | geraint@users.sourceforge.net on 2001-08-01 04:06:07 |
Other Links: | branch diff | manifest | tags |
Context
2001-08-01
| ||
22:14:32 | Bug fix for dassl. check-in: 5a2448e70f user: geraint@users.sourceforge.net tags: origin/master, trunk | |
04:06:07 | Added -i dassl for -cc and -oct. check-in: 9a2641223c user: geraint@users.sourceforge.net tags: origin/master, trunk | |
2001-07-28
| ||
21:10:18 | Generate warning instead of error if reserved word used. check-in: f3cd55680e user: geraint@users.sourceforge.net tags: origin/master, trunk | |
Changes
Modified mttroot/mtt/bin/mtt from [4e1c42abea] to [e33b09b50e].
︙ | ︙ | |||
13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # Copyright (C) 2001 by Peter J. Gawthrop ############################################################### ## Version control history ############################################################### ## $Header$ ## $Log$ ## Revision 1.320 2001/07/27 23:38:38 geraint ## Changed comment below (# SUMMARY) - fixes xmtt. ## ## Revision 1.319 2001/07/27 23:29:10 geraint ## *** empty log message *** ## ## Revision 1.318 2001/07/24 04:17:30 gawthrop | > > > | 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # Copyright (C) 2001 by Peter J. Gawthrop ############################################################### ## Version control history ############################################################### ## $Header$ ## $Log$ ## Revision 1.321 2001/07/27 23:43:34 geraint ## Added -cc to usage options (required for use with xmtt). ## ## Revision 1.320 2001/07/27 23:38:38 geraint ## Changed comment below (# SUMMARY) - fixes xmtt. ## ## Revision 1.319 2001/07/27 23:29:10 geraint ## *** empty log message *** ## ## Revision 1.318 2001/07/24 04:17:30 gawthrop |
︙ | ︙ | |||
1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 | -nocr ) mtt_switches="$mtt_switches $1"; rdae_is_dae=1 ;; -i ) mtt_switches="$mtt_switches $1"; shift; case $1 in euler) 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"; ;; *) | > > > > | | 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 | -nocr ) mtt_switches="$mtt_switches $1"; rdae_is_dae=1 ;; -i ) mtt_switches="$mtt_switches $1"; shift; case $1 in dassl) integration_method=dassl; mtt_switches="$mtt_switches dassl"; ;; euler) 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 dassl, euler, rk4 or implicit; exit;; esac;; -ae ) mtt_switches="$mtt_switches $1"; case $2 in fsolve | hybrd) mtt_switches="$mtt_switches $2"; |
︙ | ︙ | |||
1378 1379 1380 1381 1382 1383 1384 | echo ' -abg start at abg.m representation' echo ' -c c-code generation' echo ' -cc C++ code generation' echo ' -cr Use cr before resolving equations' echo ' -d <dir> use directory <dir>' echo ' -dc Maximise derivative (not integral) causality' echo ' -dc Maximise derivative (not integral) causality' | | | 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 | echo ' -abg start at abg.m representation' echo ' -c c-code generation' echo ' -cc C++ code generation' echo ' -cr Use cr before resolving equations' 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|dassl> Use implicit, euler, rk4 or dassl integration' echo ' -ae <reduce|hybrd|hooke> Solve algebraic equations with Reduce, hybrd (fsolve) or Hooke and Jeeves' 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 ' -pdf generate pdf in place of ps' |
︙ | ︙ | |||
2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 | $1_ode2odes_implicit.cc : $1_cseo.cc $1_csex.cc $1_smxa.cc $1_smxax.cc @echo > /dev/null $1_ode2odes_implicit.o : $1_cseo.o $1_csex.o $1_smxa.o $1_smxax.o mtt_implicit.o @echo "Creating $1_ode2odes_implicit.o" ar -cr \$@ \$^ $1_ode2odes_implicit.oct: $1_cseo.oct $1_csex.oct $1_smxa.oct $1_smxax.oct mtt_implicit.oct @echo > /dev/null mtt_Solver.cc: mtt_Solver.hh $1_ode2odes_${algebraic_solver}.cc: mtt_Solver.cc mtt_${algebraic_solver}.hh mtt_${algebraic_solver}.cc $1_ode2odes_${algebraic_solver}.o: mtt_Solver.o mtt_${algebraic_solver}.o @echo "Creating $1_ode2odes_${algebraic_solver}.o" ar -cr \$@ \$^ | > > > > > > > > > > | 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 | $1_ode2odes_implicit.cc : $1_cseo.cc $1_csex.cc $1_smxa.cc $1_smxax.cc @echo > /dev/null $1_ode2odes_implicit.o : $1_cseo.o $1_csex.o $1_smxa.o $1_smxax.o mtt_implicit.o @echo "Creating $1_ode2odes_implicit.o" ar -cr \$@ \$^ $1_ode2odes_implicit.oct: $1_cseo.oct $1_csex.oct $1_smxa.oct $1_smxax.oct mtt_implicit.oct @echo > /dev/null $1_ode2odes_dassl.m : $1_ode.m $1_odeo.m @echo > /dev/null $1_ode2odes_dassl.cc : $1_ode.cc $1_odeo.cc @echo > /dev/null $1_ode2odes_dassl.o : $1_ode.o $1_odeo.o mtt_dassl.o @echo "Creating \$@" ar -cr \$@ \$^ $1_ode2odes_dassl.oct : $1_ode.oct $1_odeo.oct mtt_dassl.oct @echo > /dev/null mtt_Solver.cc: mtt_Solver.hh $1_ode2odes_${algebraic_solver}.cc: mtt_Solver.cc mtt_${algebraic_solver}.hh mtt_${algebraic_solver}.cc $1_ode2odes_${algebraic_solver}.o: mtt_Solver.o mtt_${algebraic_solver}.o @echo "Creating $1_ode2odes_${algebraic_solver}.o" ar -cr \$@ \$^ |
︙ | ︙ |
Modified mttroot/mtt/bin/trans/make_ode2odes from [28ede48c7c] to [ce4f690852].
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.59 2001/07/13 04:54:04 geraint ## Branch merge: numerical-algebraic-solution back to main. ## ## Revision 1.58 2001/07/13 00:51:39 geraint ## Fixed generation of odes.sg from .m and .oct simulations. ## .cc, .m and .oct simulations now all write mtt_data (lower case). ## | > > > | 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.60 2001/07/16 22:23:00 geraint ## Fixed misleading variable name in .cc rep. ## ## Revision 1.59 2001/07/13 04:54:04 geraint ## Branch merge: numerical-algebraic-solution back to main. ## ## Revision 1.58 2001/07/13 00:51:39 geraint ## Fixed generation of odes.sg from .m and .oct simulations. ## .cc, .m and .oct simulations now all write mtt_data (lower case). ## |
︙ | ︙ | |||
257 258 259 260 261 262 263 | fi echo Creating $filename with $method integration method # Find system constants Nx=`mtt_getsize $sys x` # States Nu=`mtt_getsize $sys u` # Inputs | | > | | | | > > | > > > > | | | < > > | 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | fi echo Creating $filename with $method integration method # Find system constants Nx=`mtt_getsize $sys x` # States Nu=`mtt_getsize $sys u` # Inputs Ny=`mtt_getsize $sys y` # Outputs case "$method" in "implicit") ode=csex odeo=cseo algorithm="mtt_implicit(x,dx,AA,AAx,ddt,$Nx,open_switches)" ;; "dassl") ode=ode odeo=odeo algorithm="mtt_dassl(x,u,t,par,dx,ddt,MTTNX,MTTNYZ,open_switches)" ;; "euler" | "rk4" | *) ode=ode odeo=odeo algorithm="mtt_euler(x,dx,ddt,$Nx,open_switches)" ;; esac make_m() { #lang_header $1 ode2odes m 'x,par,simpar' '[Y,X,t]' > $filename mtt_header ${sys} ode2odes m > $filename cat <<EOF >> $filename global MTT_data; |
︙ | ︙ | |||
432 433 434 435 436 437 438 | extern ColumnVector F${sys}_${odeo} ( ColumnVector &x, ColumnVector &u, const double &t, ColumnVector &par); EOF | | < < < < < < < | < < | | 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 | extern ColumnVector F${sys}_${odeo} ( ColumnVector &x, ColumnVector &u, const double &t, ColumnVector &par); EOF case "$method" in "implicit") cat <<EOF >> $filename extern ColumnVector Fmtt_implicit ( ColumnVector &x, ColumnVector &dx, Matrix &AA, ColumnVector &AAx, const double &ddt, const int &nx, |
︙ | ︙ | |||
466 467 468 469 470 471 472 | extern ColumnVector F${sys}_smxax ( ColumnVector &x, ColumnVector &u, const double &t, ColumnVector &par); EOF | > > > > > > > > > > > > > | > > > > > > > > > > > > > > | 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 | extern ColumnVector F${sys}_smxax ( ColumnVector &x, ColumnVector &u, const double &t, ColumnVector &par); EOF ;; "dassl") cat <<EOF >> $filename extern ColumnVector Fmtt_dassl ( ColumnVector &x, const ColumnVector &u, const double &t, const ColumnVector &par, const ColumnVector &dx, const double &ddt, const int nx, const int nyz, const ColumnVector &open_switches); EOF ;; "euler" | "rk4" | *) cat <<EOF >> $filename extern ColumnVector Fmtt_euler ( ColumnVector &x, const ColumnVector &dx, const double &ddt, const int &nx, const ColumnVector &open_switches); EOF ;; esac cat <<EOF >> $filename void set_signal_handlers (void); #endif // STANDALONE ColumnVector |
︙ | ︙ | |||
552 553 554 555 556 557 558 559 560 561 562 563 564 565 | return F${sys}_numpar (); #else static octave_value_list args, f; f = feval ("${sys}_numpar", args, 1); return f(0).${vector_value} (); #endif } inline Octave_map mtt_simpar (void) { #ifdef STANDALONE return F${sys}_simpar (); #else | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 | return F${sys}_numpar (); #else static octave_value_list args, f; f = feval ("${sys}_numpar", args, 1); return f(0).${vector_value} (); #endif } #ifdef STANDALONE ColumnVector Fmtt_residual (const ColumnVector &X, const ColumnVector &DX, double t) { #else // !STANDALONE DEFUN_DLD (mtt_residual, args, , "mtt_residual") { static ColumnVector X (MTTNX+MTTNYZ); static ColumnVector DX (MTTNX+MTTNYZ); static double t; X = args(0).${vector_value} (); DX = args(1).${vector_value} (); t = args(2).double_value (); #endif // STANDALONE static ColumnVector residual (MTTNX+MTTNYZ); static ColumnVector U (MTTNU+MTTNYZ); static ColumnVector u (MTTNU); static ColumnVector y (MTTNY,0.0); static ColumnVector par (MTTNPAR); static ColumnVector dx(MTTNX); static ColumnVector yz(MTTNYZ); static ColumnVector x (MTTNX); static ColumnVector ui (MTTNYZ); static octave_value_list new_args; x = X.extract (0,MTTNX-1); if (MTTNYZ > 0) ui = X.extract (MTTNX,MTTNX+MTTNYZ-1); #ifdef STANDALONE par = F${sys}_numpar(); u = F${sys}_input(x,y,t,par); #else par = feval ("${sys}_numpar", new_args, 1)(0).${vector_value} (); new_args(0) = octave_value (x); new_args(1) = octave_value (u); new_args(2) = octave_value (t); new_args(3) = octave_value (par); u = feval ("${sys}_input", new_args, 1)(0).${vector_value} (); #endif U.insert (u,0); if (MTTNYZ > 0) U.insert (ui,MTTNX); #ifdef STANDALONE dx = F${sys}_${ode} (x,U,t,par); yz = F${sys}_ae (x,U,t,par); #else new_args(1) = octave_value (U); dx = feval ("${sys}_${ode}", new_args, 1)(0).${vector_value} (); yz = feval ("${sys}_ae", new_args, 1)(0).${vector_value} (); #endif for (register int i = 0; i < MTTNX; i++) residual (i) = dx(i) - DX(i); if (MTTNYZ > 0) residual.insert (yz,MTTNX); #ifdef STANDALONE return residual; #else // !STANDALONE return octave_value (residual); #endif // STANDALONE } inline Octave_map mtt_simpar (void) { #ifdef STANDALONE return F${sys}_simpar (); #else |
︙ | ︙ | |||
625 626 627 628 629 630 631 | args (3) = octave_value (par); f = feval ("${sys}_${odeo}", args, 1); return f(0).${vector_value} (); #endif } EOF | | < < < < < < < < < < < < < < < < < < < < < | < < | | 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 | args (3) = octave_value (par); f = feval ("${sys}_${odeo}", args, 1); return f(0).${vector_value} (); #endif } EOF case "$method" in "implicit") cat <<EOF >> $filename inline ColumnVector mtt_implicit (ColumnVector &x, ColumnVector &dx, Matrix &AA, ColumnVector &AAx, const double &ddt, const int &nx, |
︙ | ︙ | |||
715 716 717 718 719 720 721 | args (3) = octave_value (par); f = feval ("${sys}_smxax", args, 1); return f(0).${vector_value} (); #endif } EOF | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 795 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 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 | args (3) = octave_value (par); f = feval ("${sys}_smxax", args, 1); return f(0).${vector_value} (); #endif } EOF ;; "dassl") cat <<EOF >> $filename inline ColumnVector mtt_dassl (ColumnVector &x, const ColumnVector &u, const double &t, const ColumnVector &par, const ColumnVector &dx, const double &ddt, const int &nx, const int &nyz, const ColumnVector &open_switches) { #ifdef STANDALONE return Fmtt_dassl (x, u, t, par, dx, ddt, nx, nyz, open_switches); #else static octave_value_list args, f; args (0) = octave_value (x); args (1) = octave_value (u); args (2) = octave_value (t); args (3) = octave_value (par); args (4) = octave_value (dx); args (5) = octave_value (ddt); args (6) = octave_value (static_cast<double> (nx)); args (7) = octave_value (static_cast<double> (nyz)); args (8) = octave_value (open_switches); f = feval ("mtt_dassl", args, 1); return f(0).${vector_value} (); #endif } EOF ;; "euler" | "rk4" | *) cat <<EOF >> $filename inline ColumnVector mtt_euler (ColumnVector &x, const ColumnVector &dx, const double &ddt, const int &nx, const ColumnVector &open_switches) { #ifdef STANDALONE return Fmtt_euler (x, dx, ddt, nx, open_switches); #else static octave_value_list args, f; args (0) = octave_value (x); args (1) = octave_value (dx); args (2) = octave_value (ddt); args (3) = octave_value ((double)nx); args (4) = octave_value (open_switches); f = feval ("mtt_euler", args, 1); return f(0).${vector_value} (); #endif } EOF ;; esac cat <<EOF >> $filename inline void mtt_write (const double &t, ColumnVector &x, ColumnVector &y, const int &nrows, |
︙ | ︙ | |||
903 904 905 906 907 908 909 | u = mtt_input (x, y, t, par); y = mtt_output (x, u, t, par); if (0 == j) { mtt_write (t, x, y, nrows); } EOF | | > | | 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 | u = mtt_input (x, y, t, par); y = mtt_output (x, u, t, par); if (0 == j) { mtt_write (t, x, y, nrows); } EOF case "$method" in "rk4") cat << EOF >> $filename { static ColumnVector k1 (MTTNX,0.0), k2 (MTTNX,0.0), k3 (MTTNX,0.0), k4 (MTTNX,0.0); |
︙ | ︙ | |||
928 929 930 931 932 933 934 | k1 = ddt * mtt_rate (x , u, t , par); x1 += k1 * 0.5; k2 = ddt * mtt_rate (x1, u, t1, par); x2 += k2 * 0.5; k3 = ddt * mtt_rate (x2, u, t1, par); x3 += k3; k4 = ddt * mtt_rate (x3, u, t2, par); dx = (k1 + 2.0 * (k2 + k3) + k4) / (6.0 * ddt); } EOF | > | > > | < < < < < < > > | > > > > | 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 | k1 = ddt * mtt_rate (x , u, t , par); x1 += k1 * 0.5; k2 = ddt * mtt_rate (x1, u, t1, par); x2 += k2 * 0.5; k3 = ddt * mtt_rate (x2, u, t1, par); x3 += k3; k4 = ddt * mtt_rate (x3, u, t2, par); dx = (k1 + 2.0 * (k2 + k3) + k4) / (6.0 * ddt); } EOF ;; "dassl") ;; "implicit") cat << EOF >> $filename dx = mtt_rate (x, u, t, par); AA = mtt_smxa (x, u, ddt, par); AAx = mtt_smxax (x, u, ddt, par); EOF ;; "euler" | *) cat << EOF >> $filename dx = mtt_rate (x, u, t, par); EOF ;; esac ## Common stuff cat <<EOF >> $filename open_switches = mtt_logic (x, u, t, par); x = $algorithm; t += ddt; j++; |
︙ | ︙ |
Added mttroot/mtt/lib/cc/mtt_dassl.cc version [8cf3e05414].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include <octave/oct.h> #include <octave/DASSL.h> #ifdef OCTAVE_DEV #include <octave/parse.h> #define VECTOR_VALUE column_vector_value #else // !OCTAVE_DEV #include <octave/toplev.h> #define VECTOR_VALUE vector_value #endif // OCTAVE_DEV #ifdef STANDALONE extern ColumnVector Fmtt_residual (const ColumnVector &X, const ColumnVector &DX, double t); #endif // STANDALONE ColumnVector mtt_residual (const ColumnVector &X, const ColumnVector &DX, double t) { #ifdef STANDALONE return Fmtt_residual (X, DX, t); #else // !STANDALONE static octave_value_list args, f; args(0) = octave_value (X); args(1) = octave_value (DX); args(2) = octave_value (t); f = feval ("mtt_residual", args, 1); return f(0).VECTOR_VALUE (); #endif // STANDALONE } #ifdef STANDALONE ColumnVector Fmtt_dassl ( ColumnVector &x, const ColumnVector &u, const double &t, const ColumnVector &par, const ColumnVector &dx, const double &ddt, const int Nx, const int Nyz, const ColumnVector &openx) { #else // !STANDALONE DEFUN_DLD (mtt_dassl, args, , "dassl integration method") { ColumnVector x = args(0).VECTOR_VALUE(); const ColumnVector u = args(1).VECTOR_VALUE(); const double t = args(2).double_value(); const ColumnVector par = args(3).VECTOR_VALUE(); const ColumnVector dx = args(4).VECTOR_VALUE(); const double ddt = args(5).double_value(); const int Nx = static_cast<int> (args(6).double_value()); const int Nyz = static_cast<int> (args(7).double_value()); const ColumnVector openx = args(8).VECTOR_VALUE(); #endif // STANDALONE static DAEFunc fdae(mtt_residual); static ColumnVector XX (Nx+Nyz); XX.insert (x,0); for (register int i = Nx; i < Nyz; i++) XX(i) = 0.0; double tout = t + ddt; DASSL fdassl (XX, t, fdae); x = fdassl.do_integrate (tout).extract (0,Nx-1); for (register int i = 0; i < Nx; i++) if (openx (i) > 0.5) x (i) = 0.0; #ifdef STANDALONE return x; #else return octave_value (x); #endif } |