Changeset 16024


Ignore:
Timestamp:
08/29/13 20:18:10 (12 years ago)
Author:
Mathieu Morlighem
Message:

NEW: added node local id (lid), required to speed up stiffness matrix preallocation

Location:
issm/trunk-jpl/src/c
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/classes/Node.cpp

    r15976 r16024  
    2121}
    2222/*}}}*/
    23 /*FUNCTION Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type,int approximation) {{{*/
    24 Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type,int in_approximation){
     23/*FUNCTION Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int approximation) {{{*/
     24Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int in_approximation){
    2525
    2626        /*Intermediary*/
     
    3131        this->id            = node_id;
    3232        this->sid           = node_sid;
     33        this->lid           = node_lid;
    3334        this->analysis_type = analysis_type;
    3435
  • TabularUnified issm/trunk-jpl/src/c/classes/Node.h

    r15976 r16024  
    3030        public:
    3131
    32                 int id;    //unique arbitrary id.
    33                 int sid;   //"serial" id (rank of this node if the dataset was serial on 1 cpu)
     32                int id;    // unique arbitrary id.
     33                int sid;   // "serial" id (rank of this node if the dataset was serial on 1 cpu)
     34                int lid;   // "local"  id (rank of this node in current partition)
    3435
    3536                bool         indexingupdate;
     
    4041                /*Node constructors, destructors*/
    4142                Node();
    42                 Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type,int approximation_in);
     43                Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int approximation_in);
    4344                ~Node();
    4445
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp

    r15689 r16024  
    1212
    1313        /*Intermediaries*/
    14         int   i,j,counter;
     14        int   i,j,counter,lid=0;
    1515        bool *my_edges = NULL;
    1616        bool *my_nodes = NULL;
     
    2727                        for(i=0;i<iomodel->numberofvertices;i++){
    2828                                if(iomodel->my_vertices[i]){
    29                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
     29                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
    3030                                }
    3131                        }
     
    3737                                for(j=0;j<3;j++){
    3838                                        if(my_nodes[3*i+j]){
    39                                                 nodes->AddObject(new Node(iomodel->nodecounter+3*i+j+1,iomodel->nodecounter+3*i+j,iomodel->elements[+3*i+j]-1,iomodel,analysis,approximation));
     39                                                nodes->AddObject(new Node(iomodel->nodecounter+3*i+j+1,iomodel->nodecounter+3*i+j,lid++,iomodel->elements[+3*i+j]-1,iomodel,analysis,approximation));
    4040
    4141                                        }
     
    4747                        for(i=0;i<iomodel->numberofvertices;i++){
    4848                                if(iomodel->my_vertices[i]){
    49                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
    50                                 }
    51                         }
    52                         for(i=0;i<iomodel->numberofelements;i++){
    53                                 if(iomodel->my_elements[i]){
    54                                         nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation));
     49                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
     50                                }
     51                        }
     52                        for(i=0;i<iomodel->numberofelements;i++){
     53                                if(iomodel->my_elements[i]){
     54                                        nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation));
    5555                                }
    5656                        }
     
    6060                        for(i=0;i<iomodel->numberofvertices;i++){
    6161                                if(iomodel->my_vertices[i]){
    62                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
    63                                 }
    64                         }
    65                         for(i=0;i<iomodel->numberofelements;i++){
    66                                 if(iomodel->my_elements[i]){
    67                                         node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation);
     62                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
     63                                }
     64                        }
     65                        for(i=0;i<iomodel->numberofelements;i++){
     66                                if(iomodel->my_elements[i]){
     67                                        node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation);
    6868                                        node->Deactivate();
    6969                                        nodes->AddObject(node);
     
    7676                        for(i=0;i<iomodel->numberofvertices;i++){
    7777                                if(iomodel->my_vertices[i]){
    78                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
     78                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
    7979                                }
    8080                        }
     
    8484                                if(iomodel->edges[i*3+2]==2){
    8585                                        if(my_edges[i]){
    86                                                 node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,counter+1,0,iomodel,analysis,approximation);
     86                                                node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,counter+1,lid++,0,iomodel,analysis,approximation);
    8787                                                nodes->AddObject(node);
    8888                                        }
     
    9595                        for(i=0;i<iomodel->numberofvertices;i++){
    9696                                if(iomodel->my_vertices[i]){
    97                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
     97                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
    9898                                }
    9999                        }
     
    103103                                if(iomodel->edges[i*3+2]!=2){
    104104                                        if(my_edges[i]){
    105                                                 node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,counter+1,0,iomodel,analysis,approximation);
     105                                                node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,counter+1,lid++,0,iomodel,analysis,approximation);
    106106                                                nodes->AddObject(node);
    107107                                        }
     
    115115                        for(i=0;i<iomodel->numberofvertices;i++){
    116116                                if(iomodel->my_vertices[i]){
    117                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
     117                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
    118118                                }
    119119                        }
    120120                        for(i=0;i<iomodel->numberofedges;i++){
    121121                                if(my_edges[i]){
    122                                         nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation));
     122                                        nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation));
    123123                                }
    124124                        }
     
    131131                        for(i=0;i<iomodel->numberofvertices;i++){
    132132                                if(iomodel->my_vertices[i]){
    133                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
    134                                 }
    135                         }
    136                         /*P1 pressure*/
    137                         for(i=0;i<iomodel->numberofvertices;i++){
    138                                 if(iomodel->my_vertices[i]){
    139                                         nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,i,iomodel,analysis,FSpressureEnum));
     133                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
     134                                }
     135                        }
     136                        /*P1 pressure*/
     137                        for(i=0;i<iomodel->numberofvertices;i++){
     138                                if(iomodel->my_vertices[i]){
     139                                        nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,i,iomodel,analysis,FSpressureEnum));
    140140                                }
    141141                        }
     
    146146                        for(i=0;i<iomodel->numberofvertices;i++){
    147147                                if(iomodel->my_vertices[i]){
    148                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
    149                                 }
    150                         }
    151                         /*P1 pressure*/
    152                         for(i=0;i<iomodel->numberofvertices;i++){
    153                                 if(iomodel->my_vertices[i]){
    154                                         nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,i,iomodel,analysis,FSpressureEnum));
     148                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
     149                                }
     150                        }
     151                        /*P1 pressure*/
     152                        for(i=0;i<iomodel->numberofvertices;i++){
     153                                if(iomodel->my_vertices[i]){
     154                                        nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,i,iomodel,analysis,FSpressureEnum));
    155155                                }
    156156                        }
     
    161161                        for(i=0;i<iomodel->numberofvertices;i++){
    162162                                if(iomodel->my_vertices[i]){
    163                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
    164                                 }
    165                         }
    166                         for(i=0;i<iomodel->numberofelements;i++){
    167                                 if(iomodel->my_elements[i]){
    168                                         node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum);
     163                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
     164                                }
     165                        }
     166                        for(i=0;i<iomodel->numberofelements;i++){
     167                                if(iomodel->my_elements[i]){
     168                                        node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum);
    169169                                        node->Deactivate();
    170170                                        nodes->AddObject(node);
     
    174174                        for(i=0;i<iomodel->numberofvertices;i++){
    175175                                if(iomodel->my_vertices[i]){
    176                                         nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,analysis,FSpressureEnum));
     176                                        nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,analysis,FSpressureEnum));
    177177                                }
    178178                        }
     
    183183                        for(i=0;i<iomodel->numberofvertices;i++){
    184184                                if(iomodel->my_vertices[i]){
    185                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
    186                                 }
    187                         }
    188                         for(i=0;i<iomodel->numberofelements;i++){
    189                                 if(iomodel->my_elements[i]){
    190                                         nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum));
    191                                 }
    192                         }
    193                         /*P1 pressure*/
    194                         for(i=0;i<iomodel->numberofvertices;i++){
    195                                 if(iomodel->my_vertices[i]){
    196                                         nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,analysis,FSpressureEnum));
     185                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
     186                                }
     187                        }
     188                        for(i=0;i<iomodel->numberofelements;i++){
     189                                if(iomodel->my_elements[i]){
     190                                        nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum));
     191                                }
     192                        }
     193                        /*P1 pressure*/
     194                        for(i=0;i<iomodel->numberofvertices;i++){
     195                                if(iomodel->my_vertices[i]){
     196                                        nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,analysis,FSpressureEnum));
    197197                                }
    198198                        }
     
    204204                        for(i=0;i<iomodel->numberofvertices;i++){
    205205                                if(iomodel->my_vertices[i]){
    206                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
     206                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
    207207                                }
    208208                        }
    209209                        for(i=0;i<iomodel->numberofedges;i++){
    210210                                if(my_edges[i]){
    211                                         nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum));
    212                                 }
    213                         }
    214 
    215                         /*P1 pressure*/
    216                         for(i=0;i<iomodel->numberofvertices;i++){
    217                                 if(iomodel->my_vertices[i]){
    218                                         nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,i,iomodel,analysis,FSpressureEnum));
     211                                        nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum));
     212                                }
     213                        }
     214
     215                        /*P1 pressure*/
     216                        for(i=0;i<iomodel->numberofvertices;i++){
     217                                if(iomodel->my_vertices[i]){
     218                                        nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,i,iomodel,analysis,FSpressureEnum));
    219219                                }
    220220                        }
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp

    r15986 r16024  
    6262                Nodes* nodes = *pnodes;
    6363                Node*  node  = NULL;
     64                int    lid=0;
    6465                if(!nodes) nodes = new Nodes();
    6566
     
    7273                                        approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
    7374                                        if(approximation==FSApproximationEnum)  approximation=FSvelocityEnum;
    74                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,StressbalanceAnalysisEnum,approximation));
     75                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,approximation));
    7576                                }
    7677                        }
    7778                        for(int i=0;i<iomodel->numberofelements;i++){
    7879                                if(iomodel->my_elements[i]){
    79                                         node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
     80                                        node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
    8081                                        node->Deactivate();
    8182                                        nodes->AddObject(node);
     
    8687                                if(iomodel->my_vertices[i]){
    8788                                        approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
    88                                         node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
     89                                        node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
    8990                                        if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum){
    9091                                                node->Deactivate();
     
    9798                        for(int i=0;i<iomodel->numberofvertices;i++){
    9899                                if(iomodel->my_vertices[i]){
    99                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,StressbalanceAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
     100                                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
    100101                                }
    101102                        }
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp

    r15986 r16024  
    2323        /*First create nodes*/
    2424        Nodes* nodes=*pnodes;
     25        int    lid=0;
    2526        if(!nodes) nodes = new Nodes();
    2627
     
    3233
    3334                        /*Create new node if is in this processor's partition*/
    34                         node = new Node(iomodel->nodecounter+i+1,i,i,iomodel,StressbalanceSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]));
     35                        node = new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]));
    3536
    3637                        /*Deactivate node if not SIA*/
Note: See TracChangeset for help on using the changeset viewer.