Changeset 15461


Ignore:
Timestamp:
07/08/13 14:47:31 (12 years ago)
Author:
Mathieu Morlighem
Message:

CHG: no need to call NodesPartitioning if Continuous Galerkin, + added EdgesPartitioning

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

Legend:

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

    r15435 r15461  
    243243                                        ./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
    244244                                        ./modules/ModelProcessorx/NodesPartitioning.cpp\
     245                                        ./modules/ModelProcessorx/EdgesPartitioning.cpp\
    245246                                        ./modules/ModelProcessorx/SortDataSets.cpp\
    246247                                        ./modules/ModelProcessorx/UpdateCounters.cpp\
  • issm/trunk-jpl/src/c/classes/IoModel.cpp

    r15435 r15461  
    2828
    2929        this->my_elements=NULL;
    30         this->my_nodes=NULL;
    3130        this->my_vertices=NULL;
    3231
     
    7069        /*Initialize permanent data: */
    7170        this->my_elements = NULL;
    72         this->my_nodes    = NULL;
    7371        this->my_vertices = NULL;
    7472
     
    108106
    109107        xDelete<bool>(this->my_elements);
    110         xDelete<bool>(this->my_nodes);
    111108        xDelete<int>(this->my_vertices);
    112109
  • issm/trunk-jpl/src/c/classes/IoModel.h

    r15435 r15461  
    2828                /*Partitioning*/
    2929                bool *my_elements;
    30                 bool *my_nodes;
    3130                int  *my_vertices;
    3231
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp

    r15428 r15461  
    1616        int  vertex_id;
    1717        int  io_index;
    18         bool continuous_galerkin=true;
    1918        int  stabilization;
     19        bool *my_nodes=NULL;
    2020
    2121        /*Fetch parameters: */
     
    2828        if(!nodes) nodes = new Nodes();
    2929
    30         /*Continuous Galerkin partition of nodes: */
    31         if(stabilization==3) continuous_galerkin=false;
    32         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    33 
    3430        /*Check in 3d*/
    3531        if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
     
    3834        iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
    3935
    40         if(continuous_galerkin){
     36        if(stabilization!=3){
    4137
    4238                /*Build Nodes dataset (Continuous Galerkin)*/
     
    5349
    5450                /*Build Nodes dataset -> 3 for each element (Discontinuous Galerkin)*/
     51                NodesPartitioning(&my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,false);
    5552                for (i=0;i<iomodel->numberofelements;i++){
    5653                        for (j=0;j<3;j++){
    5754
    58                                 if(iomodel->my_nodes[3*i+j]){
     55                                if(my_nodes[3*i+j]){
    5956
    6057                                        //Get index of the vertex on which the current node is located
     
    7673        /*Clean fetched data: */
    7774        iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
     75        xDelete<bool>(my_nodes);
    7876
    7977        /*Assign output pointer: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp

    r15428 r15461  
    1111void    CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
    1212
    13         /*Intermediary*/
    14         bool continuous_galerkin=true;
    15 
    1613        /*Recover pointer: */
    1714        Nodes* nodes=*pnodes;
     
    1916        /*Create nodes if they do not exist yet*/
    2017        if(!nodes) nodes = new Nodes();
    21 
    22         /*Continuous Galerkin partition of nodes: */
    23         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    2418
    2519        /*First fetch data: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp

    r15451 r15461  
    317317        if(ismacayealpattyn&& fe_ssa==1){
    318318
    319                 int v1,v2,el1,el2;
    320                 bool my_edge;
     319                int   v1,v2;
     320                bool *my_edges = NULL;
    321321
    322322                if(Mx!=iomodel->numberofvertices) _error_("transient spc not supported yet");
    323                 CreateEdges(iomodel);
     323                EdgesPartitioning(&my_edges,iomodel);
    324324
    325325                for(i=0;i<iomodel->numberofedges;i++){
    326326
    327                         v1 = iomodel->edges[4*i+0]-1;
    328                         v2 = iomodel->edges[4*i+1]-1;
    329                         el1= iomodel->edges[4*i+2]-1;
    330                         el2= iomodel->edges[4*i+3]-1;
    331 
    332                         my_edge = iomodel->my_elements[el1];
    333                         if(!my_edge && el2>=0){
    334                                 my_edge = iomodel->my_elements[el2];
    335                         }
    336 
    337                         if(my_edge){
     327                        if(my_edges[i]){
     328
     329                                v1 = iomodel->edges[4*i+0]-1;
     330                                v2 = iomodel->edges[4*i+1]-1;
     331
    338332                                if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
    339333                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
     
    355349                        }
    356350                }
     351
     352                /*Clean up*/
     353                xDelete<bool>(my_edges);
    357354        }
    358355
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp

    r15439 r15461  
    1212
    1313        /*Intermediary*/
    14         bool   continuous_galerkin=true;
    1514        bool   isstokes,isl1l2,ismacayealpattyn;
    1615        int    finiteelementssa;
     
    3433        }
    3534
    36         /*Continuous Galerkin partition of nodes: */
    37         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    38 
    3935        /*Create nodes: */
    4036        iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
     
    5349
    5450                /*Quadratic element*/
    55                 CreateEdges(iomodel);
     51                bool *my_edges = NULL;
     52                EdgesPartitioning(&my_edges,iomodel);
    5653                CreateElementToEdgeConnectivity(iomodel);
    57                 int  element1,element2;
    58                 bool my_edge;
    5954
    6055                for(int i=0;i<iomodel->numberofedges;i++){
    61 
    62                         /*Get left and right elements*/
    63                         element1=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
    64                         element2=iomodel->edges[4*i+3]-1; //edges are [node1 node2 elem1 elem2]
    65 
    66                         /*Check whether we should include this edge (element2 is -2 for boundary edges)*/
    67                         my_edge = iomodel->my_elements[element1];
    68                         if(!my_edge && element2>=0){
    69                                 my_edge = iomodel->my_elements[element2];
    70                         }
    71 
    72                         /*Add node on edge*/
    73                         if(my_edge){
     56                        if(my_edges[i]){
    7457                                nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,0,iomodel,DiagnosticHorizAnalysisEnum));
    7558                        }
    7659                }
     60                /*Clean up*/
     61                xDelete<bool>(my_edges);
    7762        }
    7863
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp

    r15428 r15461  
    1212
    1313        /*Intermediary*/
    14         bool continuous_galerkin = true;
    1514        bool ishutter;
    1615
     
    2928                return;
    3029        }
    31 
    32         /*Continuous Galerkin partition of nodes: */
    33         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    3430
    3531        /*First fetch data: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp

    r15428 r15461  
    1111void    CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel){
    1212
    13         /*Intermediary*/
    14         bool continuous_galerkin=true;
    15 
    1613        /*Recover pointer: */
    1714        Nodes* nodes=*pnodes;
     
    2522                return;
    2623        }
    27 
    28         /*Continuous Galerkin partition of nodes: */
    29         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    3024
    3125        /*First fetch data: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp

    r15428 r15461  
    1111void    CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
    1212
    13         /*Intermediary*/
    14         bool continuous_galerkin=true;
    15 
    1613        /*Recover pointer: */
    1714        Nodes* nodes=*pnodes;
     
    1916        /*Create nodes if they do not exist yet*/
    2017        if(!nodes) nodes = new Nodes();
    21 
    22         /*Continuous Galerkin partition of nodes: */
    23         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    2418
    2519        /*Create nodes and vertices: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp

    r15428 r15461  
    1111void    CreateNodesGia(Nodes** pnodes, IoModel* iomodel){
    1212
    13         /*Intermediary*/
    14         bool continuous_galerkin=true;
    15 
    1613        /*Recover pointer: */
    1714        Nodes* nodes=*pnodes;
     
    1916        /*Create nodes if they do not exist yet*/
    2017        if(!nodes) nodes = new Nodes();
    21 
    22         /*Continuous Galerkin partition of nodes: */
    23         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    2418
    2519        /*First fetch data: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp

    r15428 r15461  
    1313        /*Intermediary*/
    1414        bool isefficientlayer;
    15         bool continuous_galerkin=true;
    1615        int  hydrology_model;
    1716
     
    3635        }
    3736
    38         /*Continuous Galerkin partition of nodes: */
    39         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    40 
    4137        /*Create nodes and vertices: */
    4238        iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp

    r15428 r15461  
    1212
    1313        /*Intermediary*/
    14         bool continuous_galerkin=true;
    1514        int  hydrology_model;
    1615
     
    3029        }
    3130
    32         /*Continuous Galerkin partition of nodes: */
    33         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    34 
    3531        /*Create nodes and vertices: */
    3632        iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp

    r15428 r15461  
    1313        /*Intermediary*/
    1414        int  hydrology_model;
    15         bool continuous_galerkin=true;
    1615
    1716        /*Fetch parameters: */
     
    3029        }
    3130
    32         /*Continuous Galerkin partition of nodes: */
    33         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    34 
    3531        /*Create nodes and vertices: */
    3632        iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp

    r15428 r15461  
    1111void    CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
    1212
    13         /*Intermediary*/
    14         bool continuous_galerkin=true;
    15 
    1613        /*Recover pointer: */
    1714        Nodes* nodes=*pnodes;
     
    1916        /*Create nodes if they do not exist yet*/
    2017        if(!nodes) nodes = new Nodes();
    21 
    22         /*Continuous Galerkin partition of nodes: */
    23         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    2418
    2519        /*First fetch data: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h

    r15435 r15461  
    116116void ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel);
    117117void NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices,  IoModel* iomodel, bool continuous);
     118void EdgesPartitioning(bool** pmy_nodes,IoModel* iomodel);
    118119
    119120/*Connectivity*/
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp

    r15435 r15461  
    2020void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, bool continuous){
    2121
    22         /*First thing, this is a new partition for a new analysis_type, therefore,
    23          * to avoid a leak, erase the nodes partition that might come through
    24          * pmy_nodes: */
    25         xDelete<bool>(*pmy_nodes);
    26 
    27         /*Now, depending on whether we are running galerkin discontinous or continuous elements, carry out a different partition of the nodes: */
    2822        if(continuous==true)
    2923                ContinuousGalerkinNodesPartitioning(pmy_nodes,my_elements, my_vertices, iomodel);
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp

    r15428 r15461  
    1616        int  vertex_id;
    1717        int  io_index;
    18         bool continuous_galerkin=true;
    1918        int  stabilization;
     19        bool *my_nodes = NULL;
    2020
    2121        /*Fetch parameters: */
     
    2828        if(!nodes) nodes = new Nodes();
    2929
    30         /*Create partition of nodes: */
    31         if(stabilization==3) continuous_galerkin=false;
    32         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    33 
    3430        /*Check in 3d*/
    3531        if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
     
    3733        /*First fetch data: */
    3834        iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
    39         if(continuous_galerkin){
     35        if(stabilization!=3){
    4036
    4137                /*Build Nodes dataset (Continuous Galerkin)*/
     
    5349
    5450                /*Build Nodes dataset -> 3 for each element (Discontinuous Galerkin)*/
     51                NodesPartitioning(&my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,false);
    5552                for (i=0;i<iomodel->numberofelements;i++){
    5653                        for (j=0;j<3;j++){
    5754
    58                                 if(iomodel->my_nodes[3*i+j]){
     55                                if(my_nodes[3*i+j]){
    5956
    6057                                        //Get index of the vertex on which the current node is located
     
    7673        /*Clean fetched data: */
    7774        iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
     75        xDelete<bool>(my_nodes);
    7876
    7977        /*Assign output pointer: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp

    r15428 r15461  
    1111void    CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
    1212
    13         /*Intermediary*/
    14         bool continuous_galerkin=true;
    15 
    1613        /*Recover pointer: */
    1714        Nodes* nodes=*pnodes;
     
    1916        /*Create nodes if they do not exist yet*/
    2017        if(!nodes) nodes = new Nodes();
    21 
    22         /*Continuous Galerkin partition of nodes: */
    23         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    2418
    2519        /*First fetch data: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp

    r15428 r15461  
    1111void    CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
    1212
    13         /*Intermediary*/
    14         bool continuous_galerkin=true;
    15 
    1613        /*Recover pointer: */
    1714        Nodes* nodes=*pnodes;
     
    1916        /*Create nodes if they do not exist yet*/
    2017        if(!nodes) nodes = new Nodes();
    21 
    22         /*Continuous Galerkin partition of nodes: */
    23         NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
    2418
    2519        /*Create nodes and vertices: */
Note: See TracChangeset for help on using the changeset viewer.