Changeset 23942


Ignore:
Timestamp:
05/29/19 10:31:40 (6 years ago)
Author:
Mathieu Morlighem
Message:

NEW: added sheet thickness evolution

Location:
issm/trunk-jpl/src/c/analyses
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp

    r23941 r23942  
    324324        return;
    325325}/*}}}*/
     326
     327/*GlaDS specifics*/
     328void HydrologyGlaDSAnalysis::UpdateSheetThickness(FemModel* femmodel){/*{{{*/
     329
     330        for(int j=0;j<femmodel->elements->Size();j++){
     331                Element* element=(Element*)femmodel->elements->GetObjectByOffset(j);
     332                UpdateSheetThickness(element);
     333        }
     334
     335}/*}}}*/
     336void HydrologyGlaDSAnalysis::UpdateSheetThickness(Element* element){/*{{{*/
     337
     338        /*Skip if water or ice shelf element*/
     339        if(element->IsFloating()) return;
     340
     341        /*Intermediaries */
     342        IssmDouble  Jdet,w,v,vx,vy,ub,h_old,N;
     343        IssmDouble  A,B,n;
     344
     345        /*Fetch number vertices for this element*/
     346        int numvertices = element->GetNumberOfVertices();
     347
     348        /*Initialize new sheet thickness*/
     349        IssmDouble* h_new = xNew<IssmDouble>(numvertices);
     350
     351        /*Retrieve all inputs and parameters*/
     352        IssmDouble  h_r = element->FindParam(HydrologyBumpHeightEnum);
     353        IssmDouble  l_r = element->FindParam(HydrologyBumpSpacingEnum);
     354        IssmDouble  dt  = element->FindParam(TimesteppingTimeStepEnum);
     355        Input* vx_input = element->GetInput(VxEnum);_assert_(vx_input);
     356        Input* vy_input = element->GetInput(VyEnum);_assert_(vy_input);
     357        Input*  N_input = element->GetInput(EffectivePressureEnum); _assert_(N_input);
     358        Input*  h_input = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);
     359        Input* B_input  = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
     360        Input* n_input  = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
     361
     362        /* Start  looping on the number of gaussian points: */
     363        Gauss* gauss=element->NewGauss();
     364        for(int iv=0;iv<numvertices;iv++){
     365                gauss->GaussVertex(iv);
     366
     367                /*Get input values at gauss points*/
     368                vx_input->GetInputValue(&vx,gauss);
     369                vy_input->GetInputValue(&vy,gauss);
     370                h_input->GetInputValue(&h_old,gauss);
     371                B_input->GetInputValue(&B,gauss);
     372                n_input->GetInputValue(&n,gauss);
     373                N_input->GetInputValue(&N,gauss);
     374
     375                /*Get basal velocity*/
     376                ub = sqrt(vx*vx + vy*vy);
     377
     378                /*Compute cavity opening w*/
     379                w  = 0.;
     380                if(h_old<h_r) w = ub*(h_r-h_old)/l_r;
     381
     382                /*Compute closing rate*/
     383                A=pow(B,-n);
     384                v = 2./pow(n,n)*A*h_old*pow(fabs(N),n-1.)*N;
     385
     386                /*Get new sheet thickness*/
     387                h_new[iv] += h_old + dt*(w-v);
     388        }
     389
     390        element->AddInput(HydrologySheetThicknessEnum,h_new,P1Enum);
     391
     392        /*Clean up and return*/
     393        xDelete<IssmDouble>(h_new);
     394        delete gauss;
     395}/*}}}*/
  • issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.h

    r23936 r23942  
    3030                void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
    3131                void           UpdateConstraints(FemModel* femmodel);
     32
     33                /*Specific to GlaDS*/
     34                void UpdateSheetThickness(FemModel* femmodel);
     35                void UpdateSheetThickness(Element*  element);
    3236};
    3337#endif
Note: See TracChangeset for help on using the changeset viewer.