Changeset 25384


Ignore:
Timestamp:
08/12/20 08:52:10 (5 years ago)
Author:
Mathieu Morlighem
Message:

CHG: speeding up allocation

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

Legend:

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

    r25379 r25384  
    33693369}
    33703370/*}}}*/
    3371 void       Element::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){/*{{{*/
     3371void       Element::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int* flagsindices_counter,int set1_enum,int set2_enum){/*{{{*/
    33723372
    33733373        /*Intermediaries*/
     
    33863386                        flags[this->nodes[i]->Lid()]=true;
    33873387
    3388                         int counter=0;
    3389                         while(flagsindices[counter]>=0) counter++;
    3390                         flagsindices[counter]=this->nodes[i]->Lid();
     3388                        flagsindices[flagsindices_counter[0]]=this->nodes[i]->Lid();
     3389                        flagsindices_counter[0]++;
    33913390
    33923391                        /*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r25379 r25384  
    164164                void               ResultToMatrix(IssmDouble* values,int ncols,int output_enum);
    165165                void               ResultToVector(Vector<IssmDouble>* vector,int output_enum);
    166                 void               SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
     166                void               SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int* flagsindices_counter,int set1_enum,int set2_enum);
    167167                void               SetBoolInput(Inputs* inputs,int enum_in,bool value);
    168168
  • issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp

    r23642 r25384  
    170170
    171171        /*OK now count number of dofs and flag each nodes for each node i*/
    172         bool *flags                  = xNew<bool>(localnumnodes);
    173         int  *flagsindices           = xNew<int>(localnumnodes);
    174         int  *d_connectivity         = xNewZeroInit<int>(localnumnodes);
    175         int  *o_connectivity         = xNewZeroInit<int>(localnumnodes);
     172        bool *flags                = xNew<bool>(localnumnodes);
     173        int  *flagsindices         = xNew<int>(localnumnodes);
     174        int  *d_connectivity       = xNewZeroInit<int>(localnumnodes);
     175        int  *o_connectivity       = xNewZeroInit<int>(localnumnodes);
     176        int   flagsindices_counter;
    176177
    177178        Vector<IssmDouble> *connectivity_clone= new Vector<IssmDouble>(localmasters,numnodes);
    178179
    179         /*Resetting flags to false at eahc iteration takes a lot of time, so we keep track of the flags
     180        /*Resetting flags to false at each iteration takes a lot of time, so we keep track of the flags
    180181         * to reset in flagsindices, initialized with -1*/
    181182        for(i = 0;i<localnumnodes;i++) flags[i]        = false;
     
    198199                        }
    199200                }
    200 
    201                 //for(j=0;j<localnumnodes;j++) flags[j]=false;
    202 
    203                 /*Loop over elements that hold node number i*/
    204                 //if(head_e[node->Lid()]==-1 && head_l[node->Lid()]==-1){
    205                 //      printf("[%i] vertex %i\n",IssmComm::GetRank(),node->Lid()+1);
    206                 //}
     201                flagsindices_counter = 0;
     202
    207203                for(j=head_e[node->Lid()];j!=-1;j=next_e[j]){
    208204                        offset=count2offset_e[j];
    209205                        element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(offset));
    210                         element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
     206                        element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,&flagsindices_counter,set1enum,set2enum);
    211207                        if(node->IsClone()){
    212208                                connectivity_clone->SetValue(node->Pid(),d_nz+o_nz,ADD_VAL);
Note: See TracChangeset for help on using the changeset viewer.