/[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 82 by jgs, Tue Oct 26 06:53:54 2004 UTC revision 97 by jgs, Tue Dec 14 05:39:33 2004 UTC
# Line 22  Line 22 
22     triangle of the matrix is stored. */     triangle of the matrix is stored. */
23    
24  void Finley_IndexList_insertElements(Finley_IndexList* index_list, Finley_ElementFile* elements,  void Finley_IndexList_insertElements(Finley_IndexList* index_list, Finley_ElementFile* elements,
25                                         int reduce_row_order, int packed_row_block_size, maybelong* row_Label,                                         int reduce_row_order, maybelong* row_Label,
26                                         int reduce_col_order, int packed_col_block_size, maybelong* col_Label,                                         int reduce_col_order, maybelong* col_Label) {
27                                         int symmetric, Finley_SystemMatrixType matType) {    maybelong e,kr,kc,NN_row,NN_col,i,icol,irow,color;
   maybelong e,kr,ir,kc,ic,NN_row,NN_col,i;  
   Finley_IndexList * tmp_list;  
   maybelong jr,jc,icol,irow,color;  
   
28    
29    if (elements!=NULL) {    if (elements!=NULL) {
30      maybelong NN=elements->ReferenceElement->Type->numNodes;      maybelong NN=elements->ReferenceElement->Type->numNodes;
# Line 48  void Finley_IndexList_insertElements(Fin Line 44  void Finley_IndexList_insertElements(Fin
44         row_node=id;         row_node=id;
45         NN_row=elements->ReferenceElement->Type->numNodes;         NN_row=elements->ReferenceElement->Type->numNodes;
46      }      }
47        for (color=0;color<elements->numColors;color++) {
48      #pragma omp parallel private(color)          #pragma omp for private(e,irow,kr,kc,icol) schedule(static)
49      {          for (e=0;e<elements->numElements;e++) {
50         switch(matType) {              if (elements->Color[e]==color) {
51         case CSR:                  for (kr=0;kr<NN_row;kr++) {
52           if (symmetric) {                    irow=row_Label[elements->Nodes[INDEX2(row_node[kr],e,NN)]];
53              for (color=0;color<elements->numColors;color++) {                    for (kc=0;kc<NN_col;kc++) {
54                 #pragma omp for private(e,kr,jr,kc,jc,ir,irow,ic,icol,tmp_list) schedule(static)                         icol=col_Label[elements->Nodes[INDEX2(col_node[kc],e,NN)]];
55                 for (e=0;e<elements->numElements;e++) {                         Finley_IndexList_insertIndex(&(index_list[irow]),icol);
                   if (elements->Color[e]==color) {  
                      for (kr=0;kr<NN_row;kr++) {  
                         jr=row_Label[elements->Nodes[INDEX2(row_node[kr],e,NN)]];  
                         for (ir=0;ir<packed_row_block_size;ir++) {  
                            irow=ir+packed_row_block_size*jr;  
                            tmp_list=&(index_list[irow]);  
                            for (kc=0;kc<NN_col;kc++) {  
                               jc=col_Label[elements->Nodes[INDEX2(col_node[kc],e,NN)]];  
                               for (ic=0;ic<packed_col_block_size;ic++) {  
                                  icol=ic+packed_col_block_size*jc;  
                                  if (irow<=icol) Finley_IndexList_insertIndex(tmp_list,icol);  
                               }  
                            }  
                         }  
                      }  
                   }  
                }  
             }  
          } else {  
             for (color=0;color<elements->numColors;color++) {  
                #pragma omp for private(e,kr,jr,kc,jc,ir,irow,ic,icol,tmp_list) schedule(static)  
                for (e=0;e<elements->numElements;e++) {  
                   if (elements->Color[e]==color) {  
                      for (kr=0;kr<NN_row;kr++) {  
                         jr=row_Label[elements->Nodes[INDEX2(row_node[kr],e,NN)]];  
                         for (ir=0;ir<packed_row_block_size;ir++) {  
                            irow=ir+packed_row_block_size*jr;  
                            tmp_list=&(index_list[irow]);  
                            for (kc=0;kc<NN_col;kc++) {  
                               jc=col_Label[elements->Nodes[INDEX2(col_node[kc],e,NN)]];  
                               for (ic=0;ic<packed_col_block_size;ic++) {                                  icol=ic+packed_col_block_size*jc;  
                                  Finley_IndexList_insertIndex(tmp_list,icol);  
                               }  
                            }  
                         }  
                      }  
                   }  
                }  
             }  
          } /* if else */  
          break;  
        case CSC:  
          if (symmetric) {  
             for (color=0;color<elements->numColors;color++) {  
                #pragma omp for private (e,kr,jr,kc,jc,ir,irow,ic,icol,tmp_list) schedule(static)  
                for (e=0;e<elements->numElements;e++) {  
                   if (elements->Color[e]==color) {  
                      for (kc=0;kc<NN_col;kc++) {  
                         jc=col_Label[elements->Nodes[INDEX2(col_node[kc],e,NN)]];  
                         for (ic=0;ic<packed_col_block_size;ic++) {  
                            icol=ic+packed_col_block_size*jc;  
                            tmp_list=&(index_list[icol]);  
                            for (kr=0;kr<NN_row;kr++) {  
                               jr=row_Label[elements->Nodes[INDEX2(row_node[kr],e,NN)]];  
                               for (ir=0;ir<packed_row_block_size;ir++) {  
                                  irow=ir+packed_row_block_size*jr;  
                                  if (irow<=icol) Finley_IndexList_insertIndex(tmp_list,irow);  
                               }  
                            }  
                         }  
                      }  
56                    }                    }
57                 }                  }
58              }              }
59           } else {          }
60             for (color=0;color<elements->numColors;color++) {        }
                #pragma omp for private (e,kr,jr,kc,jc,ir,irow,ic,icol,tmp_list) schedule(static)  
                for (e=0;e<elements->numElements;e++) {  
                   if (elements->Color[e]==color) {  
                      for (kc=0;kc<NN_col;kc++) {  
                         jc=col_Label[elements->Nodes[INDEX2(col_node[kc],e,NN)]];  
                         for (ic=0;ic<packed_col_block_size;ic++) {  
                            icol=ic+packed_col_block_size*jc;  
                            tmp_list=&(index_list[icol]);  
                            for (kr=0;kr<NN_row;kr++) {  
                               jr=row_Label[elements->Nodes[INDEX2(row_node[kr],e,NN)]];  
                               for (ir=0;ir<packed_row_block_size;ir++) {  
                                  irow=ir+packed_row_block_size*jr;  
                                  Finley_IndexList_insertIndex(tmp_list,irow);  
                               }  
                            }  
                         }  
                      }  
                   }  
                }  
             }  
          } /* if else */  
        } /* switch matType */  
     }  
61    }    }
62    return;    return;
63  }  }
# Line 156  void Finley_IndexList_insertIndex(Finley Line 68  void Finley_IndexList_insertIndex(Finley
68    int i;    int i;
69    /* is index in in? */    /* is index in in? */
70    for (i=0;i<in->n;i++) {    for (i=0;i<in->n;i++) {
71      if (in->index[i]==index) return;      if (in->index[i]==index)  return;
72    }    }
73    /* index could not be found */    /* index could not be found */
74    if (in->n==INDEXLIST_LENGTH) {    if (in->n==INDEXLIST_LENGTH) {
75       /* if in->index is full check the extension */       /* if in->index is full check the extension */
76       if (in->extension==NULL) {       if (in->extension==NULL) {
77          in->extension=(Finley_IndexList*) TMPMEMALLOC(sizeof(Finley_IndexList));          in->extension=TMPMEMALLOC(1,Finley_IndexList);
78          if (Finley_checkPtr(in->extension)) return;          if (Finley_checkPtr(in->extension)) return;
79          in->extension->n=0;          in->extension->n=0;
80          in->extension->extension=NULL;          in->extension->extension=NULL;
# Line 206  void Finley_IndexList_free(Finley_IndexL Line 118  void Finley_IndexList_free(Finley_IndexL
118    
119  /*  /*
120   * $Log$   * $Log$
121   * Revision 1.1  2004/10/26 06:53:57  jgs   * Revision 1.2  2004/12/14 05:39:30  jgs
122   * Initial revision   * *** empty log message ***
123     *
124     * Revision 1.1.1.1.2.2  2004/11/24 01:37:13  gross
125     * some changes dealing with the integer overflow in memory allocation. Finley solves 4M unknowns now
126     *
127     * Revision 1.1.1.1.2.1  2004/11/12 06:58:18  gross
128     * a lot of changes to get the linearPDE class running: most important change is that there is no matrix format exposed to the user anymore. the format is chosen by the Domain according to the solver and symmetry
129     *
130     * Revision 1.1.1.1  2004/10/26 06:53:57  jgs
131     * initial import of project esys2
132   *   *
133   * Revision 1.1.2.2  2004/10/26 06:36:39  jgs   * Revision 1.1.2.2  2004/10/26 06:36:39  jgs
134   * committing Lutz's changes to branch jgs   * committing Lutz's changes to branch jgs

Legend:
Removed from v.82  
changed lines
  Added in v.97

  ViewVC Help
Powered by ViewVC 1.1.26