diff --git a/Basic/Math/cpoly.c b/Basic/Math/cpoly.c index b9335c7f4..faa1cbf68 100644 --- a/Basic/Math/cpoly.c +++ b/Basic/Math/cpoly.c @@ -19,11 +19,11 @@ #include "cpoly.h" /* Internal routines */ -static void noshft(int l1, int nn, complex double *hc, complex double *pc); -static int fxshft(int l2, complex double *zc, int nn, complex double *shc, complex double *qpc, complex double *hc, complex double *pc, complex double *qhc); -static int vrshft(int l3, complex double *zc, int nn, complex double *qpc, complex double *pc, complex double *qhc, complex double *hc); -static int calct(int nn, complex double *qhc, complex double *hc); -static void nexth(int boolvar, int nn, complex double *qhc, complex double *qpc, complex double *hc); +static void noshft(int l1, int nn, complex double *hc, complex double *pc, complex double *tc); +static int fxshft(int l2, complex double *zc, int nn, complex double *shc, complex double *qpc, complex double *hc, complex double *pc, complex double *qhc, complex double *tc, complex double *sc, complex double *pvc); +static int vrshft(int l3, complex double *zc, int nn, complex double *qpc, complex double *pc, complex double *qhc, complex double *hc, complex double *tc, complex double *sc, complex double *pvc); +static int calct(int nn, complex double *qhc, complex double *hc, complex double *tc, complex double *sc, complex double *pvc); +static void nexth(int boolvar, int nn, complex double *qhc, complex double *qpc, complex double *hc, complex double tc); static void polyev(int nn, complex double sc, complex double pc[], complex double qc[], complex double *tvc); static double errev(int nn, complex double qc[], double ms, double mp); @@ -33,7 +33,6 @@ static void mcon(void); static void init(int nncr); /* Internal global variables */ -static complex double tc,sc,pvc; static double are,mre,eta,infin,smalno,base; #ifdef DEBUGMAIN @@ -216,7 +215,7 @@ int cpoly(double opr[], double opi[], int degree, } double xx,yy,xxx,bnd; - complex double zc; + complex double zc,tc,sc,pvc; int fail = FALSE,conv; int cnt1,cnt2,i,idnn2; @@ -282,7 +281,7 @@ int cpoly(double opr[], double opi[], int degree, for(cnt1=1;fail && (cnt1<=2);cnt1++) { /* First stage calculation, no shift */ - noshft(5,nn,hc,pc); + noshft(5,nn,hc,pc,&tc); /* Inner loop to select a shift. */ for (cnt2=1;fail && (cnt2<10);cnt2++) { @@ -294,7 +293,7 @@ int cpoly(double opr[], double opi[], int degree, sc = bnd*xx + I*bnd*yy; /* Second stage calculation, fixed shift */ - conv = fxshft(10*cnt2,&zc,nn,shc,qpc,hc,pc,qhc); + conv = fxshft(10*cnt2,&zc,nn,shc,qpc,hc,pc,qhc,&tc,&sc,&pvc); if (conv) { /* The second stage jumps directly to the third stage iteration @@ -326,7 +325,7 @@ int cpoly(double opr[], double opi[], int degree, return fail; } -static void noshft(int l1, int nn, complex double *hc, complex double *pc) +static void noshft(int l1, int nn, complex double *hc, complex double *pc, complex double *tc) { /* Computes the derivative polynomial as the initial h polynomial and computes l1 no-shift h polynomials. */ @@ -338,10 +337,10 @@ static void noshft(int l1, int nn, complex double *hc, complex double *pc) } for (jj=0;jj eta*10.0*cabs(pc[nm2])) { - tc = -pc[n] / hc[nm1]; + *tc = -pc[n] / hc[nm1]; for (i=0;i