#include #include #include #include #include #include "nrutil.h" #define NR_END 1 #define FREE_ARG char* float sqrarg; double dsqrarg; double dmaxarg1,dmaxarg2; double dminarg1,dminarg2; float maxarg1,maxarg2; float minarg1,minarg2; long lmaxarg1,lmaxarg2; long lminarg1,lminarg2; int imaxarg1,imaxarg2; int iminarg1,iminarg2; /* allocate a float vector with subscript range v[nl..nh] */ float *vector(int nl, int nh) { float *v; v = (float *)G_malloc(((nh-nl+1+NR_END) * sizeof(float))); return v-nl+NR_END; } /* allocate an int vector with subscript range v[nl..nh] */ int *ivector(int nl, int nh) { int *v; v = (int *)G_malloc (((nh-nl+1+NR_END) * sizeof(int))); return v-nl+NR_END; } /* allocate an unsigned char vector with subscript range v[nl..nh] */ unsigned char *cvector(int nl, int nh) { unsigned char *v; v = (unsigned char *)G_malloc (((nh-nl+1+NR_END) * sizeof(unsigned char))); return v-nl+NR_END; } /* allocate an unsigned long vector with subscript range v[nl..nh] */ unsigned long *lvector(int nl, int nh) { unsigned long *v; v = (unsigned long *)G_malloc (((nh-nl+1+NR_END) * sizeof(long))); return v-nl+NR_END; } /* allocate a double vector with subscript range v[nl..nh] */ double *dvector(int nl, int nh) { double *v; v = (double *)G_malloc (((nh-nl+1+NR_END) * sizeof(double))); return v-nl+NR_END; } /* allocate a float matrix with subscript range m[nrl..nrh][ncl..nch] */ float **matrix(int nrl, int nrh, int ncl, int nch) { int i, nrow=nrh-nrl+1,ncol=nch-ncl+1; float **m; /* allocate pointers to rows */ m = (float **) G_malloc (((nrow+NR_END) * sizeof(float*))); m += NR_END; m -= nrl; /* allocate rows and set pointers to them */ m[nrl] = (float *) G_malloc (((nrow*ncol+NR_END) * sizeof(float))); m[nrl] += NR_END; m[nrl] -= ncl; for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; /* return pointer to array of pointers to rows */ return m; } /* allocate a double matrix with subscript range m[nrl..nrh][ncl..nch] */ double **dmatrix(int nrl, int nrh, int ncl, int nch) { int i, nrow=nrh-nrl+1,ncol=nch-ncl+1; double **m; /* allocate pointers to rows */ m = (double **) G_malloc (((nrow+NR_END) * sizeof(double*))); m += NR_END; m -= nrl; /* allocate rows and set pointers to them */ m[nrl] = (double *) G_malloc (((nrow*ncol+NR_END) * sizeof(double))); m[nrl] += NR_END; m[nrl] -= ncl; for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; /* return pointer to array of pointers to rows */ return m; } /* allocate a int matrix with subscript range m[nrl..nrh][ncl..nch] */ int **imatrix(int nrl, int nrh, int ncl, int nch) { int i, nrow=nrh-nrl+1,ncol=nch-ncl+1; int **m; /* allocate pointers to rows */ m = (int **)G_malloc (((nrow+NR_END) * sizeof(int*))); m += NR_END; m -= nrl; /* allocate rows and set pointers to them */ m[nrl] = (int *) G_malloc (((nrow*ncol+NR_END) * sizeof(int))); m[nrl] += NR_END; m[nrl] -= ncl; for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; /* return pointer to array of pointers to rows */ return m; } /* point a submatrix [newrl..][newcl..] to a[oldrl..oldrh][oldcl..oldch] */ float **submatrix(float **a, int oldrl, int oldrh, int oldcl, int oldch, int newrl, int newcl) { int i,j,nrow=oldrh-oldrl+1,ncol=oldcl-newcl; float **m; /* allocate array of pointers to rows */ m = (float **) G_malloc (((nrow+NR_END) * sizeof(float*))); m += NR_END; m -= newrl; /* set pointers to rows */ for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+ncol; /* return pointer to array of pointers to rows */ return m; } /* allocate a float matrix m[nrl..nrh][ncl..nch] that points to the matrix declared in the standard C manner as a[nrow][ncol], where nrow=nrh-nrl+1 and ncol=nch-ncl+1. The routine should be called with the address &a[0][0] as the first argument. */ float **convert_matrix(float *a, int nrl, int nrh, int ncl, int nch) { int i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1; float **m; /* allocate pointers to rows */ m = (float **) G_malloc (((nrow+NR_END) * sizeof(float*))); m += NR_END; m -= nrl; /* set pointers to rows */ m[nrl]=a-ncl; for(i=1,j=nrl+1;i