changeset 4144:b02ada83de67

[project @ 2002-11-01 18:03:56 by jwe]
author jwe
date Fri, 01 Nov 2002 18:03:56 +0000
parents 62afb31c1f85
children dd311d514ffd
files liboctave/ChangeLog liboctave/DASPK.cc src/DLD-FUNCTIONS/daspk.cc src/DLD-FUNCTIONS/fsolve.cc
diffstat 4 files changed, 51 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/ChangeLog
+++ b/liboctave/ChangeLog
@@ -1,5 +1,10 @@
 2002-11-01  John W. Eaton  <jwe@bevo.che.wisc.edu>
 
+	* DASPK.cc (DASPK::do_integrate): Resize rwork and iwork before
+	using them.  Accept inequality contraint option of 0.  Assign
+	pabs_tol and prel_tol before calling DASPK.  Don't redeclare
+	abs_tol and rel_tol.
+
 	* cmd-edit.h (command_editor::filename_completion_desired): New
 	static function.
 	(command_editor::do_filename_completion_desired): New virtual function.
--- a/liboctave/DASPK.cc
+++ b/liboctave/DASPK.cc
@@ -203,10 +203,32 @@
 
       DAEFunc::reset = false;
 
+      int eiq = enforce_inequality_constraints ();
+      int ccic = compute_consistent_initial_condition ();
+      int eavfet = exclude_algebraic_variables_from_error_test ();
+
+      liw = 40 + n;
+      if (eiq == 1 || eiq == 3)
+	liw += n;
+      if (ccic == 1 || eavfet == 1)
+	liw += n;
+
+      lrw = 50 + 9*n;
+      if (! user_jac)
+	lrw += n*n;
+      if (eavfet == 1)
+	lrw += n;
+
+      iwork.resize (liw);
+      rwork.resize (lrw);
+
+      piwork = iwork.fortran_vec ();
+      prwork = rwork.fortran_vec ();
+
       // DASPK_options
 
-      Array<double> abs_tol = absolute_tolerance ();
-      Array<double> rel_tol = relative_tolerance ();
+      abs_tol = absolute_tolerance ();
+      rel_tol = relative_tolerance ();
 
       int abs_tol_len = abs_tol.length ();
       int rel_tol_len = rel_tol.length ();
@@ -228,6 +250,9 @@
 	  return retval;
 	}
 
+      pabs_tol = abs_tol.fortran_vec ();
+      prel_tol = rel_tol.fortran_vec ();
+
       double hmax = maximum_step_size ();
       if (hmax >= 0.0)
 	{
@@ -263,7 +288,6 @@
 	    }
 	}
 
-      int eiq = enforce_inequality_constraints ();
       switch (eiq)
 	{
 	case 1:
@@ -296,6 +320,7 @@
 	  }
 	  // Fall through...
 
+	case 0:
 	case 2:
 	  info(9) = eiq;
 	  break;
@@ -307,7 +332,6 @@
 	  return retval;
 	}
 
-      int ccic = compute_consistent_initial_condition ();
       if (ccic)
 	{
 	  if (ccic == 1)
@@ -348,7 +372,6 @@
 	  info(10) = ccic;
 	}
 
-      int eavfet = exclude_algebraic_variables_from_error_test ();
       if (eavfet)
 	{
 	  info(15) = 1;
@@ -416,24 +439,6 @@
 
       DASPK_options::reset = false;
 
-      liw = 40 + n;
-      if (eiq == 1 || eiq == 3)
-	liw += n;
-      if (ccic == 1 || eavfet == 1)
-	liw += n;
-
-      lrw = 50 + 9*n;
-      if (! user_jac)
-	lrw += n*n;
-      if (eavfet == 1)
-	lrw += n;
-
-      iwork.resize (liw);
-      rwork.resize (lrw);
-
-      piwork = iwork.fortran_vec ();
-      prwork = rwork.fortran_vec ();
-
       restart = false;
     }
 
--- a/src/DLD-FUNCTIONS/daspk.cc
+++ b/src/DLD-FUNCTIONS/daspk.cc
@@ -266,7 +266,6 @@
 If @var{fcn} is a two-element string array, the first element names\n\
 the function @math{f} described above, and the second element names\n\
 a function to compute the modified Jacobian\n\
-\n\
 @tex\n\
 $$\n\
 J = {\\partial f \\over \\partial x}\n\
@@ -274,12 +273,12 @@
 $$\n\
 @end tex\n\
 @ifinfo\n\
+\n\
+@example\n\
       df       df\n\
 jac = -- + c ------\n\
       dx     d xdot\n\
-@example\n\
 @end example\n\
-\n\
 @end ifinfo\n\
 \n\
 The modified Jacobian function must have the form\n\
--- a/src/DLD-FUNCTIONS/fsolve.cc
+++ b/src/DLD-FUNCTIONS/fsolve.cc
@@ -219,6 +219,22 @@
 and an initial starting point @var{x0}, @code{fsolve} solves the set of\n\
 equations such that @code{f(@var{x}) == 0}.\n\
 \n\
+If @var{fcn} is a two-element string array, the first element names\n\
+the function @math{f} described above, and the second element names\n\
+a function of the form @code{j (@var{x})} to compute the Jacobian\n\
+matrix with elements\n\
+@tex\n\
+$$ J = {\\partial f_i \\over \\partial x_j} $$\n\
+@end tex\n\
+@ifinfo\n\
+\n\
+@example\n\
+      df_i
+jac = ----
+      dx_j
+@end example\n\
+@end ifinfo\n\
+\n\
 You can use the function @code{fsolve_options} to set optional\n\
 parameters for @code{fsolve}.\n\
 @end deftypefn")