intzgeesx.c File Reference

#include "stack-c.h"

Include dependency graph for intzgeesx.c:

Go to the source code of this file.

Defines

#define MAX(x, y)   (((x)>(y))?(x):(y))
#define MIN(x, y)   (((x)<(y))?(x):(y))

Functions

int intzgeesx (char *fname)


Define Documentation

#define MAX ( x,
y   )     (((x)>(y))?(x):(y))

Definition at line 9 of file intzgeesx.c.

#define MIN ( x,
y   )     (((x)<(y))?(x):(y))

Definition at line 10 of file intzgeesx.c.


Function Documentation

int intzgeesx ( char*  fname  ) 

Definition at line 19 of file intzgeesx.c.

References A, C2F, CheckLhs, CheckRhs, CheckSquare, CreateVar, errorinfo(), Errorinfo, GetRhsVar, L, Lhs, LhsVar, M, MAX, Maxvol, N, stk, WORK, and zstk.

00021 { 
00022   int A = 1, W = 2, VS = 3, RWORK = 4, WORK = 5;
00023   int M,N,lA;
00024   int NLHS;
00025   int lVS;
00026   int un=1; int lWORK, LWORKMIN, LWORK;
00027   int LDA, LDVS, lW, lRWORK;
00028   int INFO, SDIM, BWORK;
00029   double RCONDE,RCONDV;
00030   char *JOBVS;
00031 
00032 #ifndef WIN32
00033   extern select();
00034 #endif
00035 
00036   int IT=1;
00037 
00038   CheckRhs(1,1) ;  CheckLhs(1,3) ;
00039 
00040   /*--------------------A---------------------------*/
00041   GetRhsVar(A, "z", &M, &N, &lA); 
00042   CheckSquare(A, M, N);
00043   NLHS=Lhs;     LDA = MAX(1,N); LDVS=MAX(1,N);
00044   switch ( NLHS ) {
00045   case 3: 
00046     /*  [W,VS,As]=zgeesx(A)    */
00047     JOBVS="V";
00048   /*--------------------W, VS, RWORK---------------------------*/
00049     CreateVar(W, "z", &N, &un, &lW);
00050     CreateVar(VS, "z", &N, &N, &lVS);
00051     CreateVar(RWORK, "d", &N, &un, &lRWORK);
00052   /*--------------------WORK---------------------------*/
00053     LWORKMIN = MAX(1, 2*N);
00054     LWORK=Maxvol(WORK,"z");  /* max memory currently available */
00055     if (LWORK < LWORKMIN) Scierror(999,"%s:  not enough memory (use stacksize) \r\n",fname); 
00056     CreateVar(WORK, "z", &LWORK, &un, &lWORK);
00057 
00058     C2F(zgeesx)(JOBVS, "N", select, "N", &N, zstk(lA), &LDA, &SDIM, zstk(lW), 
00059                 zstk(lVS), &LDVS, &RCONDE, &RCONDV, zstk(lWORK), 
00060                 &LWORK, stk(lRWORK), BWORK, &INFO);
00061     if (INFO != 0) Errorinfo("ZGEESX ", INFO);
00062     LhsVar(1)=W; LhsVar(2)=VS; LhsVar(3)=A;
00063     break;
00064   case 2:
00065     /*  [W,VS]=zgeesx(A)    */
00066     JOBVS="V";
00067     CreateVar(W, "z", &N, &un, &lW);
00068     CreateVar(VS, "z", &N, &N, &lVS);
00069     RWORK=4;  CreateVar(RWORK, "d", &N, &un, &lRWORK);
00070     WORK=5;   LWORKMIN = MAX(1, 2*N);
00071     LWORK=Maxvol(WORK, "z"); /* max memory currently available */
00072     if (LWORK < LWORKMIN) Scierror(999,"%s:  not enough memory (use stacksize) \r\n",fname); 
00073     CreateVar(WORK, "z", &LWORK, &un, &lWORK);
00074 
00075     C2F(zgeesx)(JOBVS, "N", select, "N", &N, zstk(lA), &LDA, &SDIM, zstk(lW), 
00076                 zstk(lVS), &LDVS, &RCONDE, &RCONDV, zstk(lWORK), 
00077                 &LWORK, stk(lRWORK), BWORK, &INFO);
00078     if (INFO != 0) Errorinfo("DGEESX ", INFO);
00079     LhsVar(1)=W; LhsVar(2)=VS; 
00080     break;
00081   case 1:
00082     /*  w=zgeesx(A)    */
00083     JOBVS="N";
00084     CreateVar(W, "z", &N, &un, &lW);
00085     RWORK=3;  CreateVar(RWORK, "d", &N, &un, &lRWORK);
00086     WORK=4;   LWORKMIN = MAX(1, 2*N);
00087     LWORK=Maxvol(WORK, "z"); /* max memory currently available */
00088     if (LWORK < LWORKMIN) Scierror(999,"%s:  not enough memory (use stacksize) \r\n",fname); 
00089     CreateVar(WORK, "z", &LWORK, &un, &lWORK);
00090 
00091     C2F(zgeesx)(JOBVS, "N", select, "N", &N, zstk(lA), &LDA, &SDIM, zstk(lW), 
00092                 VS, &LDVS, &RCONDE, &RCONDV, zstk(lWORK), 
00093                 &LWORK, stk(lRWORK), BWORK, &INFO);
00094     if (INFO != 0) C2F(errorinfo)("zgeesx ", &INFO, 5L);
00095     LhsVar(1)=W;
00096     break;
00097   default:
00098     return 0;
00099   }
00100   return 0;
00101 }

Here is the call graph for this function:


Generated on Sun Mar 4 16:09:45 2007 for Scilab [trunk] by  doxygen 1.5.1