/[escript]/trunk/dudley/src/Mesh_markNodes.c
ViewVC logotype

Diff of /trunk/dudley/src/Mesh_markNodes.c

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

revision 782 by bcumming, Tue Jul 18 00:47:47 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    
 /*  Author: gross@access.edu.au */  
 /*  Version: $Id$ */  
   
 /**************************************************************/  
   
24  #include "Mesh.h"  #include "Mesh.h"
25    
26  /**************************************************************/  /**************************************************************/
27    
28  void Finley_Mesh_markNodes(index_t* mask,index_t offset,Finley_Mesh* in,bool_t useLinear) {  void Finley_Mesh_markNodes(index_t* mask,index_t offset,Finley_Mesh* in,bool_t useLinear) {
29            Finley_ElementFile_markNodes(mask,offset,in->Elements,useLinear);            Finley_ElementFile_markNodes(mask,offset,in->Nodes->numNodes,in->Elements,useLinear);
30            Finley_ElementFile_markNodes(mask,offset,in->FaceElements,useLinear);            Finley_ElementFile_markNodes(mask,offset,in->Nodes->numNodes,in->FaceElements,useLinear);
31            Finley_ElementFile_markNodes(mask,offset,in->ContactElements,useLinear);            Finley_ElementFile_markNodes(mask,offset,in->Nodes->numNodes,in->ContactElements,useLinear);
32            Finley_ElementFile_markNodes(mask,offset,in->Points,useLinear);            Finley_ElementFile_markNodes(mask,offset,in->Nodes->numNodes,in->Points,useLinear);
33  }  }
34    
35  #ifdef PASO_MPI  void Finley_Mesh_markDOFsConnectedToRange(index_t* mask, index_t offset, index_t marker,
36                                              index_t firstDOF,index_t lastDOF,Finley_Mesh* in, bool_t useLinear)
 /* assumes that mask has length in->Nodes->numNodes  
    hence, it assumes that nodes are dense and offset==0  
    offset must ==0  
    assumes mask[i]==-1, i=0:in->Nodes->numNodes  
     */  
 void Finley_Mesh_markOrderedNodesLocation(index_t* mask,index_t offset,Finley_Mesh* in,bool_t useLinear)  
