source: issm/oecreview/Archive/13393-13976/ISSM-13600-13601.diff@ 14312

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

preparing oecreview for 13393-13976'

File size: 4.6 KB
  • ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp

     
    1515void MatToSerial(double** poutmatrix,Mat matrix,COMM comm){
    1616
    1717        int i;
    18         extern int my_rank;
    19         extern int num_procs;
     18        int my_rank2;
     19        int num_procs2;
    2020       
    2121        /*Petsc variables*/
    2222        PetscInt lower_row,upper_row;
     
    2828        double* local_matrix=NULL; /*matrix local to each node used for temporary holding matrix values*/
    2929        int buffer[3];
    3030       
     31        /*recover my_rank2 and num_procs2:*/
     32        MPI_Comm_size(comm,&num_procs2);
     33        MPI_Comm_rank(comm,&my_rank2);
     34
    3135        /*Output*/
    3236        double* outmatrix=NULL;
    3337       
     
    4044        range=upper_row-lower_row+1;
    4145       
    4246        /*Local and global allocation*/
    43         if (my_rank==0)outmatrix=xNew<double>(M*N);
     47        if (my_rank2==0)outmatrix=xNew<double>(M*N);
    4448       
    4549        if (range){
    4650                local_matrix=xNew<double>(N*range);
     
    6064        /*Now each node holds its local_matrix containing range rows.
    6165         * We send these rows to the matrix on node 0*/
    6266       
    63         for (i=1;i<num_procs;i++){
    64                 if (my_rank==i){
    65                         buffer[0]=my_rank;
     67        for (i=1;i<num_procs2;i++){
     68                if (my_rank2==i){
     69                        buffer[0]=my_rank2;
    6670                        buffer[1]=lower_row;
    6771                        buffer[2]=range;
    6872                        MPI_Send(buffer,3,MPI_INT,0,1,comm);   
    6973                        if (range)MPI_Send(local_matrix,N*range,MPI_DOUBLE,0,1,comm);
    7074                }
    71                 if (my_rank==0){
     75                if (my_rank2==0){
    7276                        MPI_Recv(buffer,3,MPI_INT,i,1,comm,&status);
    7377                        if (buffer[2])MPI_Recv(outmatrix+(buffer[1]*N),N*buffer[2],MPI_DOUBLE,i,1,comm,&status);
    7478                }
    7579        }
    76         if (my_rank==0){
     80        if (my_rank2==0){
    7781                //Still have the local_matrix on node 0 to take care of.
    7882                memcpy(outmatrix,local_matrix,N*range*sizeof(double));
    7983        }
  • ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp

     
    1515int VecToMPISerial(double** pgathered_vector, Vec vector,COMM comm){
    1616       
    1717        int i;
    18         extern int num_procs;
    19         extern int my_rank;
     18        int num_procs2;
     19        int my_rank2;
    2020
    2121        /*Petsc*/
    2222        MPI_Status status;
     
    3333       
    3434        /*Output*/
    3535        double* gathered_vector=NULL; //Global vector holding the final assembled vector on all nodes.
     36       
     37        /*recover my_rank2 and num_procs2*/
     38        MPI_Comm_size(comm,&num_procs2);
     39        MPI_Comm_rank(comm,&my_rank2);
    3640
    3741        VecGetSize(vector,&vector_size);
    3842        if(vector_size==0){
     
    6064
    6165        /*Now each node holds its local_vector containing range rows.
    6266         * We send this local_vector  to the gathered_vector on node 0*/
    63         for (i=1;i<num_procs;i++){
    64                 if (my_rank==i){
    65                         buffer[0]=my_rank;
     67        for (i=1;i<num_procs2;i++){
     68                if (my_rank2==i){
     69                        buffer[0]=my_rank2;
    6670                        buffer[1]=lower_row;
    6771                        buffer[2]=range;
    6872                        MPI_Send(buffer,3,MPI_INT,0,1,comm); 
    6973                        if (range)MPI_Send(local_vector,range,MPI_DOUBLE,0,1,comm);
    7074                }
    71                 if (my_rank==0){
     75                if (my_rank2==0){
    7276                        MPI_Recv(buffer,3,MPI_INT,i,1,comm,&status);
    7377                        if (buffer[2])MPI_Recv(gathered_vector+buffer[1],buffer[2],MPI_DOUBLE,i,1,comm,&status);
    7478                }
    7579        }
    7680
    77         if (my_rank==0){
     81        if (my_rank2==0){
    7882                //Still have the local_vector on node 0 to take care of.
    7983                if (range)memcpy(gathered_vector+lower_row,local_vector,range*sizeof(double));
    8084        }
  • ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp

     
    1616void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm){
    1717
    1818        /*externals :*/
    19         extern int my_rank;
    20         extern int num_procs;
     19        int my_rank2;
     20        int num_procs2;
    2121       
     22        /*recover my_rank2 and num_procs2:*/
     23        MPI_Comm_size(comm,&num_procs2);
     24        MPI_Comm_rank(comm,&my_rank2);
     25
    2226        /*output: */
    2327        int lower_row,upper_row;
    2428       
     
    2731        int* allranges=NULL;
    2832
    2933        /*Gather all range values into allranges, for all nodes*/
    30         allranges=xNew<int>(num_procs);
     34        allranges=xNew<int>(num_procs2);
    3135        MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,comm);
    3236
    3337        /*From all ranges, get lower row and upper row*/
    3438        lower_row=0;
    3539        upper_row=lower_row+allranges[0];
    36         for (i=1;i<=my_rank;i++){
     40        for (i=1;i<=my_rank2;i++){
    3741                lower_row=lower_row+allranges[i-1];
    3842                upper_row=upper_row+allranges[i];
    3943        }
Note: See TracBrowser for help on using the repository browser.