/[escript]/trunk/paso/src/Coupler.c
ViewVC logotype

Diff of /trunk/paso/src/Coupler.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1561 by gross, Mon May 12 00:54:58 2008 UTC revision 1562 by gross, Wed May 21 13:04:40 2008 UTC
# Line 39  Paso_Connector* Paso_Connector_alloc(Pas Line 39  Paso_Connector* Paso_Connector_alloc(Pas
39       Paso_setError(SYSTEM_ERROR,"Paso_Coupler_alloc: send and recv mpi communicator don't match.");       Paso_setError(SYSTEM_ERROR,"Paso_Coupler_alloc: send and recv mpi communicator don't match.");
40       return NULL;       return NULL;
41    }    }
42      if ( send->local_length != recv->local_length ) {
43         Paso_setError(SYSTEM_ERROR,"Paso_Coupler_alloc: local length of send and recv Paso_SharedComponents must match.");
44         return NULL;
45      }
46      
47    if (!Paso_checkPtr(out)) {    if (!Paso_checkPtr(out)) {
48        out->send=Paso_SharedComponents_getReference(send);        out->send=Paso_SharedComponents_getReference(send);
49        out->recv= Paso_SharedComponents_getReference(recv);        out->recv= Paso_SharedComponents_getReference(recv);
# Line 87  Paso_Connector* Paso_Connector_unroll(Pa Line 92  Paso_Connector* Paso_Connector_unroll(Pa
92       Paso_Connector *out=NULL;       Paso_Connector *out=NULL;
93       if (Paso_noError()) {       if (Paso_noError()) {
94          if (block_size>1) {          if (block_size>1) {
95              new_send_shcomp=Paso_SharedComponents_alloc(in->send->numNeighbors,              new_send_shcomp=Paso_SharedComponents_alloc(in->send->local_length,
96                                                            in->send->numNeighbors,
97                                                          in->send->neighbor,                                                          in->send->neighbor,
98                                                          in->send->shared,                                                          in->send->shared,
99                                                          in->send->offsetInShared,                                                          in->send->offsetInShared,
100                                                          block_size,0,in->mpi_info);                                                          block_size,0,in->mpi_info);
101    
102              new_recv_shcomp=Paso_SharedComponents_alloc(in->recv->numNeighbors,              new_recv_shcomp=Paso_SharedComponents_alloc(in->recv->local_length,
103                                                            in->recv->numNeighbors,
104                                                          in->recv->neighbor,                                                          in->recv->neighbor,
105                                                          in->recv->shared,                                                          in->recv->shared,
106                                                          in->recv->offsetInShared,                                                          in->recv->offsetInShared,
# Line 126  Paso_Coupler* Paso_Coupler_alloc(Paso_Co Line 133  Paso_Coupler* Paso_Coupler_alloc(Paso_Co
133    Paso_resetError();    Paso_resetError();
134    out=MEMALLOC(1,Paso_Coupler);    out=MEMALLOC(1,Paso_Coupler);
135    if (!Paso_checkPtr(out)) {    if (!Paso_checkPtr(out)) {
136          out->data=NULL;
137        out->block_size=block_size;        out->block_size=block_size;
138        out->connector=Paso_Connector_getReference(connector);        out->connector=Paso_Connector_getReference(connector);
139        out->send_buffer=NULL;        out->send_buffer=NULL;
# Line 186  void Paso_Coupler_free(Paso_Coupler* in) Line 194  void Paso_Coupler_free(Paso_Coupler* in)
194  }  }
195    
196    
197  void Paso_Coupler_startCollect(Paso_Coupler* coupler,const double* in)  void Paso_Coupler_startCollect(Paso_Coupler* coupler,double* in)
198  {  {
199    Paso_MPIInfo *mpi_info = coupler->mpi_info;      Paso_MPIInfo *mpi_info = coupler->mpi_info;  
200    dim_t block_size=coupler->block_size;    dim_t block_size=coupler->block_size;
201    size_t block_size_size=block_size*sizeof(double);    size_t block_size_size=block_size*sizeof(double);
202    dim_t i,j;    dim_t i,j;
203      coupler->data=in;
204    if ( mpi_info->size>1) {    if ( mpi_info->size>1) {
205       /* start reveiving input */       /* start reveiving input */
206       {       {
# Line 244  double* Paso_Coupler_finishCollect(Paso_ Line 253  double* Paso_Coupler_finishCollect(Paso_
253    }    }
254    return coupler->recv_buffer;    return coupler->recv_buffer;
255  }  }
256    dim_t Paso_Coupler_getLocalLength(const Paso_Coupler* in) {
257         return in->connector->send->local_length;
258    
259    }
260    void Paso_Coupler_copyAll(const Paso_Coupler* src, Paso_Coupler* target)
261    {
262       dim_t i;
263       #pragma omp parallel
264       {
265           #pragma omp for private(i)
266           for (i =0; i< src->connector->recv->numSharedComponents * src->block_size; ++i) {
267              target->recv_buffer[i]=src->recv_buffer[i];
268          }
269          #pragma omp for private(i)
270          for (i =0; i< Paso_Coupler_getLocalLength(src) * src->block_size; ++i) {
271              target->data[i]=src->data[i];
272         }
273      }
274    }

Legend:
Removed from v.1561  
changed lines
  Added in v.1562

  ViewVC Help
Powered by ViewVC 1.1.26