/[escript]/trunk/finley/src/Mesh_rec4.c
ViewVC logotype

Diff of /trunk/finley/src/Mesh_rec4.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 787 by bcumming, Wed Jul 26 01:46:45 2006 UTC
# Line 184  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 184  Finley_Mesh* Finley_RectangularMesh_Rec4
184        
185    /*  allocate tables: */    /*  allocate tables: */
186    Finley_NodeFile_allocTable(out->Nodes,N0*N1);    Finley_NodeFile_allocTable(out->Nodes,N0*N1);
   Finley_NodeDistribution_allocTable( out->Nodes->degreeOfFreedomDistribution, N0*N1, 0, 0);  
187    Finley_ElementFile_allocTable(out->Elements,NE0*NE1);    Finley_ElementFile_allocTable(out->Elements,NE0*NE1);
188    Finley_ElementFile_allocTable(out->FaceElements,NFaceElements);    Finley_ElementFile_allocTable(out->FaceElements,NFaceElements);
189    
190      Finley_NodeDistribution_allocTable( out->Nodes->degreeOfFreedomDistribution, NDOF0*NDOF1, 0, 0);
191      Finley_ElementDistribution_allocTable( out->Elements->elementDistribution, NE0*NE1, NE0*NE1);
192      Finley_ElementDistribution_allocTable( out->FaceElements->elementDistribution, NFaceElements, NFaceElements );
193  #else  #else
194    out=Finley_Mesh_alloc(name,2,order);    out=Finley_Mesh_alloc(name,2,order);
195    
# Line 429  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 432  Finley_Mesh* Finley_RectangularMesh_Rec4
432    Finley_Mesh* out;    Finley_Mesh* out;
433    char name[50];    char name[50];
434    double time0=Finley_timer();    double time0=Finley_timer();
435        index_t faceStart, numFaceLeft, i;
436    
437    NE0=MAX(1,numElements[0]);    NE0=MAX(1,numElements[0]);
438    NE1=MAX(1,numElements[1]);    NE1=MAX(1,numElements[1]);
# Line 508  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 512  Finley_Mesh* Finley_RectangularMesh_Rec4
512        
513    /*  allocate tables: */    /*  allocate tables: */
514    Finley_NodeFile_allocTable( out->Nodes, (numNodesLocal + numNodesExternal)*N1 );    Finley_NodeFile_allocTable( out->Nodes, (numNodesLocal + numNodesExternal)*N1 );
   Finley_NodeDistribution_allocTable( out->Nodes->degreeOfFreedomDistribution, numDOFLocal*NDOF1, 2*NDOF1, 0 );  
