Changeset 25740


Ignore:
Timestamp:
11/08/20 18:04:57 (4 years ago)
Author:
Eric.Larour
Message:

CHG: important commit, do the partition in the right order!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/branches/trunk-larour-SLPS2020/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp

    r25305 r25740  
    201201        femmodel->inputs2->SetTransientInput(DummyEnum,times,N);
    202202        transientinput2 = femmodel->inputs2->GetTransientInput(DummyEnum);
    203                
    204         for (int i=0;i<femmodel->elements->Size();i++){
    205 
    206                 Tria*   element=xDynamicCast<Tria*>(femmodel->elements->GetObjectByOffset(i));
    207 
    208                 if((int)variable_partition[element->Sid()]==-1)id=0; //grab background field
    209                 else id=distributed_values[(int)variable_partition[element->Sid()]]-1; //grab partition field
    210 
    211                 /*recover the right field from the mme: */
    212                 transientinput = datasetinput->GetTransientInputByOffset(id); _assert_(transientinput);
    213 
    214                 /*copy values from the transientinput to the final transientinput2: */
    215                 for (int j=0;j<N;j++){
    216                         TriaInput2* tria_input=transientinput->GetTriaInput(j);
    217                         element->InputServe(tria_input);
    218                         if(interpolationenum==P0Enum){
    219                                 value=tria_input->element_values[0];
    220                                 transientinput2->AddTriaTimeInput( j,1,&(element->lid),&value,P0Enum);
    221                         }
    222                         else if(interpolationenum==P1Enum){
    223 
    224                                 /*Get values and lid list*/
    225                                 const int   numvertices     = element->GetNumberOfVertices();
    226                                 int        *vertexlids      = xNew<int>(numvertices);
    227                                 int        *vertexsids      = xNew<int>(numvertices);
    228 
    229                                 /*Recover vertices ids needed to initialize inputs*/
    230                                 element->GetVerticesLidList(&vertexlids[0]);
    231                                 element->GetVerticesSidList(&vertexsids[0]);
    232                                 values=tria_input->element_values;
    233                                 transientinput2->AddTriaTimeInput( j,numvertices,vertexlids,values,P1Enum);
     203
     204        for (int p=npart;p>=0;p--){
     205                int pp=p;
     206                if (p==npart)pp=-1; /*so, the logic is, we want to do the -1 partition first, then
     207                                                         go from npart-1 to 0 in reverse order:*/
     208               
     209                for (int i=0;i<femmodel->elements->Size();i++){
     210                        int element_partition;
     211
     212                        Tria*   element=xDynamicCast<Tria*>(femmodel->elements->GetObjectByOffset(i));
     213                       
     214                        element_partition= (int)variable_partition[element->Sid()];
     215                        if(element_partition!=pp)continue;
     216
     217                        if(element_partition==-1)id=0; //grab background field
     218                        else id=distributed_values[element_partition]-1; //grab partition field
     219
     220                        /*recover the right field from the mme: */
     221                        transientinput = datasetinput->GetTransientInputByOffset(id); _assert_(transientinput);
     222
     223                        /*copy values from the transientinput to the final transientinput2: */
     224                        for (int j=0;j<N;j++){
     225                                TriaInput2* tria_input=transientinput->GetTriaInput(j);
     226                                element->InputServe(tria_input);
     227                                if(interpolationenum==P0Enum){
     228                                        value=tria_input->element_values[0];
     229                                        transientinput2->AddTriaTimeInput( j,1,&(element->lid),&value,P0Enum);
     230                                }
     231                                else if(interpolationenum==P1Enum){
     232
     233                                        /*Get values and lid list*/
     234                                        const int   numvertices     = element->GetNumberOfVertices();
     235                                        int        *vertexlids      = xNew<int>(numvertices);
     236                                        int        *vertexsids      = xNew<int>(numvertices);
     237
     238                                        /*Recover vertices ids needed to initialize inputs*/
     239                                        element->GetVerticesLidList(&vertexlids[0]);
     240                                        element->GetVerticesSidList(&vertexsids[0]);
     241                                        values=tria_input->element_values;
     242                                        transientinput2->AddTriaTimeInput( j,numvertices,vertexlids,values,P1Enum);
     243                                }
    234244                        }
    235245                }
Note: See TracChangeset for help on using the changeset viewer.