Fixing stupid bug introduced in issymmetric, workaround bug in optimalworkspace query...
Bernard HUGUENEY [Thu, 16 Apr 2009 13:31:25 +0000 (15:31 +0200)]
scilab/modules/linear_algebra/sci_gateway/c/sci_eig.c
scilab/modules/linear_algebra/src/c/eigen.c
scilab/modules/linear_algebra/src/c/issymmetric.c

index 7425c73..ba343c9 100644 (file)
@@ -117,7 +117,7 @@ int C2F(inteig)(char *fname,unsigned long fname_len)
                       ? C2F(vfiniteComplex)(&totalSize, pData) 
                       : C2F(vfinite)(&totalSize, pDataReal)))
                  {
-                   SciError(264);
+                   Scierror(264,_("Wrong value for argument %d: Must not contain NaN or Inf.\n"),1);
                    return 0;
                  }
                if( (symmetric=C2F(issymmetric)(&Rhs) ) )
@@ -308,7 +308,7 @@ int C2F(inteig)(char *fname,unsigned long fname_len)
                                      ? C2F(vfiniteComplex)(&totalSize, pData[i]) 
                                      : C2F(vfinite)(&totalSize, pDataReal[i]) ) )))
                    {/* /!\ reusing error msg, but could be more explicit ny being prefixed by %s for fname */
-                     Scierror(999,_("Wrong value for argument %d: Must not contain NaN or Inf.\n"),i+1);
+                     Scierror(264, _("Wrong value for argument %d: Must not contain NaN or Inf.\n"),i+1);
                    }
                }
              if(!inf)
index 3245335..0de5822 100644 (file)
@@ -116,9 +116,12 @@ static int dgeevWorkSizes(int iCols, int lhs, int* optWorkSize, int* minWorkSize
 {
   int info=0, query=-1;
   double opt;
-  C2F(dgeev)("N", "N", &iCols, NULL, &iCols, NULL, NULL, NULL, &iCols, NULL, &iCols, &opt, &query, &info);
-  *optWorkSize= (int)opt;
+  /* cet appel de routine Fortran √©crase des valeurs dans la pile ! notamment celles des this call to the Fortran routine trashes the stack !!! including arguments xxxWorkSize /!\ TODO investigate 
+    C2F(dgeev)("N", "N", &iCols, NULL, &iCols, NULL, NULL, NULL, &iCols, NULL, &iCols, &opt, &query, &info);
+    *optWorkSize= (int)opt;
+    */
   *minWorkSize= (lhs==2) ? Max(1, 4* iCols) : Max(1, 3*iCols);
+  *optWorkSize= *minWorkSize;
   return info;
 }
 
index e01de0f..7ec1bb8 100644 (file)
@@ -62,7 +62,7 @@ int C2F(issymmetric)(int *stackPosition) {
     return(NOT_SYMMETRIC);
   }
 
-  if (!iIsComplex(intAddress)) {
+  if (!iIsComplex(*stackPosition)) {
     /*
     ** REAL Case.
     */