コード例 #1
0
ファイル: lis_esolver.c プロジェクト: florianl/lis
LIS_INT lis_esolver_get_iters(LIS_ESOLVER esolver, LIS_VECTOR v)
{
	LIS_INT i,ii,ss,n,gn,is,ie;

	LIS_DEBUG_FUNC_IN;

	if ( esolver->options[LIS_EOPTIONS_ESOLVER] != LIS_ESOLVER_SI && esolver->options[LIS_EOPTIONS_ESOLVER] != LIS_ESOLVER_LI && esolver->options[LIS_EOPTIONS_ESOLVER] != LIS_ESOLVER_AI )
	{
		LIS_SETERR1(LIS_ERR_ILL_ARG,"Parameter LIS_EOPTIONS_ESOLVER is %d (Set Subspace, Lanczos, or Arnoldi)\n", esolver->options[LIS_EOPTIONS_ESOLVER]);
		return LIS_ERR_ILL_ARG;
	}

	ss = esolver->options[LIS_EOPTIONS_SUBSPACE];
	lis_vector_set_size(v,0,ss);
	lis_vector_get_size(v,&n,&gn);
	lis_vector_get_range(v,&is,&ie);
	
	for(i=0;i<n;i++)
	{
	  ii=i;
	  if( v->origin ) ii++;
	  lis_vector_set_value(LIS_INS_VALUE,ii+is,esolver->iter[i+is],v);
	}

	v->intvalue = 1;

	LIS_DEBUG_FUNC_OUT;
	return LIS_SUCCESS;
}
コード例 #2
0
ファイル: lis_input.c プロジェクト: huahbo/lis
LIS_INT lis_input_vector_plain(LIS_VECTOR v, FILE *file)
{
	char buf[BUFSIZE];
	LIS_INT i;
	LIS_INT	err;
	LIS_INT	n,is,ie;
	LIS_SCALAR val;


	/* check size */
	n = 0;
	do
	{
#ifdef _LONG__DOUBLE
		err = fscanf(file, "%Lg", &val);
#else
		err = fscanf(file, "%lg", &val);
#endif		
		if( err==1 ) n++;
	}while( err==1 );
	rewind(file);

	/* read data */
	err = lis_vector_set_size(v,0,n);
	if( err )
	{
		return err;
	}
	lis_vector_get_range(v,&is,&ie);

	for(i=0;i<n;i++)
	{
		if( fgets(buf, BUFSIZE, file) == NULL )
		{
			LIS_SETERR_FIO;
			return LIS_ERR_FILE_IO;
		}
		if( i>=is && i<ie )
		{
#ifdef _LONG__DOUBLE
			if( sscanf(buf, "%Lg", &val) != 1 )
#else
			if( sscanf(buf, "%lg", &val) != 1 )
#endif
			{
				LIS_SETERR_FIO;
				return LIS_ERR_FILE_IO;
			}
			v->value[i-is] = val;
		}
	}
	return LIS_SUCCESS;
}
コード例 #3
0
ファイル: lisf_vector.c プロジェクト: anishida/lis
void lis_vector_get_range_f(LIS_VECTOR_F *vec, LIS_INT *is, LIS_INT *ie, LIS_INT *ierr)
{
	LIS_DEBUG_FUNC_IN;

	*ierr = lis_vector_get_range((LIS_VECTOR)LIS_V2P(vec),is,ie);
	if( *ierr )	return;
	(*is)++;
	(*ie)++;

	LIS_DEBUG_FUNC_OUT;
	return;
}
コード例 #4
0
/// initialize this object
void LisMPIDiscreteVector::initialize(MPI_Comm comm, int n_local, int n_global, size_t n_ghost)
{
    MPI_Comm_rank(comm, &_local_id);
    int err = lis_vector_create(comm, &_v);
    err = lis_vector_set_size(_v, n_local, n_global);
    err = lis_vector_get_size(_v, &_local_n, &_global_n);
    err = lis_vector_get_range(_v, &_i_start, &_i_end);
    CHKERR(err);
    DiscreteVector::resize(_local_n+n_ghost);
    _temp_all_x.resize(_global_n); //allocate temporary buffer
    _list_index.resize(_local_n);
    for (int i=0; i<_local_n; i++)
        _list_index[i] = _i_start + i;

    std::cout << _local_id << ": start=" << _i_start << ", end=" << _i_end << std::endl;
}
コード例 #5
0
ファイル: lis_input.c プロジェクト: huahbo/lis
LIS_INT lis_input_vector_mm(LIS_VECTOR v, FILE *file)
{
	char buf[BUFSIZE];
	char banner[64], mtx[64], fmt[64], dtype[64], dstruct[64];
	char *p;
	LIS_INT i;
	LIS_INT	err;
	LIS_INT	n,is,ie;
	LIS_INT	idx;
	LIS_SCALAR val;


	/* check banner */
	if( fgets(buf, BUFSIZE, file) == NULL )
	{
		LIS_SETERR_FIO;
		return LIS_ERR_FILE_IO;
	}
	sscanf(buf, "%s %s %s %s %s", banner, mtx, fmt, dtype, dstruct);

	for(p=mtx;*p!='\0';p++)     *p = (char)tolower(*p);
	for(p=fmt;*p!='\0';p++)     *p = (char)tolower(*p);
	for(p=dtype;*p!='\0';p++)   *p = (char)tolower(*p);
	for(p=dstruct;*p!='\0';p++) *p = (char)tolower(*p);

	if( strncmp(banner, MM_BANNER, strlen(MM_BANNER))!=0 || strncmp(mtx, MM_VEC, strlen(MM_VEC))!=0 )
	{
		LIS_SETERR(LIS_ERR_FILE_IO,"Not Matrix Market banner\n");
		return LIS_ERR_FILE_IO;
	}
	if( strncmp(fmt, MM_FMT, strlen(MM_FMT))!=0 )
	{
		LIS_SETERR(LIS_ERR_FILE_IO,"Not Coodinate format\n");
		return LIS_ERR_FILE_IO;
	}
	if( strncmp(dtype, MM_TYPE_REAL, strlen(MM_TYPE_REAL))!=0 )
	{
		LIS_SETERR(LIS_ERR_FILE_IO,"Not real\n");
		return LIS_ERR_FILE_IO;
	}
	if( strncmp(dstruct, MM_TYPE_GENERAL, strlen(MM_TYPE_GENERAL))!=0 )
	{
		LIS_SETERR(LIS_ERR_FILE_IO,"Not general\n");
		return LIS_ERR_FILE_IO;
	}

	/* check size */		
	do
	{
		if( fgets(buf, BUFSIZE, file) == NULL )
		{
			LIS_SETERR_FIO;
			return LIS_ERR_FILE_IO;
		}
	}while( buf[0]=='%' );
#ifdef _LONGLONG
	if( sscanf(buf, "%lld", &n) != 1 )
#else
	if( sscanf(buf, "%d", &n) != 1 )
#endif
	{
		LIS_SETERR_FIO;
		return LIS_ERR_FILE_IO;
	}

	/* read data */
	err = lis_vector_set_size(v,0,n);
	if( err )
	{
		return err;
	}
	lis_vector_get_range(v,&is,&ie);

	for(i=0;i<n;i++)
	{
		if( fgets(buf, BUFSIZE, file) == NULL )
		{
			LIS_SETERR_FIO;
			return LIS_ERR_FILE_IO;
		}
#ifdef _LONGLONG
#ifdef _LONG__DOUBLE
		if( sscanf(buf, "%lld %Lg", &idx, &val) != 2 )
#else
		if( sscanf(buf, "%lld %lg", &idx, &val) != 2 )
#endif
#else
#ifdef _LONG__DOUBLE
		if( sscanf(buf, "%d %Lg", &idx, &val) != 2 )
#else
		if( sscanf(buf, "%d %lg", &idx, &val) != 2 )
#endif
#endif
		{
			LIS_SETERR_FIO;
			return LIS_ERR_FILE_IO;
		}
		idx--;
		if( idx>=is && idx<ie )
		{
			v->value[idx-is] = val;
		}
	}
	return LIS_SUCCESS;
}