Changeset 10368
- Timestamp:
- 10/31/11 10:52:47 (13 years ago)
- Location:
- issm/trunk/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationxLocal.h
r10366 r10368 12 12 13 13 /* local prototypes: */ 14 double* CreateElementTouchingIceShelf(Elements* elements,double* nodes_on_iceshelf);15 Vec CreateNodesOnIceShelf(Nodes* nodes,Vertices* vertices,int analysis_type);16 14 double* PotentialSheetUngrounding(Elements* elements,Vertices* vertices,Parameters* parameters); 17 15 double* PropagateShelfIntoConnexIceSheet(Elements* elements,Nodes* nodes,Vertices* vertices,Parameters* parameters,double* vertices_potentially_ungrounding); -
issm/trunk/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationxUtils.cpp
r10366 r10368 11 11 #include "../../EnumDefinitions/EnumDefinitions.h" 12 12 13 /*FUNCTION CreateElementTouchingIceShelf {{{1*/14 double* CreateElementTouchingIceShelf(Elements* elements,double* nodes_on_iceshelf){15 16 int i;17 double *element_touching_iceshelf = NULL;18 Element *element = NULL;19 Vec vec_element_touching_iceshelf = NULL;20 21 /*Create vector holding all the elements IsFloating flags: */22 vec_element_touching_iceshelf=NewVec(elements->NumberOfElements(),true);23 24 /*Loop through elements, and fill vec_element_touching_iceshelf: */25 for(i=0;i<elements->Size();i++){26 element=(Element*)elements->GetObjectByOffset(i);27 VecSetValue(vec_element_touching_iceshelf,element->Sid(),element->IsNodeOnShelfFromFlags(nodes_on_iceshelf)?1.0:0.0,INSERT_VALUES);28 }29 30 /*Assemble vector: */31 VecAssemblyBegin(vec_element_touching_iceshelf);32 VecAssemblyEnd(vec_element_touching_iceshelf);33 34 /*Serialize vector: */35 VecToMPISerial(&element_touching_iceshelf,vec_element_touching_iceshelf);36 37 /*free ressouces: */38 VecFree(&vec_element_touching_iceshelf);39 40 return element_touching_iceshelf;41 }42 /*}}}*/43 /*FUNCTION CreateNodesOnIceShelf {{{1*/44 Vec CreateNodesOnIceShelf(Nodes* nodes,Vertices* vertices,int configuration_type){45 46 int i,numberofvertices;47 Vec nodes_on_iceshelf = NULL;48 Node* node = NULL;49 50 /*First, initialize nodes_on_iceshelf, which will track which nodes have changed status: */51 numberofvertices=vertices->NumberOfVertices();52 nodes_on_iceshelf=NewVec(numberofvertices);53 54 /*Loop through nodes, and fill nodes_on_iceshelf: */55 for(i=0;i<nodes->Size();i++){56 node=(Node*)nodes->GetObjectByOffset(i);57 if(node->InAnalysis(configuration_type)){58 if(node->IsFloating()){59 VecSetValue(nodes_on_iceshelf,node->Sid(),1.0,INSERT_VALUES);60 }61 }62 }63 64 /*Assemble vector: */65 VecAssemblyBegin(nodes_on_iceshelf);66 VecAssemblyEnd(nodes_on_iceshelf);67 68 return nodes_on_iceshelf;69 }70 /*}}}*/71 13 /*FUNCTION PotentialSheetUngrounding {{{1*/ 72 14 double* PotentialSheetUngrounding(Elements* elements,Vertices* vertices,Parameters* parameters){ … … 103 45 104 46 int i,analysis_type; 47 int numberofvertices; 105 48 int nflipped,local_nflipped; 106 double* nodes_on_iceshelf = NULL; 107 double* elements_touching_iceshelf = NULL; 108 Vec vec_nodes_on_iceshelf = NULL; 109 Element* element = NULL; 49 double* nodes_on_iceshelf = NULL; 50 double* elements_touching_iceshelf = NULL; 51 Vec vec_element_touching_iceshelf = NULL; 52 Vec vec_nodes_on_iceshelf = NULL; 53 Node* node = NULL; 54 Element* element = NULL; 55 110 56 111 57 /*recover parameters: */ 112 58 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 59 numberofvertices=vertices->NumberOfVertices(); 113 60 114 /*recover vec_nodes_on_iceshelf and serialize: */ 115 vec_nodes_on_iceshelf=CreateNodesOnIceShelf(nodes,vertices,analysis_type); 61 /*recover vec_nodes_on_iceshelf*/ 62 vec_nodes_on_iceshelf=NewVec(numberofvertices); 63 64 /*Loop through nodes, and fill nodes_on_iceshelf: */ 65 for(i=0;i<nodes->Size();i++){ 66 node=(Node*)nodes->GetObjectByOffset(i); 67 if(node->InAnalysis(analysis_type)){ 68 if(node->IsFloating()){ 69 VecSetValue(vec_nodes_on_iceshelf,node->Sid(),1.0,INSERT_VALUES); 70 } 71 } 72 } 73 74 /*Assemble vector and serialize: */ 75 VecAssemblyBegin(vec_nodes_on_iceshelf); 76 VecAssemblyEnd(vec_nodes_on_iceshelf); 116 77 VecToMPISerial(&nodes_on_iceshelf,vec_nodes_on_iceshelf); 117 78 … … 119 80 while(nflipped){ 120 81 121 /*get a list of potential elements that have nodes on ice shelf: */ 122 elements_touching_iceshelf=CreateElementTouchingIceShelf(elements,nodes_on_iceshelf); 82 /*Vector of size number of elements*/ 83 vec_element_touching_iceshelf=NewVec(elements->NumberOfElements(),true); 84 85 /*Figure out if any of the nodes of the element will be floating -> elements neighbouting the floating ice*/ 86 for(i=0;i<elements->Size();i++){ 87 element=(Element*)elements->GetObjectByOffset(i); 88 VecSetValue(vec_element_touching_iceshelf,element->Sid(),element->IsNodeOnShelfFromFlags(nodes_on_iceshelf)?1.0:0.0,INSERT_VALUES); 89 } 90 91 /*Assemble vector and serialize: */ 92 VecAssemblyBegin(vec_element_touching_iceshelf); 93 VecAssemblyEnd(vec_element_touching_iceshelf); 94 VecToMPISerial(&elements_touching_iceshelf,vec_element_touching_iceshelf); 123 95 124 96 /*Go through elements_touching_iceshelf, and flag their nodes that can unground inside potential_sheet_ungrounding*/ … … 139 111 140 112 /*Assemble and serialize:*/ 113 VecFree(&vec_element_touching_iceshelf); 141 114 VecAssemblyBegin(vec_nodes_on_iceshelf); 142 115 VecAssemblyEnd(vec_nodes_on_iceshelf); -
issm/trunk/src/c/objects/Elements/Tria.cpp
r10367 r10368 2529 2529 /*}}}*/ 2530 2530 /*FUNCTION Tria::UpdatePotentialSheetUngrounding{{{1*/ 2531 int Tria::UpdatePotentialSheetUngrounding(double* potential_sheet_ungrounding,Vec vec_nodes_on_iceshelf,double* nodes_on_iceshelf){ 2532 2533 /*intermediary: */ 2531 int Tria::UpdatePotentialSheetUngrounding(double* vertices_potentially_ungrounding,Vec vec_nodes_on_iceshelf,double* nodes_on_iceshelf){ 2532 2534 2533 int i; 2535 2534 int nflipped=0; … … 2537 2536 /*Ok, go through our 3 nodes, and whoever is on the potential_sheet_ungrounding, ends up in nodes_on_iceshelf: */ 2538 2537 for(i=0;i<3;i++){ 2539 if ( potential_sheet_ungrounding[nodes[i]->Sid()]){2538 if (vertices_potentially_ungrounding[nodes[i]->Sid()]){ 2540 2539 VecSetValue(vec_nodes_on_iceshelf,nodes[i]->Sid(),1,INSERT_VALUES); 2541 2540 2542 /*Figure out if we flipped: */ 2543 if (potential_sheet_ungrounding[nodes[i]->Sid()] != nodes_on_iceshelf[nodes[i]->Sid()])nflipped++; 2541 /*If node was not on ice shelf, we flipped*/ 2542 if(nodes_on_iceshelf[nodes[i]->Sid()]==0){ 2543 nflipped++; 2544 } 2544 2545 } 2545 2546 } -
issm/trunk/src/c/objects/Elements/Tria.h
r10367 r10368 114 114 void Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type); 115 115 int UpdateShelfStatus(Vec new_shelf_nodes); 116 int UpdatePotentialSheetUngrounding(double* potential_sheet_ungrounding,Vec vec_nodes_on_iceshelf,double* nodes_on_iceshelf);116 int UpdatePotentialSheetUngrounding(double* vertices_potentially_ungrounding,Vec vec_nodes_on_iceshelf,double* nodes_on_iceshelf); 117 117 void UpdateShelfFlags(double* new_shelf_nodes); 118 118 double TimeAdapt();
Note:
See TracChangeset
for help on using the changeset viewer.