Changeset 15435


Ignore:
Timestamp:
07/05/13 08:51:41 (12 years ago)
Author:
Mathieu Morlighem
Message:

CHG: split ProcessMesh2d into CreateEdges and CreateElementToEdgeConnectivity

Location:
issm/trunk-jpl/src/c
Files:
1 added
9 edited
1 moved

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/Makefile.am

    r15430 r15435  
    243243                                        ./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
    244244                                        ./modules/ModelProcessorx/NodesPartitioning.cpp\
    245                                         ./modules/ModelProcessorx/ProcessMesh2d.cpp\
    246245                                        ./modules/ModelProcessorx/SortDataSets.cpp\
    247246                                        ./modules/ModelProcessorx/UpdateCounters.cpp\
     
    249248                                        ./modules/ModelProcessorx/CreateParameters.cpp\
    250249                                        ./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\
     250                                        ./modules/ModelProcessorx/CreateEdges.cpp\
     251                                        ./modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp\
    251252                                        ./modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp\
    252253                                        ./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\
  • issm/trunk-jpl/src/c/classes/IoModel.cpp

    r15430 r15435  
    3131        this->my_vertices=NULL;
    3232
     33        this->dim=-1;
     34        this->numberofvertices=-1;
     35        this->numberofelements=-1;
     36        this->numberofedges=-1;
    3337        this->elements=NULL;
    3438        this->edges=NULL;
     39        this->elementtoedgeconnectivity      =NULL;
    3540        this->singlenodetoelementconnectivity=NULL;
    3641        this->numbernodetoelementconnectivity=NULL;
     
    6772        this->my_nodes    = NULL;
    6873        this->my_vertices = NULL;
     74
    6975        FetchData(&this->dim,MeshDimensionEnum);
    7076        FetchData(&this->numberofvertices,MeshNumberofverticesEnum);
     
    7278        FetchData(&this->elements,NULL,NULL,MeshElementsEnum);
    7379        this->edges                           = NULL;
    74         this->elementedgeconnectivity         = NULL;
     80        this->elementtoedgeconnectivity       = NULL;
    7581        this->singlenodetoelementconnectivity = NULL;
    7682        this->numbernodetoelementconnectivity = NULL;
     
    107113        xDelete<int>(this->elements);
    108114        xDelete<int>(this->edges);
    109         xDelete<int>(this->elementedgeconnectivity);
     115        xDelete<int>(this->elementtoedgeconnectivity);
    110116        xDelete<int>(this->singlenodetoelementconnectivity);
    111117        xDelete<int>(this->numbernodetoelementconnectivity);
  • issm/trunk-jpl/src/c/classes/IoModel.h

    r15430 r15435  
    3838                int  *elements;
    3939                int  *edges;
    40                 int  *elementedgeconnectivity;
     40                int  *elementtoedgeconnectivity;
    4141                int  *singlenodetoelementconnectivity;
    4242                int  *numbernodetoelementconnectivity;
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp

    r15430 r15435  
    2626
    2727                /*Get edges and elements*/
    28                 ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
     28                CreateEdges(iomodel);
    2929                iomodel->FetchData(1,ThicknessEnum);
    3030
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp

    r15434 r15435  
    1 /*!\file:  ProcessMesh2d.cpp
    2  * \brief: create connectivity tables from index
     1/*!\file:  CreateEdges.cpp
     2 * \brief: create edges from 2d mesh
    33 */
    44
     5#include "../../classes/classes.h"
    56#include "../../shared/shared.h"
    67
    7 void ProcessMesh2d(int** pedges,int* pnumberofedges,int** pelement_edge_connectivity,int* index,int numberofelements,int numberofvertices){
     8void CreateEdges(IoModel* iomodel){
    89
    9         /*If mesh already processed, return*/
    10         if(*pedges) return;
     10        /*If edges are already present, exit*/
     11        if(iomodel->edges) return;
     12
     13        /*Check Iomodel properties*/
     14        if(iomodel->dim!=2)             _error_("only 2d model are supported");
     15        if(iomodel->numberofvertices<3) _error_("not enough elements in mesh");
     16        _assert_(iomodel->elements);
    1117
    1218        /*Intermediaries*/
     
    1521        int  maxnbe,nbe;
    1622
    17         /*Checks in debugging mode*/
    18         _assert_(index);
    19 
    2023        /*Maximum number of edges*/
    21         maxnbe = 3*numberofelements;
     24        maxnbe = 3*iomodel->numberofelements;
    2225
    2326        /*Initialize intermediaries*/
    24         int*  edgestemp = xNew<int>(maxnbe*4); /*vertex1 vertex2 element1 element2*/
    25         bool* exchange  = xNewZeroInit<bool>(maxnbe); 
    26         int*  element_edge_connectivity = xNew<int>(numberofelements*3);   /*edge1   edge2   edge3*/
    27         for(i=0;i<maxnbe;i++) edgestemp[i*4+3]=-1;
     27        int*  edgestemp = xNew<int>(maxnbe*4);         /*format: [vertex1 vertex2 element1 element2]                */
     28        bool* exchange  = xNewZeroInit<bool>(maxnbe);  /*Edges are ordered, we need to keep track of vertex swapping*/
     29        for(i=0;i<maxnbe;i++) edgestemp[i*4+3]=-1;     /*Initialize last column of edges as -1 (boundary edge)      */
    2830
    2931        /*Initialize chain*/
    30         int* head_minv = xNew<int>(numberofvertices);
     32        int* head_minv = xNew<int>(iomodel->numberofvertices);
    3133        int* next_edge = xNew<int>(maxnbe);
    32         for(i=0;i<numberofvertices;i++) head_minv[i]=-1;
     34        for(i=0;i<iomodel->numberofvertices;i++) head_minv[i]=-1;
    3335
    3436        /*Initialize number of edges*/
    3537        nbe = 0;
    3638
    37         for(i=0;i<numberofelements;i++){
     39        for(i=0;i<iomodel->numberofelements;i++){
    3840                for(j=0;j<3;j++){
    3941
    4042                        /*Get the two indices of the edge number j of the ith triangle*/
    41                         v1 = index[i*3+j];
     43                        v1 = iomodel->elements[i*3+j];
    4244                        if(j==2)
    43                          v2 = index[i*3+0];
     45                         v2 = iomodel->elements[i*3+0];
    4446                        else
    45                          v2 = index[i*3+j+1];
     47                         v2 = iomodel->elements[i*3+j+1];
    4648
    4749                        /*v1 and v2 must be sorted*/
     
    5456
    5557                        /*Go through all processed edges connected to v1 and check whether we have seen this edge yet*/
    56                         _assert_(v1>=0 & v1<numberofvertices);
     58                        _assert_(v1>=0 & v1<iomodel->numberofvertices);
    5759                        for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){
    5860                                if(edgestemp[e*4+1]==v2){
    5961                                        exist = true;
    6062                                        edgestemp[e*4+3]=i+1;
    61                                         element_edge_connectivity[i*3+j]=e;
    6263                                        break;
    6364                                }
     
    6869                                _assert_(nbe<maxnbe);
    6970
    70                                 /*Update edges and element_edge_connectivity*/
     71                                /*Update edges*/
    7172                                edgestemp[nbe*4+0] = v1;
    7273                                edgestemp[nbe*4+1] = v2;
    7374                                edgestemp[nbe*4+2] = i+1;
    74                                 element_edge_connectivity[i*3+j]=nbe;
    75                                 if(v1!=index[i*3+j]) exchange[nbe]=true;
     75                                if(v1!=iomodel->elements[i*3+j]) exchange[nbe]=true;
    7676
    7777                                /*Update chain*/
     
    107107
    108108        /*Assign output pointers*/
    109         if(pedges) *pedges = edges;
    110         else xDelete<int>(edges);
    111 
    112         if(pnumberofedges) *pnumberofedges = nbe;
    113 
    114         if(pelement_edge_connectivity) *pelement_edge_connectivity = element_edge_connectivity;
    115         else xDelete<int>(element_edge_connectivity);
     109        iomodel->edges         = edges;
     110        iomodel->numberofedges = nbe;
    116111}
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp

    r15428 r15435  
    22 * \brief: create connectivity table
    33 */
    4 
    5 #ifdef HAVE_CONFIG_H
    6 #include <config.h>
    7 #else
    8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
    9 #endif
    104
    115#include "../../shared/shared.h"
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp

    r15430 r15435  
    5151
    5252                /*Quadratic element*/
    53                 ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
     53                CreateEdges(iomodel);
    5454                int  element1,element2;
    5555                bool my_edge;
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h

    r15430 r15435  
    118118
    119119/*Connectivity*/
    120 void ProcessMesh2d(int**,int*,int**,int* index,int numberofelements,int numberofvertices);
     120void CreateEdges(IoModel* iomodel);
     121void CreateElementToEdgeConnectivity(IoModel* iomodel);
    121122void CreateSingleNodeToElementConnectivity(IoModel* iomodel);
    122123void CreateNumberNodeToElementConnectivity(IoModel* iomodel);
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp

    r15430 r15435  
    5858
    5959        /*Get edges and elements*/
    60         ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
     60        CreateEdges(iomodel);
    6161
    6262        /*Build discontinuous node partitioning
     
    8989
    9090        /*Get edges and elements*/
    91         ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
     91        CreateEdges(iomodel);
    9292
    9393        /*!All elements have been partitioned above, only create elements for this CPU: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp

    r15430 r15435  
    2929
    3030                /*Get edges and elements*/
    31                 ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
     31                CreateEdges(iomodel);
    3232                iomodel->FetchData(1,ThicknessEnum);
    3333
Note: See TracChangeset for help on using the changeset viewer.