Changeset 26450


Ignore:
Timestamp:
09/21/21 12:06:54 (3 years ago)
Author:
Mathieu Morlighem
Message:

CHG: rewriting a bit

File:
1 edited

Legend:

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

    r26448 r26450  
    125125                case CalvingCrevasseDepthEnum:
    126126                        parameters->AddObject(iomodel->CopyConstantObject("md.calving.crevasse_opening_stress",CalvingCrevasseDepthEnum));
     127                        parameters->AddObject(iomodel->CopyConstantObject("md.calving.crevasse_threshold",CalvingCrevasseThresholdEnum));
    127128                        break;
    128129                case CalvingDev2Enum:
     
    472473
    473474        /*Intermediaries*/
    474         int         calvinglaw;
    475         IssmDouble  min_thickness,thickness,hab_fraction;
    476         IssmDouble      crevassedepth,surface_crevasse,surface,critical_fraction;
    477         IssmDouble  rho_ice,rho_water;
    478         IssmDouble  bed,water_depth;
    479         IssmDouble  levelset,sealevel;
    480 
     475        int  calvinglaw;
    481476        femmodel->parameters->FindParam(&calvinglaw,CalvingLawEnum);
    482477
    483478        if(calvinglaw==CalvingMinthicknessEnum || calvinglaw==CalvingVonmisesEnum){
    484479
    485                 /*Get minimum thickness threshold*/
    486                 femmodel->parameters->FindParam(&min_thickness,CalvingMinthicknessEnum);
     480                /*Intermediaries*/
     481                IssmDouble thickness,bed,sealevel;
     482                IssmDouble min_thickness = femmodel->parameters->FindParam(CalvingMinthicknessEnum);
    487483
    488484                /*Loop over all elements of this partition*/
     
    518514   else if(calvinglaw==CalvingHabEnum){
    519515
     516                /*Intermediaries*/
     517                IssmDouble  thickness,water_depth,levelset,hab_fraction;
     518
    520519                /*Get the fraction of the flotation thickness at the terminus*/
    521520                InputDuplicatex(femmodel,MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);
     
    526525                        Element* element  = xDynamicCast<Element*>(object);
    527526
    528                         rho_ice = element->FindParam(MaterialsRhoIceEnum);
    529                         rho_water = element->FindParam(MaterialsRhoSeawaterEnum);
     527                        IssmDouble rho_ice  = element->FindParam(MaterialsRhoIceEnum);
     528                        IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum);
    530529
    531530                        int      numnodes           = element->GetNumberOfNodes();
     
    560559   else if(calvinglaw==CalvingCrevasseDepthEnum){
    561560
    562                 int   nflipped,local_nflipped;
     561                /*Intermediaries*/
     562                IssmDouble  levelset,crevassedepth,bed,surface_crevasse,thickness,surface;
     563                int         nflipped,local_nflipped;
    563564                IssmDouble* constraint_nodes = NULL;
    564565
     
    571572      int localmasters  = femmodel->nodes->NumberOfNodesLocal();
    572573      Vector<IssmDouble>* vec_constraint_nodes = vec_constraint_nodes=new Vector<IssmDouble>(localmasters,numnodes);
     574
     575      IssmDouble crevasse_threshold = femmodel->parameters->FindParam(CalvingCrevasseThresholdEnum);
    573576
    574577                for(Object* & object : femmodel->elements->objects){
     
    596599                                        surface_input->GetInputValue(&surface,gauss);
    597600
    598                                         if((surface_crevasse-surface>0. || crevassedepth-thickness>0.) && bed<0.){
     601                                        if((surface_crevasse>surface || crevassedepth>crevasse_threshold*thickness) && bed<0.){
    599602                                                vec_constraint_nodes->SetValue(node->Pid(),1.0,INS_VAL);
    600603                                        }
     
    616619                                Gauss*   gauss    = element->NewGauss();
    617620
    618                                 Input*   levelset_input         = element->GetInput(DistanceToCalvingfrontEnum); _assert_(levelset_input);
    619                                 Input*   crevassedepth_input    = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input);
    620                                 Input*   bed_input              = element->GetInput(BedEnum); _assert_(bed_input);
    621                                 Input*   surface_crevasse_input = element->GetInput(SurfaceCrevasseEnum); _assert_(surface_crevasse_input);
    622                                 Input*   thickness_input        = element->GetInput(ThicknessEnum); _assert_(thickness_input);
    623                                 Input*   surface_input          = element->GetInput(SurfaceEnum); _assert_(surface_input);
     621                                Input *levelset_input         = element->GetInput(DistanceToCalvingfrontEnum); _assert_(levelset_input);
     622                                Input *crevassedepth_input    = element->GetInput(CrevasseDepthEnum);          _assert_(crevassedepth_input);
     623                                Input *bed_input              = element->GetInput(BedEnum);                    _assert_(bed_input);
     624                                Input *surface_crevasse_input = element->GetInput(SurfaceCrevasseEnum);        _assert_(surface_crevasse_input);
     625                                Input *thickness_input        = element->GetInput(ThicknessEnum);              _assert_(thickness_input);
     626                                Input *surface_input          = element->GetInput(SurfaceEnum);                _assert_(surface_input);
    624627
    625628                                /*Is this element connected to a node that should be calved*/
     
    645648                                                surface_input->GetInputValue(&surface,gauss);
    646649
    647                                                 if((surface_crevasse-surface>0. || crevassedepth-thickness>0.) && bed<0. && levelset>-300. && levelset<0. && constraint_nodes[node->Lid()]==0.){
     650                  if((surface_crevasse>surface || crevassedepth>crevasse_threshold*thickness) && bed<0. && levelset>-300. && levelset<0. && constraint_nodes[node->Lid()]==0.){
    648651                                                        local_nflipped++;
    649652                                                        vec_constraint_nodes->SetValue(node->Pid(),1.0,INS_VAL);
     
    655658                        /*Count how many new nodes were found*/
    656659                        ISSM_MPI_Allreduce(&local_nflipped,&nflipped,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
    657                         //_printf0_("Found "<<nflipped<<" to flip\n");
     660                        _printf0_("Found "<<nflipped<<" to flip\n");
    658661
    659662                        /*Assemble and serialize flag vector*/
     
    662665         femmodel->GetLocalVectorWithClonesNodes(&constraint_nodes,vec_constraint_nodes);
    663666                }
     667
    664668                /*Free ressources:*/
    665669                delete vec_constraint_nodes;
Note: See TracChangeset for help on using the changeset viewer.