taucs_ccs_matrix *taucs_ccs_create(int m, int n, int nnz, int flags) { taucs_ccs_matrix *A = NULL; #ifdef TAUCS_DOUBLE_IN_BUILD if (flags & TAUCS_DOUBLE) A = taucs_dccs_create(m, n, nnz); #endif #ifdef TAUCS_SINGLE_IN_BUILD if (flags & TAUCS_SINGLE) A = taucs_sccs_create(m, n, nnz); #endif #ifdef TAUCS_DCOMPLEX_IN_BUILD if (flags & TAUCS_DCOMPLEX) A = taucs_zccs_create(m, n, nnz); #endif #ifdef TAUCS_SCOMPLEX_IN_BUILD if (flags & TAUCS_SCOMPLEX) A = taucs_cccs_create(m, n, nnz); #endif if (A) { A->flags = flags; return A; } else { taucs_printf("taucs_ccs_create: no data type specifiedy\n"); return NULL; } }
taucs_ccs_matrix* taucs_ccs_read_binary(char* filename) { taucs_ccs_matrix* A = NULL; /* warning*/ int nrows,ncols,flags,j;/*nnz, omer*/ int f; ssize_t bytes_read; int* colptr; taucs_printf("taucs_ccs_binary: reading binary matrix %s\n",filename); #ifdef OSTYPE_win32 f = open(filename,_O_RDONLY |_O_BINARY); #else f = open(filename,O_RDONLY); #endif /*f = open(filename,O_RDONLY);*/ bytes_read = read(f,&nrows,sizeof(int)); bytes_read = read(f,&ncols,sizeof(int)); bytes_read = read(f,&flags,sizeof(int)); taucs_printf("\t%d-by-%d, flags = %08x\n",nrows,ncols,flags); taucs_printf("\t%d-by-%d, flags = %d \n",nrows,ncols,flags); colptr = (int*) taucs_malloc((ncols+1) * sizeof(int)); assert(colptr); bytes_read = read(f,colptr,(ncols+1)*sizeof(int)); taucs_printf("colptr = ["); for(j=0; j<min(ncols-1,10); j++) taucs_printf("%d,",colptr[j]); taucs_printf("...,%d]\n",colptr[ncols]); if ( 0 ) /* we need this so that we have 'else if' in each type */ {} #ifdef TAUCS_DOUBLE_IN_BUILD else if (flags & TAUCS_DOUBLE) { A = taucs_dccs_create(nrows,ncols,colptr[ncols]); if (!A) return NULL; bytes_read = read(f,A->rowind,colptr[ncols]*sizeof(int)); bytes_read = read(f,A->values.d,colptr[ncols]*sizeof(taucs_double)); } #endif #ifdef TAUCS_SINGLE_IN_BUILD else if (flags & TAUCS_SINGLE) { A = taucs_sccs_create(nrows,ncols,colptr[ncols]); if (!A) return NULL; bytes_read = read(f,A->rowind,colptr[ncols]*sizeof(int)); bytes_read = read(f,A->values.s,colptr[ncols]*sizeof(taucs_single)); } #endif #ifdef TAUCS_DCOMPLEX_IN_BUILD else if (flags & TAUCS_DCOMPLEX) { A = taucs_zccs_create(nrows,ncols,colptr[ncols]); if (!A) return NULL; bytes_read = read(f,A->rowind,colptr[ncols]*sizeof(int)); bytes_read = read(f,A->values.z,colptr[ncols]*sizeof(taucs_dcomplex)); } #endif #ifdef TAUCS_SCOMPLEX_IN_BUILD else if (flags & TAUCS_SCOMPLEX) { A = taucs_cccs_create(nrows,ncols,colptr[ncols]); if (!A) return NULL; bytes_read = read(f,A->rowind,colptr[ncols]*sizeof(int)); bytes_read = read(f,A->values.c,colptr[ncols]*sizeof(taucs_scomplex)); } #endif else { assert(0); } A->flags = flags; for (j=0; j<=ncols; j++) (A->colptr)[j] = colptr[j]; taucs_free(colptr); close(f); taucs_printf("taucs_ccs_read_binary: done reading\n"); return A; }
taucs_ccs_matrix* taucs_ccs_read_hb(char* filename,int flags) { taucs_ccs_matrix* A = NULL; int nrows,ncols,nnz,j; char fname[256]; char type[3]; for (j=0; j<256; j++) fname[j] = ' '; strcpy(fname,filename); taucs_printf("taucs_ccs_read_hb: reading HB matrix %s\n",filename); ireadhb_(fname,type,&nrows,&ncols,&nnz); if (type[0] == 'p' || type[0] == 'P') { if ( 0 ); /* we need this so that we have 'else if' in each type */ #ifdef TAUCS_DOUBLE_IN_BUILD else if (flags & TAUCS_DOUBLE) { A = taucs_dccs_create(nrows,ncols,nnz); if (!A) return NULL; dreadhb_(fname,&nrows,&ncols,&nnz, /*A->colptr,A->rowind,A->values); omer*/ A->colptr,A->rowind,A->values.d/*taucs_values*/); } #endif #ifdef TAUCS_SINGLE_IN_BUILD else if (flags & TAUCS_SINGLE) { A = taucs_sccs_create(nrows,ncols,nnz); if (!A) return NULL; sreadhb_(fname,&nrows,&ncols,&nnz, /*A->colptr,A->rowind,A->values); omer*/ A->colptr,A->rowind,A->values.s/*taucs_values*/); } #endif #ifdef TAUCS_DCOMPLEX_IN_BUILD else if (flags & TAUCS_DCOMPLEX) { A = taucs_zccs_create(nrows,ncols,nnz); if (!A) return NULL; zreadhb_(fname,&nrows,&ncols,&nnz, /*A->colptr,A->rowind,A->values); omer*/ A->colptr,A->rowind,A->values.z/*taucs_values*/); } #endif #ifdef TAUCS_SCOMPLEX_IN_BUILD else if (flags & TAUCS_SCOMPLEX) { A = taucs_cccs_create(nrows,ncols,nnz); if (!A) return NULL; creadhb_(fname,&nrows,&ncols,&nnz, /*A->colptr,A->rowind,A->values); omer*/ A->colptr,A->rowind,A->values.c/*taucs_values*/); } #endif else { assert(0); } } if (type[0] == 'r' || type[0] == 'R') { if ( 0 ); /* we need this so that we have 'else if' in each type */ #ifdef TAUCS_DOUBLE_IN_BUILD else if (flags & TAUCS_DOUBLE) { A = taucs_dccs_create(nrows,ncols,nnz); if (!A) return NULL; dreadhb_(fname,&nrows,&ncols,&nnz, /*A->colptr,A->rowind,A->values); omer*/ A->colptr,A->rowind,A->values.d/*taucs_values*/); } #endif #ifdef TAUCS_SINGLE_IN_BUILD else if (flags & TAUCS_SINGLE) { A = taucs_sccs_create(nrows,ncols,nnz); if (!A) return NULL; sreadhb_(fname,&nrows,&ncols,&nnz, /*A->colptr,A->rowind,A->values); omer*/ A->colptr,A->rowind,A->values.s/*taucs_values*/); } #endif #ifdef TAUCS_DCOMPLEX_IN_BUILD else if (flags & TAUCS_DCOMPLEX) { taucs_printf("taucs_ccs_read_hb: warning: requested a complex type, matrix is real\n"); A = taucs_dccs_create(nrows,ncols,nnz); if (!A) return NULL; dreadhb_(fname,&nrows,&ncols,&nnz, /*A->colptr,A->rowind,A->values); omer*/ A->colptr,A->rowind,A->values.d/*taucs_values*/); } #endif #ifdef TAUCS_SCOMPLEX_IN_BUILD else if (flags & TAUCS_SCOMPLEX) { taucs_printf("taucs_ccs_read_hb: warning: requested a complex type, matrix is real\n"); A = taucs_sccs_create(nrows,ncols,nnz); if (!A) return NULL; sreadhb_(fname,&nrows,&ncols,&nnz, /*A->colptr,A->rowind,A->values); omer*/ A->colptr,A->rowind,A->values.s/*taucs_values*/); } #endif else { assert(0); } } if (type[0] == 'c' || type[0] == 'C') { if ( 0 ); /* we need this so that we have 'else if' in each type */ #ifdef TAUCS_DCOMPLEX_IN_BUILD else if (flags & TAUCS_DCOMPLEX) { A = taucs_zccs_create(nrows,ncols,nnz); if (!A) return NULL; zreadhb_(fname,&nrows,&ncols,&nnz, /*A->colptr,A->rowind,A->values); omer*/ A->colptr,A->rowind,A->values.z/*taucs_values*/); } #endif #ifdef TAUCS_SCOMPLEX_IN_BUILD else if (flags & TAUCS_SCOMPLEX) { taucs_printf("taucs_ccs_read_hb: warning: requested a complex type, matrix is real\n"); A = taucs_cccs_create(nrows,ncols,nnz); if (!A) return NULL; creadhb_(fname,&nrows,&ncols,&nnz, /*A->colptr,A->rowind,A->values); omer*/ A->colptr,A->rowind,A->values.c/*taucs_values*/); } #endif else { assert(0); } } if (type[1] == 's' || type[1] == 'S') A->flags |= TAUCS_SYMMETRIC | TAUCS_LOWER; if (type[1] == 'h' || type[1] == 'H') A->flags |= TAUCS_HERMITIAN | TAUCS_LOWER; /* make indices 0-based */ for (j=0; j<=ncols; j++) ((A->colptr)[j])--; for (j=0; j<nnz; j++) ((A->rowind)[j])--; taucs_printf("taucs_ccs_read_hb: done reading\n"); return A; }