Beispiel #1
0
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;
}
Beispiel #2
0
std::size_t LisVector::size() const
{
	LIS_INT dummy;
	LIS_INT size;
	int const ierr = lis_vector_get_size(_vec, &dummy, &size);
	checkLisError(ierr);
	return size;
}
Beispiel #3
0
std::size_t LisVector::size() const
{
    IndexType dummy;
    IndexType size;
    int const ierr = lis_vector_get_size(_vec, &dummy, &size);
    checkLisError(ierr);
    assert(size >= 0);  // For safe implicit conversion to std::size_t.
    return size;
}
Beispiel #4
0
void lis_vector_get_size_f(LIS_VECTOR_F *vec, LIS_INT *local_n, LIS_INT *global_n, LIS_INT *ierr)
{
	LIS_DEBUG_FUNC_IN;

	*ierr = lis_vector_get_size((LIS_VECTOR)LIS_V2P(vec),local_n,global_n);
	if( *ierr )	return;

	LIS_DEBUG_FUNC_OUT;
	return;
}
/// 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;
}