515    Finley_ElementFile_allocTable(out->Elements,numElementsLocal*NE1);    Finley_ElementFile_allocTable(out->Elements,numElementsLocal*NE1);
516    Finley_ElementFile_allocTable(out->FaceElements,NFaceElements);    Finley_ElementFile_allocTable(out->FaceElements,NFaceElements);
517    
518      Finley_NodeDistribution_allocTable( out->Nodes->degreeOfFreedomDistribution, NDOF0t*NDOF1, 2*NDOF1, 0 );
519      Finley_ElementDistribution_allocTable( out->Elements->elementDistribution, numElementsLocal*NE1, NE1*(numElementsLocal-boundaryRight*(!periodic[1])) );
520      Finley_ElementDistribution_allocTable( out->FaceElements->elementDistribution, NFaceElements, NFaceElements-2*boundaryRight*(!periodic[1]) );
521    
522    if (! Finley_noError()) {    if (! Finley_noError()) {
523        Finley_Mesh_dealloc(out);        Finley_Mesh_dealloc(out);
524        return NULL;        return NULL;
# Line 519  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 526  Finley_Mesh* Finley_RectangularMesh_Rec4
526    
527    /*  set nodes: */    /*  set nodes: */
528    #pragma omp parallel for private(i0,i1,k)    #pragma omp parallel for private(i0,i1,k)
529    for (k=0,i1=0;i1<N1;i1++) {    for (i1=0;i1<N1;i1++) {
530      for ( i0=0;i0<N0t;i0++,k++) {      for ( i0=0;i0<N0t;i0++,k++) {
531                k=i0+i1*N0t;
532        out->Nodes->Coordinates[INDEX2(0,k,2)]=DBLE((i0+firstNodeConstruct) % N0)/DBLE(N0-1)*Length[0];        out->Nodes->Coordinates[INDEX2(0,k,2)]=DBLE((i0+firstNodeConstruct) % N0)/DBLE(N0-1)*Length[0];
533        out->Nodes->Coordinates[INDEX2(1,k,2)]=DBLE(i1)/DBLE(N1-1)*Length[1];        out->Nodes->Coordinates[INDEX2(1,k,2)]=DBLE(i1)/DBLE(N1-1)*Length[1];
534        out->Nodes->Id[k]=k;        out->Nodes->Id[k]=k;
# Line 608  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 616  Finley_Mesh* Finley_RectangularMesh_Rec4
616    /* elements: */    /* elements: */
617        
618   #pragma omp parallel for private(i0,i1,k,node0)     #pragma omp parallel for private(i0,i1,k,node0)  
619   for ( i1=0, k=0; i1<NE1; i1++) {   for ( i1=0; i1<NE1; i1++) {
620      for ( i0=0; i0<numElementsLocal; i0++, k++) {      for ( i0=0; i0<numElementsLocal; i0++, k++) {
621                k=i1*numElementsLocal + i0;
622              node0 = (periodicLocal[0] && !i0) ? i1*N0t :  i1*N0t + i0 + periodicLocal[0];              node0 = (periodicLocal[0] && !i0) ? i1*N0t :  i1*N0t + i0 + periodicLocal[0];
623    
624        out->Elements->Id[k]=k;        out->Elements->Id[k]=((firstNodeConstruct+i0)%NE0) * NE1 + i1;
625        out->Elements->Tag[k]=0;        out->Elements->Tag[k]=0;
626        out->Elements->Color[k]=COLOR_MOD(i0)+3*COLOR_MOD(i1);        out->Elements->Color[k]=COLOR_MOD(i0)+3*COLOR_MOD(i1);
627              out->Elements->Dom[k]=ELEMENT_INTERNAL;              out->Elements->Dom[k]=ELEMENT_INTERNAL;
# Line 643  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 652  Finley_Mesh* Finley_RectangularMesh_Rec4
652    totalNECount=numElementsLocal*NE1;    totalNECount=numElementsLocal*NE1;
653    faceNECount=0;    faceNECount=0;
654        
655        numFaceLeft = domLeft*(!periodic[0])*NE1;
656        faceStart = out->FaceElements->elementDistribution->vtxdist[mpi_info->rank];
657      if( !periodic[1] ){      if( !periodic[1] ){
658                    
659        /* elements on boundary 010 (x1=0): */        /* elements on boundary 010 (x1=0): */
# Line 651  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 662  Finley_Mesh* Finley_RectangularMesh_Rec4
662                  k=i0+faceNECount;                  k=i0+faceNECount;
663                  node0 = (periodicLocal[0] && !i0) ? 0 :  i0 + periodicLocal[0];                  node0 = (periodicLocal[0] && !i0) ? 0 :  i0 + periodicLocal[0];
664    
665                  out->FaceElements->Id[k]=i0+totalNECount;                  out->FaceElements->Id[k]=faceStart + numFaceLeft + i0*2;
666                  out->FaceElements->Tag[k]   = 10;                  out->FaceElements->Tag[k]   = 10;
667                  out->FaceElements->Color[k] = i0%2;                  out->FaceElements->Color[k] = i0%2;
668                  out->FaceElements->Dom[k] = ELEMENT_INTERNAL;                  out->FaceElements->Dom[k] = ELEMENT_INTERNAL;
# Line 671  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 682  Finley_Mesh* Finley_RectangularMesh_Rec4
682            if( periodicLocal[0] )            if( periodicLocal[0] )
683                out->FaceElements->Dom[faceNECount+1]=ELEMENT_BOUNDARY;                out->FaceElements->Dom[faceNECount+1]=ELEMENT_BOUNDARY;
684          }          }
685        if( boundaryRight )        if( boundaryRight ){
686            out->FaceElements->Dom[faceNECount+numElementsLocal-1]=ELEMENT_BOUNDARY;            out->FaceElements->Dom[faceNECount+numElementsLocal-1]=ELEMENT_BOUNDARY;
687                out->FaceElements->Id[faceNECount+numElementsLocal-1]=out->FaceElements->elementDistribution->vtxdist[mpi_info->rank+1];
688            }
689    
690        totalNECount += numElementsLocal;        totalNECount += numElementsLocal;
691        faceNECount  += numElementsLocal;        faceNECount  += numElementsLocal;
# Line 684  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 697  Finley_Mesh* Finley_RectangularMesh_Rec4
697              k=i0+faceNECount;              k=i0+faceNECount;
698              node0 = (periodicLocal[0] && !i0) ? (NE1-1)*N0t :  i0 + periodicLocal[0] + (NE1-1)*N0t;              node0 = (periodicLocal[0] && !i0) ? (NE1-1)*N0t :  i0 + periodicLocal[0] + (NE1-1)*N0t;
699    
700              out->FaceElements->Id[k]=i0+totalNECount;        out->FaceElements->Id[k]=faceStart + numFaceLeft + i0*2+1;
701              out->FaceElements->Tag[k]   = 20;              out->FaceElements->Tag[k]   = 20;
702              out->FaceElements->Color[k] = i0%2+2;              out->FaceElements->Color[k] = i0%2+2;
703              out->FaceElements->Dom[k] = ELEMENT_INTERNAL;              out->FaceElements->Dom[k] = ELEMENT_INTERNAL;
# Line 704  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 717  Finley_Mesh* Finley_RectangularMesh_Rec4
717            if( periodicLocal[0] )            if( periodicLocal[0] )
718                out->FaceElements->Dom[faceNECount+1]=ELEMENT_BOUNDARY;                out->FaceElements->Dom[faceNECount+1]=ELEMENT_BOUNDARY;
719          }          }
720        if( boundaryRight )        if( boundaryRight ){
721            out->FaceElements->Dom[faceNECount+numElementsLocal-1]=ELEMENT_BOUNDARY;            out->FaceElements->Dom[faceNECount+numElementsLocal-1]=ELEMENT_BOUNDARY;
722                out->FaceElements->Id[faceNECount+numElementsLocal-1]=out->FaceElements->elementDistribution->vtxdist[mpi_info->rank+1]+1;
723            }
724    
725        totalNECount += numElementsLocal;        totalNECount += numElementsLocal;
726        faceNECount  += numElementsLocal;        faceNECount  += numElementsLocal;
# Line 718  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 733  Finley_Mesh* Finley_RectangularMesh_Rec4
733              k=i1+faceNECount;              k=i1+faceNECount;
734              node0=i1*N0t;              node0=i1*N0t;
735    
736              out->FaceElements->Id[k]=i1+totalNECount;        out->FaceElements->Id[k]=faceStart + i1;
737              out->FaceElements->Tag[k]   = 1;              out->FaceElements->Tag[k]   = 1;
738              out->FaceElements->Color[k] = i1%2+4;              out->FaceElements->Color[k] = i1%2+4;
739              out->FaceElements->Dom[k] = ELEMENT_INTERNAL;              out->FaceElements->Dom[k] = ELEMENT_INTERNAL;
# Line 745  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 760  Finley_Mesh* Finley_RectangularMesh_Rec4
760              k=i1+faceNECount;              k=i1+faceNECount;
761              node0=(N0t-2)+i1*N0t;              node0=(N0t-2)+i1*N0t;
762    
763              out->FaceElements->Id[k]=i1+totalNECount;        out->FaceElements->Id[k]=faceStart + numElementsLocal*2*(!periodic[1])+i1;
764              out->FaceElements->Tag[k]   = 2;              out->FaceElements->Tag[k]   = 2;
765              out->FaceElements->Color[k] = i1%2+6;              out->FaceElements->Color[k] = i1%2+6;
766              out->FaceElements->Dom[k] = ELEMENT_INTERNAL;              out->FaceElements->Dom[k] = ELEMENT_INTERNAL;
# Line 773  Finley_Mesh* Finley_RectangularMesh_Rec4 Line 788  Finley_Mesh* Finley_RectangularMesh_Rec4
788      Finley_ElementFile_setDomainFlags( out->ContactElements );      Finley_ElementFile_setDomainFlags( out->ContactElements );
789      Finley_ElementFile_setDomainFlags( out->Points );      Finley_ElementFile_setDomainFlags( out->Points );
790    
791        Finley_Mesh_prepareElementDistribution( out );
792    
793      /* reorder the degrees of freedom */      /* reorder the degrees of freedom */
794      Finley_Mesh_resolveDegreeOfFreedomOrder( out, TRUE );      Finley_Mesh_resolveDegreeOfFreedomOrder( out, TRUE );

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

  ViewVC Help
Powered by ViewVC 1.1.26