4.1: fixed problem with mwSignedIndex. Despite the fact that mwSignedIndex appeared

in Matlab version 7.3, Matlab Lapack library only uses it from version 7.8
     (needs to be merged in 4.0)


git-svn-id: https://www.dynare.org/svn/dynare/trunk@2565 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
michel 2009-04-07 21:13:05 +00:00
parent c497540e06
commit 25aa38f9c4
2 changed files with 14 additions and 7 deletions

View File

@ -54,6 +54,11 @@ if matlab_ver_less_than('7.3')
COMPILE_OPTIONS = [ COMPILE_OPTIONS ' -DMWTYPES_NOT_DEFINED' ];
end
% Matlab Lapack expects mwSignedIndex arguments only starting with Matlab 7.8
if ~matlab_ver_less_than('7.8')
COMPILE_OPTIONS = [ COMPILE_OPTIONS ' -DLAPACK_USE_MWSIGNEDINDEX' ];
end
% Large array dims for 64 bits platforms appeared in Matlab 7.3
if (strcmpi('GLNXA64', computer) || strcmpi('PCWIN64', computer)) ...
&& ~matlab_ver_less_than('7.3')

View File

@ -20,8 +20,10 @@
#include <string.h>
#include "mex.h"
#if defined(MWTYPES_NOT_DEFINED) || defined(OCTAVE)
typedef int mwSignedIndex;
#if !defined(LAPACK_USE_MWSIGNEDINDEX) || defined(OCTAVE)
typedef int lapack_int;
#else
typedef mwSignedIndex lapack_int;
#endif
#ifdef NO_LAPACK_H
@ -36,26 +38,26 @@ void dgges(char *, char *, char *, int (*)(), int *, double *, int *, double *,
double criterium;
mwSignedIndex my_criteria(double *alphar, double *alphai, double *beta)
lapack_int my_criteria(double *alphar, double *alphai, double *beta)
{
return( (*alphar * *alphar + *alphai * *alphai) < criterium * *beta * *beta);
}
void mjdgges(double *a, double *b, double *z, double *n, double *sdim, double *eval_r, double *eval_i, double *info)
{
mwSignedIndex i_n, i_info, i_sdim, one, lwork;
lapack_int i_n, i_info, i_sdim, one, lwork;
double *alphar, *alphai, *beta, *work, *par, *pai, *pb, *per, *pei;
double *junk;
mwSignedIndex *bwork;
lapack_int *bwork;
one = 1;
i_n = (mwSignedIndex)*n;
i_n = (lapack_int)*n;
alphar = mxCalloc(i_n,sizeof(double));
alphai = mxCalloc(i_n,sizeof(double));
beta = mxCalloc(i_n,sizeof(double));
lwork = 16*i_n+16;
work = mxCalloc(lwork,sizeof(double));
bwork = mxCalloc(i_n,sizeof(mwSignedIndex));
bwork = mxCalloc(i_n,sizeof(lapack_int));
/* made necessary by bug in Lapack */
junk = mxCalloc(i_n*i_n,sizeof(double));