コード例 #1
0
ファイル: taucs_ccs_base.c プロジェクト: ccowingzitron/inla
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;
	}
}
コード例 #2
0
ファイル: taucs_ccs_io.c プロジェクト: Wackye/taucs
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;
}
コード例 #3
0
ファイル: taucs_ccs_io.c プロジェクト: Wackye/taucs
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;
}