/* Mesh skeleton: containts: graphical routines setup/visualize, master(), registercoord and registerworkers, plus stub worker() process */ #include "mesh.h" int main(int argc, char** argv) { int rank, size, i, j; int themaster = 0; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); if (size != (P*P)+1) {printf("wrong np\n"); exit(1);} // seperate worker from master process: (must be done by all procs) MPI_Group worldgroup, workersgroup; MPI_Comm_group(MPI_COMM_WORLD,&worldgroup); MPI_Group_excl(worldgroup,1,&themaster,&workersgroup); MPI_Comm_create(MPI_COMM_WORLD,workersgroup,&WORKERS); /*** Define MPI_Datatype for sub-matrix and sub-matrix column ***/ MPI_Type_vector(M,M,N+2,MPI_DOUBLE,&QUAD); MPI_Type_vector(M,1,M,MPI_DOUBLE,&COLUMN); MPI_Type_commit(&QUAD); MPI_Type_commit(&COLUMN); if (rank==0) master(); else worker(); MPI_Finalize(); } void registerworkers() { int i, y, x; int buf[2]; MPI_Status stat; // needs to know how to contact each proc in mesh for(i=0;i
=YDIM) k=YDIM-1;
if (j+U