/******************************************************** % % Written by: % -- % John L. Weatherwax 2006-05-29 % % email: wax@alum.mit.edu % % Please send comments and especially bug reports to the % above email address. % %----- */ #include #include #include "mpi.h" #include "global_grid.h" #include "sim_consts.h" #include "createSpaceForParticlesToReceive.h" /* creates arrays for data that will be received by each processor: 1) The particles themselves (i.e. their x & y coordinates) stored consecutively 2) The forces on these imported/exported particles, against the ones in the home box (i.e. their x & y coordinates) stored consecutively ... note these need to be initialized to zero and thus require the calloc call */ void createSpaceForParticlesToReceive(void){ /* create NW array */ procInfo.partDataToReceive[NW] = (double*) malloc( 2*procInfo.numToReceive[NW]*sizeof(double) ); if( !procInfo.partDataToReceive[NW] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } procInfo.forcesOnReceivedPart[NW] = (double*) calloc( 2*procInfo.numToReceive[NW], sizeof(double) ); if( !procInfo.forcesOnReceivedPart[NW] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } /* create N array */ procInfo.partDataToReceive[N] = (double*) malloc( 2*procInfo.numToReceive[N]*sizeof(double) ); if( !procInfo.partDataToReceive[N] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } procInfo.forcesOnReceivedPart[N] = (double*) calloc( 2*procInfo.numToReceive[N], sizeof(double) ); if( !procInfo.forcesOnReceivedPart[N] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } /* create NE array */ procInfo.partDataToReceive[NE] = (double*) malloc( 2*procInfo.numToReceive[NE]*sizeof(double) ); if( !procInfo.partDataToReceive[NE] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } procInfo.forcesOnReceivedPart[NE] = (double*) calloc( 2*procInfo.numToReceive[NE], sizeof(double) ); if( !procInfo.forcesOnReceivedPart[NE] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } /* create W array */ procInfo.partDataToReceive[W] = (double*) malloc( 2*procInfo.numToReceive[W]*sizeof(double) ); if( !procInfo.partDataToReceive[W] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } procInfo.forcesOnReceivedPart[W] = (double*) calloc( 2*procInfo.numToReceive[W], sizeof(double) ); if( !procInfo.forcesOnReceivedPart[W] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } /* create I array ... not needed I don't send to myself ... */ procInfo.partDataToReceive[I] = NULL; procInfo.forcesOnReceivedPart[I] = NULL; /* create E array */ procInfo.partDataToReceive[E] = (double*) malloc( 2*procInfo.numToReceive[E]*sizeof(double) ); if( !procInfo.partDataToReceive[E] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } procInfo.forcesOnReceivedPart[E] = (double*) calloc( 2*procInfo.numToReceive[E], sizeof(double) ); if( !procInfo.forcesOnReceivedPart[E] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } /* create SW array */ procInfo.partDataToReceive[SW] = (double*) malloc( 2*procInfo.numToReceive[SW]*sizeof(double) ); if( !procInfo.partDataToReceive[SW] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } procInfo.forcesOnReceivedPart[SW] = (double*) calloc( 2*procInfo.numToReceive[SW], sizeof(double) ); if( !procInfo.forcesOnReceivedPart[SW] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } /* create S array */ procInfo.partDataToReceive[S] = (double*) malloc( 2*procInfo.numToReceive[S]*sizeof(double) ); if( !procInfo.partDataToReceive[S] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } procInfo.forcesOnReceivedPart[S] = (double*) calloc( 2*procInfo.numToReceive[S], sizeof(double) ); if( !procInfo.forcesOnReceivedPart[S] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } /* create SE array */ procInfo.partDataToReceive[SE] = (double*) malloc( 2*procInfo.numToReceive[SE]*sizeof(double) ); if( !procInfo.partDataToReceive[SE] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } procInfo.forcesOnReceivedPart[SE] = (double*) calloc( 2*procInfo.numToReceive[SE], sizeof(double) ); if( !procInfo.forcesOnReceivedPart[SE] ){ fprintf(stderr,"No memory!\n"); MPI_Abort(MPI_COMM_WORLD,1); } }