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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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                        }
Note: See TracChangeset for help on using the changeset viewer.