/[escript]/branches/domexper/dudley/src/ElementFile_markNodes.c
ViewVC logotype

Diff of /branches/domexper/dudley/src/ElementFile_markNodes.c

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

trunk/finley/src/ElementFile_markNodes.c revision 1628 by phornby, Fri Jul 11 13:12:46 2008 UTC branches/domexper/dudley/src/ElementFile_markNodes.c revision 3086 by jfenwick, Thu Aug 5 05:07:58 2010 UTC
# Line 1  Line 1 
1    
 /* $Id$ */  
   
2  /*******************************************************  /*******************************************************
3   *  *
4   *           Copyright 2003-2007 by ACceSS MNRF  * Copyright (c) 2003-2010 by University of Queensland
5   *       Copyright 2007 by University of Queensland  * Earth Systems Science Computational Center (ESSCC)
6   *  * http://www.uq.edu.au/esscc
7   *                http://esscc.uq.edu.au  *
8   *        Primary Business: Queensland, Australia  * Primary Business: Queensland, Australia
9   *  Licensed under the Open Software License version 3.0  * Licensed under the Open Software License version 3.0
10   *     http://www.opensource.org/licenses/osl-3.0.php  * http://www.opensource.org/licenses/osl-3.0.php
11   *  *
12   *******************************************************/  *******************************************************/
13    
14    
15  /**************************************************************/  /**************************************************************/
16    
17  /*   Finley: ElementFile */  /*   Dudley: ElementFile */
18    
19  /*   mark the used nodes with offeset: */  /*   mark the used nodes with offeset: */
20    
# Line 25  Line 24 
24    
25  /**************************************************************/  /**************************************************************/
26    
27  void Finley_ElementFile_markNodes(index_t* mask,index_t offset,Finley_ElementFile* in,bool_t useLinear) {  void Dudley_ElementFile_markNodes(index_t* mask,index_t offset,dim_t numNodes,Dudley_ElementFile* in,bool_t useLinear) {
28     dim_t i,NN,NN2,e;     dim_t i,NN,NN2,e;
29     index_t *lin_node,*id=NULL;     index_t *lin_nodes;
30       Dudley_ReferenceElement* refElement=NULL;
31      
32     if (in!=NULL) {     if (in!=NULL) {
33       id=TMPMEMALLOC(in->ReferenceElement->Type->numNodes, index_t);           refElement=Dudley_ReferenceElementSet_borrowReferenceElement(in->referenceElementSet, FALSE);    
34       if (! Finley_checkPtr(id) ){           NN2=in->numNodes;
35          for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;           if (useLinear) {
36          if (useLinear) {               NN=refElement->numLinearNodes;
37             NN=in->LinearReferenceElement->Type->numNodes;               lin_nodes=refElement->Type->linearNodes;
38             lin_node=in->ReferenceElement->Type->linearNodes;               #pragma omp parallel for private(e,i) schedule(static)
39          } else {               for (e=0;e<in->numElements;e++) {
40             NN=in->ReferenceElement->Type->numNodes;                   for (i=0;i<NN;i++) {
41             lin_node=id;                         mask[in->Nodes[INDEX2(lin_nodes[i],e,NN2)]-offset]=1;
42          }                   }
43          NN2=in->numNodes;               }
44          #pragma omp parallel for private(e,i) schedule(static)           } else {
45          for (e=0;e<in->numElements;e++) {               NN=refElement->Type->numNodes;
46              for (i=0;i<NN;i++) {               #pragma omp parallel for private(e,i) schedule(static)
47                  mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;               for (e=0;e<in->numElements;e++) {
48             }                   for (i=0;i<NN;i++) {
49          }                       mask[in->Nodes[INDEX2(i,e,NN2)]-offset]=1;
50          TMPMEMFREE(id);                   }
51       }               }
52     }           }
53        }
54  }  }
55    
56  void Finley_ElementFile_markDOFsConnectedToRange(index_t* mask,index_t offset,index_t marker,index_t firstDOF,index_t lastDOF,index_t *dofIndex,Finley_ElementFile*in ,bool_t useLinear)  void Dudley_ElementFile_markDOFsConnectedToRange(index_t* mask,index_t offset,index_t marker,index_t firstDOF,index_t lastDOF,index_t *dofIndex,Dudley_ElementFile*in ,bool_t useLinear)
57  {  {
58     dim_t i,NN,NN2,e,j;     dim_t i,NN,NN2,e,j;
59     index_t color,*lin_node,*id=NULL,k;     index_t color,*lin_nodes;
60       Dudley_ReferenceElement* refElement=NULL;
61       register index_t k;
62      
63     if (in!=NULL) {     if (in!=NULL) {
64       id=TMPMEMALLOC(in->ReferenceElement->Type->numNodes, index_t);           refElement=Dudley_ReferenceElementSet_borrowReferenceElement(in->referenceElementSet, FALSE);    
65       if (! Finley_checkPtr(id) ){           NN2=in->numNodes;
66          for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;           if (useLinear) {
67          if (useLinear) {               NN=refElement->numLinearNodes;
68             NN=in->LinearReferenceElement->Type->numNodes;               lin_nodes=refElement->Type->linearNodes;
69             lin_node=in->ReferenceElement->Type->linearNodes;               for (color=in->minColor;color<=in->maxColor;color++) {
70          } else {                   #pragma omp parallel for private(e,i,j,k) schedule(static)
71             NN=in->ReferenceElement->Type->numNodes;                   for (e=0;e<in->numElements;e++) {
72             lin_node=id;                       if (in->Color[e]==color) {
73          }                           for (i=0;i<NN;i++) {
74          NN2=in->numNodes;                               k=dofIndex[in->Nodes[INDEX2(lin_nodes[i],e,NN2)]];
75          for (color=in->minColor;color<=in->maxColor;color++) {                               if ( (firstDOF<=k) && (k<lastDOF) ) {
76              #pragma omp parallel for private(e,i,j,k) schedule(static)                                   for (j=0;j<NN;j++) mask[dofIndex[in->Nodes[INDEX2(lin_nodes[j],e,NN2)]]-offset]=marker;
77              for (e=0;e<in->numElements;e++) {                                   break;
78                 if (in->Color[e]==color) {                               }
79                    for (i=0;i<NN;i++) {                           }
80                       k=dofIndex[in->Nodes[INDEX2(lin_node[i],e,NN2)]];                       }
81                       if ( (firstDOF<=k) && (k<lastDOF) ) {                   }
82                          for (j=0;j<NN;j++) mask[dofIndex[in->Nodes[INDEX2(lin_node[j],e,NN2)]]-offset]=marker;               }
83                          break;           } else {
84                       }               NN=refElement->Type->numNodes;
85                    }               for (color=in->minColor;color<=in->maxColor;color++) {
86                 }                   #pragma omp parallel for private(e,i,j,k) schedule(static)
87              }                   for (e=0;e<in->numElements;e++) {
88          }                       if (in->Color[e]==color) {
89       }                           for (i=0;i<NN;i++) {
90       TMPMEMFREE(id);                               k=dofIndex[in->Nodes[INDEX2(i,e,NN2)]];
91     }                               if ( (firstDOF<=k) && (k<lastDOF) ) {
92                                     for (j=0;j<NN;j++) mask[dofIndex[in->Nodes[INDEX2(j,e,NN2)]]-offset]=marker;
93                                     break;
94                                 }
95                             }
96                         }
97                     }
98                 }
99             }
100        }      
101  }  }
102    

Legend:
Removed from v.1628  
changed lines
  Added in v.3086

  ViewVC Help
Powered by ViewVC 1.1.26