Changeset 4888


Ignore:
Timestamp:
07/29/10 15:47:42 (15 years ago)
Author:
Mathieu Morlighem
Message:

Added penalties parallelization

Location:
issm/trunk/src/c/modules/ModelProcessorx
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp

    r4887 r4888  
    7373        IoModelFetchData(&iomodel->penalties,&iomodel->numpenalties,NULL,iomodel_handle,"penalties");
    7474       
    75         if(iomodel->numpenalties){
    76                 for(i=0;i<iomodel->numpenalties;i++){
    77                                
    78                         //if((iomodel->my_vertices[iomodel->penalties[2*i+0]]==1)){
    79                                 penpair_ids[0]=(int)iomodel->penalties[2*i+0];
    80                                 penpair_ids[1]=(int)iomodel->penalties[2*i+1];
     75        for(i=0;i<iomodel->numpenalties;i++){
    8176
    82                                 loads->AddObject(new Penpair(iomodel->loadcounter+count+1,&penpair_ids[0],DiagnosticHorizAnalysisEnum));
    83                                 count++;
    84                         //}
     77                if(iomodel->my_vertices[(int)iomodel->penalties[2*i+0]-1]){
     78
     79                        /*In debugging mode, check that the second node is in the same cpu*/
     80                        ISSMASSERT(iomodel->my_vertices[(int)iomodel->penalties[2*i+1]-1]);
     81
     82                        /*Get node ids*/
     83                        penpair_ids[0]=iomodel->nodecounter+(int)iomodel->penalties[2*i+0];
     84                        penpair_ids[1]=iomodel->nodecounter+(int)iomodel->penalties[2*i+1];
     85
     86                        /*Create Load*/
     87                        loads->AddObject(new Penpair(iomodel->loadcounter+count+1,&penpair_ids[0],DiagnosticHorizAnalysisEnum));
     88                        count++;
    8589                }
    8690        }
     
    96100        IoModelFetchData(&iomodel->gridoniceshelf,NULL,NULL,iomodel_handle,"gridoniceshelf");
    97101       
    98         if(iomodel->numrifts){
    99                 for(i=0;i<iomodel->numrifts;i++){
    100                                
    101                         if(iomodel->my_elements[(int)*(iomodel->riftinfo+RIFTINFOSIZE*i+2)]){
     102        for(i=0;i<iomodel->numrifts;i++){
    102103
    103                                 loads->AddObject(new Riftfront(iomodel->loadcounter+count+1,i,iomodel,DiagnosticHorizAnalysisEnum));
    104                                 count++;
    105                         }
     104                if(iomodel->my_elements[(int)*(iomodel->riftinfo+RIFTINFOSIZE*i+2)]){
     105
     106                        loads->AddObject(new Riftfront(iomodel->loadcounter+count+1,i,iomodel,DiagnosticHorizAnalysisEnum));
     107                        count++;
    106108                }
    107109        }
  • issm/trunk/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp

    r3984 r4888  
    110110        xfree((void**)&iomodel->elements);
    111111
     112        /*We might have penalties in which case, some vertices have to be cloned:
     113         * penpair has 2 nodes that are poointing toward 2 vertices.
     114         * The 2 vertices must be in the same cpu as the penpair*/
     115        IoModelFetchData(&iomodel->penalties,&iomodel->numpenalties,NULL,iomodel_handle,"penalties");
     116        for(i=0;i<iomodel->numpenalties;i++){
     117                if(my_vertices[(int)iomodel->penalties[2*i+0]-1]){
     118                        my_vertices[(int)iomodel->penalties[2*i+1]-1]=true;
     119                }
     120        }
     121        xfree((void**)&iomodel->penalties);
     122
    112123        #ifdef _PARALLEL_
    113124                /*From the element partitioning, we can determine which vertices are on the inside of this cpu's
Note: See TracChangeset for help on using the changeset viewer.