source: issm/trunk/src/c/toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp@ 15396

Last change on this file since 15396 was 15396, checked in by Mathieu Morlighem, 12 years ago

merged trunk-jpl and trunk for revision 15394

File size: 1.1 KB
Line 
1/*! \file: GetOwnershipBoundariesFromRange.cpp
2 * \brief from a local range on each cpu, we determine what
3 * lower row and upper row from a matrix a cpu owns.
4 */
5
6#ifdef HAVE_CONFIG_H
7 #include <config.h>
8#else
9#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
10#endif
11
12#include <stdio.h>
13#include "../../../shared/MemOps/MemOps.h"
14#include "../../../shared/io/Comm/Comm.h"
15
16void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm){
17
18 /*externals :*/
19 int my_rank;
20 int num_procs;
21
22 /*recover my_rank and num_procs:*/
23 MPI_Comm_size(comm,&num_procs);
24 MPI_Comm_rank(comm,&my_rank);
25
26 /*output: */
27 int lower_row,upper_row;
28
29 /*Gather all range values into allranges, for all nodes*/
30 int* allranges=xNew<int>(num_procs);
31 MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,comm);
32
33 /*From all ranges, get lower row and upper row*/
34 lower_row=0;
35 upper_row=lower_row+allranges[0];
36 for(int i=1;i<=my_rank;i++){
37 lower_row=lower_row+allranges[i-1];
38 upper_row=upper_row+allranges[i];
39 }
40
41 /*Assign output*/
42 *plower_row=lower_row;
43 *pupper_row=upper_row;
44 xDelete<int>(allranges);
45}
Note: See TracBrowser for help on using the repository browser.