Changeset 15972


Ignore:
Timestamp:
08/27/13 13:23:25 (12 years ago)
Author:
seroussi
Message:

CHG: removing node->IsGrounded, node->IsFloating

Location:
issm/trunk-jpl/src/c/classes/Elements
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r15962 r15972  
    4848                virtual int    Sid()=0;
    4949                virtual bool   IsFloating()=0;
    50                 virtual bool   IsNodeOnShelf()=0;
    5150                virtual bool   IsNodeOnShelfFromFlags(IssmDouble* flags)=0;
    5251                virtual bool   IsOnBed()=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r15971 r15972  
    23682368        IssmDouble oldsurface[NUMVERTICES];
    23692369        IssmDouble oldthickness[NUMVERTICES];
     2370        IssmDouble phi[NUMVERTICES];
    23702371        Penta  *penta   = NULL;
    23712372
     
    23902391        GetInputListOnVertices(&oldsurface[0],SurfaceEnum);
    23912392        GetInputListOnVertices(&oldthickness[0],ThicknessEnum);
     2393        GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum);
    23922394
    23932395        /*Fing MasstransportHydrostaticAdjustment to figure out how to update the geometry:*/
     
    24002402        for(i=0;i<numdof;i++) {
    24012403                /*If shelf: hydrostatic equilibrium*/
    2402                 if (this->nodes[i]->IsGrounded()){
     2404                if (phi[i]>0.){
    24032405                        newsurface[i]=oldbed[i]+newthickness[i]; //surface = oldbed + newthickness
    24042406                        newbed[i]=oldbed[i];               //same bed: do nothing
     
    27552757        inputs->GetInputValue(&onshelf,MaskElementonfloatingiceEnum);
    27562758        return onshelf;
    2757 }
    2758 /*}}}*/
    2759 /*FUNCTION Penta::IsNodeOnShelf {{{*/
    2760 bool   Penta::IsNodeOnShelf(){
    2761 
    2762         int  i;
    2763         bool shelf=false;
    2764 
    2765         for(i=0;i<6;i++){
    2766                 if (nodes[i]->IsFloating()){
    2767                         shelf=true;
    2768                         break;
    2769                 }
    2770         }
    2771         return shelf;
    27722759}
    27732760/*}}}*/
     
    1123511222                                floating[i] = false;
    1123611223                                grounded[i] = true;
    11237                                 nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,false));
    11238                                 nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,true));
    1123911224                        }
    1124011225                }
     
    1125011235                                        floating[i] = true;
    1125111236                                        grounded[i] = false;
    11252                                         nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
    11253                                         nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
    1125411237                                }
    1125511238                                else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Pid()]<0.){
     
    1125811241                                        floating[i] = true;
    1125911242                                        grounded[i] = false;
    11260                                         nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
    11261                                         nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
    1126211243                                }
    1126311244                                else{
     
    1126711248                }
    1126811249        }
    11269 
    11270         /*SubelementMigrationEnum: if one grounded, all grounded*/
    11271         if(migration_style==SubelementMigrationEnum){
    11272                 for(i=0;i<NUMVERTICES;i++){
    11273                         if(nodes[i]->IsGrounded()){
    11274                                 groundedelement=true;
    11275                                 break;
    11276                         }
    11277                 }
    11278                 floatingelement=!groundedelement;
    11279         }
    11280         else{
    11281                 for(i=0;i<NUMVERTICES;i++){
    11282                         if(nodes[i]->IsFloating()){
    11283                                 floatingelement=true;
    11284                                 break;
    11285                         }
    11286                 }
    11287         }
    11288 
    11289    /*Add basal melting rate if element just ungrounded*/
    11290         if(!this->IsFloating() && floatingelement==true){
    11291                 for(i=0;i<NUMVERTICES;i++)melting[i]=gl_melting_rate/yts;
    11292                 this->inputs->AddInput(new PentaInput(BasalforcingsMeltingRateEnum,&melting[0],P1Enum));
    11293         }
    11294 
    11295         /*Update inputs*/
    11296         this->inputs->AddInput(new PentaInput(SurfaceEnum,&s[0],P1Enum));
    11297         this->inputs->AddInput(new PentaInput(BedEnum,&b[0],P1Enum));
    11298    this->inputs->AddInput(new BoolInput(MaskElementonfloatingiceEnum,floatingelement));
    1129911250
    1130011251        /*Recalculate phi*/
     
    1131111262        this->InputExtrude(MaskGroundediceLevelsetEnum,ElementEnum);
    1131211263
     11264        /*SubelementMigrationEnum: if one grounded, all grounded*/
     11265        if(migration_style==SubelementMigrationEnum){
     11266                for(i=0;i<NUMVERTICES;i++){
     11267                        if(phi[i]>0.){
     11268                                groundedelement=true;
     11269                                break;
     11270                        }
     11271                }
     11272                floatingelement=!groundedelement;
     11273        }
     11274        else{
     11275                for(i=0;i<NUMVERTICES;i++){
     11276                        if(phi[i]<=0.){
     11277                                floatingelement=true;
     11278                                break;
     11279                        }
     11280                }
     11281        }
     11282
     11283   /*Add basal melting rate if element just ungrounded*/
     11284        if(!this->IsFloating() && floatingelement==true){
     11285                for(i=0;i<NUMVERTICES;i++)melting[i]=gl_melting_rate/yts;
     11286                this->inputs->AddInput(new PentaInput(BasalforcingsMeltingRateEnum,&melting[0],P1Enum));
     11287        }
     11288
     11289        /*Update inputs*/
     11290        this->inputs->AddInput(new PentaInput(SurfaceEnum,&s[0],P1Enum));
     11291        this->inputs->AddInput(new PentaInput(BedEnum,&b[0],P1Enum));
     11292   this->inputs->AddInput(new BoolInput(MaskElementonfloatingiceEnum,floatingelement));
     11293
    1131311294        /*Extrude inputs*/
    1131411295        this->InputExtrude(SurfaceEnum,ElementEnum);
    1131511296        this->InputExtrude(BedEnum,ElementEnum);
    1131611297        this->InputExtrude(MaskElementonfloatingiceEnum,ElementEnum);
    11317         this->InputExtrude(MaskVertexonfloatingiceEnum,NodeEnum);
    11318         this->InputExtrude(MaskVertexongroundediceEnum,NodeEnum);
    1131911298}
    1132011299/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r15962 r15972  
    223223                bool             IsOnBed(void);
    224224                bool           IsFloating(void);
    225                 bool           IsNodeOnShelf();
    226225                bool           IsNodeOnShelfFromFlags(IssmDouble* flags);
    227226                bool           NoIceInElement(void);
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r15970 r15972  
    16671667        IssmDouble* oldbed       = xNew<IssmDouble>(numnodes);
    16681668        IssmDouble* oldsurface   = xNew<IssmDouble>(numnodes);
     1669        IssmDouble* phi          = xNew<IssmDouble>(numnodes);
    16691670
    16701671        /*Use the dof list to index into the solution vector: */
     
    16811682        GetInputListOnNodes(&oldsurface[0],SurfaceEnum);
    16821683        GetInputListOnNodes(&oldthickness[0],ThicknessEnum);
    1683 
    1684         /*Fing MasstransportHydrostaticAdjustment to figure out how to update the geometry:*/
     1684        GetInputListOnNodes(&phi[0],MaskGroundediceLevelsetEnum);
     1685
     1686        /*Find MasstransportHydrostaticAdjustment to figure out how to update the geometry:*/
    16851687        this->parameters->FindParam(&hydroadjustment,MasstransportHydrostaticAdjustmentEnum);
    16861688        rho_ice=matpar->GetRhoIce();
     
    16891691        for(i=0;i<numnodes;i++) {
    16901692                /*If shelf: hydrostatic equilibrium*/
    1691                 if (this->nodes[i]->IsGrounded()){
     1693                if (phi[i]>0.){
    16921694                        newsurface[i] = oldbed[i]+newthickness[i]; //surface = oldbed + newthickness
    16931695                        newbed[i]     = oldbed[i];                 //same bed: do nothing
     
    17181720        xDelete<IssmDouble>(oldbed);
    17191721        xDelete<IssmDouble>(oldsurface);
     1722        xDelete<IssmDouble>(phi);
    17201723        xDelete<int>(doflist);
    17211724}
     
    19561959        bool shelf;
    19571960        inputs->GetInputValue(&shelf,MaskElementonfloatingiceEnum);
    1958         return shelf;
    1959 }
    1960 /*}}}*/
    1961 /*FUNCTION Tria::IsNodeOnShelf {{{*/
    1962 bool   Tria::IsNodeOnShelf(){
    1963 
    1964         int  i;
    1965         bool shelf=false;
    1966 
    1967         for(i=0;i<3;i++){
    1968                 if (nodes[i]->IsFloating()){
    1969                         shelf=true;
    1970                         break;
    1971                 }
    1972         }
    19731961        return shelf;
    19741962}
     
    73457333                                floating[i] = false;
    73467334                                grounded[i] = true;
    7347                                 nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,false));
    7348                                 nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,true));
    73497335                        }
    73507336                }
     
    73607346                                        floating[i] = true;
    73617347                                        grounded[i] = false;
    7362                                         nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
    7363                                         nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
    73647348                                }
    73657349                                else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Pid()]<0.){
     
    73687352                                        floating[i] = true;
    73697353                                        grounded[i] = false;
    7370                                         nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
    7371                                         nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
    73727354                                }
    73737355                                else{
     
    73777359                }
    73787360        }
    7379 
    7380         /*SubelementMigrationEnum: if one grounded, all grounded*/
    7381         if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
    7382                 for(i=0;i<NUMVERTICES;i++){
    7383                         if(nodes[i]->IsGrounded()){
    7384                                 groundedelement=true;
    7385                                 break;
    7386                         }
    7387                 }
    7388                 floatingelement=!groundedelement;
    7389         }
    7390         else{
    7391                 /*Otherwise: if one floating, all floating*/
    7392                 for(i=0;i<NUMVERTICES;i++){
    7393                         if(nodes[i]->IsFloating()){
    7394                                 floatingelement=true;
    7395                                 break;
    7396                         }
    7397                 }
    7398         }
    7399 
    7400    /*Add basal melting rate if element just ungrounded*/
    7401         if(!this->IsFloating() && floatingelement==true){
    7402                 for(i=0;i<NUMVERTICES;i++)melting[i]=gl_melting_rate/yts;
    7403                 this->inputs->AddInput(new TriaInput(BasalforcingsMeltingRateEnum,&melting[0],P1Enum));
    7404         }
    7405 
    7406         /*Update inputs*/
    7407    this->inputs->AddInput(new BoolInput(MaskElementonfloatingiceEnum,floatingelement));
    7408         this->inputs->AddInput(new TriaInput(SurfaceEnum,&s[0],P1Enum));
    7409         this->inputs->AddInput(new TriaInput(BedEnum,&b[0],P1Enum));
    74107361
    74117362        /*Recalculate phi*/
     
    74207371        }
    74217372        this->inputs->AddInput(new TriaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
     7373
     7374        /*SubelementMigrationEnum: if one grounded, all grounded*/
     7375        if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
     7376                for(i=0;i<NUMVERTICES;i++){
     7377                        if(phi[i]>0.){
     7378                                groundedelement=true;
     7379                                break;
     7380                        }
     7381                }
     7382                floatingelement=!groundedelement;
     7383        }
     7384        else{
     7385                /*Otherwise: if one floating, all floating*/
     7386                for(i=0;i<NUMVERTICES;i++){
     7387                        if(phi[i]<=0.){
     7388                                floatingelement=true;
     7389                                break;
     7390                        }
     7391                }
     7392        }
     7393
     7394   /*Add basal melting rate if element just ungrounded*/
     7395        if(!this->IsFloating() && floatingelement==true){
     7396                for(i=0;i<NUMVERTICES;i++)melting[i]=gl_melting_rate/yts;
     7397                this->inputs->AddInput(new TriaInput(BasalforcingsMeltingRateEnum,&melting[0],P1Enum));
     7398        }
     7399
     7400        /*Update inputs*/
     7401   this->inputs->AddInput(new BoolInput(MaskElementonfloatingiceEnum,floatingelement));
     7402        this->inputs->AddInput(new TriaInput(SurfaceEnum,&s[0],P1Enum));
     7403        this->inputs->AddInput(new TriaInput(BedEnum,&b[0],P1Enum));
     7404
    74227405}
    74237406/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r15962 r15972  
    8888                bool        IsOnBed();
    8989                bool        IsFloating();
    90                 bool        IsNodeOnShelf();
    9190                bool        IsNodeOnShelfFromFlags(IssmDouble* flags);
    9291                bool        NoIceInElement();
Note: See TracChangeset for help on using the changeset viewer.