Mercurial > octave
diff liboctave/numeric/LSODE-opts.in @ 31249:de6fc38c78c6
Make Jacobian types offered by dlsode.f accessible by lsode (bug #31626).
* liboctave/numeric/LSODE-opts.in: Add options "jacobian type", "lower jacobian
subdiagonals", and "upper jacobian subdiagonals".
* liboctave/numeric/LSODE.cc (file scope, lsode_j,
LSODE::do_integrate (double)): Handle new configurable Jacobian types.
* build-aux/mk-opts.pl: Don't implicitly convert to integer in condition.
author | Olaf Till <olaf.till@uni-jena.de> |
---|---|
date | Fri, 12 Nov 2010 08:53:05 +0100 |
parents | 796f54d4ddbf |
children | a40c0b7aa376 |
line wrap: on
line diff
--- a/liboctave/numeric/LSODE-opts.in Thu Sep 29 23:09:05 2022 -0400 +++ b/liboctave/numeric/LSODE-opts.in Fri Nov 12 08:53:05 2010 +0100 @@ -164,3 +164,67 @@ INIT_VALUE = "100000" SET_EXPR = "val" END_OPTION + +OPTION + NAME = "jacobian type" + DOC_ITEM +A string specifying the type of Jacobian used with the stiff backward +differentiation formula (BDF) integration method. Valid values are + +@table @asis +@item @qcode{"full"} +The default. All partial derivatives are approximated or used from the +user-supplied Jacobian function. + +@item @qcode{"banded"} +Only the diagonal and the number of lower and upper subdiagonals specified by +the options @qcode{"lower jacobian subdiagonals"} and @qcode{"upper jacobian +subdiagonals"}, respectively, are approximated or used from the user-supplied +Jacobian function. A user-supplied Jacobian function may set all other +partial derivatives to arbitrary values. + +@item @qcode{"diagonal"} +If a Jacobian function is supplied by the user, this setting has no effect. +A Jacobian approximated by @code{lsode} is restricted to the diagonal, where +each partial derivative is computed by applying a finite change to all +elements of the state together; if the real Jacobian is indeed always diagonal, +this has the same effect as applying the finite change only to the respective +element of the state, but is more efficient. +@end table + + END_DOC_ITEM + TYPE = "std::string" + SET_ARG_TYPE = "const $TYPE&" + INIT_VALUE = ""full"" + SET_BODY + if (val == "full" || val == "banded" || val == "diagonal") + $OPTVAR = val; + else + (*current_liboctave_error_handler) + ("lsode_options: jacobian type must be \"full\", \"banded\", or \"diagonal\""); + END_SET_BODY +END_OPTION + +OPTION + NAME = "lower jacobian subdiagonals" + DOC_ITEM +Number of lower subdiagonals used if option @qcode{"jacobian type"} is set to +@qcode{"banded"}. The default is zero. + + END_DOC_ITEM + TYPE = "octave_idx_type" + INIT_VALUE = "0" + SET_EXPR = "val" +END_OPTION + +OPTION + NAME = "upper jacobian subdiagonals" + DOC_ITEM +Number of upper subdiagonals used if option @qcode{"jacobian type"} is set to +@qcode{"banded"}. The default is zero. + + END_DOC_ITEM + TYPE = "octave_idx_type" + INIT_VALUE = "0" + SET_EXPR = "val" +END_OPTION