/[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 3152 by jfenwick, Fri Sep 3 05:48:31 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              NN_col=(refElement->BasisFunctions->Type->numShapes);
43      if (reduce_col_order) {      NN_col=(refElement->BasisFunctions->Type->numShapes);
44            numSub=1;      NN_row=(refElement->BasisFunctions->Type->numShapes) ;
           col_node=refElement->Type->linearNodes;  
           NN_col=(refElement->LinearBasisFunctions->Type->numShapes);  
     } else {  
           numSub=refElement->Type->numSubElements;  
           col_node=refElement->Type->subElementNodes;  
           NN_col=(refElement->BasisFunctions->Type->numShapes);  
     }  
45    
46      if (reduce_row_order) {      for (color=elements->minColor;color<=elements->maxColor;color++)
47            numSub=1;      {
48            row_node=refElement->Type->linearNodes;      #pragma omp for private(e,irow,kr,kc,icol,isub) schedule(static)
49            NN_row=(refElement->LinearBasisFunctions->Type->numShapes);      for (e=0;e<elements->numElements;e++)
50      } else {      {
51            numSub=refElement->Type->numSubElements;          if (elements->Color[e]==color)
52            row_node=refElement->Type->subElementNodes;          {
53            NN_row=(refElement->BasisFunctions->Type->numShapes) ;              for (kr=0;kr<NN_row;kr++)
54                {
55                    irow=row_map[elements->Nodes[INDEX2(kr,e,NN)]];
56                    for (kc=0;kc<NN_col;kc++)
57                    {
58                    icol=col_map[elements->Nodes[INDEX2(kc,e,NN)]];
59                    Dudley_IndexList_insertIndex(&(index_list[irow]),icol);
60                    }
61                }
62            }
63      }      }
64         }
     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);  
                            }  
                        }  
                    }  
                }  
            }  
        }  
65    }    }
66    return;    return;
67  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.26