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

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

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

revision 471 by jgs, Fri Jan 27 01:33:02 2006 UTC revision 782 by bcumming, Tue Jul 18 00:47:47 2006 UTC
# Line 1  Line 1 
1  /*  /*
2   ******************************************************************************   ************************************************************
3   *                                                                            *   *          Copyright 2006 by ACcESS MNRF                   *
4   *       COPYRIGHT  ACcESS 2003,2004,2005 -  All Rights Reserved              *   *                                                          *
5   *                                                                            *   *              http://www.access.edu.au                    *
6   * This software is the property of ACcESS. No part of this code              *   *       Primary Business: Queensland, Australia            *
7   * may be copied in any form or by any means without the expressed written    *   *  Licensed under the Open Software License version 3.0    *
8   * consent of ACcESS.  Copying, use or modification of this software          *   *     http://www.opensource.org/licenses/osl-3.0.php       *
9   * by any unauthorised person is illegal unless that person has a software    *   *                                                          *
10   * license agreement with ACcESS.                                             *   ************************************************************
  *                                                                            *  
  ******************************************************************************  
11  */  */
12    
13  /**************************************************************/  /**************************************************************/
# Line 44  void Finley_ElementFile_markNodes(index_ Line 42  void Finley_ElementFile_markNodes(index_
42          lin_node=id;          lin_node=id;
43       }       }
44       NN2=in->ReferenceElement->Type->numNodes;       NN2=in->ReferenceElement->Type->numNodes;
45    /* knock out the OpenMP directives for the MPI version, get the OpenMP running
46       after the MPI is working satisfactorily */
47    #ifndef PASO_MPI
48       if ((in->maxColor-in->minColor+1)*NN<in->numElements) {       if ((in->maxColor-in->minColor+1)*NN<in->numElements) {
49          #pragma omp parallel private(color)          #pragma omp parallel private(color)
50          {          {
# Line 51  void Finley_ElementFile_markNodes(index_ Line 52  void Finley_ElementFile_markNodes(index_
52               #pragma omp for private(e,i) schedule(static)               #pragma omp for private(e,i) schedule(static)
53               for (e=0;e<in->numElements;e++) {               for (e=0;e<in->numElements;e++) {
54                 if (in->Color[e]==color) {                 if (in->Color[e]==color) {
55                    for (i=0;i<NN;i++) mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;                    for (i=0;i<NN;i++)
56                        mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;
57                 }                 }
58               }               }
59             }             }
# Line 59  void Finley_ElementFile_markNodes(index_ Line 61  void Finley_ElementFile_markNodes(index_
61          }          }
62        } else {        } else {
63          #pragma omp parallel for private(e,i) schedule(static)          #pragma omp parallel for private(e,i) schedule(static)
64    #endif
65          for (e=0;e<in->numElements;e++) {          for (e=0;e<in->numElements;e++) {
66             for (i=0;i<NN;i++) mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;             for (i=0;i<NN;i++)
67                 mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;
68          }          }
69    #ifndef PASO_MPI
70        }        }
71    #endif
72     }     }
73  }  }
74    
75    #ifdef PASO_MPI
76    
77    /* these have been trimmed down from the colors-based scheme for simplicity of testing
78       in the MPI scheme. */
79    void Finley_ElementFile_markBoundaryElementNodes(index_t* mask,index_t offset,Finley_ElementFile* in,bool_t useLinear) {
80       dim_t i,NN,NN2,e;
81       index_t color,*lin_node;
82       if (in!=NULL&& in->numElements>0) {
83         index_t id[in->ReferenceElement->Type->numNodes];
84         for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
85         if (useLinear) {
86            NN=in->LinearReferenceElement->Type->numNodes;
87            lin_node=in->ReferenceElement->Type->linearNodes;
88         } else {
89            NN=in->ReferenceElement->Type->numNodes;
90            lin_node=id;
91         }
92         NN2=in->ReferenceElement->Type->numNodes;
93         for (e=0;e<in->elementDistribution->numLocal;e++)
94                 if( in->Id[e]>=in->elementDistribution->numInternal )
95                     for (i=0;i<NN;i++)
96                         mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;
97       }
98    }
99    
100    void Finley_ElementFile_markInternalElementNodes(index_t* mask,index_t offset,Finley_ElementFile* in,bool_t useLinear) {
101       dim_t i,NN,NN2,e;
102       index_t color,*lin_node;
103       if (in!=NULL && in->numElements>0) {
104         index_t id[in->ReferenceElement->Type->numNodes];
105         for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
106         if (useLinear) {
107            NN=in->LinearReferenceElement->Type->numNodes;
108            lin_node=in->ReferenceElement->Type->linearNodes;
109         } else {
110            NN=in->ReferenceElement->Type->numNodes;
111            lin_node=id;
112         }
113         NN2=in->ReferenceElement->Type->numNodes;
114    
115         for (e=0;e<in->elementDistribution->numLocal;e++)
116                 if( in->Id[e]<in->elementDistribution->numInternal )
117                     for (i=0;i<NN;i++)
118                         mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;
119       }
120    }
121    
122    void Finley_ElementFile_markBoundaryElementDOF(index_t* mask,index_t offset,index_t *degreeOfFreedom, Finley_ElementFile* in,bool_t useLinear, index_t startElement) {
123        dim_t i,NN,NN2,e;
124        index_t color,*lin_node;
125        if (in!=NULL&& in->numElements>0) {
126    
127            index_t id[in->ReferenceElement->Type->numNodes];
128            for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
129                if (useLinear) {
130                    NN=in->LinearReferenceElement->Type->numNodes;
131                    lin_node=in->ReferenceElement->Type->linearNodes;
132                } else {
133                    NN=in->ReferenceElement->Type->numNodes;
134                    lin_node=id;
135                }
136                NN2=in->ReferenceElement->Type->numNodes;
137                for (e=0;e<in->elementDistribution->numLocal;e++)
138                    if( in->Id[e]-startElement>=in->elementDistribution->numInternal )
139                        for (i=0;i<NN;i++)
140                            mask[degreeOfFreedom[in->Nodes[INDEX2(lin_node[i],e,NN2)]]-offset]=1;
141        }
142    
143    }
144    
145    void Finley_ElementFile_markInternalElementDOF(index_t* mask,index_t offset,index_t *degreeOfFreedom, Finley_ElementFile* in,bool_t useLinear, index_t startElement) {
146       dim_t i,NN,NN2,e;
147       index_t color,*lin_node;
148       if (in!=NULL && in->numElements>0) {
149         index_t id[in->ReferenceElement->Type->numNodes];
150         for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
151         if (useLinear) {
152            NN=in->LinearReferenceElement->Type->numNodes;
153            lin_node=in->ReferenceElement->Type->linearNodes;
154         } else {
155            NN=in->ReferenceElement->Type->numNodes;
156            lin_node=id;
157         }
158         NN2=in->ReferenceElement->Type->numNodes;
159    
160         for (e=0;e<in->elementDistribution->numLocal;e++)
161                 if( in->Id[e]-startElement<in->elementDistribution->numInternal )
162                     for (i=0;i<NN;i++)
163                         mask[degreeOfFreedom[in->Nodes[INDEX2(lin_node[i],e,NN2)]]-offset]=1;
164       }
165    }
166    #endif
167    
168  /*  /*
169  * $Log$  * $Log$
170  * Revision 1.4  2005/09/15 03:44:22  jgs  * Revision 1.4  2005/09/15 03:44:22  jgs

Legend:
Removed from v.471  
changed lines
  Added in v.782

  ViewVC Help
Powered by ViewVC 1.1.26