/[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 3127 by jfenwick, Wed Sep 1 01:30:28 2010 UTC revision 3145 by jfenwick, Fri Sep 3 01:25:52 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;
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;      NN_col=(refElement->LinearBasisFunctions->Type->numShapes);
45            col_node=refElement->Type->linearNodes;      }
46            NN_col=(refElement->LinearBasisFunctions->Type->numShapes);      else
47        {
48        NN_col=(refElement->BasisFunctions->Type->numShapes);
49        }
50        if (reduce_row_order)
51        {
52        NN_row=(refElement->LinearBasisFunctions->Type->numShapes);
53      } else {      } else {
54            numSub=refElement->Type->numSubElements;      NN_row=(refElement->BasisFunctions->Type->numShapes) ;
           col_node=refElement->Type->subElementNodes;  
           NN_col=(refElement->BasisFunctions->Type->numShapes);  
55      }      }
56    
57      if (reduce_row_order) {      for (color=elements->minColor;color<=elements->maxColor;color++)
58            numSub=1;      {
59            row_node=refElement->Type->linearNodes;      #pragma omp for private(e,irow,kr,kc,icol,isub) schedule(static)
60            NN_row=(refElement->LinearBasisFunctions->Type->numShapes);      for (e=0;e<elements->numElements;e++)
61      } else {      {
62            numSub=refElement->Type->numSubElements;          if (elements->Color[e]==color)
63            row_node=refElement->Type->subElementNodes;          {
64            NN_row=(refElement->BasisFunctions->Type->numShapes) ;              for (kr=0;kr<NN_row;kr++)
65                {
66                    irow=row_map[elements->Nodes[INDEX2(kr,e,NN)]];
67                    for (kc=0;kc<NN_col;kc++)
68                    {
69                    icol=col_map[elements->Nodes[INDEX2(kc,e,NN)]];
70                    Dudley_IndexList_insertIndex(&(index_list[irow]),icol);
71                    }
72                }
73            }
74      }      }
75         }
     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);  
                            }  
                        }  
                    }  
                }  
            }  
        }  
76    }    }
77    return;    return;
78  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.26