#ifndef main_h #define main_h #include /* matrices and vectors are the same data type, vector will only have one column (by default) or one row. */ typedef struct { short type ; int rows ; int cols ; float **rptr; /* pointer to an array of rows */ float *data; /* pointer to base of data */ FILE *mmapfile; } MATRIX, VECTOR ; typedef struct { float real ; float imag ; } COMPLEX_FLOAT, *CPTR ; #define MATRIX_CELT(m,r,c) (((COMPLEX_FLOAT **)m->rptr)[r]+c) #define MATRIX_RELT(m,r,c) (m->rptr[r]+c) #define MATRIX_ELT(m,r,c) (m->type == MATRIX_REAL ? \ *MATRIX_RELT(m,r,c) : \ *MATRIX_CELT(m,r,c)) #define MATRIX_PTR(m,r,c) (m->type == MATRIX_REAL ? \ MATRIX_RELT(m,r,c) : \ (float *)MATRIX_CELT(m,r,c)) #define MATRIX_CELT_REAL(m,r,c) (MATRIX_CELT(m,r,c)->real) #define MATRIX_CELT_IMAG(m,r,c) (MATRIX_CELT(m,r,c)->imag) #define MATRIX_REAL 1 #define MATRIX_COMPLEX 2 #define MATRIX_SYM 0 #define MATRIX_UPPER 1 #define MATRIX_LOWER 2 MATRIX *MatrixReadTxt(char *fname, MATRIX *mat) ; int MatrixWriteTxt(char *fname, MATRIX *mat) ; MATRIX *MatrixAlloc(int rows, int cols, int type) ; int MatrixFree(MATRIX **pmat) ; MATRIX *MatrixCopy(MATRIX *mIn, MATRIX *mOut); MATRIX *MatrixScalarMul(MATRIX *mIn, float val, MATRIX *mOut) ; MATRIX *MatrixCopyRegion(MATRIX *mSrc, MATRIX *mDst, int start_row, int start_col, int rows, int cols, int dest_row, int dest_col) ; MATRIX *MatrixCopyRealRegion(MATRIX *mSrc, MATRIX *mDst,int start_row, int start_col, int rows, int cols, int dest_row, int dest_col) ; MATRIX *MatrixCopyImagRegion(MATRIX *mSrc, MATRIX *mDst, int start_row, int start_col, int rows, int cols, int dest_row, int dest_col) ; MATRIX *MatrixRealToComplex(MATRIX *mReal, MATRIX *mImag, MATRIX *mOut); MATRIX *MatrixInverse(MATRIX *mIn, MATRIX *mOut); int MatrixPrint(FILE *fp, MATRIX *mat) ; int ludcmp(float **a, int n, int *indx, float *d); void lubksb(float **a, int n, int *indx, float b[]); #define NR_END 1 #define FREE_ARG char* float *vector(long nl, long nh); void free_vector(float *v, long nl, long nh); #define NO_ERROR 0 #define ERROR_NONE NO_ERROR #define ERROR_NO_FILE -1 #define ERROR_NOFILE ERROR_NO_FILE #define ERROR_NO_MEMORY -2 #define ERROR_NOMEMORY ERROR_NO_MEMORY #define ERROR_UNSUPPORTED -3 #define ERROR_BADPARM -4 #define ERROR_BAD_PARM ERROR_BADPARM #define ERROR_BADFILE -5 #define ERROR_BAD_FILE ERROR_BADFILE #define ERROR_SIZE -6 int ErrorPrintf(int ecode, char *fmt, ...) ; #define ErrorReturn(ret, args) { ErrorPrintf args ; return(ret) ; } void ErrorExit(int ecode, char *fmt, ...); #endif