Changeset 27508


Ignore:
Timestamp:
01/10/23 15:49:52 (2 years ago)
Author:
youngmc3
Message:

ADD: Regularised Coulomb friction law 2

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Loads/Friction.cpp

    r27494 r27508  
    400400                        case 14:
    401401                                GetAlpha2RegCoulomb(palpha2,gauss);
     402                                break;
     403                        case 15:
     404                                GetAlpha2RegCoulomb2(palpha2,gauss);
    402405                                break;
    403406                        default:
     
    10151018        *palpha2=alpha2;
    10161019}/*}}}*/
     1020void Friction::GetAlpha2RegCoulomb2(IssmDouble* palpha2, Gauss* gauss){/*{{{*/
     1021
     1022        /*This routine calculates the basal friction coefficient
     1023         *
     1024         *               C N |u_b|^(1/m-1)
     1025         * alpha2= __________________________
     1026         *          (|u_b| + K N^m )^(1/m)
     1027         *
     1028         * */
     1029
     1030        /*diverse: */
     1031        IssmDouble  C,K,m,alpha2;
     1032
     1033        /*Recover parameters: */
     1034        element->GetInputValue(&C,gauss,FrictionCEnum);
     1035        element->GetInputValue(&m,gauss,FrictionMEnum);
     1036        element->GetInputValue(&K,gauss,FrictionKEnum);
     1037
     1038        /*Get velocity magnitude*/
     1039        IssmDouble ub = VelMag(gauss);
     1040        IssmDouble Neff = EffectivePressure(gauss);
     1041
     1042        /*Check to prevent dividing by zero if vmag==0*/
     1043        if(ub==0. && (m-1.)<0) {
     1044                alpha2=0.;
     1045        }
     1046        else {
     1047                /*Compute alpha^2*/
     1048                alpha2= (C*pow(ub,1./m-1.)) * Neff / pow((ub+pow(K*Neff,m)),1./m);
     1049        }
     1050
     1051        /*Assign output pointers:*/
     1052        *palpha2=alpha2;
     1053}/*}}}*/
    10171054IssmDouble Friction::EffectivePressure(Gauss* gauss){/*{{{*/
    10181055        /*Get effective pressure as a function of  flag */
     
    13001337                        iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
    13011338                        break;
     1339                case 15:
     1340                        iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
     1341                        iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
     1342                        iomodel->FetchDataToInput(inputs,elements,"md.friction.K",FrictionKEnum);
     1343                        break;
    13021344                default:
    13031345                        _error_("friction law "<< frictionlaw <<" not supported");
     
    13761418                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.u0",FrictionU0Enum));
    13771419                        break;
     1420                case 15:
     1421                        parameters->AddObject(new IntParam(FrictionCouplingEnum,2));
     1422                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     1423                        break;
    13781424                default: _error_("Friction law "<<frictionlaw<<" not implemented yet");
    13791425        }
  • issm/trunk-jpl/src/c/classes/Loads/Friction.h

    r27476 r27508  
    5757                void  GetAlpha2Schoof(IssmDouble* palpha2,Gauss* gauss);
    5858                void  GetAlpha2RegCoulomb(IssmDouble* palpha2,Gauss* gauss);
     59                void  GetAlpha2RegCoulomb2(IssmDouble* palpha2,Gauss* gauss);
    5960                void  GetAlpha2Tsai(IssmDouble* palpha2,Gauss* gauss);
    6061
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r27498 r27508  
    819819syn keyword cConstant FrictionCoefficientcoulombEnum
    820820syn keyword cConstant FrictionEffectivePressureEnum
     821syn keyword cConstant FrictionKEnum
    821822syn keyword cConstant FrictionMEnum
    822823syn keyword cConstant FrictionPEnum
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r27498 r27508  
    815815        FrictionCoefficientcoulombEnum,
    816816        FrictionEffectivePressureEnum,
     817        FrictionKEnum,
    817818        FrictionMEnum,
    818819        FrictionPEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r27498 r27508  
    821821                case FrictionCoefficientcoulombEnum : return "FrictionCoefficientcoulomb";
    822822                case FrictionEffectivePressureEnum : return "FrictionEffectivePressure";
     823                case FrictionKEnum : return "FrictionK";
    823824                case FrictionMEnum : return "FrictionM";
    824825                case FrictionPEnum : return "FrictionP";
  • issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim

    r27498 r27508  
    812812syn keyword juliaConstC FrictionCoefficientcoulombEnum
    813813syn keyword juliaConstC FrictionEffectivePressureEnum
     814syn keyword juliaConstC FrictionKEnum
    814815syn keyword juliaConstC FrictionMEnum
    815816syn keyword juliaConstC FrictionPEnum
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r27498 r27508  
    839839              else if (strcmp(name,"FrictionCoefficientcoulomb")==0) return FrictionCoefficientcoulombEnum;
    840840              else if (strcmp(name,"FrictionEffectivePressure")==0) return FrictionEffectivePressureEnum;
     841              else if (strcmp(name,"FrictionK")==0) return FrictionKEnum;
    841842              else if (strcmp(name,"FrictionM")==0) return FrictionMEnum;
    842843              else if (strcmp(name,"FrictionP")==0) return FrictionPEnum;
     
    874875              else if (strcmp(name,"HydrologydcMaskEplactiveNode")==0) return HydrologydcMaskEplactiveNodeEnum;
    875876              else if (strcmp(name,"HydrologydcMaskThawedElt")==0) return HydrologydcMaskThawedEltEnum;
    876               else if (strcmp(name,"HydrologydcMaskThawedNode")==0) return HydrologydcMaskThawedNodeEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"HydrologydcSedimentTransmitivity")==0) return HydrologydcSedimentTransmitivityEnum;
     880              if (strcmp(name,"HydrologydcMaskThawedNode")==0) return HydrologydcMaskThawedNodeEnum;
     881              else if (strcmp(name,"HydrologydcSedimentTransmitivity")==0) return HydrologydcSedimentTransmitivityEnum;
    881882              else if (strcmp(name,"HydrologyDrainageRate")==0) return HydrologyDrainageRateEnum;
    882883              else if (strcmp(name,"HydrologyEnglacialInput")==0) return HydrologyEnglacialInputEnum;
     
    997998              else if (strcmp(name,"BslcIce")==0) return BslcIceEnum;
    998999              else if (strcmp(name,"BslcHydro")==0) return BslcHydroEnum;
    999               else if (strcmp(name,"BslcOcean")==0) return BslcOceanEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"BslcRate")==0) return BslcRateEnum;
     1003              if (strcmp(name,"BslcOcean")==0) return BslcOceanEnum;
     1004              else if (strcmp(name,"BslcRate")==0) return BslcRateEnum;
    10041005              else if (strcmp(name,"Gmtslc")==0) return GmtslcEnum;
    10051006              else if (strcmp(name,"SealevelRSLBarystatic")==0) return SealevelRSLBarystaticEnum;
     
    11201121              else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
    11211122              else if (strcmp(name,"SmbPrecipitationsReconstructed")==0) return SmbPrecipitationsReconstructedEnum;
    1122               else if (strcmp(name,"SmbRain")==0) return SmbRainEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"SmbRe")==0) return SmbReEnum;
     1126              if (strcmp(name,"SmbRain")==0) return SmbRainEnum;
     1127              else if (strcmp(name,"SmbRe")==0) return SmbReEnum;
    11271128              else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum;
    11281129              else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum;
     
    12431244              else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum;
    12441245              else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum;
    1245               else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
     1249              if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
     1250              else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
    12501251              else if (strcmp(name,"WaterPressureArmaPerturbation")==0) return WaterPressureArmaPerturbationEnum;
    12511252              else if (strcmp(name,"WaterPressureValuesAutoregression")==0) return WaterPressureValuesAutoregressionEnum;
     
    13661367              else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
    13671368              else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
    1368               else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
    13691369         else stage=12;
    13701370   }
    13711371   if(stage==12){
    1372               if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
     1372              if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
     1373              else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
    13731374              else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
    13741375              else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
     
    14891490              else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
    14901491              else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
    1491               else if (strcmp(name,"GroundinglineMassFlux")==0) return GroundinglineMassFluxEnum;
    14921492         else stage=13;
    14931493   }
    14941494   if(stage==13){
    1495               if (strcmp(name,"Gset")==0) return GsetEnum;
     1495              if (strcmp(name,"GroundinglineMassFlux")==0) return GroundinglineMassFluxEnum;
     1496              else if (strcmp(name,"Gset")==0) return GsetEnum;
    14961497              else if (strcmp(name,"Gsl")==0) return GslEnum;
    14971498              else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
     
    16121613              else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
    16131614              else if (strcmp(name,"None")==0) return NoneEnum;
    1614               else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
    16151615         else stage=14;
    16161616   }
    16171617   if(stage==14){
    1618               if (strcmp(name,"NyeCO2")==0) return NyeCO2Enum;
     1618              if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
     1619              else if (strcmp(name,"NyeCO2")==0) return NyeCO2Enum;
    16191620              else if (strcmp(name,"NyeH2O")==0) return NyeH2OEnum;
    16201621              else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
     
    17351736              else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
    17361737              else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
    1737               else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
    17381738         else stage=15;
    17391739   }
    17401740   if(stage==15){
    1741               if (strcmp(name,"Tria")==0) return TriaEnum;
     1741              if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
     1742              else if (strcmp(name,"Tria")==0) return TriaEnum;
    17421743              else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
    17431744              else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum;
Note: See TracChangeset for help on using the changeset viewer.