37  {  {
38    index_t *internalMask=NULL, *boundaryMask=NULL, i;     index_t *dofIndex;
39       if (useLinear) {
40    if( offset )         dofIndex=in->Nodes->globalReducedDOFIndex;
41    {     } else {
42      Finley_setError(VALUE_ERROR, "Finley_Mesh_markNodesExternal() : yet to implement offest!=0");         dofIndex=in->Nodes->globalDegreesOfFreedom;
43      return;     }
44    }     Finley_ElementFile_markDOFsConnectedToRange(mask,offset,marker,firstDOF,lastDOF,dofIndex,in->Elements,useLinear);
45       Finley_ElementFile_markDOFsConnectedToRange(mask,offset,marker,firstDOF,lastDOF,dofIndex,in->FaceElements,useLinear);
46    internalMask = TMPMEMALLOC( in->Nodes->numNodes, index_t );     Finley_ElementFile_markDOFsConnectedToRange(mask,offset,marker,firstDOF,lastDOF,dofIndex,in->ContactElements,useLinear);
47    boundaryMask = TMPMEMALLOC( in->Nodes->numNodes, index_t );     Finley_ElementFile_markDOFsConnectedToRange(mask,offset,marker,firstDOF,lastDOF,dofIndex,in->Points,useLinear);
   for( i=0; i<in->Nodes->numNodes; i++ )  
     internalMask[i] = boundaryMask[i] = 0;  
   
   Finley_ElementFile_markInternalElementNodes(internalMask,offset,in->Elements,useLinear);  
   Finley_ElementFile_markInternalElementNodes(internalMask,offset,in->FaceElements,useLinear);  
   Finley_ElementFile_markInternalElementNodes(internalMask,offset,in->ContactElements,useLinear);  
   Finley_ElementFile_markInternalElementNodes(internalMask,offset,in->Points,useLinear);  
   
   Finley_ElementFile_markBoundaryElementNodes(boundaryMask,offset,in->Elements,useLinear);  
   Finley_ElementFile_markBoundaryElementNodes(boundaryMask,offset,in->FaceElements,useLinear);  
   Finley_ElementFile_markBoundaryElementNodes(boundaryMask,offset,in->ContactElements,useLinear);  
   Finley_ElementFile_markBoundaryElementNodes(boundaryMask,offset,in->Points,useLinear);  
   
   for( i=0; i<in->Nodes->numNodes; i++ )  
     if( internalMask[i] && boundaryMask[i] )  
       mask[i] = 2;  /* boundary */  
     else if( internalMask[i] )  
       mask[i] = 1;  /* internal */  
     else if( boundaryMask[i] )  
       mask[i] = 3;  /* external */  
     else  
       mask[i] = -1; /* not referenced */  
48  }  }
   
 void Finley_Mesh_markOrderedDegreesOfFreedomLocation(index_t* mask,index_t offset,Finley_Mesh* in,bool_t useLinear)  
 {  
   index_t *internalMask=NULL, *boundaryMask=NULL, i,startElement;  
   
   if( offset )  
   {  
     Finley_setError(VALUE_ERROR, "Finley_Mesh_markNodesExternal() : yet to implement offest!=0");  
     return;  
   }  
   
   internalMask = TMPMEMALLOC( in->Nodes->numDegreesOfFreedom, index_t );  
   boundaryMask = TMPMEMALLOC( in->Nodes->numDegreesOfFreedom, index_t );  
   for( i=0; i<in->Nodes->numDegreesOfFreedom; i++ )  
     internalMask[i] = boundaryMask[i] = 0;  
   
     startElement = 0;  
   Finley_ElementFile_markInternalElementDOF(internalMask,offset,in->Nodes->degreeOfFreedom,in->Elements,useLinear,startElement);  
     startElement += in->Elements->numElements;  
   Finley_ElementFile_markInternalElementDOF(internalMask,offset,in->Nodes->degreeOfFreedom,in->FaceElements,useLinear,startElement);  
     startElement += in->FaceElements->numElements;  
   Finley_ElementFile_markInternalElementDOF(internalMask,offset,in->Nodes->degreeOfFreedom,in->ContactElements,useLinear,startElement);  
     startElement += in->ContactElements->numElements;  
   Finley_ElementFile_markInternalElementDOF(internalMask,offset,in->Nodes->degreeOfFreedom,in->Points,useLinear,startElement);  
   
     startElement = 0;  
   Finley_ElementFile_markBoundaryElementDOF(boundaryMask,offset,in->Nodes->degreeOfFreedom,in->Elements,useLinear,startElement);  
     startElement += in->Elements->numElements;  
   Finley_ElementFile_markBoundaryElementDOF(boundaryMask,offset,in->Nodes->degreeOfFreedom,in->FaceElements,useLinear,startElement);  
     startElement += in->FaceElements->numElements;  
   Finley_ElementFile_markBoundaryElementDOF(boundaryMask,offset,in->Nodes->degreeOfFreedom,in->ContactElements,useLinear,startElement);  
     startElement += in->ContactElements->numElements;  
   Finley_ElementFile_markBoundaryElementDOF(boundaryMask,offset,in->Nodes->degreeOfFreedom,in->Points,useLinear,startElement);  
   
   for( i=0; i<in->Nodes->numDegreesOfFreedom; i++ )  
     if( internalMask[i] && boundaryMask[i] )  
       mask[i] = 2;  /* boundary */  
     else if( internalMask[i] )  
       mask[i] = 1;  /* internal */  
     else if( boundaryMask[i] )  
       mask[i] = 3;  /* external */  
     else  
       mask[i] = -1; /* not referenced */  
 }  
 #endif  
   
 /*  
 * $Log$  
 * Revision 1.3  2005/09/15 03:44:22  jgs  
 * Merge of development branch dev-02 back to main trunk on 2005-09-15  
 *  
 * Revision 1.2.2.1  2005/09/07 06:26:19  gross  
 * the solver from finley are put into the standalone package paso now  
 *  
 * Revision 1.2  2005/07/08 04:07:53  jgs  
 * Merge of development branch back to main trunk on 2005-07-08  
 *  
 * Revision 1.1.1.1.2.1  2005/06/29 02:34:52  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.782  
changed lines
  Added in v.1770

  ViewVC Help
Powered by ViewVC 1.1.26