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