DELETED CVSROOT/checkoutlist Index: CVSROOT/checkoutlist ================================================================== --- CVSROOT/checkoutlist +++ /dev/null @@ -1,13 +0,0 @@ -# The "checkoutlist" file is used to support additional version controlled -# administrative files in $CVSROOT/CVSROOT, such as template files. -# -# The first entry on a line is a filename which will be checked out from -# the corresponding RCS file in the $CVSROOT/CVSROOT directory. -# The remainder of the line is an error message to use if the file cannot -# be checked out. -# -# File format: -# -# [] -# -# comment lines begin with '#' DELETED CVSROOT/commitinfo Index: CVSROOT/commitinfo ================================================================== --- CVSROOT/commitinfo +++ /dev/null @@ -1,15 +0,0 @@ -# The "commitinfo" file is used to control pre-commit checks. -# The filter on the right is invoked with the repository and a list -# of files to check. A non-zero exit of the filter program will -# cause the commit to be aborted. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being committed to, relative -# to the $CVSROOT. For the first match that is found, then the remainder -# of the line is the name of the filter to run. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". DELETED CVSROOT/config Index: CVSROOT/config ================================================================== --- CVSROOT/config +++ /dev/null @@ -1,11 +0,0 @@ -# Set this to "no" if pserver shouldn't check system users/passwords -#SystemAuth=no - -# Set `PreservePermissions' to `yes' to save file status information -# in the repository. -#PreservePermissions=no - -# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top -# level of the new working directory when using the `cvs checkout' -# command. -#TopLevelAdmin=no DELETED CVSROOT/cvswrappers Index: CVSROOT/cvswrappers ================================================================== --- CVSROOT/cvswrappers +++ /dev/null @@ -1,23 +0,0 @@ -# This file affects handling of files based on their names. -# -# The -t/-f options allow one to treat directories of files -# as a single file, or to transform a file in other ways on -# its way in and out of CVS. -# -# The -m option specifies whether CVS attempts to merge files. -# -# The -k option specifies keyword expansion (e.g. -kb for binary). -# -# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers) -# -# wildcard [option value][option value]... -# -# where option is one of -# -f from cvs filter value: path to filter -# -t to cvs filter value: path to filter -# -m update methodology value: MERGE or COPY -# -k expansion mode value: b, o, kkv, &c -# -# and value is a single-quote delimited value. -# For example: -#*.gif -k 'b' DELETED CVSROOT/editinfo Index: CVSROOT/editinfo ================================================================== --- CVSROOT/editinfo +++ /dev/null @@ -1,21 +0,0 @@ -# The "editinfo" file is used to allow verification of logging -# information. It works best when a template (as specified in the -# rcsinfo file) is provided for the logging procedure. Given a -# template with locations for, a bug-id number, a list of people who -# reviewed the code before it can be checked in, and an external -# process to catalog the differences that were code reviewed, the -# following test can be applied to the code: -# -# Making sure that the entered bug-id number is correct. -# Validating that the code that was reviewed is indeed the code being -# checked in (using the bug-id number or a seperate review -# number to identify this particular code set.). -# -# If any of the above test failed, then the commit would be aborted. -# -# Actions such as mailing a copy of the report to each reviewer are -# better handled by an entry in the loginfo file. -# -# One thing that should be noted is the the ALL keyword is not -# supported. There can be only one entry that matches a given -# repository. DELETED CVSROOT/loginfo Index: CVSROOT/loginfo ================================================================== --- CVSROOT/loginfo +++ /dev/null @@ -1,26 +0,0 @@ -# The "loginfo" file controls where "cvs commit" log information -# is sent. The first entry on a line is a regular expression which must match -# the directory that the change is being made to, relative to the -# $CVSROOT. If a match is found, then the remainder of the line is a filter -# program that should expect log information on its standard input. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name ALL appears as a regular expression it is always used -# in addition to the first matching regex or DEFAULT. -# -# You may specify a format string as part of the -# filter. The string is composed of a `%' followed -# by a single format character, or followed by a set of format -# characters surrounded by `{' and `}' as separators. The format -# characters are: -# -# s = file name -# V = old version number (pre-checkin) -# v = new version number (post-checkin) -# -# For example: -#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog -# or -#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog DELETED CVSROOT/modules Index: CVSROOT/modules ================================================================== --- CVSROOT/modules +++ /dev/null @@ -1,26 +0,0 @@ -# Three different line formats are valid: -# key -a aliases... -# key [options] directory -# key [options] directory files... -# -# Where "options" are composed of: -# -i prog Run "prog" on "cvs commit" from top-level of module. -# -o prog Run "prog" on "cvs checkout" of module. -# -e prog Run "prog" on "cvs export" of module. -# -t prog Run "prog" on "cvs rtag" of module. -# -u prog Run "prog" on "cvs update" of module. -# -d dir Place module in directory "dir" instead of module name. -# -l Top-level directory only -- do not recurse. -# -# NOTE: If you change any of the "Run" options above, you'll have to -# release and re-checkout any working directories of these modules. -# -# And "directory" is a path to a directory relative to $CVSROOT. -# -# The "-a" option specifies an alias. An alias is interpreted as if -# everything on the right of the "-a" had been typed on the command line. -# -# You can encode a module within a module by using the special '&' -# character to interpose another module into the current module. This -# can be useful for creating a module that consists of many directories -# spread out over the entire source repository. DELETED CVSROOT/notify Index: CVSROOT/notify ================================================================== --- CVSROOT/notify +++ /dev/null @@ -1,12 +0,0 @@ -# The "notify" file controls where notifications from watches set by -# "cvs watch add" or "cvs edit" are sent. The first entry on a line is -# a regular expression which is tested against the directory that the -# change is being made to, relative to the $CVSROOT. If it matches, -# then the remainder of the line is a filter program that should contain -# one occurrence of %s for the user to notify, and information on its -# standard input. -# -# "ALL" or "DEFAULT" can be used in place of the regular expression. -# -# For example: -#ALL mail %s -s "CVS notification" DELETED CVSROOT/rcsinfo Index: CVSROOT/rcsinfo ================================================================== --- CVSROOT/rcsinfo +++ /dev/null @@ -1,13 +0,0 @@ -# The "rcsinfo" file is used to control templates with which the editor -# is invoked on commit and import. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being made to, relative to the -# $CVSROOT. For the first match that is found, then the remainder of the -# line is the name of the file that contains the template. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". DELETED CVSROOT/taginfo Index: CVSROOT/taginfo ================================================================== --- CVSROOT/taginfo +++ /dev/null @@ -1,20 +0,0 @@ -# The "taginfo" file is used to control pre-tag checks. -# The filter on the right is invoked with the following arguments: -# -# $1 -- tagname -# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d -# $3 -- repository -# $4-> file revision [file revision ...] -# -# A non-zero exit of the filter program will cause the tag to be aborted. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being committed to, relative -# to the $CVSROOT. For the first match that is found, then the remainder -# of the line is the name of the filter to run. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". DELETED CVSROOT/verifymsg Index: CVSROOT/verifymsg ================================================================== --- CVSROOT/verifymsg +++ /dev/null @@ -1,21 +0,0 @@ -# The "verifymsg" file is used to allow verification of logging -# information. It works best when a template (as specified in the -# rcsinfo file) is provided for the logging procedure. Given a -# template with locations for, a bug-id number, a list of people who -# reviewed the code before it can be checked in, and an external -# process to catalog the differences that were code reviewed, the -# following test can be applied to the code: -# -# Making sure that the entered bug-id number is correct. -# Validating that the code that was reviewed is indeed the code being -# checked in (using the bug-id number or a seperate review -# number to identify this particular code set.). -# -# If any of the above test failed, then the commit would be aborted. -# -# Actions such as mailing a copy of the report to each reviewer are -# better handled by an entry in the loginfo file. -# -# One thing that should be noted is the the ALL keyword is not -# supported. There can be only one entry that matches a given -# repository. Index: mttroot/mtt/bin/mtt ================================================================== --- mttroot/mtt/bin/mtt +++ mttroot/mtt/bin/mtt @@ -13,10 +13,29 @@ ############################################################### ## 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 +## Minor revisions. +## +## Revision 1.293.2.2 2001/02/23 03:53:53 geraint +## Minor revisions. (ode2odes.exe works on GNU/Linux and ~GNU/Irix) +## +## Revision 1.293.2.1 2001/02/22 06:41:40 geraint +## Initial merge of ode2odes.exe into main mtt. +## standalone_rep.make deleted: rules moved to mtt, variables to mttrc. +## +## Revision 1.293 2001/02/06 04:39:08 geraint +## Added _standalone.exe representation. +## ## Revision 1.292 2001/02/05 17:27:40 gawthrop ## Make sure _def.r exists before creating _state.txt ## ## Revision 1.291 2000/12/27 14:50:40 peterg ## This is the first CVS version (4.9). @@ -1792,10 +1811,17 @@ if [ -n "$sensitivity" ]; then sys=`echo $1 | cut -c 2-` sys_abg=$sys"_abg" fi + +## Check octave version +if [ `octave --version | awk -F\. '{print $2}'` ]; then + define_octave_dev="-DOCTAVE_DEV" +else + define_octave_dev="" +fi ################################ # This is the main mtt programme ################################ @@ -1806,22 +1832,36 @@ # Cancel implicit rules I don't want %.dvi: %.tex # MTT implicit rules ## .oct files -ifneq ($2,ode2odes) -%.oct: %.cc $1_def.h $1_sympar.h $1_cr.h - echo Creating $1_$2.oct; $MKOCTFILE $< -endif +$1_%.oct: $1_%.cc $1_def.h $1_sympar.h $1_cr.h + echo Creating $1_\$*.oct; $MKOCTFILE $1_\$*.cc +.PRECIOUS: mtt_%.oct +mtt_%.oct: mtt_%.cc + echo Compiling \$< + ${MKOCTFILE} $define_octave_dev \$< ## .cc files .PRECIOUS: %.cc # Don't let mtt delete them -ifneq ($2,ode2odes) -%.cc: %.m - mtt_m2cc.sh $1 $2 cat -endif +$1_%.cc: $1_%.m + mtt_m2cc.sh $1 \$* cat + +mtt_%.cc: ${MTT_LIB}/cc/mtt_%.cc + cp ${MTT_LIB}/cc/mtt_\$*.cc mtt_\$*.cc + +## .o files +.PRECIOUS: $1_%.o +$1_%.o: $1_%.cc $1_def.h $1_sympar.h $1_cr.h + echo Compiling $1_\$*.cc + ${MTT_CXX} ${MTT_CXXFLAGS} ${MTT_CXXINCS} -c $< -DSTANDALONE + +.PRECIOUS: mtt_%.o +mtt_%.o: mtt_%.cc + echo Compiling mtt_\$*.cc + ${MTT_CXX} ${MTT_CXXFLAGS} ${MTT_CXXINCS} -c $< -DSTANDALONE $define_octave_dev # Generates code to write reduce code $1_ode_write.r: $1_def.m def2write_r $1 $2 @@ -2010,53 +2050,74 @@ $1_simpar.m: $1_simpar.txt $1_def.r $1_sympar.txt mtt_txt2m $1 simpar #SUMMARY numpar numerical parameter declaration -- default (txt) -$1_numpar.txt : FORCE - mtt -q $1 sympar txt - mtt -q $1 def r +$1_numpar.txt : $1_sympar.txt $1_def.r ifeq ($target,$1_numpar.txt) mtt_update $1 numpar update else mtt_update $1 numpar endif #SUMMARY state numerical state declaration -- default (txt) -$1_state.txt : FORCE - mtt -q $1 struc txt - mtt -q $1 sympar txt - mtt -q $1 def r +$1_state.txt : $1_struc.txt $1_sympar.txt $1_def.r ifeq ($target,$1_state.txt) mtt_update $1 state update else mtt_update $1 state endif #SUMMARY input numerical state declaration -- default (txt) -$1_input.txt : FORCE - mtt -q $1 struc txt - mtt -q $1 sympar txt +$1_input.txt : $1_struc.txt $1_sympar.txt ifeq ($target,$1_input.txt) mtt_update $1 input update else mtt_update $1 input endif #SUMMARY logic Dynamic switch logic (txt) -$1_logic.txt : FORCE - mtt -q $1 def r - mtt -q $1 struc txt - mtt -q $1 sympar txt +$1_logic.txt : $1_def.r $1_struc.txt $1_sympar.txt ifeq ($target,$1_logic.txt) mtt_update $1 logic update else mtt_update $1 logic endif # Dummy target FORCE: + +$1_ode2odes_common.m : $1_input.m $1_logic.m $1_numpar.m $1_simpar.m $1_state.m + @echo > /dev/null +$1_ode2odes_common.cc : $1_input.cc $1_logic.cc $1_numpar.cc $1_simpar.cc $1_state.cc + @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_ode.m $1_odeo.m + @echo > /dev/null +$1_ode2odes_euler.cc : $1_ode.cc $1_odeo.cc + @echo > /dev/null +$1_ode2odes_euler.o : $1_ode.o $1_odeo.o mtt_euler.o + @echo "Creating $1_ode2odes_euler.o" + 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 + @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 + #SUMMARY numpar numerical parameter declaration (m) $1_numpar.m: $1_numpar.txt $1_sympars.txt mtt_txt2m $1 numpar @@ -2198,11 +2259,11 @@ struc_txt2tex $1 $1_struc.m: $1_struc.txt struc_txt2m $1 $1_def.m: $1_def.r def_r2m $1; matlab_tidy $1_def.m; -$1_def.h: $1_def.m +$1_def.h: $1_def.m $1_sympar.txt def_m2h.sh $1 #SUMMARY rdae raw differential-algebraic equations (r) #SUMMARY dae differential-algebraic equations (r) #SUMMARY dae* differential-algebraic equations (m) @@ -2346,49 +2407,55 @@ $1_ode2odes.m : $1_def.r $1_sympars.txt \ $1_smxa.m $1_smxax.m\ $1_simpar.m $1_numpar.m $1_state.m $1_input.m \ $1_csex.m $1_cseo.m $1_logic.m ifeq ($using_oct,yes) - mtt $mtt_switches -q -u $1 smxa oct - mtt $mtt_switches -q -u $1 smxax oct - mtt $mtt_switches -q -u $1 simpar oct - mtt $mtt_switches -q -u $1 numpar oct - mtt $mtt_switches -q -u $1 state oct - mtt $mtt_switches -q -u $1 input oct - mtt $mtt_switches -q -u $1 csex oct - mtt $mtt_switches -q -u $1 cseo oct - mtt $mtt_switches -q -u $1 logic oct - make_ode2odes $1 cc $integration_method - echo Creating $1_ode2odes.oct - mkoctfile $1_ode2odes.cc 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 ifeq ($integration_method,euler) $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) - mtt $mtt_switches -q -u $1 simpar oct - mtt $mtt_switches -q -u $1 numpar oct - mtt $mtt_switches -q -u $1 state oct - mtt $mtt_switches -q -u $1 input oct - mtt $mtt_switches -q -u $1 ode oct - mtt $mtt_switches -q -u $1 odeo oct - mtt $mtt_switches -q -u $1 logic oct - make_ode2odes $1 cc $integration_method - echo Creating $1_ode2odes.oct - mkoctfile $1_ode2odes.cc + 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 else make_ode2odes $1 m $integration_method endif endif +#SUMMARY ode2odes Simulation function (m) +#SUMMARY ode2odes Simulation function (cc) +#SUMMARY ode2odes Simulation function (oct) +#SUMMARY ode2odes Simulation function (exe) +$1_ode2odes.exe: $1_def.h $1_sympar.h\ + $1_ode2odes.o $1_ode2odes_common.o $1_ode2odes_${integration_method}.o + echo Creating $1_ode2odes.exe + ${MTT_CXX} ${MTT_CXXFLAGS} -o $1_ode2odes.exe\ + $1_ode2odes.o $1_ode2odes_common.o $1_ode2odes_${integration_method}.o\ + ${MTT_LDFLAGS} ${MTT_CXXLIBS} + +$1_ode2odes.o: $1_ode2odes.cc $1_ode2odes_common.o $1_ode2odes_${integration_method}.o + echo Creating $1_ode2odes.o + ${MTT_CXX} ${MTT_CXXFLAGS} ${MTT_CXXINCS} -c $1_ode2odes.cc -DSTANDALONE + +$1_ode2odes.oct: $1_ode2odes.cc $1_ode2odes_common.oct $1_ode2odes_${integration_method}.oct + touch $1_ode2odes.m + echo Creating $1_ode2odes.oct + $MKOCTFILE $1_ode2odes.cc + +$1_ode2odes.cc: $1_def.r $1_sympars.txt\ + $1_ode2odes_common.m $1_ode2odes_common.cc\ + $1_ode2odes_${integration_method}.m $1_ode2odes_${integration_method}.cc + touch $1_ode2odes.m + make_ode2odes $1 cc $integration_method #Conversion of m to p to c #SUMMARY ode ordinary differential equations (c) #SUMMARY ode ordinary differential equations (p) #SUMMARY state state declaration (c) @@ -2730,12 +2797,17 @@ ode2odes_r2c $1 $1_sms.c: $1_sm.c $1_def.r $1_sympar.r sm2sms_r2c $1 ifeq ($computation,octave) +ifeq ($using_oct,yes) +$1_odes.dat2: $1_ode2odes.oct + time octave_ode2odes $1 +else $1_odes.dat2: $1_ode2odes.m time octave_ode2odes $1 +endif endif ifeq ($computation,c) $1_ode2odes.out: $1_ode2odes.c echo Creating $1_odes.out Index: mttroot/mtt/bin/mttrc ================================================================== --- mttroot/mtt/bin/mttrc +++ mttroot/mtt/bin/mttrc @@ -13,10 +13,20 @@ ############################################################### ## Version control history ############################################################### ## $Id$ ## $Log$ +## Revision 1.17.2.2 2001/02/23 03:53:53 geraint +## Minor revisions. (ode2odes.exe works on GNU/Linux and ~GNU/Irix) +## +## Revision 1.17.2.1 2001/02/22 06:41:40 geraint +## Initial merge of ode2odes.exe into main mtt. +## standalone_rep.make deleted: rules moved to mtt, variables to mttrc. +## +## Revision 1.17 2000/12/27 16:46:13 peterg +## Stripped the mtt- from paths +## ## Revision 1.16 2000/12/27 15:16:44 peterg ## If then else format ## ## Revision 1.15 2000/12/27 14:57:43 peterg ## Now takes the base path as an argument @@ -132,6 +142,46 @@ # Ascend stuff export ASCENDLIBRARY=$MTTPATH/ascend/lib # Oct file generation - use version with no optimisation. export MKOCTFILE=$MTT_LIB/octave/mkoctfile + + # ode2odes.exe stuff + + # local system + + PLAT="i686-pc-linux-gnu" + PREFIX="/usr/local" + GCCVERS="2.95.2" + SRCOCTAVE="/cvs/octave" + +# PLAT="mips-sgi-irix6.5" +# PREFIX="/usr/people/bevangp/GNU" +# GCCVERS="2.95.2" +# SRCOCTAVE="${PREFIX}/../build/octave-2.1.33" + + # include paths + + IOCTAVE="-I${PREFIX}/include/octave" + + # library paths + + LOCTAVE="-L${PREFIX}/lib/octave -loctave -lcruft -loctinterp" + LKPATHSEA="-L${SRCOCTAVE}/kpathsea -lkpathsea" + LREADLINE=" -L${SRCOCTAVE}/readline -lreadline" + LSYSTEM="-ldl -lm -lncurses" + LF2C="-L${PREFIX}/lib/gcc-lib/${PLAT}/${GCCVERS} -lg2c" + + # compiler options + + DEBUG="-g" + OPTIM="-O3" + FLAGS="-fno-rtti -fno-exceptions -fno-implicit-templates" + + # exported variables + + export MTT_CXX="g++" + export MTT_CXXFLAGS="${DEBUG} ${OPTIM} ${FLAGS}" + export MTT_CXXLIBS="${LOCTAVE} ${LKPATHSEA} ${LREADLINE} ${LF2C} ${LSYSTEM}" + export MTT_CXXINCS="-I. ${IOCTAVE}" + export MTT_LDFLAGS="" fi Index: mttroot/mtt/bin/trans/m/args2arg.m ================================================================== --- mttroot/mtt/bin/trans/m/args2arg.m +++ mttroot/mtt/bin/trans/m/args2arg.m @@ -26,6 +26,28 @@ % Field separator if nargin<3 FS = ';'; end; + +arg = ''; +if strcmp(args, '')==0 + L = length(args); + args_count = 0; + for i=1:n + arg_count = 0; + arg = ''; + if args_count == L + break; + end; + while args_count < L + args_count = args_count+1; + arg_count = arg_count+1; + ch = str2ch(args,args_count); + if ch==FS + break; + end; + arg = [arg ch]; + end; + end; +end; Index: mttroot/mtt/bin/trans/make_ode2odes ================================================================== --- mttroot/mtt/bin/trans/make_ode2odes +++ mttroot/mtt/bin/trans/make_ode2odes @@ -7,10 +7,16 @@ ############################################################### ## Version control history ############################################################### ## $Id$ ## $Log$ +## Revision 1.51.2.1 2001/03/01 05:05:53 geraint +## Minor revisions. +## +## Revision 1.51 2001/02/19 06:33:19 geraint +## Removed operation form loop. +## ## Revision 1.50 2001/02/18 09:18:49 geraint ## Removed temporary Matrices from mtt_implicit.cc ## ## Revision 1.49 2001/02/14 06:06:34 geraint ## Removed octave_value_list wrappers from standalone.exe - speed improvements @@ -280,11 +286,11 @@ fi cat < $filename #include #include -#include +#include #include #include #ifndef STANDALONE #include @@ -292,25 +298,30 @@ #include "${sys}_def.h" #include "${sys}_sympar.h" #ifdef STANDALONE -extern ColumnVector Fmtt_euler ( - ColumnVector &x, - const ColumnVector &dx, - const double &ddt, - const int &nx, - const ColumnVector &open_switches); - -extern ColumnVector Fmtt_implicit ( - ColumnVector &x, - ColumnVector &dx, - Matrix &AA, - ColumnVector &AAx, - const double &ddt, - const int &nx, - const ColumnVector &open_switches); +extern ColumnVector F${sys}_input ( + ColumnVector &x, + ColumnVector &y, + const double &t, + ColumnVector &par); + +extern ColumnVector F${sys}_logic ( + ColumnVector &x, + ColumnVector &u, + const double &t, + ColumnVector &par); + +extern ColumnVector F${sys}_numpar ( + void); + +extern Octave_map F${sys}_simpar ( + void); + +extern ColumnVector F${sys}_state ( + ColumnVector &x); extern ColumnVector F${sys}_${ode} ( ColumnVector &x, ColumnVector &u, const double &t, @@ -320,21 +331,31 @@ ColumnVector &x, ColumnVector &u, const double &t, ColumnVector &par); -extern ColumnVector F${sys}_input ( +EOF +if [ "$method" != "implicit" ]; then +cat <> $filename +extern ColumnVector Fmtt_euler ( + ColumnVector &x, + const ColumnVector &dx, + const double &ddt, + const int &nx, + const ColumnVector &open_switches); + +EOF +else +cat <> $filename +extern ColumnVector Fmtt_implicit ( ColumnVector &x, - ColumnVector &y, - const double &t, - ColumnVector &par); - -extern ColumnVector F${sys}_numpar ( - void); - -extern Octave_map F${sys}_simpar ( - void); + ColumnVector &dx, + Matrix &AA, + ColumnVector &AAx, + const double &ddt, + const int &nx, + const ColumnVector &open_switches); extern Matrix F${sys}_smxa ( ColumnVector &x, ColumnVector &u, const double &t, @@ -344,20 +365,98 @@ ColumnVector &x, ColumnVector &u, const double &t, ColumnVector &par); -extern ColumnVector F${sys}_state ( - ColumnVector &x); - -extern ColumnVector F${sys}_logic ( - ColumnVector &x, - ColumnVector &u, - const double &t, - ColumnVector &par); +EOF +fi +cat <> $filename #endif // STANDALONE + +inline ColumnVector +mtt_input (ColumnVector &x, + ColumnVector &y, + const double &t, + ColumnVector &par) +{ +#ifdef STANDALONE + return F${sys}_input (x, y, t, par); +#else + static octave_value_list args, f; + args (0) = octave_value (x); + args (1) = octave_value (y); + args (2) = octave_value (t); + args (3) = octave_value (par); + f = feval ("${sys}_input", args, 1); + return f(0).${vector_value} (); +#endif +} + +inline ColumnVector +mtt_logic (ColumnVector &x, + ColumnVector &u, + const double &t, + ColumnVector &par) +{ +#ifdef STANDALONE + return F${sys}_logic (x, u, t, par); +#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); + f = feval ("${sys}_logic", args, 1); + return f(0).${vector_value} (); +#endif +} + +inline ColumnVector +mtt_numpar (void) +{ +#ifdef STANDALONE + 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 + static octave_value_list args; + static Octave_map f; + f["first"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["first"]; + f["dt"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["dt"]; + f["last"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["last"]; + f["stepfactor"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["stepfactor"]; + f["wmin"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["wmin"]; + f["wmax"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["wmax"]; + f["wsteps"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["wsteps"]; + f["input"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["input"]; + return (f); +#endif +} + +inline ColumnVector +mtt_state (ColumnVector &x) +{ +#ifdef STANDALONE + return F${sys}_state (x); +#else + static octave_value_list args, f; + args (0) = octave_value (x); + f = feval ("${sys}_state", args, 1); + return f(0).${vector_value} (); +#endif +} inline ColumnVector mtt_${ode} (ColumnVector &x, ColumnVector &u, const double &t, @@ -393,10 +492,37 @@ f = feval ("${sys}_${odeo}", args, 1); return f(0).${vector_value} (); #endif } +EOF +if [ "$method" != "implicit" ];then +cat <> $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 +else +cat <> $filename inline ColumnVector mtt_implicit (ColumnVector &x, ColumnVector &dx, Matrix &AA, ColumnVector &AAx, @@ -418,82 +544,10 @@ f = feval ("mtt_implicit", args, 1); return f(0).${vector_value} (); #endif } -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 -} - -inline ColumnVector -mtt_input (ColumnVector &x, - ColumnVector &y, - const double &t, - ColumnVector &par) -{ -#ifdef STANDALONE - return F${sys}_input (x, y, t, par); -#else - static octave_value_list args, f; - args (0) = octave_value (x); - args (1) = octave_value (y); - args (2) = octave_value (t); - args (3) = octave_value (par); - f = feval ("${sys}_input", args, 1); - return f(0).${vector_value} (); -#endif -} - -inline ColumnVector -mtt_numpar (void) -{ -#ifdef STANDALONE - 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 - static octave_value_list args; - static Octave_map f; - f["first"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["first"]; - f["dt"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["dt"]; - f["last"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["last"]; - f["stepfactor"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["stepfactor"]; - f["wmin"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["wmin"]; - f["wmax"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["wmax"]; - f["wsteps"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["wsteps"]; - f["input"] = feval ("${sys}_simpar", args, 1)(0).map_value ()["input"]; - return (f); -#endif -} - inline Matrix mtt_smxa (ColumnVector &x, ColumnVector &u, const double &t, ColumnVector &par) @@ -528,42 +582,13 @@ f = feval ("${sys}_smxax", args, 1); return f(0).${vector_value} (); #endif } -inline ColumnVector -mtt_state (ColumnVector &x) -{ -#ifdef STANDALONE - return F${sys}_state (x); -#else - static octave_value_list args, f; - args (0) = octave_value (x); - f = feval ("${sys}_state", args, 1); - return f(0).${vector_value} (); -#endif -} - -inline ColumnVector -mtt_logic (ColumnVector &x, - ColumnVector &u, - const double &t, - ColumnVector &par) -{ -#ifdef STANDALONE - return F${sys}_logic (x, u, t, par); -#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); - f = feval ("${sys}_logic", args, 1); - return f(0).${vector_value} (); -#endif -} - +EOF +fi +cat <> $filename inline void mtt_write (const double &t, ColumnVector &x, ColumnVector &y, @@ -585,23 +610,25 @@ data.elem (row, ++col) = x.elem (i); row++; if (nrows == row) + { #ifdef STANDALONE - cout << data << endl; + save_ascii_data_for_plotting (cout, data, "MTT_data"); +// cout << data << endl; #else // ! STANDALONE set_global_value ("MTT_data", data); #endif - + } } #ifdef STANDALONE int main (void) { #else DEFUN_DLD (${sys}_ode2odes, args, , -"Octave ode2odes representation of system +"Octave ode2odes representation of system with $method integration method Usage: ${sys}_ode2odes (x, par, simpar) ") { static octave_value_list retval; #endif // STANDALONE @@ -669,10 +696,15 @@ register double t = 0.0; const double ddt = dt / stepfactor; const int ilast = static_cast (round ((last - first) / ddt)) + 1; const int nrows = static_cast (round ((last - first) / dt)) + 1; + + for (register int i = 0; i < MTTNU; i++) + { + u (i) = 0.0; + } for (register int j = 0, i = 1; i <= ilast; i++) { y = mtt_${odeo} (x, u, t, par); u = mtt_input (x, y, t, par); Index: mttroot/mtt/cc/include/useful-functions.hh ================================================================== --- mttroot/mtt/cc/include/useful-functions.hh +++ mttroot/mtt/cc/include/useful-functions.hh @@ -1,26 +1,48 @@ - -template -inline T max (const T &x1, const T &x2) -{ - return (x1 >= x2) ? x1 : (x2 < x1) ? x2 : 0; -} - -template -inline T min (const T &x1, const T &x2) -{ - return (x1 <= x2) ? x1 : (x2 > x1) ? x2 : 0; +#ifndef HAVE_USEFUL_FUNCTIONS_HH +#define HAVE_USEFUL_FUNCTIONS_HH + + +#ifdef __CPLUSPLUS +template +#else +#define inline // strip from pre-processed file +#define class_t double +#endif // __CPLUSPLUS + + +// == Template functions == + +static inline class_t +max (const class_t &x1, const class_t &x2) +{ + return ((x1 >= x2) ? x1 : (x1 < x2) ? x2 : 0); +} + +static inline class_t +min (const class_t &x1, const class_t &x2) +{ + return ((x1 <= x2) ? x1 : (x1 > x2) ? x2 : 0); +} + +static inline class_t +sign (const class_t &x) +{ + return ((x > 0) ? +1 : (x < 0) ? -1 : 0); } -inline Matrix + +// == Octave functions == + +static inline Matrix ones (const int r = 1, const int c = 1) { Matrix m (r, c, 1.0); return m; } -inline ColumnVector +static inline ColumnVector nozeros (const ColumnVector v0, const double tol = 0.0) { ColumnVector v (v0.length ()); register int i, j; for (i = j = 0; i < v.length (); i++) @@ -37,28 +59,20 @@ { return (v.extract (0, --j)); } } -inline ColumnVector +static inline ColumnVector zeros (const int r) { ColumnVector v (r, 0.0); return v; } -inline Matrix +static inline Matrix zeros (const int r, const int c) { Matrix m (r, c, 0.0); return m; } -template -inline int -sign (T x) -{ - return - (0 < x) ? +1 : - (0 > x) ? -1 : - 0; -} +#endif // HAVE_USEFUL_FUNCTIONS_HH Index: mttroot/mtt/lib/cc/mtt_implicit.cc ================================================================== --- mttroot/mtt/lib/cc/mtt_implicit.cc +++ mttroot/mtt/lib/cc/mtt_implicit.cc @@ -14,47 +14,48 @@ DEFUN_DLD (mtt_implicit, args, , "implicit integration method") { #ifdef OCTAVE_DEV static ColumnVector x = args(0).column_vector_value (); - const ColumnVector dx = args(1).column_vector_value (); - const Matrix AA = args(2).matrix_value (); - const ColumnVector AAx = args(3).column_vector_value (); - const double t = args(4).double_value (); - const int Nx = (int) (args(5).double_value ()); - const ColumnVector openx = args(6).column_vector_value (); + static ColumnVector dx = args(1).column_vector_value (); + static Matrix AA = args(2).matrix_value (); + static ColumnVector AAx = args(3).column_vector_value (); + const double t = args(4).double_value (); + const int Nx = (int) (args(5).double_value ()); + const ColumnVector openx = args(6).column_vector_value (); #else // !OCTAVE_DEV static ColumnVector x = args(0).vector_value (); - const ColumnVector dx = args(1).vector_value (); - const Matrix AA = args(2).matrix_value (); - const ColumnVector AAx = args(3).vector_value (); - const double t = args(4).double_value (); - const int Nx = (int) (args(5).double_value ()); - const ColumnVector openx = args(6).vector_value (); + static ColumnVector dx = args(1).vector_value (); + static Matrix AA = args(2).matrix_value (); + static ColumnVector AAx = args(3).vector_value (); + const double t = args(4).double_value (); + const int Nx = (int) (args(5).double_value ()); + const ColumnVector openx = args(6).vector_value (); #endif // OCTAVE_DEV #endif // STANDALONE register int row, col; for (row = 0; row < Nx; row++) { - if (0 != openx (row)) + if (openx (row) > 0.5) { AAx (row) = 0.0; dx (row) = 0.0; for (col = 0; col < Nx; col++) { AA (row,col) = 0.0; + AA (col,row) = 0.0; } } } x = static_cast (xleftdiv (AA, static_cast(AAx + dx * t))); for (row = 0; row < Nx; row++) { - if (0 != openx (row)) + if (openx (row) > 0.5) { x (row) = 0.0; } } DELETED mttroot/mtt/lib/rep/standalone_rep.make Index: mttroot/mtt/lib/rep/standalone_rep.make ================================================================== --- mttroot/mtt/lib/rep/standalone_rep.make +++ /dev/null @@ -1,59 +0,0 @@ -# -*-makefile-*- - -.POSIX: - -MTTFLAGS = -q -u -oct $(OPTS) - -# Adapt according to local set-up and mkoctfile -CXX = g++ -CXXFLAGS = $(DEBUG) $(OPTIM) $(DEFINES) $(ARCHFLAGS) -fno-rtti -fno-exceptions -fno-implicit-templates - -DEBUG = -g -OPTIM = -O3 - -PREFIX = /usr/local - -INCLUDES = -I$(PREFIX)/include/octave - -OCTAVE_SRC_PATH = /cvs/octave - -LIBOCTAVE = -L$(PREFIX)/lib/octave -loctave -lcruft -loctinterp -LIBKPATHSEA = -L$(OCTAVE_SRC_PATH)/kpathsea -lkpathsea -LIBREADLINE = -L$(OCTAVE_SRC_PATH)/readline -lreadline -#LIBBLAS = -L/usr/local/src/ATLAS/lib/Linux_PIII -lcblas -lf77blas -llapack -latlas -ltstatlas -#LIBBLAS = -lblas -llapack -LIBF2C = -lg2c -LIBRARIES = -ldl -lm -lncurses - -ARCHFLAGS = $(i386FLAGS) -i386FLAGS = -mieee-fp - -# Define -DOCTAVE_DEV for octave 2.1.x -ifeq (0, $(shell octave --version | awk -F\. '{print $2}')) -DEFINES = -DSTANDALONE -else -DEFINES = -DSTANDALONE -DOCTAVE_DEV -endif - -all: $(SYS)_standalone.$(LANG) - -$(SYS)_standalone.exe: $(SYS)_ode2odes.cc $(SYS)_def.h $(SYS)_sympar.h - cp $(MTT_LIB)/cc/*.cc . - echo Creating $(SYS)_standalone.exe - $(CXX) *.cc -o $@ $(CXXFLAGS) $(INCLUDES) $(LIBOCTAVE) $(LIBKPATHSEA) $(LIBREADLINE) $(LIBBLAS) $(LIBF2C) $(LIBRARIES) - -.PHONY: $(SYS)_standalone.clean - -$(SYS)_ode2odes.cc: - mtt $(MTTFLAGS) $(SYS) ode2odes m - -$(SYS)_def.h: - mtt $(MTTFLAGS) $(SYS) def h - -$(SYS)_sympar.h: - mtt $(MTTFLAGS) $(SYS) sympar h - - -$(SYS)_standalone.clean: - cd .. ; mtt Clean - rm -f ../$(SYS)_standalone.exe