/[escript]/trunk/esys2/finley/src/finleyC/Mesh_hex8.c
ViewVC logotype

Diff of /trunk/esys2/finley/src/finleyC/Mesh_hex8.c

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

revision 82 by jgs, Tue Oct 26 06:53:54 2004 UTC revision 153 by jgs, Tue Oct 25 01:51:20 2005 UTC
# Line 1  Line 1 
1    /*
2     ******************************************************************************
3     *                                                                            *
4     *       COPYRIGHT  ACcESS 2003,2004,2005 -  All Rights Reserved              *
5     *                                                                            *
6     * This software is the property of ACcESS. No part of this code              *
7     * may be copied in any form or by any means without the expressed written    *
8     * consent of ACcESS.  Copying, use or modification of this software          *
9     * by any unauthorised person is illegal unless that person has a software    *
10     * license agreement with ACcESS.                                             *
11     *                                                                            *
12     ******************************************************************************
13    */
14    
15  /**************************************************************/  /**************************************************************/
16    
17  /*   Finley: generates rectangular meshes */  /*   Finley: generates rectangular meshes */
# Line 8  Line 22 
22    
23  /**************************************************************/  /**************************************************************/
24    
25  /*   Copyrights by ACcESS Australia 2003/04 */  /*  Author: gross@access.edu.au */
26  /*   Author: gross@access.edu.au */  /*  Version: $Id$ */
 /*   Version: $Id$ */  
27    
28  /**************************************************************/  /**************************************************************/
29    
 #include "Common.h"  
 #include "Finley.h"  
 #include "Mesh.h"  
