Changeset 26320


Ignore:
Timestamp:
06/11/21 15:01:19 (4 years ago)
Author:
Mathieu Morlighem
Message:

CHG: removing ToMPISerial

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp

    r26047 r26320  
    307307
    308308/*Finite Element Analysis*/
    309 void           EnthalpyAnalysis::ApplyBasalConstraints(IssmDouble* serial_spc,Element* element){/*{{{*/
     309void           EnthalpyAnalysis::ApplyBasalConstraints(IssmDouble* local_spc,Element* element){/*{{{*/
    310310
    311311        /* Do not check if ice in element, this may lead to inconsistencies between cpu partitions */
     
    317317        int         numindices;
    318318        int        *indices = NULL;
    319         Node*       node = NULL;
    320319        IssmDouble      pressure;
    321320
     
    325324
    326325        /*Get parameters and inputs: */
    327         Input* pressure_input            = element->GetInput(PressureEnum);                                                      _assert_(pressure_input);
     326        Input* pressure_input = element->GetInput(PressureEnum); _assert_(pressure_input);
    328327
    329328        /*Fetch indices of basal & surface nodes for this finite element*/
     
    338337
    339338                /*apply or release spc*/
    340                 node=element->GetNode(indices[i]);
     339                Node* node=element->GetNode(indices[i]);
    341340                if(!node->IsActive()) continue;
    342                 if(serial_spc[node->Sid()]==1.){
     341                if(local_spc[node->Lid()]==1.){
    343342                        pressure_input->GetInputValue(&pressure, gauss);
    344343                        node->ApplyConstraint(0,PureIceEnthalpy(element,pressure));
     
    13441343                        case 0:
    13451344                                // cold, dry base: apply basal surface forcing
    1346                                 vec_spc->SetValue(element->nodes[i]->Sid(),0.,INS_VAL);
     1345                                vec_spc->SetValue(element->nodes[i]->Pid(),0.,INS_VAL);
    13471346                                break;
    13481347                        case 1:
    13491348                                // cold, wet base: keep at pressure melting point
    1350                                 vec_spc->SetValue(element->nodes[i]->Sid(),1.,INS_VAL);
     1349                                vec_spc->SetValue(element->nodes[i]->Pid(),1.,INS_VAL);
    13511350                                break;
    13521351                        case 2:
    13531352                                // temperate, thin refreezing base:
    1354                                 vec_spc->SetValue(element->nodes[i]->Sid(),1.,INS_VAL);
     1353                                vec_spc->SetValue(element->nodes[i]->Pid(),1.,INS_VAL);
    13551354                                break;
    13561355                        case 3:
    13571356                                // temperate, thin melting base: set spc
    1358                                 vec_spc->SetValue(element->nodes[i]->Sid(),1.,INS_VAL);
     1357                                vec_spc->SetValue(element->nodes[i]->Pid(),1.,INS_VAL);
    13591358                                break;
    13601359                        case 4:
    13611360                                // temperate, thick melting base:
    1362                                 vec_spc->SetValue(element->nodes[i]->Sid(),1.,INS_VAL);
     1361                                vec_spc->SetValue(element->nodes[i]->Pid(),1.,INS_VAL);
    13631362                                break;
    13641363                        default:
     
    14171416                        case 0:
    14181417                                // cold, dry base: apply basal surface forcing
    1419                                 vec_spc->SetValue(element->nodes[i]->Sid(),0.,INS_VAL);
     1418                                vec_spc->SetValue(element->nodes[i]->Pid(),0.,INS_VAL);
    14201419                                break;
    14211420                        case 1:
    14221421                                // cold, wet base: keep at pressure melting point
    1423                                 vec_spc->SetValue(element->nodes[i]->Sid(),1.,INS_VAL);
     1422                                vec_spc->SetValue(element->nodes[i]->Pid(),1.,INS_VAL);
    14241423                                break;
    14251424                        case 2:
    14261425                                // temperate, thin refreezing base: release spc
    1427                                 vec_spc->SetValue(element->nodes[i]->Sid(),0.,INS_VAL);
     1426                                vec_spc->SetValue(element->nodes[i]->Pid(),0.,INS_VAL);
    14281427                                break;
    14291428                        case 3:
    14301429                                // temperate, thin melting base: set spc
    1431                                 vec_spc->SetValue(element->nodes[i]->Sid(),1.,INS_VAL);
     1430                                vec_spc->SetValue(element->nodes[i]->Pid(),1.,INS_VAL);
    14321431                                break;
    14331432                        case 4:
    14341433                                // temperate, thick melting base: set grad H*n=0
    1435                                 vec_spc->SetValue(element->nodes[i]->Sid(),0.,INS_VAL);
     1434                                vec_spc->SetValue(element->nodes[i]->Pid(),0.,INS_VAL);
    14361435                                break;
    14371436                        default:
     
    16681667
    16691668        /*Update basal dirichlet BCs for enthalpy: */
    1670         Vector<IssmDouble>* spc           = NULL;
    1671         IssmDouble*         serial_spc    = NULL;
    1672 
    1673         spc=new Vector<IssmDouble>(femmodel->nodes->NumberOfNodes());
     1669        int numnodes            = femmodel->nodes->NumberOfNodes();
     1670   int localmasters        = femmodel->nodes->NumberOfNodesLocal();
     1671        Vector<IssmDouble>* spc = new Vector<IssmDouble>(localmasters,numnodes);
     1672
    16741673        /*First create a vector to figure out what elements should be constrained*/
    16751674        for(Object* & object : femmodel->elements->objects){
     
    16781677        }
    16791678
    1680         /*Assemble and serialize*/
     1679        /*Assemble*/
    16811680        spc->Assemble();
    1682         serial_spc=spc->ToMPISerial();
     1681
     1682        /*Get local vector with both masters and slaves:*/
     1683        IssmDouble *local_spc = NULL;
     1684        femmodel->GetLocalVectorWithClonesNodes(&local_spc,spc);
    16831685        delete spc;
    16841686
     
    16861688        for(Object* & object : femmodel->elements->objects){
    16871689                Element* element=xDynamicCast<Element*>(object);
    1688                 ApplyBasalConstraints(serial_spc,element);
     1690                ApplyBasalConstraints(local_spc,element);
    16891691        }
    16901692
     
    16921694
    16931695        /*Delete*/
    1694         xDelete<IssmDouble>(serial_spc);
     1696        xDelete<IssmDouble>(local_spc);
    16951697}/*}}}*/
    16961698void           EnthalpyAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
  • issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp

    r26256 r26320  
    358358                /*Retrieve all inputs and parameters*/
    359359                basalelement->GetVerticesCoordinates(&xyz_list);
    360                 Input* levelset_input     = basalelement->GetInput(MaskIceLevelsetEnum);                    _assert_(levelset_input);
     360                Input* levelset_input  = basalelement->GetInput(MaskIceLevelsetEnum); _assert_(levelset_input);
    361361
    362362                /* Start  looping on the number of gaussian points: */
Note: See TracChangeset for help on using the changeset viewer.