Changeset 26450
- Timestamp:
- 09/21/21 12:06:54 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r26448 r26450 125 125 case CalvingCrevasseDepthEnum: 126 126 parameters->AddObject(iomodel->CopyConstantObject("md.calving.crevasse_opening_stress",CalvingCrevasseDepthEnum)); 127 parameters->AddObject(iomodel->CopyConstantObject("md.calving.crevasse_threshold",CalvingCrevasseThresholdEnum)); 127 128 break; 128 129 case CalvingDev2Enum: … … 472 473 473 474 /*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; 481 476 femmodel->parameters->FindParam(&calvinglaw,CalvingLawEnum); 482 477 483 478 if(calvinglaw==CalvingMinthicknessEnum || calvinglaw==CalvingVonmisesEnum){ 484 479 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); 487 483 488 484 /*Loop over all elements of this partition*/ … … 518 514 else if(calvinglaw==CalvingHabEnum){ 519 515 516 /*Intermediaries*/ 517 IssmDouble thickness,water_depth,levelset,hab_fraction; 518 520 519 /*Get the fraction of the flotation thickness at the terminus*/ 521 520 InputDuplicatex(femmodel,MaskIceLevelsetEnum,DistanceToCalvingfrontEnum); … … 526 525 Element* element = xDynamicCast<Element*>(object); 527 526 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); 530 529 531 530 int numnodes = element->GetNumberOfNodes(); … … 560 559 else if(calvinglaw==CalvingCrevasseDepthEnum){ 561 560 562 int nflipped,local_nflipped; 561 /*Intermediaries*/ 562 IssmDouble levelset,crevassedepth,bed,surface_crevasse,thickness,surface; 563 int nflipped,local_nflipped; 563 564 IssmDouble* constraint_nodes = NULL; 564 565 … … 571 572 int localmasters = femmodel->nodes->NumberOfNodesLocal(); 572 573 Vector<IssmDouble>* vec_constraint_nodes = vec_constraint_nodes=new Vector<IssmDouble>(localmasters,numnodes); 574 575 IssmDouble crevasse_threshold = femmodel->parameters->FindParam(CalvingCrevasseThresholdEnum); 573 576 574 577 for(Object* & object : femmodel->elements->objects){ … … 596 599 surface_input->GetInputValue(&surface,gauss); 597 600 598 if((surface_crevasse -surface>0. || crevassedepth-thickness>0.) && bed<0.){601 if((surface_crevasse>surface || crevassedepth>crevasse_threshold*thickness) && bed<0.){ 599 602 vec_constraint_nodes->SetValue(node->Pid(),1.0,INS_VAL); 600 603 } … … 616 619 Gauss* gauss = element->NewGauss(); 617 620 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); 624 627 625 628 /*Is this element connected to a node that should be calved*/ … … 645 648 surface_input->GetInputValue(&surface,gauss); 646 649 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.){ 648 651 local_nflipped++; 649 652 vec_constraint_nodes->SetValue(node->Pid(),1.0,INS_VAL); … … 655 658 /*Count how many new nodes were found*/ 656 659 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"); 658 661 659 662 /*Assemble and serialize flag vector*/ … … 662 665 femmodel->GetLocalVectorWithClonesNodes(&constraint_nodes,vec_constraint_nodes); 663 666 } 667 664 668 /*Free ressources:*/ 665 669 delete vec_constraint_nodes;
Note:
See TracChangeset
for help on using the changeset viewer.