47 ASSERT( ! ierr ,
"Can not get MPI rank.\n" );
49 ASSERT( ! ierr ,
"Can not get MPI size.\n" );
73 ASSERT( ! ierr ,
"Can not get MPI rank.\n" );
75 ASSERT( ! ierr ,
"Can not get MPI size.\n" );
79 for(
unsigned int i=0 ; i<
np(); i++)
starts[i+1]=
starts[i]+sizes[i];
87 :communicator(PETSC_COMM_WORLD),
94 ASSERT( ! ierr ,
"Can not get MPI rank.\n" );
96 ASSERT( ! ierr ,
"Can not get MPI size.\n" );
98 const PetscInt *petsc_starts;
99 VecGetOwnershipRanges(petsc_vector,&petsc_starts);
100 ASSERT( ! ierr ,
"Can not get vector ownership range.\n" );
103 for(
unsigned int i=0 ; i<=
np(); i++)
starts[i]=petsc_starts[i];
118 ASSERT( ! ierr ,
"Can not get MPI rank.\n" );
120 ASSERT( ! ierr ,
"Can not get MPI size.\n" );
121 ASSERT(
num_of_procs > 0,
"MPI size is not positive, possibly broken MPI communicator.\n");
124 int reminder, per_proc;
126 reminder=global_size %
np(); per_proc=global_size /
np();
130 for(
unsigned int i=0; i<
np(); i++)
137 for(
unsigned int i=1; i<=
np(); i++)
starts[i]=global_size;
140 ASSERT( 0 ,
"Cyclic distribution is not yet implemented.\n");
148 : communicator(distr.communicator)
166 ASSERT(idx <
size(),
"Index %d greater then distribution size %d.\n", idx,
size());
168 for(
unsigned int i=0; i<
np(); i++) {
171 ASSERT( 0 ,
"Can not find owner of index %d. \n", idx);
195 stream <<
"[" <<
myp() <<
"]" <<
"Distribution size: " <<
size() <<
" lsize: " <<
lsize() <<
" offset: " <<
begin() <<
" mpi_size: " <<
np() << endl;
196 for(
unsigned int i=0; i<
np();++i)
197 stream <<
"[" <<
myp() <<
"]" <<
"proc: " << i <<
" offset: " <<
begin(i) <<
" lsize: " <<
lsize(i) << endl;