/[escript]/trunk/dudley/src/IndexList.cpp
ViewVC logotype

Diff of /trunk/dudley/src/IndexList.cpp

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

revision 3127 by jfenwick, Wed Sep 1 01:30:28 2010 UTC revision 3141 by jfenwick, Thu Sep 2 23:52:41 2010 UTC
# Line 29  Line 29 
29    
30  void Dudley_IndexList_insertElements(Dudley_IndexList* index_list, Dudley_ElementFile* elements,  void Dudley_IndexList_insertElements(Dudley_IndexList* index_list, Dudley_ElementFile* elements,
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    {
34    /* 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 */
35    index_t color;    index_t color;
36    Dudley_ReferenceElement*refElement;    Dudley_ReferenceElement*refElement;
37    dim_t e, kr, kc, NN_row, NN_col, icol, irow, NN, *row_node=NULL, *col_node=NULL, isub, numSub;    dim_t e, kr, kc, NN_row, NN_col, icol, irow, NN, *row_node=NULL, *col_node=NULL;
38    if (elements!=NULL) {    if (elements!=NULL)
39      {
40      NN=elements->numNodes;      NN=elements->numNodes;
41      refElement= Dudley_ReferenceElementSet_borrowReferenceElement(elements->referenceElementSet, FALSE);      refElement= Dudley_ReferenceElementSet_borrowReferenceElement(elements->referenceElementSet, FALSE);
42              if (reduce_col_order)
43      if (reduce_col_order) {      {
44            numSub=1;      col_node=refElement->Type->linearNodes;
45            col_node=refElement->Type->linearNodes;      NN_col=(refElement->LinearBasisFunctions->Type->numShapes);
46            NN_col=(refElement->LinearBasisFunctions->Type->numShapes);      }
47        else
48        {
49        col_node=refElement->Type->subElementNodes;
50        NN_col=(refElement->BasisFunctions->Type->numShapes);
51        }
52        if (reduce_row_order)
53        {
54        row_node=refElement->Type->linearNodes;
55        NN_row=(refElement->LinearBasisFunctions->Type->numShapes);
56      } else {      } else {
57            numSub=refElement->Type->numSubElements;      row_node=refElement->Type->subElementNodes;
58            col_node=refElement->Type->subElementNodes;      NN_row=(refElement->BasisFunctions->Type->numShapes) ;
           NN_col=(refElement->BasisFunctions->Type->numShapes);  
59      }      }
60    
61      if (reduce_row_order) {      for (color=elements->minColor;color<=elements->maxColor;color++)
62            numSub=1;      {
63            row_node=refElement->Type->linearNodes;      #pragma omp for private(e,irow,kr,kc,icol,isub) schedule(static)
64            NN_row=(refElement->LinearBasisFunctions->Type->numShapes);      for (e=0;e<elements->numElements;e++)
65      } else {      {
66            numSub=refElement->Type->numSubElements;          if (elements->Color[e]==color)
67            row_node=refElement->Type->subElementNodes;          {
68            NN_row=(refElement->BasisFunctions->Type->numShapes) ;              for (kr=0;kr<NN_row;kr++)
69                {
70                    irow=row_map[elements->Nodes[INDEX2(row_node[INDEX2(kr,0,NN_row)],e,NN)]];
71                    for (kc=0;kc<NN_col;kc++)
72                    {
73                    icol=col_map[elements->Nodes[INDEX2(col_node[INDEX2(kc,0,NN_col)],e,NN)]];
74                    Dudley_IndexList_insertIndex(&(index_list[irow]),icol);
75                    }
76                }
77            }
78            }
79      }      }
   
     for (color=elements->minColor;color<=elements->maxColor;color++) {  
            #pragma omp for private(e,irow,kr,kc,icol,isub) schedule(static)  
            for (e=0;e<elements->numElements;e++) {  
                if (elements->Color[e]==color) {  
                    for (isub=0;isub<numSub; isub++) {  
                        for (kr=0;kr<NN_row;kr++) {  
                            irow=row_map[elements->Nodes[INDEX2(row_node[INDEX2(kr,isub,NN_row)],e,NN)]];  
                            for (kc=0;kc<NN_col;kc++) {  
                                icol=col_map[elements->Nodes[INDEX2(col_node[INDEX2(kc,isub,NN_col)],e,NN)]];  
                                Dudley_IndexList_insertIndex(&(index_list[irow]),icol);  
                            }  
                        }  
                    }  
                }  
            }  
        }  
80    }    }
81    return;    return;
82  }  }

Legend:
Removed from v.3127  
changed lines
  Added in v.3141

  ViewVC Help
Powered by ViewVC 1.1.26