00001 #include "pprobdesct.h"
00002 #include "pglobalt.h"
00003 #include <string.h>
00004
00005 pprobdesct::pprobdesct (void)
00006 {
00007
00008 }
00009
00010 pprobdesct::~pprobdesct (void)
00011 {
00012
00013 }
00014
00015
00016
00017
00018
00019
00020
00021 void pprobdesct::shift_indices ()
00022 {
00023 long i,j,k,*nnarray,*nearray,*buff;
00024 MPI_Status stat;
00025
00026 buff = new long [2];
00027
00028 buff[0]=Gtt->nn;
00029 buff[1]=Gtt->ne;
00030
00031 if (Myrank==0){
00032 nnarray = new long [Nproc];
00033 nearray = new long [Nproc];
00034
00035
00036 j=Psolt->domproc[0];
00037 nnarray[j]=buff[0];
00038 nearray[j]=buff[1];
00039
00040
00041 for (i=1;i<Nproc;i++){
00042 MPI_Recv (buff,2,MPI_LONG,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&stat);
00043 j=Psolt->domproc[stat.MPI_TAG];
00044 nnarray[j]=buff[0];
00045 nearray[j]=buff[1];
00046 }
00047
00048 j=nnarray[0];
00049 nnarray[0]=1;
00050 for (i=1;i<Nproc;i++){
00051 k=nnarray[i];
00052 nnarray[i]=nnarray[i-1]+j;
00053 j=k;
00054 }
00055 j=nearray[0];
00056 nearray[0]=1;
00057 for (i=1;i<Nproc;i++){
00058 k=nearray[i];
00059 nearray[i]=nearray[i-1]+j;
00060 j=k;
00061 }
00062
00063 for (i=1;i<Nproc;i++){
00064 buff[0]=nnarray[i];
00065 buff[1]=nearray[i];
00066 MPI_Send (buff,2,MPI_LONG,i,Myrank,MPI_COMM_WORLD);
00067 }
00068
00069 buff[0]=nnarray[0];
00070 buff[1]=nearray[0];
00071
00072 delete [] nnarray; delete [] nearray;
00073 }
00074 else{
00075 MPI_Send (buff,2,MPI_LONG,0,Myrank,MPI_COMM_WORLD);
00076 MPI_Recv (buff,2,MPI_LONG,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&stat);
00077 }
00078
00079
00080 fni = buff[0];
00081
00082 fei = buff[1];
00083
00084 delete [] buff;
00085 }
00086