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