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

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

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

revision 2881 by jfenwick, Thu Jan 28 02:03:15 2010 UTC revision 3005 by gross, Thu Apr 22 05:59:31 2010 UTC
# Line 92  Paso_Pattern* Paso_Pattern_alloc(int typ Line 92  Paso_Pattern* Paso_Pattern_alloc(int typ
92        out->numInput=numInput;        out->numInput=numInput;
93        out->ptr=ptr;        out->ptr=ptr;
94        out->index=index;        out->index=index;
95          out->main_iptr = NULL;
96    
97        if (out->ptr == NULL) {        if (out->ptr == NULL) {
98            out->len=0;            out->len=0;
# Line 99  Paso_Pattern* Paso_Pattern_alloc(int typ Line 100  Paso_Pattern* Paso_Pattern_alloc(int typ
100            out->len=out->ptr[out->numOutput] - index_offset;            out->len=out->ptr[out->numOutput] - index_offset;
101        }        }
102    }    }
   #ifdef Paso_TRACE  
   printf("Paso_Pattern_alloc: system matrix pattern has been allocated.\n");  
   #endif  
103    return out;    return out;
104  }  }
105    
# Line 122  void Paso_Pattern_free(Paso_Pattern* in) Line 120  void Paso_Pattern_free(Paso_Pattern* in)
120       if (in->reference_counter<=0) {       if (in->reference_counter<=0) {
121          MEMFREE(in->ptr);          MEMFREE(in->ptr);
122          MEMFREE(in->index);          MEMFREE(in->index);
123        MEMFREE(in->main_iptr);
124          MEMFREE(in);          MEMFREE(in);
         #ifdef Paso_TRACE  
         printf("Paso_Pattern_free: pattern as been deallocated.\n");  
         #endif  
125       }       }
126     }     }
127  }  }
# Line 190  Paso_Pattern* Paso_Pattern_multiply(int Line 186  Paso_Pattern* Paso_Pattern_multiply(int
186            
187    out=Paso_IndexList_createPattern(0, A->numOutput,index_list,0,B->numInput,0);    out=Paso_IndexList_createPattern(0, A->numOutput,index_list,0,B->numInput,0);
188    
   #ifdef Paso_TRACE  
   printf("Paso_Pattern_multipy: new pattern has been allocated.\n");  
   #endif  
   
189   /* clean up */   /* clean up */
190     if (index_list!=NULL) {     if (index_list!=NULL) {
191         #pragma omp parallel for private(i) schedule(static)         #pragma omp parallel for private(i) schedule(static)
# Line 386  Paso_Pattern* Paso_IndexList_createPatte Line 378  Paso_Pattern* Paso_IndexList_createPatte
378    }    }
379    return out;    return out;
380  }  }
381    
382    index_t* Paso_Pattern_borrowMainDiagonalPointer(Paso_Pattern* A)
383    {
384        const dim_t n=A->numOutput;
385        int fail=0;
386        index_t i,iptr,iptr_main;
387        
388         if (A->main_iptr == NULL) {
389             A->main_iptr=MEMALLOC(n,index_t);
390             if (! Paso_checkPtr(A->main_iptr) ) {
391             #pragma omp parallel
392                 {
393                     /* identify the main diagonals */
394                     #pragma omp for schedule(static) private(i,iptr,iptr_main)
395                     for (i = 0; i < n; ++i) {
396                            iptr_main=A->ptr[0]-1;
397                            for (iptr=A->ptr[i];iptr<A->ptr[i+1]; iptr++) {
398                                  if (A->index[iptr]==i) {
399                                       iptr_main=iptr;
400                                       break;
401                                  }
402                            }
403                            A->main_iptr[i]=iptr_main;
404                            if (iptr_main==A->ptr[0]-1) fail=1;
405                      }
406        
407                 }
408             #ifdef PASO_MPI
409             {
410                      int fail_loc = fail;
411                      MPI_Allreduce(&fail_loc, &fail, 1, MPI_INT, MPI_MAX, A->mpi_info->comm);
412             }
413                 #endif
414                 if (fail>0) Paso_setError(VALUE_ERROR, "Paso_TransportProblem_alloc: no main diagonal");
415         }
416         }
417         return A->main_iptr;
418    }

Legend:
Removed from v.2881  
changed lines
  Added in v.3005

  ViewVC Help
Powered by ViewVC 1.1.26