30  #include "RectangularMesh.h"  #include "RectangularMesh.h"
31    
32  /**************************************************************/  /**************************************************************/
33    
34  Finley_Mesh* Finley_RectangularMesh_Hex8(int* numElements,double* Length,int* periodic, int order,int useElementsOnFace) {  Finley_Mesh* Finley_RectangularMesh_Hex8(dim_t* numElements,double* Length,bool_t* periodic, index_t order,bool_t useElementsOnFace) {
35    int N0,N1,N2,NE0,NE1,NE2,i0,i1,i2,k,node0,totalNECount,faceNECount,NDOF0,NDOF1,NDOF2,NFaceElements,NUMNODES;    dim_t N0,N1,N2,NE0,NE1,NE2,i0,i1,i2,k,totalNECount,faceNECount,NDOF0,NDOF1,NDOF2,NFaceElements,NUMNODES,M0,M1,M2;
36      index_t node0;
37    Finley_Mesh* out;    Finley_Mesh* out;
38    char name[50];    char name[50];
39    double time0=Finley_timer();    double time0=Finley_timer();
# Line 33  Finley_Mesh* Finley_RectangularMesh_Hex8 Line 44  Finley_Mesh* Finley_RectangularMesh_Hex8
44    N1=NE1+1;    N1=NE1+1;
45    N2=NE2+1;    N2=NE2+1;
46    
47      if (N0<=MIN(N1,N2)) {
48         if (N1 <= N2) {
49            M0=1;
50            M1=N0;
51            M2=N0*N1;
52         } else {
53            M0=1;
54            M2=N0;
55            M1=N0*N2;
56         }
57      } else if (N1<=MIN(N2,N0)) {
58         if (N2 <= N0) {
59            M1=1;
60            M2=N1;
61            M0=N2*N1;
62         } else {
63            M1=1;
64            M0=N1;
65            M2=N1*N0;
66         }
67      } else {
68         if (N0 <= N1) {
69            M2=1;
70            M0=N2;
71            M1=N2*N0;
72         } else {
73            M2=1;
74            M1=N2;
75            M0=N1*N2;
76         }
77      }
78    
79    
80    NFaceElements=0;    NFaceElements=0;
81    if (!periodic[0]) {    if (!periodic[0]) {
82        NDOF0=N0;        NDOF0=N0;
# Line 57  Finley_Mesh* Finley_RectangularMesh_Hex8 Line 101  Finley_Mesh* Finley_RectangularMesh_Hex8
101        
102    sprintf(name,"Rectangular %d x %d x %d mesh",N0,N1,N2);    sprintf(name,"Rectangular %d x %d x %d mesh",N0,N1,N2);
103    out=Finley_Mesh_alloc(name,3,order);    out=Finley_Mesh_alloc(name,3,order);
104    if (Finley_ErrorCode!=NO_ERROR) return NULL;    if (! Finley_noError()) return NULL;
105    
106    out->Elements=Finley_ElementFile_alloc(Hex8,out->order);    out->Elements=Finley_ElementFile_alloc(Hex8,out->order);
107    if (useElementsOnFace) {    if (useElementsOnFace) {
# Line 68  Finley_Mesh* Finley_RectangularMesh_Hex8 Line 112  Finley_Mesh* Finley_RectangularMesh_Hex8
112       out->ContactElements=Finley_ElementFile_alloc(Rec4_Contact,out->order);       out->ContactElements=Finley_ElementFile_alloc(Rec4_Contact,out->order);
113    }    }
114    out->Points=Finley_ElementFile_alloc(Point1,out->order);    out->Points=Finley_ElementFile_alloc(Point1,out->order);
115    if (Finley_ErrorCode!=NO_ERROR) {    if (! Finley_noError()) {
116        Finley_Mesh_dealloc(out);        Finley_Mesh_dealloc(out);
117        return NULL;        return NULL;
118    }    }
# Line 79  Finley_Mesh* Finley_RectangularMesh_Hex8 Line 123  Finley_Mesh* Finley_RectangularMesh_Hex8
123    Finley_NodeFile_allocTable(out->Nodes,N0*N1*N2);    Finley_NodeFile_allocTable(out->Nodes,N0*N1*N2);
124    Finley_ElementFile_allocTable(out->Elements,NE0*NE1*NE2);    Finley_ElementFile_allocTable(out->Elements,NE0*NE1*NE2);
125    Finley_ElementFile_allocTable(out->FaceElements,NFaceElements);    Finley_ElementFile_allocTable(out->FaceElements,NFaceElements);
126    if (Finley_ErrorCode!=NO_ERROR) {    if (! Finley_noError()) {
127        Finley_Mesh_dealloc(out);        Finley_Mesh_dealloc(out);
128        return NULL;        return NULL;
129    }    }
130        
131    /*  set nodes: */    /*  set nodes: */
132      
133    #pragma omp parallel for private(i0,i1,i2,k)    #pragma omp parallel for private(i0,i1,i2,k)
134    for (i2=0;i2<N2;i2++) {    for (i2=0;i2<N2;i2++) {
135      for (i1=0;i1<N1;i1++) {      for (i1=0;i1<N1;i1++) {
136        for (i0=0;i0<N0;i0++) {        for (i0=0;i0<N0;i0++) {
137          k=i0+N0*i1+N0*N1*i2;          k=M0*i0+M1*i1+M2*i2;
138          out->Nodes->Coordinates[INDEX2(0,k,3)]=DBLE(i0)/DBLE(N0-1)*Length[0];          out->Nodes->Coordinates[INDEX2(0,k,3)]=DBLE(i0)/DBLE(N0-1)*Length[0];
139          out->Nodes->Coordinates[INDEX2(1,k,3)]=DBLE(i1)/DBLE(N1-1)*Length[1];          out->Nodes->Coordinates[INDEX2(1,k,3)]=DBLE(i1)/DBLE(N1-1)*Length[1];
140          out->Nodes->Coordinates[INDEX2(2,k,3)]=DBLE(i2)/DBLE(N2-1)*Length[2];          out->Nodes->Coordinates[INDEX2(2,k,3)]=DBLE(i2)/DBLE(N2-1)*Length[2];
141          out->Nodes->Id[k]=k;          out->Nodes->Id[k]=i0+N0*i1+N0*N1*i2;
142          out->Nodes->Tag[k]=0;          out->Nodes->Tag[k]=0;
143          out->Nodes->degreeOfFreedom[k]=(i0%NDOF0) +N0*(i1%NDOF1) +N0*N1*(i2%NDOF2);          out->Nodes->degreeOfFreedom[k]=M0*(i0%NDOF0) +M1*(i1%NDOF1) +M2*(i2%NDOF2);
144        }        }
145      }      }
146    }    }
147    /* tags for the faces: */    /* tags for the faces: */
148      /* tags for the faces: */
149    if (!periodic[2]) {    if (!periodic[2]) {
150      for (i1=0;i1<N1;i1++) {       for (i1=0;i1<N1;i1++) {
151        for (i0=0;i0<N0;i0++) {         for (i0=0;i0<N0;i0++) {
152          out->Nodes->Tag[i0+N0*i1+N0*N1*0]+=100;           out->Nodes->Tag[M0*i0+M1*i1+M2*0]+=100;
153          out->Nodes->Tag[i0+N0*i1+N0*N1*(N2-1)]+=200;           out->Nodes->Tag[M0*i0+M1*i1+M2*(N2-1)]+=200;
154        }         }
155      }       }
156    }    }
157    if (!periodic[1]) {    if (!periodic[1]) {
158      for (i2=0;i2<N2;i2++) {      for (i2=0;i2<N2;i2++) {
159        for (i0=0;i0<N0;i0++) {        for (i0=0;i0<N0;i0++) {
160           out->Nodes->Tag[i0+N0*0+N0*N1*i2]+=10;           out->Nodes->Tag[M0*i0+M1*0+M2*i2]+=10;
161           out->Nodes->Tag[i0+N0*(N1-1)+N0*N1*i2]+=20;           out->Nodes->Tag[M0*i0+M1*(N1-1)+M2*i2]+=20;
162        }        }
163      }      }
164    }    }
165    if (!periodic[0]) {    if (!periodic[0]) {
166      for (i2=0;i2<N2;i2++) {      for (i2=0;i2<N2;i2++) {
167        for (i1=0;i1<N1;i1++) {        for (i1=0;i1<N1;i1++) {
168          out->Nodes->Tag[0+N0*i1+N0*N1*i2]+=1;          out->Nodes->Tag[M0*0+M1*i1+M2*i2]+=1;
169          out->Nodes->Tag[(N0-1)+N0*i1+N0*N1*i2]+=2;          out->Nodes->Tag[M0*(N0-1)+M1*i1+M2*i2]+=2;
170        }        }
171      }      }
172    }    }
173      
174    /*   set the elements: */    /*   set the elements: */
175        
176    #pragma omp parallel for private(i0,i1,i2,k,node0)    #pragma omp parallel for private(i0,i1,i2,k,node0)
# Line 151  Finley_Mesh* Finley_RectangularMesh_Hex8 Line 196  Finley_Mesh* Finley_RectangularMesh_Hex8
196        }        }
197      }      }
198    }    }
199    out->Elements->numColors=COLOR_MOD(0)+3*COLOR_MOD(0)+9*COLOR_MOD(0)+1;    out->Elements->minColor=0;
200      out->Elements->maxColor=COLOR_MOD(0)+3*COLOR_MOD(0)+9*COLOR_MOD(0);
201        
202    /*   face elements: */    /*   face elements: */
203        
# Line 362  Finley_Mesh* Finley_RectangularMesh_Hex8 Line 408  Finley_Mesh* Finley_RectangularMesh_Hex8
408       totalNECount+=NE0*NE2;       totalNECount+=NE0*NE2;
409       faceNECount+=NE0*NE2;       faceNECount+=NE0*NE2;
410    }    }
411    out->FaceElements->numColors=24;    out->FaceElements->minColor=0;
412      out->FaceElements->maxColor=23;
413        
414    /*  face elements done: */    /*  face elements done: */
415        
# Line 373  Finley_Mesh* Finley_RectangularMesh_Hex8 Line 420  Finley_Mesh* Finley_RectangularMesh_Hex8
420    /* prepare mesh for further calculatuions:*/    /* prepare mesh for further calculatuions:*/
421    Finley_Mesh_prepare(out) ;    Finley_Mesh_prepare(out) ;
422    
423      #ifdef Finley_TRACE
424    printf("timing: mesh generation: %.4e sec\n",Finley_timer()-time0);    printf("timing: mesh generation: %.4e sec\n",Finley_timer()-time0);
425      #endif
426    
427    if (Finley_ErrorCode!=NO_ERROR) {    if (! Finley_noError()) {
428        Finley_Mesh_dealloc(out);        Finley_Mesh_dealloc(out);
429        return NULL;        return NULL;
430    }    }
431    return out;    return out;
432  }  }
   
 /*  
 * $Log$  
 * Revision 1.1  2004/10/26 06:53:57  jgs  
 * Initial revision  
 *  
 * Revision 1.1.1.1  2004/06/24 04:00:40  johng  
 * Initial version of eys using boost-python.  
 *  
 *  
 */  
   

Legend:
Removed from v.82  
changed lines
  Added in v.153

  ViewVC Help
Powered by ViewVC 1.1.26