Changeset 22124


Ignore:
Timestamp:
09/27/17 09:15:22 (8 years ago)
Author:
Mathieu Morlighem
Message:

CHG: calving = 0 if grounded above sea level

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r22105 r22124  
    193193        IssmDouble  lambda1,lambda2,ex,ey,vx,vy,vel;
    194194        IssmDouble  sigma_vm,sigma_max,sigma_max_floating,sigma_max_grounded;
    195         IssmDouble  epse_2,groundedice;
     195        IssmDouble  epse_2,groundedice,bed;
    196196
    197197        /* Get node coordinates and dof list: */
     
    207207        Input* vy_input = inputs->GetInput(VyAverageEnum); _assert_(vy_input);
    208208        Input* gr_input = inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);
     209        Input* bs_input = inputs->GetInput(BaseEnum);                    _assert_(bs_input);
    209210        Input* smax_fl_input = inputs->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
    210211        Input* smax_gr_input = inputs->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
     
    221222                vy_input->GetInputValue(&vy,gauss);
    222223                gr_input->GetInputValue(&groundedice,gauss);
     224                bs_input->GetInputValue(&bed,gauss);
    223225                smax_fl_input->GetInputValue(&sigma_max_floating,gauss);
    224226                smax_gr_input->GetInputValue(&sigma_max_grounded,gauss);
     
    248250
    249251                /*Assign values*/
    250                 calvingratex[iv]=vx*sigma_vm/sigma_max;
    251                 calvingratey[iv]=vy*sigma_vm/sigma_max;
    252                 calvingrate[iv]=sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
     252                if(bed>0.){
     253                        calvingratex[iv]=0.;
     254                        calvingratey[iv]=0.;
     255                }
     256                else{
     257                        calvingratex[iv]=vx*sigma_vm/sigma_max;
     258                        calvingratey[iv]=vy*sigma_vm/sigma_max;
     259                }
     260                calvingrate[iv] =sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
    253261        }
    254262
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r22123 r22124  
    297297
    298298        IssmDouble  xyz_list[NUMVERTICES][3];
    299         GaussTria* gauss=NULL;
    300299        IssmDouble  vx,vy,vel;
    301300        IssmDouble  strainparallel;
    302         IssmDouble  propcoeff;
     301        IssmDouble  propcoeff,bed;
    303302        IssmDouble  strainperpendicular;
    304303        IssmDouble  calvingratex[NUMVERTICES];
     
    310309
    311310        /*Retrieve all inputs and parameters we will need*/
    312         Input* vx_input=inputs->GetInput(VxEnum);                                                                                                                                               _assert_(vx_input);
    313         Input* vy_input=inputs->GetInput(VyEnum);                                                                                                                                               _assert_(vy_input);
    314         Input* strainparallel_input=inputs->GetInput(StrainRateparallelEnum);                                                           _assert_(strainparallel_input);
    315         Input* strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum);                                 _assert_(strainperpendicular_input);
    316         Input* levermanncoeff_input=inputs->GetInput(CalvinglevermannCoeffEnum);                     _assert_(levermanncoeff_input);
     311        Input* vx_input=inputs->GetInput(VxEnum);                                                                                                       _assert_(vx_input);
     312        Input* vy_input=inputs->GetInput(VyEnum);                                                                                                       _assert_(vy_input);
     313        Input* bs_input = inputs->GetInput(BaseEnum);                                 _assert_(bs_input);
     314        Input* strainparallel_input=inputs->GetInput(StrainRateparallelEnum);                   _assert_(strainparallel_input);
     315        Input* strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum);_assert_(strainperpendicular_input);
     316        Input* levermanncoeff_input=inputs->GetInput(CalvinglevermannCoeffEnum);      _assert_(levermanncoeff_input);
    317317
    318318        /* Start looping on the number of vertices: */
    319         gauss=new GaussTria();
     319        GaussTria* gauss=new GaussTria();
    320320        for (int iv=0;iv<NUMVERTICES;iv++){
    321321                gauss->GaussVertex(iv);
     
    328328                strainperpendicular_input->GetInputValue(&strainperpendicular,gauss);
    329329                levermanncoeff_input->GetInputValue(&propcoeff,gauss);
     330                bs_input->GetInputValue(&bed,gauss);
    330331
    331332                /*Calving rate proportionnal to the positive product of the strain rate along the ice flow direction and the strain rate perpendicular to the ice flow */
    332333                calvingrate[iv]=propcoeff*strainparallel*strainperpendicular;
    333                 if(calvingrate[iv]<0){
    334                         calvingrate[iv]=0;
     334                if(calvingrate[iv]<0. || bed>0.){
     335                        calvingrate[iv]=0.;
    335336                }
    336337                calvingratex[iv]=calvingrate[iv]*vx/(sqrt(vel)+1.e-14);
Note: See TracChangeset for help on using the changeset viewer.