/[escript]/trunk/finley/src/IndexList.c
ViewVC logotype

Diff of /trunk/finley/src/IndexList.c

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

revision 2747 by gross, Thu Jul 23 09:19:15 2009 UTC revision 2748 by gross, Tue Nov 17 07:32:59 2009 UTC
# Line 31  void Finley_IndexList_insertElements(Fin Line 31  void Finley_IndexList_insertElements(Fin
31                                         bool_t reduce_row_order, index_t* row_map,                                         bool_t reduce_row_order, index_t* row_map,
32                                         bool_t reduce_col_order, index_t* col_map) {                                         bool_t reduce_col_order, index_t* col_map) {
33    /* index_list is an array of linked lists. Each entry is a row (DOF) and contains the indices to the non-zero columns */    /* index_list is an array of linked lists. Each entry is a row (DOF) and contains the indices to the non-zero columns */
34    index_t color, *id=NULL;    index_t color;
35    dim_t e,kr,kc,NN_row,NN_col,i,icol,irow, NN, *row_node=NULL,*col_node=NULL;    Finley_ReferenceElement*refElement;
36      dim_t e, kr, kc, NN_row, NN_col, icol, irow, NN, *row_node=NULL, *col_node=NULL, isub, numSub;
37    if (elements!=NULL) {    if (elements!=NULL) {
38      NN=elements->numNodes;      NN=elements->numNodes;
39      id=TMPMEMALLOC(NN, index_t);      refElement= Finley_ReferenceElementSet_borrowReferenceElement(elements->referenceElementSet, FALSE);
40      if (! Finley_checkPtr(id) ) {        
41         for (i=0;i<NN;i++) id[i]=i;      if (reduce_col_order) {
42         if (reduce_col_order) {            numSub=1;
43            col_node=elements->ReferenceElement->Type->linearNodes;            col_node=refElement->Type->linearNodes;
44            NN_col=elements->LinearReferenceElement->Type->numNodes;            NN_col=(refElement->LinearBasisFunctions->Type->numShapes) * (refElement->Type->numSides) ;
45         } else {      } else {
46            col_node=id;            numSub=refElement->Type->numSubElements;
47            NN_col=elements->ReferenceElement->Type->numNodes;            col_node=refElement->Type->subElementNodes;
48         }            NN_col=(refElement->BasisFunctions->Type->numShapes) * (refElement->Type->numSides) ;
49         if (reduce_row_order) {      }
50            row_node=elements->ReferenceElement->Type->linearNodes;  
51            NN_row=elements->LinearReferenceElement->Type->numNodes;      if (reduce_row_order) {
52         } else {            numSub=1;
53            row_node=id;            row_node=refElement->Type->linearNodes;
54            NN_row=elements->ReferenceElement->Type->numNodes;            NN_row=(refElement->LinearBasisFunctions->Type->numShapes) * (refElement->Type->numSides) ;
55         }      } else {
56         for (color=elements->minColor;color<=elements->maxColor;color++) {            numSub=refElement->Type->numSubElements;
57             #pragma omp for private(e,irow,kr,kc,icol) schedule(static)            row_node=refElement->Type->subElementNodes;
58              NN_row=(refElement->BasisFunctions->Type->numShapes) * (refElement->Type->numSides) ;
59        }
60    
61        for (color=elements->minColor;color<=elements->maxColor;color++) {
62               #pragma omp for private(e,irow,kr,kc,icol,isub) schedule(static)
63             for (e=0;e<elements->numElements;e++) {             for (e=0;e<elements->numElements;e++) {
64                 if (elements->Color[e]==color) {                 if (elements->Color[e]==color) {
65                     for (kr=0;kr<NN_row;kr++) {                     for (isub=0;isub<numSub; isub++) {
66                       irow=row_map[elements->Nodes[INDEX2(row_node[kr],e,NN)]];                         for (kr=0;kr<NN_row;kr++) {
67                       for (kc=0;kc<NN_col;kc++) {                             irow=row_map[elements->Nodes[INDEX2(row_node[INDEX2(kr,isub,NN_row)],e,NN)]];
68                            icol=col_map[elements->Nodes[INDEX2(col_node[kc],e,NN)]];                             for (kc=0;kc<NN_col;kc++) {
69                            Finley_IndexList_insertIndex(&(index_list[irow]),icol);                                 icol=col_map[elements->Nodes[INDEX2(col_node[INDEX2(kc,isub,NN_col)],e,NN)]];
70                       }                                 Finley_IndexList_insertIndex(&(index_list[irow]),icol);
71                     }                             }
72                           }
73                       }
74                 }                 }
75             }             }
76         }         }
        TMPMEMFREE(id);  
     }  
77    }    }
78    return;    return;
79  }  }
80    
81    
82  void Finley_IndexList_insertElementsWithRowRange(Finley_IndexList* index_list, index_t firstRow, index_t lastRow,  void Finley_IndexList_insertElementsWithRowRange(Finley_IndexList* index_list, index_t firstRow, index_t lastRow,
83                                                   Finley_ElementFile* elements, index_t* row_map, index_t* col_map)                                                   Finley_ElementFile* elements, index_t* row_map, index_t* col_map)
84  {  {
85    index_t color;  /* this does not resolve macro elements */
86        index_t color;
87    dim_t e,kr,kc,icol,irow, NN;    dim_t e,kr,kc,icol,irow, NN;
88    if (elements!=NULL) {    if (elements!=NULL) {
89      NN=elements->numNodes;      NN=elements->numNodes;
# Line 101  void Finley_IndexList_insertElementsWith Line 109  void Finley_IndexList_insertElementsWith
109  void Finley_IndexList_insertElementsWithRowRangeNoMainDiagonal(Finley_IndexList* index_list, index_t firstRow, index_t lastRow,  void Finley_IndexList_insertElementsWithRowRangeNoMainDiagonal(Finley_IndexList* index_list, index_t firstRow, index_t lastRow,
110                                                                Finley_ElementFile* elements, index_t* row_map, index_t* col_map)                                                                Finley_ElementFile* elements, index_t* row_map, index_t* col_map)
111  {  {
112      /* this does not resolve macro elements */
113    index_t color;    index_t color;
114    dim_t e,kr,kc,icol,irow, NN,irow_loc;    dim_t e,kr,kc,icol,irow, NN,irow_loc;
115    if (elements!=NULL) {    if (elements!=NULL) {

Legend:
Removed from v.2747  
changed lines
  Added in v.2748

  ViewVC Help
Powered by ViewVC 1.1.26