/[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 1556 by gross, Mon May 12 00:54:58 2008 UTC revision 1639 by gross, Mon Jul 14 08:55:25 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 71  void Paso_Connector_free(Paso_Connector* Line 76  void Paso_Connector_free(Paso_Connector*
76          Paso_SharedComponents_free(in->send);          Paso_SharedComponents_free(in->send);
77          Paso_SharedComponents_free(in->recv);          Paso_SharedComponents_free(in->recv);
78          Paso_MPIInfo_free(in->mpi_info);          Paso_MPIInfo_free(in->mpi_info);
79            MEMFREE(in);
80          #ifdef Paso_TRACE          #ifdef Paso_TRACE
81          printf("Paso_Coupler_dealloc: system matrix pattern as been deallocated.\n");          printf("Paso_Coupler_dealloc: system matrix pattern as been deallocated.\n");
82          #endif          #endif
# Line 87  Paso_Connector* Paso_Connector_unroll(Pa Line 93  Paso_Connector* Paso_Connector_unroll(Pa
93       Paso_Connector *out=NULL;       Paso_Connector *out=NULL;
94       if (Paso_noError()) {       if (Paso_noError()) {
95          if (block_size>1) {          if (block_size>1) {
96              new_send_shcomp=Paso_SharedComponents_alloc(in->send->numNeighbors,              new_send_shcomp=Paso_SharedComponents_alloc(in->send->local_length,
97                                                            in->send->numNeighbors,
98                                                          in->send->neighbor,                                                          in->send->neighbor,
99                                                          in->send->shared,                                                          in->send->shared,
100                                                          in->send->offsetInShared,                                                          in->send->offsetInShared,
101                                                          block_size,0,in->mpi_info);                                                          block_size,0,in->mpi_info);
102    
103              new_recv_shcomp=Paso_SharedComponents_alloc(in->recv->numNeighbors,              new_recv_shcomp=Paso_SharedComponents_alloc(in->recv->local_length,
104                                                            in->recv->numNeighbors,
105                                                          in->recv->neighbor,                                                          in->recv->neighbor,
106                                                          in->recv->shared,                                                          in->recv->shared,
107                                                          in->recv->offsetInShared,                                                          in->recv->offsetInShared,
# Line 126  Paso_Coupler* Paso_Coupler_alloc(Paso_Co Line 134  Paso_Coupler* Paso_Coupler_alloc(Paso_Co
134    Paso_resetError();    Paso_resetError();
135    out=MEMALLOC(1,Paso_Coupler);    out=MEMALLOC(1,Paso_Coupler);
136    if (!Paso_checkPtr(out)) {    if (!Paso_checkPtr(out)) {
137          out->data=NULL;
138        out->block_size=block_size;        out->block_size=block_size;
139        out->connector=Paso_Connector_getReference(connector);        out->connector=Paso_Connector_getReference(connector);
140        out->send_buffer=NULL;        out->send_buffer=NULL;
# Line 191  void Paso_Coupler_startCollect(Paso_Coup Line 200  void Paso_Coupler_startCollect(Paso_Coup
200    Paso_MPIInfo *mpi_info = coupler->mpi_info;      Paso_MPIInfo *mpi_info = coupler->mpi_info;  
201    dim_t block_size=coupler->block_size;    dim_t block_size=coupler->block_size;
202    size_t block_size_size=block_size*sizeof(double);    size_t block_size_size=block_size*sizeof(double);
203    dim_t i,j;    dim_t i;
204      coupler->data=(double*) in;
205    if ( mpi_info->size>1) {    if ( mpi_info->size>1) {
206       /* start reveiving input */       /* start reveiving input */
207       {       {
# Line 244  double* Paso_Coupler_finishCollect(Paso_ Line 254  double* Paso_Coupler_finishCollect(Paso_
254    }    }
255    return coupler->recv_buffer;    return coupler->recv_buffer;
256  }  }
257    dim_t Paso_Coupler_getLocalLength(const Paso_Coupler* in) {
258         return in->connector->send->local_length;
259    
260    }
261    void Paso_Coupler_copyAll(const Paso_Coupler* src, Paso_Coupler* target)
262    {
263       dim_t i;
264       #pragma omp parallel
265       {
266           #pragma omp for private(i)
267           for (i =0; i< src->connector->recv->numSharedComponents * src->block_size; ++i) {
268              target->recv_buffer[i]=src->recv_buffer[i];
269          }
270          #pragma omp for private(i)
271          for (i =0; i< Paso_Coupler_getLocalLength(src) * src->block_size; ++i) {
272              target->data[i]=src->data[i];
273         }
274      }
275    }

Legend:
Removed from v.1556  
changed lines
  Added in v.1639

  ViewVC Help
Powered by ViewVC 1.1.26