Пример #1
0
void lis_vector_gather_f(LIS_VECTOR_F *v, LIS_SCALAR *values, LIS_INT *ierr)
{
	LIS_DEBUG_FUNC_IN;

	*ierr = lis_vector_gather((LIS_VECTOR)LIS_V2P(v),values);
	if( *ierr )	return;

	LIS_DEBUG_FUNC_OUT;
	return;
}
void LisMPIDiscreteVector::finishUpdate()
{
    int err = 0;
    // push
    //std::cout << _local_id << ": set values" << std::endl;
    //err = lis_vector_set_values2(LIS_INS_VALUE, _i_start, _local_n, &_data[0], _v);
    err = lis_vector_set_values(LIS_INS_VALUE, _local_n, &_list_index[0], &_data[0], _v);
    CHKERR(err);
    // pull
    if (_exist_any_ghost_global) {
        //std::cout << _local_id << ": get ghost values" << std::endl;
        err = lis_vector_gather(_v, &_temp_all_x[0]);
        CHKERR(err);
        for (size_t i=0; i<_ghost_id.size(); i++) {
            const int ghost_id = _ghost_id[i];
            //std::cout << _local_id << ": ghost_id=" << ghost_id << ", local id=" << access(ghost_id) << std::endl;
            _data[access(ghost_id)] = _temp_all_x[ghost_id];
            //err = lis_vector_get_value(_v, ghost_id, &_data[access(ghost_id)]);
        }
        CHKERR(err);
    }
}
void LisMPIDiscreteVector::getGlobal(double *v)
{
    int err = lis_vector_gather(_v, v);
    CHKERR(err);
}