Changeset 10368


Ignore:
Timestamp:
10/31/11 10:52:47 (13 years ago)
Author:
seroussi
Message:

more cleaning in grounding liens

Location:
issm/trunk/src/c
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationxLocal.h

    r10366 r10368  
    1212
    1313/* local prototypes: */
    14 double*    CreateElementTouchingIceShelf(Elements* elements,double* nodes_on_iceshelf);
    15 Vec        CreateNodesOnIceShelf(Nodes* nodes,Vertices* vertices,int analysis_type);
    1614double*    PotentialSheetUngrounding(Elements* elements,Vertices* vertices,Parameters* parameters);
    1715double*    PropagateShelfIntoConnexIceSheet(Elements* elements,Nodes* nodes,Vertices* vertices,Parameters* parameters,double* vertices_potentially_ungrounding);
  • issm/trunk/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationxUtils.cpp

    r10366 r10368  
    1111#include "../../EnumDefinitions/EnumDefinitions.h"
    1212
    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 /*}}}*/
    7113/*FUNCTION PotentialSheetUngrounding {{{1*/
    7214double*    PotentialSheetUngrounding(Elements* elements,Vertices* vertices,Parameters* parameters){
     
    10345
    10446        int      i,analysis_type;
     47        int      numberofvertices;
    10548        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
    11056
    11157        /*recover parameters: */
    11258        parameters->FindParam(&analysis_type,AnalysisTypeEnum);
     59        numberofvertices=vertices->NumberOfVertices();
    11360
    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);
    11677        VecToMPISerial(&nodes_on_iceshelf,vec_nodes_on_iceshelf);
    11778
     
    11980        while(nflipped){
    12081               
    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);
    12395
    12496                /*Go through elements_touching_iceshelf, and flag their nodes that can unground inside potential_sheet_ungrounding*/
     
    139111
    140112                /*Assemble and serialize:*/
     113                VecFree(&vec_element_touching_iceshelf);
    141114                VecAssemblyBegin(vec_nodes_on_iceshelf);
    142115                VecAssemblyEnd(vec_nodes_on_iceshelf);
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r10367 r10368  
    25292529/*}}}*/
    25302530/*FUNCTION Tria::UpdatePotentialSheetUngrounding{{{1*/
    2531 int Tria::UpdatePotentialSheetUngrounding(double* potential_sheet_ungrounding,Vec vec_nodes_on_iceshelf,double* nodes_on_iceshelf){
    2532 
    2533         /*intermediary: */
     2531int Tria::UpdatePotentialSheetUngrounding(double* vertices_potentially_ungrounding,Vec vec_nodes_on_iceshelf,double* nodes_on_iceshelf){
     2532
    25342533        int i;
    25352534        int nflipped=0;
     
    25372536        /*Ok, go through our 3 nodes, and whoever is on the potential_sheet_ungrounding, ends up in nodes_on_iceshelf: */
    25382537        for(i=0;i<3;i++){
    2539                 if (potential_sheet_ungrounding[nodes[i]->Sid()]){
     2538                if (vertices_potentially_ungrounding[nodes[i]->Sid()]){
    25402539                        VecSetValue(vec_nodes_on_iceshelf,nodes[i]->Sid(),1,INSERT_VALUES);
    25412540               
    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                        }
    25442545                }
    25452546        }
  • issm/trunk/src/c/objects/Elements/Tria.h

    r10367 r10368  
    114114                void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type);
    115115                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);
    117117                void   UpdateShelfFlags(double* new_shelf_nodes);
    118118                double TimeAdapt();
Note: See TracChangeset for help on using the changeset viewer.