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

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

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

temp/finley/src/Mesh_hex20.c revision 1387 by trankine, Fri Jan 11 07:45:26 2008 UTC branches/domexper/dudley/src/Mesh_hex20.c revision 3080 by jfenwick, Tue Aug 3 04:28:03 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    
# Line 33  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 32  Finley_Mesh* Finley_RectangularMesh_Hex2
32                                            index_t reduced_order,                                            index_t reduced_order,
33                                            bool_t useElementsOnFace,                                            bool_t useElementsOnFace,
34                                            bool_t useFullElementOrder,                                            bool_t useFullElementOrder,
35                                              bool_t useMacroElements,
36                                            bool_t optimize)                                            bool_t optimize)
37  {  {
38    #define N_PER_E 2    #define N_PER_E 2
39    #define DIM 3    #define DIM 3
40    dim_t N0,N1,N2,NE0,NE1,NE2,i0,i1,i2,k,Nstride0,Nstride1,Nstride2, local_NE0, local_NE1, local_NE2;    dim_t N0,N1,N2,NE0,NE1,NE2,i0,i1,i2,k,Nstride0=0, Nstride1=0, Nstride2=0, local_NE0, local_NE1, local_NE2;
41    dim_t totalNECount,faceNECount,NDOF0,NDOF1,NDOF2,NFaceElements, local_N0, local_N1, local_N2, NN;    dim_t totalNECount,faceNECount,NDOF0=0, NDOF1=0, NDOF2=0, NFaceElements=0, local_N0=0, local_N1=0, local_N2=0, NN;
42    index_t node0, myRank, e_offset0, e_offset1, e_offset2, offset0, offset1, offset2, global_i0, global_i1, global_i2;    index_t node0, myRank, e_offset0, e_offset1, e_offset2, offset0=0, offset1=0, offset2=0, global_i0, global_i1, global_i2;
43    Finley_Mesh* out;    Finley_Mesh* out;
44    Paso_MPIInfo *mpi_info = NULL;    Paso_MPIInfo *mpi_info = NULL;
45      Finley_ReferenceElementSet *refPoints=NULL, *refContactElements=NULL, *refFaceElements=NULL, *refElements=NULL;
46    char name[50];    char name[50];
47      bool_t generateAllNodes= useFullElementOrder || useMacroElements;
48      #ifdef Finley_TRACE
49    double time0=Finley_timer();    double time0=Finley_timer();
50      #endif
51    
52    /* get MPI information */    /* get MPI information */
53    mpi_info = Paso_MPIInfo_alloc( MPI_COMM_WORLD );    mpi_info = Paso_MPIInfo_alloc( MPI_COMM_WORLD );
# Line 62  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 66  Finley_Mesh* Finley_RectangularMesh_Hex2
66    N2=N_PER_E*NE2+1;    N2=N_PER_E*NE2+1;
67    
68    /*  allocate mesh: */      /*  allocate mesh: */  
69    sprintf(name,"Rectangular %d x %d x %d mesh",N0,N1,N2);    sprintf(name,"Brick %d x %d x %d mesh",N0,N1,N2);
70    out=Finley_Mesh_alloc(name,DIM,order, reduced_order, mpi_info);    out=Finley_Mesh_alloc(name,DIM, mpi_info);
71    if (! Finley_noError()) {    if (! Finley_noError()) {
72        Paso_MPIInfo_free( mpi_info );        Paso_MPIInfo_free( mpi_info );
73        return NULL;        return NULL;
74    }    }
75    
76    if (useFullElementOrder) {    if (generateAllNodes) {
77       Finley_setError(SYSTEM_ERROR,"full element order for Hex elements is not supported yet.");       /* Finley_setError(SYSTEM_ERROR,"full element order for Hex elements is not supported yet."); */
78  /*       if (useMacroElements) {
79       Finley_Mesh_setElements(out,Finley_ElementFile_alloc(Hex27,            refElements= Finley_ReferenceElementSet_alloc(Hex27Macro,order,reduced_order);
80                                              out->order,       } else {
81                                              out->reduced_order,            refElements=Finley_ReferenceElementSet_alloc(Hex27, order,reduced_order);
82                                              mpi_info))`;       }
83       if (useElementsOnFace) {       if (useElementsOnFace) {
84           Finley_setError(SYSTEM_ERROR,"rich elements for Hex27 elements is not supported yet.");           Finley_setError(SYSTEM_ERROR,"rich elements for Hex27 elements is not supported yet.");
85       } else {       } else {
86           Finley_Mesh_setFaceElements(out,Finley_ElementFile_alloc(Rec9,           if (useMacroElements) {
87                                                      out->order,               refFaceElements=Finley_ReferenceElementSet_alloc(Rec9Macro, order, reduced_order);
88                                                      out->reduced_order,           } else {
89                                                      mpi_info));               refFaceElements=Finley_ReferenceElementSet_alloc(Rec9, order, reduced_order);
90           Finley_Mesh_setContactElements(out,Finley_ElementFile_alloc(Rec9_Contact,           }
91                                                         out->order,           refContactElements=Finley_ReferenceElementSet_alloc(Rec9_Contact, order, reduced_order);
                                                        out->reduced_order,  
                                                        mpi_info));  
92       }       }
 */  
93    
94    } else  {    } else  {
95       Finley_Mesh_setElements(out,Finley_ElementFile_alloc(Hex20,out->order,out->reduced_order,mpi_info));       refElements= Finley_ReferenceElementSet_alloc(Hex20,order,reduced_order);
96       if (useElementsOnFace) {       if (useElementsOnFace) {
97           Finley_Mesh_setFaceElements(out,Finley_ElementFile_alloc(Hex20Face,           refFaceElements = Finley_ReferenceElementSet_alloc(Hex20Face ,order,reduced_order);
98                                                                    out->order,           refContactElements=Finley_ReferenceElementSet_alloc(Hex20Face_Contact, order, reduced_order);
99                                                                    out->reduced_order,  
                                                                   mpi_info));  
          Finley_Mesh_setContactElements(out,Finley_ElementFile_alloc(Hex20Face_Contact,  
                                                                     out->order,  
                                                                     out->reduced_order,  
                                                                     mpi_info));  
100       } else {       } else {
101           Finley_Mesh_setFaceElements(out,Finley_ElementFile_alloc(Rec8,           refFaceElements = Finley_ReferenceElementSet_alloc(Rec8 ,order,reduced_order);
102                                                                    out->order,           refContactElements=Finley_ReferenceElementSet_alloc(Rec8_Contact, order, reduced_order);
103                                                                    out->reduced_order,  
                                                                   mpi_info));  
          Finley_Mesh_setContactElements(out,Finley_ElementFile_alloc(Rec8_Contact,  
                                                                      out->order,  
                                                                      out->reduced_order,  
                                                                      mpi_info));  
104       }       }
105    }    }
106    Finley_Mesh_setPoints(out,Finley_ElementFile_alloc(Point1,    refPoints=Finley_ReferenceElementSet_alloc(Point1, order, reduced_order);
                                                  out->order,  
                                                  out->reduced_order,  
                                                  mpi_info));  
   if (! Finley_noError()) {  
       Paso_MPIInfo_free( mpi_info );  
       Finley_Mesh_free(out);  
       return NULL;  
   }  
107    
108    /* work out the largest dimension */    if ( Finley_noError()) {
109    if (N2==MAX3(N0,N1,N2)) {    
110       Nstride0=1;        Finley_Mesh_setPoints(out,Finley_ElementFile_alloc(refPoints, mpi_info));
111       Nstride1=N0;        Finley_Mesh_setContactElements(out,Finley_ElementFile_alloc(refContactElements, mpi_info));
112       Nstride2=N0*N1;        Finley_Mesh_setFaceElements(out,Finley_ElementFile_alloc(refFaceElements, mpi_info));
113       local_NE0=NE0;        Finley_Mesh_setElements(out,Finley_ElementFile_alloc(refElements, mpi_info));
114       e_offset0=0;  
115       local_NE1=NE1;        /* work out the largest dimension */
116       e_offset1=0;        if (N2==MAX3(N0,N1,N2)) {
117       Paso_MPIInfo_Split(mpi_info,NE2,&local_NE2,&e_offset2);            Nstride0=1;
118    } else if (N1==MAX3(N0,N1,N2)) {            Nstride1=N0;
119       Nstride0=N2;            Nstride2=N0*N1;
120       Nstride1=N0*N2;            local_NE0=NE0;
121       Nstride2=1;            e_offset0=0;
122       local_NE0=NE0;            local_NE1=NE1;
123       e_offset0=0;            e_offset1=0;
124       Paso_MPIInfo_Split(mpi_info,NE1,&local_NE1,&e_offset1);            Paso_MPIInfo_Split(mpi_info,NE2,&local_NE2,&e_offset2);
125       local_NE2=NE2;        } else if (N1==MAX3(N0,N1,N2)) {
126       e_offset2=0;            Nstride0=N2;
127    } else {            Nstride1=N0*N2;
128       Nstride0=N1*N2;            Nstride2=1;
129       Nstride1=1;            local_NE0=NE0;
130       Nstride2=N1;            e_offset0=0;
131       Paso_MPIInfo_Split(mpi_info,NE0,&local_NE0,&e_offset0);            Paso_MPIInfo_Split(mpi_info,NE1,&local_NE1,&e_offset1);
132       local_NE1=NE1;            local_NE2=NE2;
133       e_offset1=0;            e_offset2=0;
134       local_NE2=NE2;        } else {
135       e_offset2=0;            Nstride0=N1*N2;
136    }            Nstride1=1;
137    offset0=e_offset0*N_PER_E;            Nstride2=N1;
138    offset1=e_offset1*N_PER_E;            Paso_MPIInfo_Split(mpi_info,NE0,&local_NE0,&e_offset0);
139    offset2=e_offset2*N_PER_E;            local_NE1=NE1;
140    local_N0=local_NE0*N_PER_E+1;            e_offset1=0;
141    local_N1=local_NE1*N_PER_E+1;            local_NE2=NE2;
142    local_N2=local_NE2*N_PER_E+1;            e_offset2=0;
143          }
144    /* get the number of surface elements */        offset0=e_offset0*N_PER_E;
145          offset1=e_offset1*N_PER_E;
146    NFaceElements=0;        offset2=e_offset2*N_PER_E;
147    if (!periodic[2]) {        local_N0=local_NE0>0 ? local_NE0*N_PER_E+1 : 0;
148      NDOF2=N2;        local_N1=local_NE1>0 ? local_NE1*N_PER_E+1 : 0;
149      if (offset2==0) NFaceElements+=local_NE1*local_NE0;        local_N2=local_NE2>0 ? local_NE2*N_PER_E+1 : 0;
150      if (local_NE2+e_offset2 == NE2) NFaceElements+=local_NE1*local_NE0;  
151    } else {        /* get the number of surface elements */
152        NDOF2=N2-1;  
153    }        NFaceElements=0;  
154          if (!periodic[2] && (local_NE2>0) ) {
155              NDOF2=N2;
156              if (offset2==0) NFaceElements+=local_NE1*local_NE0;
157              if (local_NE2+e_offset2 == NE2) NFaceElements+=local_NE1*local_NE0;
158          } else {
159              NDOF2=N2-1;
160          }
161    
162    if (!periodic[0]) {        if (!periodic[0] && (local_NE0>0) ) {
163       NDOF0=N0;            NDOF0=N0;
164       if (e_offset0 == 0) NFaceElements+=local_NE1*local_NE2;            if (e_offset0 == 0) NFaceElements+=local_NE1*local_NE2;
165       if (local_NE0+e_offset0 == NE0) NFaceElements+=local_NE1*local_NE2;            if (local_NE0+e_offset0 == NE0) NFaceElements+=local_NE1*local_NE2;
166    } else {        } else {
167        NDOF0=N0-1;            NDOF0=N0-1;
168    }        }
169    if (!periodic[1]) {        if (!periodic[1] && (local_NE1>0) ) {
170       NDOF1=N1;            NDOF1=N1;
171       if (e_offset1 == 0) NFaceElements+=local_NE0*local_NE2;            if (e_offset1 == 0) NFaceElements+=local_NE0*local_NE2;
172       if (local_NE1+e_offset1 == NE1) NFaceElements+=local_NE0*local_NE2;            if (local_NE1+e_offset1 == NE1) NFaceElements+=local_NE0*local_NE2;
173    } else {        } else {
174        NDOF1=N1-1;            NDOF1=N1-1;
175          }
176    }    }
   
177    /*  allocate tables: */    /*  allocate tables: */
   
   Finley_NodeFile_allocTable(out->Nodes,local_N0*local_N1*local_N2);  
   Finley_ElementFile_allocTable(out->Elements,local_NE0*local_NE1*local_NE2);  
   Finley_ElementFile_allocTable(out->FaceElements,NFaceElements);  
   
178    if (Finley_noError()) {    if (Finley_noError()) {
179       /* create nodes */        Finley_NodeFile_allocTable(out->Nodes,local_N0*local_N1*local_N2);
180          Finley_ElementFile_allocTable(out->Elements,local_NE0*local_NE1*local_NE2);
181          Finley_ElementFile_allocTable(out->FaceElements,NFaceElements);
182      }
183      if (Finley_noError()) {
184    
185          /* create nodes */
186        
187       #pragma omp parallel for private(i0,i1,i2,k,global_i0,global_i1,global_i2)            #pragma omp parallel for private(i0,i1,i2,k,global_i0,global_i1,global_i2)
188       for (i2=0;i2<local_N2;i2++) {       for (i2=0;i2<local_N2;i2++) {
189         for (i1=0;i1<local_N1;i1++) {         for (i1=0;i1<local_N1;i1++) {
190           for (i0=0;i0<local_N0;i0++) {           for (i0=0;i0<local_N0;i0++) {
# Line 246  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 237  Finley_Mesh* Finley_RectangularMesh_Hex2
237             out->Elements->Nodes[INDEX2(17,k,NN)]=node0+2*Nstride2+1*Nstride1+2*Nstride0;             out->Elements->Nodes[INDEX2(17,k,NN)]=node0+2*Nstride2+1*Nstride1+2*Nstride0;
238             out->Elements->Nodes[INDEX2(18,k,NN)]=node0+2*Nstride2+2*Nstride1+1*Nstride0;             out->Elements->Nodes[INDEX2(18,k,NN)]=node0+2*Nstride2+2*Nstride1+1*Nstride0;
239             out->Elements->Nodes[INDEX2(19,k,NN)]=node0+2*Nstride2+1*Nstride1           ;             out->Elements->Nodes[INDEX2(19,k,NN)]=node0+2*Nstride2+1*Nstride1           ;
240             if (useFullElementOrder) {             if (generateAllNodes) {
241                out->Elements->Nodes[INDEX2(20,k,NN)]=node0+           1*Nstride1+1*Nstride0;                out->Elements->Nodes[INDEX2(20,k,NN)]=node0+           1*Nstride1+1*Nstride0;
242                out->Elements->Nodes[INDEX2(21,k,NN)]=node0+1*Nstride2           +1*Nstride0;                out->Elements->Nodes[INDEX2(21,k,NN)]=node0+1*Nstride2           +1*Nstride0;
243                out->Elements->Nodes[INDEX2(22,k,NN)]=node0+1*Nstride2+1*Nstride1+2*Nstride0;                out->Elements->Nodes[INDEX2(22,k,NN)]=node0+1*Nstride2+1*Nstride1+2*Nstride0;
# Line 263  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 254  Finley_Mesh* Finley_RectangularMesh_Hex2
254       totalNECount=NE0*NE1*NE2;       totalNECount=NE0*NE1*NE2;
255       faceNECount=0;       faceNECount=0;
256       /*   these are the quadrilateral elements on boundary 1 (x3=0): */       /*   these are the quadrilateral elements on boundary 1 (x3=0): */
257       if (!periodic[2]) {       if (!periodic[2] && (local_NE2>0)) {
258         /* **  elements on boundary 100 (x3=0): */         /* **  elements on boundary 100 (x3=0): */
259         if (offset2==0) {         if (offset2==0) {
260            #pragma omp parallel for private(i0,i1,k,node0)            #pragma omp parallel for private(i0,i1,k,node0)
# Line 307  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 298  Finley_Mesh* Finley_RectangularMesh_Hex2
298                   out->FaceElements->Nodes[INDEX2(5,k,NN)] =node0+           2*Nstride1+1*Nstride0;                   out->FaceElements->Nodes[INDEX2(5,k,NN)] =node0+           2*Nstride1+1*Nstride0;
299                   out->FaceElements->Nodes[INDEX2(6,k,NN)] =node0+           1*Nstride1+2*Nstride0;                   out->FaceElements->Nodes[INDEX2(6,k,NN)] =node0+           1*Nstride1+2*Nstride0;
300                   out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+                      1*Nstride0;                   out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+                      1*Nstride0;
301                   if (useFullElementOrder){                   if (generateAllNodes){
302                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+           1*Nstride1+1*Nstride0;                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+           1*Nstride1+1*Nstride0;
303                   }                   }
304                }                }
# Line 363  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 354  Finley_Mesh* Finley_RectangularMesh_Hex2
354                   out->FaceElements->Nodes[INDEX2(5,k,NN)] =node0+2*Nstride2+1*Nstride1+2*Nstride0;                   out->FaceElements->Nodes[INDEX2(5,k,NN)] =node0+2*Nstride2+1*Nstride1+2*Nstride0;
355                   out->FaceElements->Nodes[INDEX2(6,k,NN)] =node0+2*Nstride2+2*Nstride1+1*Nstride0;                   out->FaceElements->Nodes[INDEX2(6,k,NN)] =node0+2*Nstride2+2*Nstride1+1*Nstride0;
356                   out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+2*Nstride2+1*Nstride1           ;                   out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+2*Nstride2+1*Nstride1           ;
357                   if (useFullElementOrder){                   if (generateAllNodes){
358                   out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+2*Nstride2+1*Nstride1+1*Nstride0;                   out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+2*Nstride2+1*Nstride1+1*Nstride0;
359                   }                   }
360                }                }
# Line 373  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 364  Finley_Mesh* Finley_RectangularMesh_Hex2
364         }         }
365         totalNECount+=NE1*NE0;         totalNECount+=NE1*NE0;
366       }       }
367       if (!periodic[0]) {       if (!periodic[0] && (local_NE0>0)) {
368          /* **  elements on boundary 001 (x1=0): */          /* **  elements on boundary 001 (x1=0): */
369            
370          if (e_offset0 == 0) {          if (e_offset0 == 0) {
# Line 422  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 413  Finley_Mesh* Finley_RectangularMesh_Hex2
413                    out->FaceElements->Nodes[INDEX2(5,k,NN)] =node0+2*Nstride2+1*Nstride1           ;                    out->FaceElements->Nodes[INDEX2(5,k,NN)] =node0+2*Nstride2+1*Nstride1           ;
414                    out->FaceElements->Nodes[INDEX2(6,k,NN)] =node0+1*Nstride2+2*Nstride1           ;                    out->FaceElements->Nodes[INDEX2(6,k,NN)] =node0+1*Nstride2+2*Nstride1           ;
415                    out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+           1*Nstride1           ;                    out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+           1*Nstride1           ;
416                   if (useFullElementOrder){                   if (generateAllNodes){
417                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+1*Nstride1           ;                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+1*Nstride1           ;
418                   }                   }
419                 }                 }
# Line 478  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 469  Finley_Mesh* Finley_RectangularMesh_Hex2
469                    out->FaceElements->Nodes[INDEX2(5,k,NN)]=node0+1*Nstride2+2*Nstride1+2*Nstride0;                    out->FaceElements->Nodes[INDEX2(5,k,NN)]=node0+1*Nstride2+2*Nstride1+2*Nstride0;
470                    out->FaceElements->Nodes[INDEX2(6,k,NN)]=node0+2*Nstride2+1*Nstride1+2*Nstride0;                    out->FaceElements->Nodes[INDEX2(6,k,NN)]=node0+2*Nstride2+1*Nstride1+2*Nstride0;
471                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+1*Nstride2           +2*Nstride0;                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+1*Nstride2           +2*Nstride0;
472                   if (useFullElementOrder){                   if (generateAllNodes){
473                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+1*Nstride1+2*Nstride0;                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+1*Nstride1+2*Nstride0;
474                   }                   }
475                 }                 }
# Line 489  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 480  Finley_Mesh* Finley_RectangularMesh_Hex2
480           }           }
481           totalNECount+=NE1*NE2;           totalNECount+=NE1*NE2;
482       }       }
483       if (!periodic[1]) {       if (!periodic[1] && (local_NE1>0)) {
484          /* **  elements on boundary 010 (x2=0): */          /* **  elements on boundary 010 (x2=0): */
485          if (e_offset1 == 0) {          if (e_offset1 == 0) {
486             #pragma omp parallel for private(i0,i2,k,node0)             #pragma omp parallel for private(i0,i2,k,node0)
# Line 536  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 527  Finley_Mesh* Finley_RectangularMesh_Hex2
527                    out->FaceElements->Nodes[INDEX2(5,k,NN)]=node0+1*Nstride2+           2*Nstride0;                    out->FaceElements->Nodes[INDEX2(5,k,NN)]=node0+1*Nstride2+           2*Nstride0;
528                    out->FaceElements->Nodes[INDEX2(6,k,NN)]=node0+2*Nstride2+           1*Nstride0;                    out->FaceElements->Nodes[INDEX2(6,k,NN)]=node0+2*Nstride2+           1*Nstride0;
529                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+1*Nstride2                      ;                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+1*Nstride2                      ;
530                   if (useFullElementOrder){                   if (generateAllNodes){
531                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+         1*Nstride0;                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+         1*Nstride0;
532                   }                   }
533                 }                 }
# Line 591  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 582  Finley_Mesh* Finley_RectangularMesh_Hex2
582                    out->FaceElements->Nodes[INDEX2(5,k,NN)]=node0+2*Nstride2+2*Nstride1+1*Nstride0;                    out->FaceElements->Nodes[INDEX2(5,k,NN)]=node0+2*Nstride2+2*Nstride1+1*Nstride0;
583                    out->FaceElements->Nodes[INDEX2(6,k,NN)]=node0+1*Nstride2+2*Nstride1+2*Nstride0;                    out->FaceElements->Nodes[INDEX2(6,k,NN)]=node0+1*Nstride2+2*Nstride1+2*Nstride0;
584                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+           2*Nstride1+1*Nstride0;                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+           2*Nstride1+1*Nstride0;
585                   if (useFullElementOrder){                   if (generateAllNodes){
586                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+2*Nstride1+1*Nstride0;                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+2*Nstride1+1*Nstride0;
587                   }                   }
588                 }                 }
# Line 601  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 592  Finley_Mesh* Finley_RectangularMesh_Hex2
592          }          }
593          totalNECount+=NE0*NE2;          totalNECount+=NE0*NE2;
594       }       }
595       /* add tag names */       if (Finley_noError()) {
596       Finley_Mesh_addTagMap(out,"top", 200);           /* add tag names */
597       Finley_Mesh_addTagMap(out,"bottom", 100);           Finley_Mesh_addTagMap(out,"top", 200);
598       Finley_Mesh_addTagMap(out,"left", 1);           Finley_Mesh_addTagMap(out,"bottom", 100);
599       Finley_Mesh_addTagMap(out,"right", 2);           Finley_Mesh_addTagMap(out,"left", 1);
600       Finley_Mesh_addTagMap(out,"front", 10);           Finley_Mesh_addTagMap(out,"right", 2);
601       Finley_Mesh_addTagMap(out,"back", 20);           Finley_Mesh_addTagMap(out,"front", 10);
602               Finley_Mesh_addTagMap(out,"back", 20);
      /* prepare mesh for further calculatuions:*/  
      if (Finley_noError()) {  
          Finley_Mesh_resolveNodeIds(out);  
603       }       }
604       if (Finley_noError()) {    }
605      /* prepare mesh for further calculatuions:*/
606      if (Finley_noError()) {
607             Finley_Mesh_resolveNodeIds(out);
608      }
609      if (Finley_noError()) {
610           Finley_Mesh_prepare(out, optimize);           Finley_Mesh_prepare(out, optimize);
      }  
611    }    }
612    
613    if (!Finley_noError()) {    if (!Finley_noError()) {
614        Finley_Mesh_free(out);        Finley_Mesh_free(out);
615    }    }
616    /* free up memory */      /* free up memory */
617      Finley_ReferenceElementSet_dealloc(refPoints);
618      Finley_ReferenceElementSet_dealloc(refContactElements);
619      Finley_ReferenceElementSet_dealloc(refFaceElements);
620      Finley_ReferenceElementSet_dealloc(refElements);
621    Paso_MPIInfo_free( mpi_info );      Paso_MPIInfo_free( mpi_info );  
   #ifdef Finley_TRACE  
   printf("timing: mesh generation: %.4e sec\n",Finley_timer()-time0);  
   #endif  
622    
623    return out;    return out;
624  }  }

Legend:
Removed from v.1387  
changed lines
  Added in v.3080

  ViewVC Help
Powered by ViewVC 1.1.26