Changeset 26448
- Timestamp:
- 09/21/21 11:41:28 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r26434 r26448 516 516 } 517 517 } 518 519 if(calvinglaw==CalvingHabEnum){ 518 else if(calvinglaw==CalvingHabEnum){ 520 519 521 520 /*Get the fraction of the flotation thickness at the terminus*/ … … 559 558 } 560 559 } 561 562 if(calvinglaw==CalvingCrevasseDepthEnum){ 563 564 int nflipped,local_nflipped; 565 Vector<IssmDouble>* vec_constraint_nodes = NULL; 560 else if(calvinglaw==CalvingCrevasseDepthEnum){ 561 562 int nflipped,local_nflipped; 566 563 IssmDouble* constraint_nodes = NULL; 567 564 … … 571 568 572 569 /*Vector of size number of nodes*/ 573 vec_constraint_nodes=new Vector<IssmDouble>(femmodel->nodes->NumberOfNodes()); 570 int numnodes = femmodel->nodes->NumberOfNodes(); 571 int localmasters = femmodel->nodes->NumberOfNodesLocal(); 572 Vector<IssmDouble>* vec_constraint_nodes = vec_constraint_nodes=new Vector<IssmDouble>(localmasters,numnodes); 574 573 575 574 for(Object* & object : femmodel->elements->objects){ 576 Element* element = xDynamicCast<Element*>(object); 577 int numnodes = element->GetNumberOfNodes(); 578 Gauss* gauss = element->NewGauss(); 579 Input* crevassedepth_input = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input); 580 Input* bed_input = element->GetInput(BedEnum); _assert_(bed_input); 575 Element* element = xDynamicCast<Element*>(object); 576 int numnodes = element->GetNumberOfNodes(); 577 Gauss* gauss = element->NewGauss(); 578 579 Input* crevassedepth_input = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input); 580 Input* bed_input = element->GetInput(BedEnum); _assert_(bed_input); 581 581 Input* surface_crevasse_input = element->GetInput(SurfaceCrevasseEnum); _assert_(surface_crevasse_input); 582 Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);583 Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);582 Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input); 583 Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input); 584 584 585 585 /*First, look at ice front and figure out if any of the nodes will be calved*/ … … 606 606 /*Assemble vector and serialize: */ 607 607 vec_constraint_nodes->Assemble(); 608 constraint_nodes=vec_constraint_nodes->ToMPISerial();608 femmodel->GetLocalVectorWithClonesNodes(&constraint_nodes,vec_constraint_nodes); 609 609 610 610 nflipped=1; … … 612 612 local_nflipped=0; 613 613 for(Object* & object : femmodel->elements->objects){ 614 Element* element = xDynamicCast<Element*>(object); 615 int numnodes = element->GetNumberOfNodes(); 616 Gauss* gauss = element->NewGauss(); 614 Element* element = xDynamicCast<Element*>(object); 615 int numnodes = element->GetNumberOfNodes(); 616 Gauss* gauss = element->NewGauss(); 617 617 618 Input* levelset_input = element->GetInput(DistanceToCalvingfrontEnum); _assert_(levelset_input); 618 619 Input* crevassedepth_input = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input); … … 626 627 for(int in=0;in<numnodes;in++){ 627 628 Node* node=element->GetNode(in); 628 if(constraint_nodes[node-> Pid()]==1.){629 if(constraint_nodes[node->Lid()]==1.){ 629 630 isconnected = true; 630 631 break; … … 644 645 surface_input->GetInputValue(&surface,gauss); 645 646 646 if((surface_crevasse-surface>0. || crevassedepth-thickness>0.) && bed<0. && levelset>-300. && levelset<0. && constraint_nodes[node-> Pid()]==0.){647 if((surface_crevasse-surface>0. || crevassedepth-thickness>0.) && bed<0. && levelset>-300. && levelset<0. && constraint_nodes[node->Lid()]==0.){ 647 648 local_nflipped++; 648 649 vec_constraint_nodes->SetValue(node->Pid(),1.0,INS_VAL); … … 659 660 vec_constraint_nodes->Assemble(); 660 661 xDelete<IssmDouble>(constraint_nodes); 661 constraint_nodes=vec_constraint_nodes->ToMPISerial();662 femmodel->GetLocalVectorWithClonesNodes(&constraint_nodes,vec_constraint_nodes); 662 663 } 663 664 /*Free ressources:*/ … … 675 676 if(!node->IsActive()) continue; 676 677 677 if(constraint_nodes[node-> Pid()]>0.){678 if(constraint_nodes[node->Lid()]>0.){ 678 679 node->ApplyConstraint(0,+1.); 679 680 }
Note:
See TracChangeset
for help on using the changeset viewer.