Ignore:
Timestamp:
06/19/19 07:14:34 (6 years ago)
Author:
bdef
Message:

CHG: a better way to reset deactivated hydro nodes

File:
1 edited

Legend:

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

    r23959 r24030  
    364364        basalelement->FindParam(&smb_model,SmbEnum);
    365365
    366         Input*  sed_head_input                   = basalelement->GetInput(SedimentHeadHydrostepEnum);
    367         Input*  epl_head_input                   = basalelement->GetInput(EplHeadHydrostepEnum);
    368         Input*  base_input                                       = basalelement->GetInput(BaseEnum);
    369         Input*  basal_melt_input                 = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);
    370         Input*  SedTrans_input                   = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
     366        Input* sed_head_input   = basalelement->GetInput(SedimentHeadHydrostepEnum);
     367        Input* epl_head_input   = basalelement->GetInput(EplHeadHydrostepEnum);
     368        Input* base_input                       = basalelement->GetInput(BaseEnum);
     369        Input* basal_melt_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);
     370        Input* SedTrans_input   = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
    371371
    372372        if(dt!= 0.){
     
    488488
    489489        /*Intermediaries*/
    490         int                     domaintype;
     490        int      domaintype;
    491491        Element* basalelement=NULL;
    492         bool             converged;
     492        bool     converged;
     493        int*     doflist = NULL;
    493494
    494495        /*Get basal element*/
     
    504505                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
    505506        }
    506         /*Intermediary*/
    507         int* doflist = NULL;
    508 
    509507        /*Fetch number of nodes for this finite element*/
    510508        int numnodes = basalelement->GetNumberOfNodes();
     
    515513        IssmDouble* pressure = xNew<IssmDouble>(numnodes);
    516514        IssmDouble* residual = xNew<IssmDouble>(numnodes);
    517         IssmDouble* base     = xNew<IssmDouble>(numnodes);
    518 
    519         basalelement->GetInputListOnVertices(&base[0],BaseEnum);
    520         /*Use the dof list to index into the solution vector, frozen nodes are set to initial value: */
     515
     516        /*Use the dof list to index into the solution vector reseting to base is done at the deactivate stage: */
    521517        for(int i=0;i<numnodes;i++){
    522                 if(basalelement->nodes[i]->IsActive()){
    523                         values[i] =solution[doflist[i]];
    524                 }
    525                 else{
    526                         values[i] = base[i];
    527                 }
     518                values[i] =solution[doflist[i]];
    528519                if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
    529520                if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
     
    537528                IssmDouble  penalty_factor,kmax,kappa,h_max;
    538529                IssmDouble* thickness = xNew<IssmDouble>(numnodes);
     530                IssmDouble* base = xNew<IssmDouble>(numnodes);
    539531                IssmDouble* transmitivity = xNew<IssmDouble>(numnodes);
    540532
     
    546538
    547539                basalelement->GetInputListOnVertices(&thickness[0],ThicknessEnum);
     540                basalelement->GetInputListOnVertices(&base[0],BaseEnum);
    548541                basalelement->GetInputListOnVertices(&transmitivity[0],HydrologydcSedimentTransmitivityEnum);
    549542
     
    563556                }
    564557                xDelete<IssmDouble>(thickness);
     558                xDelete<IssmDouble>(base);
    565559                xDelete<IssmDouble>(transmitivity);
    566                 xDelete<IssmDouble>(base);
    567560        }
    568561
     
    576569        xDelete<IssmDouble>(residual);
    577570        xDelete<IssmDouble>(pressure);
    578         xDelete<IssmDouble>(base);
    579571        xDelete<int>(doflist);
    580572        if(domaintype!=Domain2DhorizontalEnum){
Note: See TracChangeset for help on using the changeset viewer.