Changeset 25973


Ignore:
Timestamp:
02/03/21 19:54:22 (4 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added coulomb limited friction

Location:
issm/trunk-jpl/src
Files:
4 edited

Legend:

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

    r25945 r25973  
    916916                        iomodel->FetchDataToInput(inputs,elements,"md.friction.f",FrictionfEnum);
    917917                        break;
     918                case 13:
     919                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
     920                        iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCEnum);
     921                        iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
     922                        if(FrictionCoupling==3){
     923                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
     924                        else if(FrictionCoupling==4){
     925                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
     926
     927                        }
     928                        break;
    918929                default:
    919930                        _error_("friction law "<< frictionlaw <<" not supported");
     
    10271038                case 12:
    10281039                        parameters->AddObject(new IntParam(FrictionCouplingEnum,2));
     1040                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     1041                        break;
     1042                case 13:
     1043                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
    10291044                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
    10301045                        break;
  • issm/trunk-jpl/src/c/classes/Loads/Friction.cpp

    r25366 r25973  
    261261                case 12:
    262262                        GetAlpha2Tsai(palpha2,gauss);
     263                        break;
     264                case 13:
     265                        GetAlpha2Coulomb2(palpha2,gauss);
    263266                        break;
    264267          default:
     
    735738
    736739                alpha2 = alpha2/ub;
     740        }
     741
     742        /*Assign output pointers:*/
     743        *palpha2=alpha2;
     744}/*}}}*/
     745void Friction::GetAlpha2Coulomb2(IssmDouble* palpha2, Gauss* gauss){/*{{{*/
     746
     747        /*This routine calculates the basal friction coefficient
     748         *
     749         *               C^2 |u_b|^(m-1) * (.5*N)
     750         * alpha2= ___________________________________
     751         *          (C^(2/m) |u_b| + (0.5*N)^(1/m) )^m
     752         *
     753         * */
     754
     755        /*diverse: */
     756        IssmDouble  C,m,alpha2;
     757
     758        /*Recover parameters: */
     759        element->GetInputValue(&C,gauss,FrictionCEnum);
     760        element->GetInputValue(&m,gauss,FrictionMEnum);
     761
     762        /*Get effective pressure and velocity magnitude*/
     763        IssmDouble N  = EffectivePressure(gauss);
     764        IssmDouble ub = VelMag(gauss);
     765
     766        /*Compute alpha^2*/
     767        if(ub<1e-10){
     768                alpha2 = 0.;
     769        }
     770        else{
     771                alpha2= (pow(C,2)*pow(ub,m-1.)*(0.5*N)) / pow(pow(C,2./m)*ub + pow(0.5*N,1./m),m);
    737772        }
    738773
  • issm/trunk-jpl/src/c/classes/Loads/Friction.h

    r25366 r25973  
    3232                void  GetAlpha2(IssmDouble* palpha2,Gauss* gauss);
    3333                void  GetAlpha2Coulomb(IssmDouble* palpha2,Gauss* gauss);
     34                void  GetAlpha2Coulomb2(IssmDouble* palpha2,Gauss* gauss);
    3435                void  GetAlpha2Hydro(IssmDouble* palpha2,Gauss* gauss);
    3536                void  GetAlpha2Josh(IssmDouble* palpha2,Gauss* gauss);
  • issm/trunk-jpl/src/m/classes/frictioncoulomb2.m

    r25970 r25973  
    44%      frictioncoulomb=frictioncoulomb2();
    55
    6 classdef frictioncoulomb
     6classdef frictioncoulomb2
    77        properties (SetAccess=public)
    88                coefficient              = NaN;
Note: See TracChangeset for help on using the changeset viewer.