/[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 787 by bcumming, Wed Jul 26 01:46:45 2006 UTC revision 1770 by ksteube, Mon Sep 8 06:58:47 2008 UTC
# Line 1  Line 1 
1  /*  
2   ************************************************************  /* $Id$ */
3   *          Copyright 2006 by ACcESS MNRF                   *  
4   *                                                          *  /*******************************************************
5   *              http://www.access.edu.au                    *   *
6   *       Primary Business: Queensland, Australia            *   *           Copyright 2003-2007 by ACceSS MNRF
7   *  Licensed under the Open Software License version 3.0    *   *       Copyright 2007 by University of Queensland
8   *     http://www.opensource.org/licenses/osl-3.0.php       *   *
9   *                                                          *   *                http://esscc.uq.edu.au
10   ************************************************************   *        Primary Business: Queensland, Australia
11  */   *  Licensed under the Open Software License version 3.0
12     *     http://www.opensource.org/licenses/osl-3.0.php
13     *
14     *******************************************************/
15    
16  /**************************************************************/  /**************************************************************/
17    
# Line 18  Line 21 
21    
22  /**************************************************************/  /**************************************************************/
23    
 /*  Copyrights by ACcESS Australia 2003,2004,2005 */  
 /*  Author: gross@access.edu.au */  
 /*  Version: $Id$ */  
   
 /**************************************************************/  
   
24  #include "ElementFile.h"  #include "ElementFile.h"
25    
26  /**************************************************************/  /**************************************************************/
27    
28  void Finley_ElementFile_markNodes(index_t* mask,index_t offset,Finley_ElementFile* in,bool_t useLinear) {  void Finley_ElementFile_markNodes(index_t* mask,index_t offset,dim_t numNodes,Finley_ElementFile* in,bool_t useLinear) {
29     dim_t i,NN,NN2,e;     dim_t i,NN,NN2,e;
30     index_t color,*lin_node;     index_t *lin_node,*id=NULL;
31    
32     if (in!=NULL) {     if (in!=NULL) {
33       index_t id[in->ReferenceElement->Type->numNodes];       id=TMPMEMALLOC(in->ReferenceElement->Type->numNodes, index_t);
34       for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;       if (! Finley_checkPtr(id) ){
35       if (useLinear) {          if (useLinear) {
36          NN=in->LinearReferenceElement->Type->numNodes;             NN=in->LinearReferenceElement->Type->numNodes;
37          lin_node=in->ReferenceElement->Type->linearNodes;             lin_node=in->ReferenceElement->Type->linearNodes;
38       } else {          } else {
39          NN=in->ReferenceElement->Type->numNodes;             NN=in->ReferenceElement->Type->numNodes;
40          lin_node=id;             lin_node=id;
41       }             for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
      NN2=in->ReferenceElement->Type->numNodes;  
      if ((in->maxColor-in->minColor+1)*NN<in->numElements) {  
         #pragma omp parallel private(color)  
         {  
            for (color=in->minColor;color<=in->maxColor;color++) {  
              #pragma omp for private(e,i) schedule(static)  
              for (e=0;e<in->numElements;e++) {  
                if (in->Color[e]==color) {  
                   for (i=0;i<NN;i++)  
                     mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;  
                }  
              }  
            }  
            #pragma omp barrier  
42          }          }
43        } else {          NN2=in->numNodes;
44          #pragma omp parallel for private(e,i) schedule(static)          #pragma omp parallel for private(e,i) schedule(static)
45          for (e=0;e<in->numElements;e++) {          for (e=0;e<in->numElements;e++) {
46             for (i=0;i<NN;i++)              for (i=0;i<NN;i++) {
47               mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;  #ifdef BOUNDS_CHECK
48    if ((in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset) >= numNodes) { printf("BOUNDS_CHECK %s %d i=%d e=%d NN2=%d offset=%d index=%d\n", __FILE__, __LINE__, i, e, NN2, offset, in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset); exit(1); }
49    #endif
50                    mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;
51               }
52          }          }
53        }          TMPMEMFREE(id);
54         }
55       }
56    }
57    
58    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)
59    {
60       dim_t i,NN,NN2,e,j;
61       index_t color,*lin_node,*id=NULL,k;
62       if (in!=NULL) {
63         id=TMPMEMALLOC(in->ReferenceElement->Type->numNodes, index_t);
64         if (! Finley_checkPtr(id) ){
65            if (useLinear) {
66               NN=in->LinearReferenceElement->Type->numNodes;
67               lin_node=in->ReferenceElement->Type->linearNodes;
68            } else {
69               NN=in->ReferenceElement->Type->numNodes;
70               lin_node=id;
71               for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
72            }
73            NN2=in->numNodes;
74            for (color=in->minColor;color<=in->maxColor;color++) {
75                #pragma omp parallel for private(e,i,j,k) schedule(static)
76                for (e=0;e<in->numElements;e++) {
77                   if (in->Color[e]==color) {
78                      for (i=0;i<NN;i++) {
79                         k=dofIndex[in->Nodes[INDEX2(lin_node[i],e,NN2)]];
80                         if ( (firstDOF<=k) && (k<lastDOF) ) {
81                            for (j=0;j<NN;j++) {
82                                       mask[dofIndex[in->Nodes[INDEX2(lin_node[j],e,NN2)]]-offset]=marker;
83                            }
84                            break;
85                         }
86                      }
87                   }
88                }
89            }
90         }
91         TMPMEMFREE(id);
92     }     }
93  }  }
94    
 /*  
 * $Log$  
 * Revision 1.4  2005/09/15 03:44:22  jgs  
 * Merge of development branch dev-02 back to main trunk on 2005-09-15  
 *  
 * Revision 1.3.2.1  2005/09/07 06:26:18  gross  
 * the solver from finley are put into the standalone package paso now  
 *  
 * Revision 1.3  2005/07/22 03:53:08  jgs  
 * Merge of development branch back to main trunk on 2005-07-22  
 *  
 * Revision 1.2  2005/07/08 04:07:50  jgs  
 * Merge of development branch back to main trunk on 2005-07-08  
 *  
 * Revision 1.1.1.1.2.2  2005/07/18 10:34:54  gross  
 * some informance improvements when reading meshes  
 *  
 * Revision 1.1.1.1.2.1  2005/06/29 02:34:49  gross  
 * some changes towards 64 integers in finley  
 *  
 * Revision 1.1.1.1  2004/10/26 06:53:57  jgs  
 * initial import of project esys2  
 *  
 * Revision 1.1.1.1  2004/06/24 04:00:40  johng  
 * Initial version of eys using boost-python.  
 *  
 *  
 */  

Legend:
Removed from v.787  
changed lines
  Added in v.1770

  ViewVC Help
Powered by ViewVC 1.1.26