Ignore:
Timestamp:
08/30/13 11:44:43 (12 years ago)
Author:
Mathieu Morlighem
Message:

NEW: speeding up matrix preallocation process again, by keeping track of flags to revert

File:
1 edited

Legend:

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

    r16038 r16042  
    518518        /*OK now count number of dofs and flag each nodes for each node i*/
    519519        bool *flags                  = xNew<bool>(localnumnodes);
     520        int  *flagsindices           = xNew<int>(localnumnodes);
    520521        int  *d_connectivity         = xNewZeroInit<int>(numnodes);
    521522        int  *o_connectivity         = xNewZeroInit<int>(numnodes);
     
    523524        int  *all_connectivity_clone = xNewZeroInit<int>(numnodes);
    524525
     526        /*Resetting flags to false at eahc iteration takes a lot of time, so we keep track of the flags
     527         * to reset in flagsindices, initialized with -1*/
     528        for(i = 0;i<localnumnodes;i++) flags[i]        = false;
     529        for(i = 0;i<localnumnodes;i++) flagsindices[i] = -1;
     530
    525531        /*Create connectivity vector*/
    526532        for(i=0;i<nodes->Size();i++){
     
    528534                if(node->InAnalysis(configuration_type)){
    529535
    530                         /*Reinitialize flags to 0*/
    531                         for(j=0;j<localnumnodes;j++) flags[j]=false;
     536                        /*Reinitialize flags to false*/
     537                        j=0;
     538                        while(true){
     539                                if(flagsindices[j]>=0){
     540                                        flags[flagsindices[j]] = false;
     541                                        flagsindices[j]        = -1;
     542                                        j++;
     543                                }
     544                                else{
     545                                        break;
     546                                }
     547                        }
     548
     549                        //for(j=0;j<localnumnodes;j++) flags[j]=false;
    532550
    533551                        /*Loop over elements that hold node number i*/
    534                         //if(head_e[node->Sid()]==-1 && head_l[node->Sid()]==-1){
    535                         //      printf("[%i] vertex %i\n",IssmComm::GetRank(),node->Sid()+1);
     552                        //if(head_e[node->Lid()]==-1 && head_l[node->Lid()]==-1){
     553                        //      printf("[%i] vertex %i\n",IssmComm::GetRank(),node->Lid()+1);
    536554                        //}
    537555                        for(j=head_e[node->Sid()];j!=-1;j=next_e[j]){
    538556                                offset=count2offset_e[j];
    539557                                element=dynamic_cast<Element*>(elements->GetObjectByOffset(offset));
    540                                 element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum);
     558                                element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
    541559                                if(node->IsClone()){
    542560                                        connectivity_clone[node->Sid()]+=d_nz+o_nz;
     
    550568                                offset=count2offset_l[j];
    551569                                load=dynamic_cast<Load*>(loads->GetObjectByOffset(offset));
    552                                 load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum);
     570                                load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
    553571                                if(node->IsClone()){
    554572                                        connectivity_clone[node->Sid()]+=d_nz+o_nz;
     
    562580        }
    563581        xDelete<bool>(flags);
     582        xDelete<int>(flagsindices);
    564583        xDelete<int>(count2offset_e);
    565584        xDelete<int>(head_e);
Note: See TracChangeset for help on using the changeset viewer.