Changeset 26965


Ignore:
Timestamp:
04/22/22 08:37:19 (3 years ago)
Author:
Cheng Gong
Message:

CHG: killberg for element that is not connected to fully grounded elements and add reinitialization after kill icebergs

Location:
issm/trunk-jpl/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/cores/movingfront_core.cpp

    r26915 r26965  
    1616
    1717        /* intermediaries */
    18         bool save_results,isstressbalance,ismasstransport,isthermal,isenthalpy,islevelset,ismovingfront,killicebergs;
     18        bool save_results,isstressbalance,ismasstransport,isthermal,isenthalpy,islevelset,ismovingfront,killicebergs,haskillberg;
    1919        int  domaintype, num_extrapol_vars, index,reinit_frequency,step;
    2020        int* extrapol_vars=NULL;
     
    122122                if(VerboseSolution()) _printf0_("   looking for icebergs to kill\n");
    123123                KillIcebergsx(femmodel);
     124                femmodel->parameters->FindParam(&haskillberg,LevelsetHasKillIcebergsEnum);
     125                if (haskillberg) {
     126                        if(VerboseSolution()) _printf0_("   reinitializing level set after killing icebergs\n");
     127                        femmodel->ResetLevelset();
     128                        ResetBoundaryConditions(femmodel,LevelsetAnalysisEnum);
     129                }
    124130        }
    125131
  • TabularUnified issm/trunk-jpl/src/c/modules/KillIcebergsx/KillIcebergsx.cpp

    r25554 r26965  
    2828                }
    2929                else{
    30                         if(element->IsGrounded()){
     30                        if(element->IsAllGrounded()){
    3131                                int numvertices = element->GetNumberOfVertices();
    3232                                for(int v=0;v<numvertices;v++) local_mask[element->vertices[v]->Lid()] = 1.;
     
    9999        xDelete<bool>(element_flag);
    100100
     101        bool killbergReinit = false;
    101102        /*OK, now deactivate iceberg and count the number of deactivated vertices*/
    102103        for(Object* & object : femmodel->elements->objects){
     
    120121                                element->AddInput(MaskIceLevelsetEnum,values,P1Enum);
    121122                                xDelete<IssmDouble>(values);
     123                                killbergReinit = true;
    122124                        }
    123125                }
    124126        }
     127        /*Recompute the sign distance for the levelset function*/
     128   femmodel->parameters->SetParam(killbergReinit,LevelsetHasKillIcebergsEnum);
    125129
    126130        /*cleanup*/
  • TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r26947 r26965  
    270270        LevelsetReinitFrequencyEnum,
    271271        LevelsetStabilizationEnum,
     272        LevelsetHasKillIcebergsEnum,
    272273        LockFileNameEnum,
    273274        LoveAllowLayerDeletionEnum,
  • TabularUnified issm/trunk-jpl/src/m/parameterization/killberg.m

    r25422 r26965  
    2525%do not go through elements that are grounded, mark flag as 1 (done) need at least 2 vertices!
    2626%and initialize mask as 1 for all vertices of these elements
    27 isgrounded=(sum(md.mask.ocean_levelset(md.mesh.elements)>0,2)>1);
     27isgrounded=(sum(md.mask.ocean_levelset(md.mesh.elements)>0,2)>2);
    2828%isgrounded = max(md.mask.ocean_levelset(md.mesh.elements),[],2)>0;
    2929pos = find(isgrounded);
Note: See TracChangeset for help on using the changeset viewer.