Changeset 23897


Ignore:
Timestamp:
04/25/19 10:43:54 (6 years ago)
Author:
Mathieu Morlighem
Message:

NEW: added Tsai's friction law

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

Legend:

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

    r23840 r23897  
    875875                        iomodel->FetchDataToInput(elements,"md.friction.Cmax",FrictionCmaxEnum);
    876876                        break;
     877                case 12:
     878                        iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
     879                        iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
     880                        iomodel->FetchDataToInput(elements,"md.friction.f",FrictionfEnum);
     881                        break;
    877882                default:
    878883                        _error_("friction law "<< frictionlaw <<" not supported");
     
    972977                        parameters->AddObject(new IntParam(FrictionCouplingEnum,2));
    973978                        break;
     979                case 12:
     980                        parameters->AddObject(new IntParam(FrictionCouplingEnum,2));
     981                        break;
    974982                default: _error_("Friction law "<<frictionlaw<<" not implemented yet");
    975983        }
  • issm/trunk-jpl/src/c/classes/Loads/Friction.cpp

    r23841 r23897  
    197197                case 11:
    198198                        GetAlpha2Schoof(palpha2,gauss);
     199                        break;
     200                case 12:
     201                        GetAlpha2Tsai(palpha2,gauss);
    199202                        break;
    200203          default:
     
    629632        else{
    630633                alpha2= (C*pow(ub,m-1.)) / pow(1.+  pow(C/(Cmax*N),1./m)*ub,m);
     634        }
     635
     636        /*Assign output pointers:*/
     637        *palpha2=alpha2;
     638}/*}}}*/
     639void Friction::GetAlpha2Tsai(IssmDouble* palpha2, Gauss* gauss){/*{{{*/
     640
     641        /*This routine calculates the basal friction coefficient
     642         *
     643         * alpha2= min(C |ub|^m , f N ) / |ub|
     644         *
     645         * */
     646
     647        /*diverse: */
     648        IssmDouble  C,f,m,alpha2;
     649
     650        /*Recover parameters: */
     651        element->GetInputValue(&f,gauss,FrictionfEnum);
     652        element->GetInputValue(&C,gauss,FrictionCEnum);
     653        element->GetInputValue(&m,FrictionMEnum);
     654
     655        /*Get effective pressure and velocity magnitude*/
     656        IssmDouble N  = EffectivePressure(gauss);
     657        IssmDouble ub = VelMag(gauss);
     658
     659        /*Compute alpha^2*/
     660        if(ub<1e-10){
     661                alpha2 = 0.;
     662        }
     663        else{
     664                alpha2= C*pow(ub,m);
     665
     666                if(alpha2>f*N) alpha2 = f*N;
     667
     668                alpha2 = alpha2/ub;
    631669        }
    632670
  • issm/trunk-jpl/src/c/classes/Loads/Friction.h

    r23839 r23897  
    4242                void  GetAlpha2PISM(IssmDouble* palpha2,Gauss* gauss);
    4343                void  GetAlpha2Schoof(IssmDouble* palpha2,Gauss* gauss);
     44                void  GetAlpha2Tsai(IssmDouble* palpha2,Gauss* gauss);
    4445
    4546                IssmDouble EffectivePressure(Gauss* gauss);
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r23885 r23897  
    517517        FrictionCoefficientEnum,
    518518        FrictionEffectivePressureEnum,
     519        FrictionfEnum,
    519520        FrictionMEnum,
    520521        FrictionPEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r23885 r23897  
    523523                case FrictionCoefficientEnum : return "FrictionCoefficient";
    524524                case FrictionEffectivePressureEnum : return "FrictionEffectivePressure";
     525                case FrictionfEnum : return "Frictionf";
    525526                case FrictionMEnum : return "FrictionM";
    526527                case FrictionPEnum : return "FrictionP";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r23885 r23897  
    535535              else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;
    536536              else if (strcmp(name,"FrictionEffectivePressure")==0) return FrictionEffectivePressureEnum;
     537              else if (strcmp(name,"Frictionf")==0) return FrictionfEnum;
    537538              else if (strcmp(name,"FrictionM")==0) return FrictionMEnum;
    538539              else if (strcmp(name,"FrictionP")==0) return FrictionPEnum;
     
    628629              else if (strcmp(name,"SealevelUEsa")==0) return SealevelUEsaEnum;
    629630              else if (strcmp(name,"SealevelRSLEustaticRate")==0) return SealevelRSLEustaticRateEnum;
    630               else if (strcmp(name,"SealevelriseSpcthickness")==0) return SealevelriseSpcthicknessEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"SealevelriseStericRate")==0) return SealevelriseStericRateEnum;
     634              if (strcmp(name,"SealevelriseSpcthickness")==0) return SealevelriseSpcthicknessEnum;
     635              else if (strcmp(name,"SealevelriseStericRate")==0) return SealevelriseStericRateEnum;
    635636              else if (strcmp(name,"SealevelNEsa")==0) return SealevelNEsaEnum;
    636637              else if (strcmp(name,"SealevelUGia")==0) return SealevelUGiaEnum;
     
    751752              else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
    752753              else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
    753               else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
     757              if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
     758              else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
    758759              else if (strcmp(name,"SurfaceAbsMisfit")==0) return SurfaceAbsMisfitEnum;
    759760              else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
     
    874875              else if (strcmp(name,"Outputdefinition76")==0) return Outputdefinition76Enum;
    875876              else if (strcmp(name,"Outputdefinition77")==0) return Outputdefinition77Enum;
    876               else if (strcmp(name,"Outputdefinition78")==0) return Outputdefinition78Enum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"Outputdefinition79")==0) return Outputdefinition79Enum;
     880              if (strcmp(name,"Outputdefinition78")==0) return Outputdefinition78Enum;
     881              else if (strcmp(name,"Outputdefinition79")==0) return Outputdefinition79Enum;
    881882              else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
    882883              else if (strcmp(name,"Outputdefinition80")==0) return Outputdefinition80Enum;
     
    997998              else if (strcmp(name,"FrontalForcingsDefault")==0) return FrontalForcingsDefaultEnum;
    998999              else if (strcmp(name,"FrontalForcingsRignot")==0) return FrontalForcingsRignotEnum;
    999               else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"Fset")==0) return FsetEnum;
     1003              if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
     1004              else if (strcmp(name,"Fset")==0) return FsetEnum;
    10041005              else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
    10051006              else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
     
    11201121              else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
    11211122              else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
    1122               else if (strcmp(name,"NoFrictionOnPartiallyFloating")==0) return NoFrictionOnPartiallyFloatingEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"NoMeltOnPartiallyFloating")==0) return NoMeltOnPartiallyFloatingEnum;
     1126              if (strcmp(name,"NoFrictionOnPartiallyFloating")==0) return NoFrictionOnPartiallyFloatingEnum;
     1127              else if (strcmp(name,"NoMeltOnPartiallyFloating")==0) return NoMeltOnPartiallyFloatingEnum;
    11271128              else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
    11281129              else if (strcmp(name,"None")==0) return NoneEnum;
     
    12431244              else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
    12441245              else if (strcmp(name,"Water")==0) return WaterEnum;
    1245               else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"XY")==0) return XYEnum;
     1249              if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
     1250              else if (strcmp(name,"XY")==0) return XYEnum;
    12501251              else if (strcmp(name,"XYZ")==0) return XYZEnum;
    12511252              else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
  • issm/trunk-jpl/src/m/classes/frictiontsai.m

    r23895 r23897  
    1515                                case 0
    1616                                        self=setdefaultparameters(self);
     17                                case 1
     18                                        self=structtoobj(frictiontsai(),varargin{1});
    1719                                otherwise
    1820                                        error('constructor not supported');
Note: See TracChangeset for help on using the changeset viewer.