diff liboctave/DASRT.cc @ 3991:48d2bc4a3729

[project @ 2002-07-16 17:46:50 by jwe]
author jwe
date Tue, 16 Jul 2002 17:46:51 +0000
parents 46388d6a4e44
children 53b4eab68976
line wrap: on
line diff
--- a/liboctave/DASRT.cc	Tue Jul 16 06:20:40 2002 +0000
+++ b/liboctave/DASRT.cc	Tue Jul 16 17:46:51 2002 +0000
@@ -45,10 +45,6 @@
 #include "utils.h"
 #include "variables.h"
 
-// For instantiating the Array<Matrix> object.
-#include "Array.h"
-#include "Array.cc"
-
 #include "DASRT.h"
 #include "f77-fcn.h"
 #include "lo-error.h"
@@ -57,23 +53,22 @@
 #define F77_FUNC(x, X) F77_FCN (x, X)
 #endif
 
+typedef int (*dasrt_fcn_ptr) (const double&, const double*, const double*,
+			      double*, int&, double*, int*);
+
+typedef int (*dasrt_jac_ptr) (const double&, const double*, const double*,
+			      double*, const double&, double*, int*);
+
+typedef int (*dasrt_constr_ptr) (const int&, const double&, const double*,
+				 const int&, double*, double*, int*);
+
 extern "C"
-{
-  int F77_FUNC (ddasrt, DASRT) (int (*)(const double&, double*, double*,
-					double*, int&, double*, int*),
-				const int&, const double&, double*, double*,
-				const double&, int*, double*, double*,
-				int&, double*, const int&, int*, 
-				const int&, double*, int*,
-				int (*)(const double&, double*,
-					double*, double*,
-					const double&, double*, int*),
-				int (*)(const int&, const double&, double*,
-					const int&, double*, double*, int*),
-				const int&, int*);
-}
-
-template class Array<Matrix>;
+int F77_FUNC (ddasrt, DASRT) (dasrt_fcn_ptr, const int&, double&,
+			      double*, double*, const double&, int*,
+			      double*, double*, int&, double*,
+			      const int&, int*, const int&, double*,
+			      int*, dasrt_jac_ptr, dasrt_constr_ptr,
+			      const int&, int*);
 
 static DAEFunc::DAERHSFunc user_fsub;
 static DAEFunc::DAEJacFunc user_jsub;
@@ -81,8 +76,8 @@
 static int nn;
 
 static int
-ddasrt_f (const double& t, double *state, double *deriv, double *delta,
-          int& ires, double *rpar, int *ipar)
+ddasrt_f (const double& t, const double *state, const double *deriv,
+	  double *delta, int& ires, double *rpar, int *ipar)
 {
   ColumnVector tmp_state (nn);
   for (int i = 0; i < nn; i++)
@@ -111,43 +106,33 @@
 
 //static efptr e_fun;
 
-static int
-ddasrt_j (const double& t, double *state, double *deriv,
-	  double *pdwork, const double& cj, double *rpar, int *ipar) 
+int
+ddasrt_j (const double& time, const double *state, const double *deriv,
+	  double *pd, const double& cj, double *, int *)
 {
-  ColumnVector tmp_state (nn);
-  for (int i = 0; i < nn; i++)
-    tmp_state(i) = state[i];
-
-  ColumnVector tmp_deriv (nn);
-  for (int i = 0; i < nn; i++)
-    tmp_deriv(i) = deriv[i];
+  // XXX FIXME XXX -- would be nice to avoid copying the data.
 
-  // XXX FIXME XXX
-
-  Matrix tmp_dfdxdot (nn, nn);
-  Matrix tmp_dfdx (nn, nn);
+  ColumnVector tmp_state (nn);
+  ColumnVector tmp_deriv (nn);
 
-  DAEFunc::DAEJac tmp_jac;
-  tmp_jac.dfdxdot = &tmp_dfdxdot;
-  tmp_jac.dfdx    = &tmp_dfdx;
+  for (int i = 0; i < nn; i++)
+    {
+      tmp_deriv.elem (i) = deriv [i];
+      tmp_state.elem (i) = state [i];
+    }
 
-  tmp_jac = user_jsub (tmp_state, tmp_deriv, t);
-
-  // Fix up the matrix of partial derivatives for dasrt.
-
-  tmp_dfdx = tmp_dfdx + cj * tmp_dfdxdot;
+  Matrix tmp_pd = user_jsub (tmp_state, tmp_deriv, time, cj);
 
   for (int j = 0; j < nn; j++)
     for (int i = 0; i < nn; i++)
-      pdwork[j*nn+i] = tmp_dfdx.elem (i, j);
+      pd [nn * j + i] = tmp_pd.elem (i, j);
 
   return 0;
 }
 
 static int
-ddasrt_g (const int& neq, const double& t, double *state, const int& ng,
-	  double *gout, double *rpar, int *ipar) 
+ddasrt_g (const int& neq, const double& t, const double *state,
+	  const int& ng, double *gout, double *rpar, int *ipar) 
 {
   int n = neq;