/[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

revision 1854 by ksteube, Tue Oct 7 01:38:55 2008 UTC revision 2722 by gross, Fri Oct 16 06:45:01 2009 UTC
# Line 1  Line 1 
1    
2  /*******************************************************  /*******************************************************
3  *  *
4  * Copyright (c) 2003-2008 by University of Queensland  * Copyright (c) 2003-2009 by University of Queensland
5  * Earth Systems Science Computational Center (ESSCC)  * Earth Systems Science Computational Center (ESSCC)
6  * http://www.uq.edu.au/esscc  * http://www.uq.edu.au/esscc
7  *  *
# Line 32  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
# Line 42  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 43  Finley_Mesh* Finley_RectangularMesh_Hex2
43    Finley_Mesh* out;    Finley_Mesh* out;
44    Paso_MPIInfo *mpi_info = NULL;    Paso_MPIInfo *mpi_info = NULL;
45    char name[50];    char name[50];
46      bool_t generateAllNodes= useFullElementOrder || useMacroElements;
47      #ifdef Finley_TRACE
48    double time0=Finley_timer();    double time0=Finley_timer();
49      #endif
50    
51    /* get MPI information */    /* get MPI information */
52    mpi_info = Paso_MPIInfo_alloc( MPI_COMM_WORLD );    mpi_info = Paso_MPIInfo_alloc( MPI_COMM_WORLD );
# Line 61  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 65  Finley_Mesh* Finley_RectangularMesh_Hex2
65    N2=N_PER_E*NE2+1;    N2=N_PER_E*NE2+1;
66    
67    /*  allocate mesh: */      /*  allocate mesh: */  
68    sprintf(name,"Rectangular %d x %d x %d mesh",N0,N1,N2);    sprintf(name,"Brick %d x %d x %d mesh",N0,N1,N2);
69    out=Finley_Mesh_alloc(name,DIM,order, reduced_order, mpi_info);    out=Finley_Mesh_alloc(name,DIM,order, reduced_order, mpi_info);
70    if (! Finley_noError()) {    if (! Finley_noError()) {
71        Paso_MPIInfo_free( mpi_info );        Paso_MPIInfo_free( mpi_info );
72        return NULL;        return NULL;
73    }    }
74    
75    if (useFullElementOrder) {    if (generateAllNodes) {
76       /* 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."); */
77       Finley_Mesh_setElements(out,Finley_ElementFile_alloc(Hex27,       if (useMacroElements) {
78                                              out->order,            Finley_Mesh_setElements(out,Finley_ElementFile_alloc(Hex27Macro,
79                                              out->reduced_order,                                                   out->order,
80                                              mpi_info));                                                   out->reduced_order,
81                                                     mpi_info));
82         } else {
83              Finley_Mesh_setElements(out,Finley_ElementFile_alloc(Hex27,
84                                                     out->order,
85                                                     out->reduced_order,
86                                                     mpi_info));
87         }
88       if (useElementsOnFace) {       if (useElementsOnFace) {
89           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.");
90       } else {       } else {
91           Finley_Mesh_setFaceElements(out,Finley_ElementFile_alloc(Rec9,           if (useMacroElements) {
92                                                      out->order,               Finley_Mesh_setFaceElements(out,Finley_ElementFile_alloc(Rec9Macro,
93                                                      out->reduced_order,                                                          out->order,
94                                                      mpi_info));                                                          out->reduced_order,
95                                                            mpi_info));
96             } else {
97                 Finley_Mesh_setFaceElements(out,Finley_ElementFile_alloc(Rec9,
98                                                            out->order,
99                                                            out->reduced_order,
100                                                            mpi_info));
101             }
102           Finley_Mesh_setContactElements(out,Finley_ElementFile_alloc(Rec9_Contact,           Finley_Mesh_setContactElements(out,Finley_ElementFile_alloc(Rec9_Contact,
103                                                         out->order,                                                         out->order,
104                                                         out->reduced_order,                                                         out->reduced_order,
# Line 153  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 171  Finley_Mesh* Finley_RectangularMesh_Hex2
171    offset2=e_offset2*N_PER_E;    offset2=e_offset2*N_PER_E;
172    local_N0=local_NE0>0 ? local_NE0*N_PER_E+1 : 0;    local_N0=local_NE0>0 ? local_NE0*N_PER_E+1 : 0;
173    local_N1=local_NE1>0 ? local_NE1*N_PER_E+1 : 0;    local_N1=local_NE1>0 ? local_NE1*N_PER_E+1 : 0;
174    local_N2=local_NE0>0 ? local_NE2*N_PER_E+1 : 0;    local_N2=local_NE2>0 ? local_NE2*N_PER_E+1 : 0;
175    
176    /* get the number of surface elements */    /* get the number of surface elements */
177    
# Line 242  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 260  Finley_Mesh* Finley_RectangularMesh_Hex2
260             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;
261             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;
262             out->Elements->Nodes[INDEX2(19,k,NN)]=node0+2*Nstride2+1*Nstride1           ;             out->Elements->Nodes[INDEX2(19,k,NN)]=node0+2*Nstride2+1*Nstride1           ;
263             if (useFullElementOrder) {             if (generateAllNodes) {
264                out->Elements->Nodes[INDEX2(20,k,NN)]=node0+           1*Nstride1+1*Nstride0;                out->Elements->Nodes[INDEX2(20,k,NN)]=node0+           1*Nstride1+1*Nstride0;
265                out->Elements->Nodes[INDEX2(21,k,NN)]=node0+1*Nstride2           +1*Nstride0;                out->Elements->Nodes[INDEX2(21,k,NN)]=node0+1*Nstride2           +1*Nstride0;
266                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 303  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 321  Finley_Mesh* Finley_RectangularMesh_Hex2
321                   out->FaceElements->Nodes[INDEX2(5,k,NN)] =node0+           2*Nstride1+1*Nstride0;                   out->FaceElements->Nodes[INDEX2(5,k,NN)] =node0+           2*Nstride1+1*Nstride0;
322                   out->FaceElements->Nodes[INDEX2(6,k,NN)] =node0+           1*Nstride1+2*Nstride0;                   out->FaceElements->Nodes[INDEX2(6,k,NN)] =node0+           1*Nstride1+2*Nstride0;
323                   out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+                      1*Nstride0;                   out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+                      1*Nstride0;
324                   if (useFullElementOrder){                   if (generateAllNodes){
325                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+           1*Nstride1+1*Nstride0;                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+           1*Nstride1+1*Nstride0;
326                   }                   }
327                }                }
# Line 359  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 377  Finley_Mesh* Finley_RectangularMesh_Hex2
377                   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;
378                   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;
379                   out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+2*Nstride2+1*Nstride1           ;                   out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+2*Nstride2+1*Nstride1           ;
380                   if (useFullElementOrder){                   if (generateAllNodes){
381                   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;
382                   }                   }
383                }                }
# Line 418  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 436  Finley_Mesh* Finley_RectangularMesh_Hex2
436                    out->FaceElements->Nodes[INDEX2(5,k,NN)] =node0+2*Nstride2+1*Nstride1           ;                    out->FaceElements->Nodes[INDEX2(5,k,NN)] =node0+2*Nstride2+1*Nstride1           ;
437                    out->FaceElements->Nodes[INDEX2(6,k,NN)] =node0+1*Nstride2+2*Nstride1           ;                    out->FaceElements->Nodes[INDEX2(6,k,NN)] =node0+1*Nstride2+2*Nstride1           ;
438                    out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+           1*Nstride1           ;                    out->FaceElements->Nodes[INDEX2(7,k,NN)] =node0+           1*Nstride1           ;
439                   if (useFullElementOrder){                   if (generateAllNodes){
440                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+1*Nstride1           ;                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+1*Nstride1           ;
441                   }                   }
442                 }                 }
# Line 474  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 492  Finley_Mesh* Finley_RectangularMesh_Hex2
492                    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;
493                    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;
494                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+1*Nstride2           +2*Nstride0;                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+1*Nstride2           +2*Nstride0;
495                   if (useFullElementOrder){                   if (generateAllNodes){
496                      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;
497                   }                   }
498                 }                 }
# Line 532  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 550  Finley_Mesh* Finley_RectangularMesh_Hex2
550                    out->FaceElements->Nodes[INDEX2(5,k,NN)]=node0+1*Nstride2+           2*Nstride0;                    out->FaceElements->Nodes[INDEX2(5,k,NN)]=node0+1*Nstride2+           2*Nstride0;
551                    out->FaceElements->Nodes[INDEX2(6,k,NN)]=node0+2*Nstride2+           1*Nstride0;                    out->FaceElements->Nodes[INDEX2(6,k,NN)]=node0+2*Nstride2+           1*Nstride0;
552                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+1*Nstride2                      ;                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+1*Nstride2                      ;
553                   if (useFullElementOrder){                   if (generateAllNodes){
554                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+         1*Nstride0;                      out->FaceElements->Nodes[INDEX2(8,k,NN)] =node0+1*Nstride2+         1*Nstride0;
555                   }                   }
556                 }                 }
# Line 587  Finley_Mesh* Finley_RectangularMesh_Hex2 Line 605  Finley_Mesh* Finley_RectangularMesh_Hex2
605                    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;
606                    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;
607                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+           2*Nstride1+1*Nstride0;                    out->FaceElements->Nodes[INDEX2(7,k,NN)]=node0+           2*Nstride1+1*Nstride0;
608                   if (useFullElementOrder){                   if (generateAllNodes){
609                      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;
610                   }                   }
611                 }                 }

Legend:
Removed from v.1854  
changed lines
  Added in v.2722

  ViewVC Help
Powered by ViewVC 1.1.26