/[escript]/branches/domexper/dudley/src/IndexList.c
ViewVC logotype

Diff of /branches/domexper/dudley/src/IndexList.c

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

revision 1312 by ksteube, Mon Sep 24 06:18:44 2007 UTC revision 1722 by gross, Fri Aug 22 04:20:30 2008 UTC
# Line 77  void Finley_IndexList_insertElementsWith Line 77  void Finley_IndexList_insertElementsWith
77                                                   Finley_ElementFile* elements, index_t* row_map, index_t* col_map)                                                   Finley_ElementFile* elements, index_t* row_map, index_t* col_map)
78  {  {
79    index_t color;    index_t color;
80    dim_t e,kr,kc,i,icol,irow, NN;    dim_t e,kr,kc,icol,irow, NN;
81    if (elements!=NULL) {    if (elements!=NULL) {
82      NN=elements->numNodes;      NN=elements->numNodes;
83      for (color=elements->minColor;color<=elements->maxColor;color++) {      for (color=elements->minColor;color<=elements->maxColor;color++) {
# Line 99  void Finley_IndexList_insertElementsWith Line 99  void Finley_IndexList_insertElementsWith
99      }      }
100    }    }
101  }  }
102    void Finley_IndexList_insertElementsWithRowRangeNoMainDiagonal(Finley_IndexList* index_list, index_t firstRow, index_t lastRow,
103                                                                  Finley_ElementFile* elements, index_t* row_map, index_t* col_map)
104    {
105      index_t color;
106      dim_t e,kr,kc,icol,irow, NN,irow_loc;
107      if (elements!=NULL) {
108        NN=elements->numNodes;
109        for (color=elements->minColor;color<=elements->maxColor;color++) {
110               #pragma omp for private(e,irow,kr,kc,icol,irow_loc) schedule(static)
111               for (e=0;e<elements->numElements;e++) {
112                   if (elements->Color[e]==color) {
113                       for (kr=0;kr<NN;kr++) {
114                         irow=row_map[elements->Nodes[INDEX2(kr,e,NN)]];
115                         if ((firstRow<=irow) && (irow < lastRow)) {
116                              irow_loc=irow-firstRow;
117                              for (kc=0;kc<NN;kc++) {
118                                  icol=col_map[elements->Nodes[INDEX2(kc,e,NN)]];
119                                  if (icol != irow) Finley_IndexList_insertIndex(&(index_list[irow_loc]),icol);
120                              }
121                          }
122                      }
123                   }
124               }
125        }
126      }
127    }
128    
129  /* inserts row index row into the Finley_IndexList in if it does not exist */  /* inserts row index row into the Finley_IndexList in if it does not exist */
130    
# Line 171  void Finley_IndexList_free(Finley_IndexL Line 197  void Finley_IndexList_free(Finley_IndexL
197  }  }
198    
199  /* creates a Paso_pattern from a range of indices */  /* creates a Paso_pattern from a range of indices */
200  Paso_Pattern* Finley_IndexList_createPattern(dim_t n,Finley_IndexList* index_list,index_t range_min,index_t range_max,index_t index_offset)  Paso_Pattern* Finley_IndexList_createPattern(dim_t n0, dim_t n,Finley_IndexList* index_list,index_t range_min,index_t range_max,index_t index_offset)
201  {  {
202     dim_t *ptr=NULL;     dim_t *ptr=NULL;
203     register dim_t s,i,itmp;     register dim_t s,i,itmp;
204     index_t *index=NULL;     index_t *index=NULL;
205     Paso_Pattern* out=NULL;     Paso_Pattern* out=NULL;
206    
207     ptr=MEMALLOC(n+1,index_t);     ptr=MEMALLOC(n+1-n0,index_t);
208     if (! Finley_checkPtr(ptr) ) {     if (! Finley_checkPtr(ptr) ) {
209         /* get the number of connections per row */         /* get the number of connections per row */
210         #pragma omp parallel for schedule(static) private(i)         #pragma omp parallel for schedule(static) private(i)
211         for(i=0;i<n;++i) {         for(i=n0;i<n;++i) {
212                ptr[i]=Finley_IndexList_count(&index_list[i],range_min,range_max);                ptr[i-n0]=Finley_IndexList_count(&index_list[i],range_min,range_max);
213         }         }
214         /* accumulate ptr */         /* accumulate ptr */
215         s=0;         s=0;
216         for(i=0;i<n;++i) {         for(i=n0;i<n;++i) {
217                 itmp=ptr[i];                 itmp=ptr[i-n0];
218                 ptr[i]=s;                 ptr[i-n0]=s;
219                 s+=itmp;                 s+=itmp;
220         }         }
221         ptr[n]=s;         ptr[n-n0]=s;
222         /* fill index */         /* fill index */
223         index=MEMALLOC(ptr[n],index_t);         index=MEMALLOC(ptr[n-n0],index_t);
224         if (! Finley_checkPtr(index)) {         if (! Finley_checkPtr(index)) {
225                #pragma omp parallel for schedule(static)                #pragma omp parallel for schedule(static)
226                for(i=0;i<n;++i) {                for(i=n0;i<n;++i) {
227                    Finley_IndexList_toArray(&index_list[i],&index[ptr[i]],range_min,range_max,index_offset);                    Finley_IndexList_toArray(&index_list[i],&index[ptr[i-n0]],range_min,range_max,index_offset);
228                }                }
229                out=Paso_Pattern_alloc(PATTERN_FORMAT_DEFAULT,1,1,n,ptr,index);                out=Paso_Pattern_alloc(PATTERN_FORMAT_DEFAULT,1,1,n-n0,ptr,index);
230         }         }
231    }    }
232    if (! Finley_noError()) {    if (! Finley_noError()) {

Legend:
Removed from v.1312  
changed lines
  Added in v.1722

  ViewVC Help
Powered by ViewVC 1.1.26