Changeset 25447


Ignore:
Timestamp:
08/21/20 20:56:40 (5 years ago)
Author:
Mathieu Morlighem
Message:

CHG: trying to speed up allocation

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r25446 r25447  
    34063406        for(int i=0;i<numnodes;i++){
    34073407
    3408                 if(!flags[this->nodes[i]->Lid()]){
     3408                int nodelid = this->nodes[i]->Lid();
     3409                if(!flags[nodelid]){
    34093410
    34103411                        /*flag current node so that no other element processes it*/
    3411                         flags[this->nodes[i]->Lid()]=true;
    3412 
    3413                         flagsindices[flagsindices_counter[0]]=this->nodes[i]->Lid();
     3412                        flags[nodelid]=true;
     3413
     3414                        flagsindices[flagsindices_counter[0]]=nodelid;
    34143415                        flagsindices_counter[0]++;
    34153416
  • issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp

    r25386 r25447  
    130130        for(i=0;i<femmodel->elements->Size();i++){
    131131                element = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
    132                 lidlist = xNew<int>(element->GetNumberOfNodes());
     132                int elementnumnodes = element->GetNumberOfNodes();
     133                lidlist = xNew<int>(elementnumnodes);
    133134                element->GetNodesLidList(lidlist);
    134135
    135                 for(j=0;j<element->GetNumberOfNodes();j++){
     136                for(j=0;j<elementnumnodes;j++){
    136137                        index = lidlist[j];
    137138                        _assert_(index>=0 && index<numnodes);
     
    141142                        head_e[index]=k++;
    142143                }
    143                 for(j=0;j<numnodesperelement-element->GetNumberOfNodes();j++) k++;
     144                k = k + (numnodesperelement-elementnumnodes);
    144145
    145146                xDelete<int>(lidlist);
     
    153154        for(i=0;i<femmodel->loads->Size();i++){
    154155                load = xDynamicCast<Load*>(femmodel->loads->GetObjectByOffset(i));
    155                 lidlist = xNew<int>(load->GetNumberOfNodes());
     156                int loadnumnodes = load->GetNumberOfNodes();
     157                lidlist = xNew<int>(loadnumnodes);
    156158                load->GetNodesLidList(lidlist);
    157159
    158                 for(j=0;j<load->GetNumberOfNodes();j++){
     160                for(j=0;j<loadnumnodes;j++){
    159161                        index = lidlist[j];
    160162                        _assert_(index>=0 && index<numnodes);
     
    164166                        head_l[index]=k++;
    165167                }
    166                 for(j=0;j<numnodesperload-load->GetNumberOfNodes();j++) k++;
     168                k = k + (numnodesperload-loadnumnodes);
    167169
    168170                xDelete<int>(lidlist);
     
    186188        for(i=0;i<femmodel->nodes->Size();i++){
    187189                Node* node=xDynamicCast<Node*>(femmodel->nodes->GetObjectByOffset(i));
     190                int   lid = node->Lid();
     191                int   pid = node->Pid();
    188192
    189193                /*Reinitialize flags to false*/
     
    201205                flagsindices_counter = 0;
    202206
    203                 for(j=head_e[node->Lid()];j!=-1;j=next_e[j]){
     207                for(j=head_e[lid];j!=-1;j=next_e[j]){
    204208                        offset=count2offset_e[j];
    205209                        element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(offset));
    206210                        element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,&flagsindices_counter,set1enum,set2enum);
    207211                        if(node->IsClone()){
    208                                 connectivity_clone->SetValue(node->Pid(),d_nz+o_nz,ADD_VAL);
    209                         }
    210                         else{
    211                                 d_connectivity[node->Lid()]+=d_nz;
    212                                 o_connectivity[node->Lid()]+=o_nz;
    213                         }
    214                 }
    215                 for(j=head_l[node->Lid()];j!=-1;j=next_l[j]){
     212                                connectivity_clone->SetValue(pid,d_nz+o_nz,ADD_VAL);
     213                        }
     214                        else{
     215                                d_connectivity[lid]+=d_nz;
     216                                o_connectivity[lid]+=o_nz;
     217                        }
     218                }
     219                for(j=head_l[lid];j!=-1;j=next_l[j]){
    216220                        offset=count2offset_l[j];
    217221                        load=xDynamicCast<Load*>(femmodel->loads->GetObjectByOffset(offset));
    218222                        load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,&flagsindices_counter,set1enum,set2enum);
    219223                        if(node->IsClone()){
    220                                 connectivity_clone->SetValue(node->Pid(),d_nz+o_nz,ADD_VAL);
    221                         }
    222                         else{
    223                                 d_connectivity[node->Lid()]+=d_nz;
    224                                 o_connectivity[node->Lid()]+=o_nz;
     224                                connectivity_clone->SetValue(pid,d_nz+o_nz,ADD_VAL);
     225                        }
     226                        else{
     227                                d_connectivity[lid]+=d_nz;
     228                                o_connectivity[lid]+=o_nz;
    225229                        }
    226230                }
     
    247251                for(i=0;i<femmodel->nodes->Size();i++){
    248252                        Node* node=xDynamicCast<Node*>(femmodel->nodes->GetObjectByOffset(i));
     253                        int   lid = node->Lid();
    249254                        if(!node->IsClone()){
    250255                                for(j=0;j<node->fsize;j++){
    251256                                        _assert_(count<m);
    252                                         d_nnz[count]=numberofdofspernode*(d_connectivity[node->Lid()] + reCast<int>(serial_connectivity_clone[node->Lid()]));
    253                                         o_nnz[count]=numberofdofspernode*(o_connectivity[node->Lid()] + reCast<int>(serial_connectivity_clone[node->Lid()]));
     257                                        d_nnz[count]=numberofdofspernode*(d_connectivity[lid] + reCast<int>(serial_connectivity_clone[lid]));
     258                                        o_nnz[count]=numberofdofspernode*(o_connectivity[lid] + reCast<int>(serial_connectivity_clone[lid]));
    254259                                        if(d_nnz[count]>n)   d_nnz[count]=n;
    255260                                        if(o_nnz[count]>N-n) o_nnz[count]=N-n;
Note: See TracChangeset for help on using the changeset viewer.