diff liboctave/dbleAEPBAL.cc @ 1933:333923894848

[project @ 1996-02-12 03:07:39 by jwe]
author jwe
date Mon, 12 Feb 1996 03:07:39 +0000
parents 1281a23a34dd
children 1b57120c997b
line wrap: on
line diff
--- a/liboctave/dbleAEPBAL.cc	Mon Feb 12 02:26:07 1996 +0000
+++ b/liboctave/dbleAEPBAL.cc	Mon Feb 12 03:07:39 1996 +0000
@@ -49,44 +49,47 @@
 int
 AEPBALANCE::init (const Matrix& a, const string& balance_job)
 {
-  int a_nc = a.cols ();
+  int n = a.cols ();
 
-  if (a.rows () != a_nc)
+  if (a.rows () != n)
     {
       (*current_liboctave_error_handler) ("AEPBALANCE requires square matrix");
       return -1;
     }
 
-  int n = a_nc;
-
-  // Parameters for balance call.
-
   int info;
   int ilo;
   int ihi;
-  double *scale = new double [n];
 
-  // Copy matrix into local structure.
+  Array<double> scale (n);
+  double *pscale = scale.fortran_vec ();
 
   balanced_mat = a;
-
-  char bal_job = balance_job[0];
+  double *p_balanced_mat = balanced_mat.fortran_vec ();
 
-  F77_FCN (dgebal, DGEBAL) (&bal_job, n,
-			    balanced_mat.fortran_vec (), n, ilo, ihi,
-			    scale, info, 1L, 1L);
+  char job = balance_job[0];
 
-  // Initialize balancing matrix to identity.
+  F77_XFCN (dgebal, DGEBAL, (&job, n, p_balanced_mat, n, ilo, ihi,
+			     pscale, info, 1L, 1L));
 
-  balancing_mat = Matrix (n, n, 0.0);
-  for (int i = 0; i < n; i++)
-    balancing_mat.elem (i ,i) = 1.0;
+  if (f77_exception_encountered)
+    (*current_liboctave_error_handler) ("unrecoverable error in dgebal");
+  else
+    {
+      balancing_mat = Matrix (n, n, 0.0);
+      for (int i = 0; i < n; i++)
+	balancing_mat.elem (i ,i) = 1.0;
 
-  F77_FCN (dgebak, DGEBAK) (&bal_job, "R", n, ilo, ihi, scale, n,
-			    balancing_mat.fortran_vec (), n, info, 1L,
-			    1L);
+      double *p_balancing_mat = balancing_mat.fortran_vec ();
+
+      char side = 'R';
 
-  delete [] scale;
+      F77_XFCN (dgebak, DGEBAK, (&job, &side, n, ilo, ihi, pscale, n,
+				 p_balancing_mat, n, info, 1L, 1L));
+
+      if (f77_exception_encountered)
+	(*current_liboctave_error_handler) ("unrecoverable error in dgebak");
+    }
 
   return info;
 }