Changeset 27315


Ignore:
Timestamp:
10/19/22 13:16:12 (2 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added more friction laws to GlaDS

File:
1 edited

Legend:

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

    r27295 r27315  
    158158
    159159        /*Friction law variables*/
     160        int FrictionCoupling;
    160161        switch(frictionlaw){
    161162                case 1:
     163                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
    162164                        iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
    163165                        iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
    164166                        iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
    165                         break;
    166                 case 8:
     167                        if(FrictionCoupling==3){
     168                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
     169                        else if(FrictionCoupling==4){
     170                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
     171                        }
     172                        break;
     173                case 2:
     174                        iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
     175                        iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
     176                        break;
     177                case 3:
     178                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
     179                        iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
     180                        iomodel->FetchDataToInput(inputs,elements,"md.friction.As",FrictionAsEnum);
     181                        iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
     182                        if(FrictionCoupling==3){
     183                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
     184                        else if(FrictionCoupling==4){
     185                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
     186                        }
     187                        break;
     188                case 4:
    167189                        iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
     190                        iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
     191                        iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
     192                        iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
     193                        iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
     194                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
     195                        break;
     196                case 5:
     197                        iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
     198                        iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
     199                        iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
     200                        iomodel->FetchDataToInput(inputs,elements,"md.friction.water_layer",FrictionWaterLayerEnum);
     201                        break;
     202                case 6:
     203                        iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
     204                        iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
     205                        iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
     206                        iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
     207                        break;
     208                case 7:
     209                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
     210                        iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
     211                        iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
     212                        iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
     213                        iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
     214                        if(FrictionCoupling==3){
     215                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
     216                        else if(FrictionCoupling==4){
     217                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
     218
     219                        }
     220                        break;
     221                case 9:
     222                        iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
     223                        iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
     224                        iomodel->FetchDataToInput(inputs,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
     225                        InputUpdateFromConstantx(inputs,elements,1.,FrictionPEnum);
     226                        InputUpdateFromConstantx(inputs,elements,1.,FrictionQEnum);
     227                        break;
     228                case 10:
     229                        iomodel->FetchDataToInput(inputs,elements,"md.friction.till_friction_angle",FrictionTillFrictionAngleEnum);
     230                        iomodel->FetchDataToInput(inputs,elements,"md.friction.sediment_compressibility_coefficient",FrictionSedimentCompressibilityCoefficientEnum);
     231                        iomodel->FetchDataToInput(inputs,elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);
     232                        iomodel->FetchDataToInput(inputs,elements,"md.initialization.watercolumn",WatercolumnEnum,0.);
     233                        break;
     234                case 11:
     235                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
     236                        iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
     237                        iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
     238                        iomodel->FetchDataToInput(inputs,elements,"md.friction.Cmax",FrictionCmaxEnum);
     239                        if(FrictionCoupling==3){
     240                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
     241                        else if(FrictionCoupling==4){
     242                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
     243                        }
     244                        break;
     245                case 12:
     246                        iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
     247                        iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
     248                        iomodel->FetchDataToInput(inputs,elements,"md.friction.f",FrictionfEnum);
     249                        break;
     250                case 13:
     251                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
     252                        iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
     253                        iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
     254                        if(FrictionCoupling==3){
     255                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
     256                        else if(FrictionCoupling==4){
     257                                iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
     258                        }
    168259                        break;
    169260                default:
    170                         _error_("Friction law "<< frictionlaw <<" not supported");
     261                        _error_("friction law "<< frictionlaw <<" not supported");
    171262        }
    172263}/*}}}*/
     
    195286        int frictionlaw;
    196287        iomodel->FindConstant(&frictionlaw,"md.friction.law");
    197         if(frictionlaw==6){
    198                 parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
    199         }
    200         if(frictionlaw==4){
    201                 parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
    202                 parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
    203                 parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
    204         }
    205         if(frictionlaw==1 || frictionlaw==3 || frictionlaw==7){
    206                 parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
    207                 parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
    208         }
    209         if(frictionlaw==9){
    210                 parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
    211                 parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
    212                 parameters->AddObject(new IntParam(FrictionCouplingEnum,0));
     288        switch(frictionlaw){
     289                case 1:
     290                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
     291                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     292                        break;
     293                case 2:
     294                        break;
     295                case 3:
     296                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
     297                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     298                        break;
     299                case 4:
     300                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
     301                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
     302                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     303                        break;
     304                case 5:
     305                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.f",FrictionFEnum));
     306                        break;
     307                case 6:
     308                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
     309                        break;
     310                case 7:
     311                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
     312                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     313                        break;
     314                case 8:
     315                        break;
     316                case 9:
     317                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
     318                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     319                        parameters->AddObject(new IntParam(FrictionCouplingEnum,0));
     320                        break;
     321                case 10:
     322                        parameters->AddObject(new IntParam(FrictionCouplingEnum,2)); /*comment this line to use effective pressure from Beuler and Pelt (2015)*/
     323                        parameters->AddObject(new DoubleParam(FrictionEffectivePressureLimitEnum,0.));
     324                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.pseudoplasticity_exponent",FrictionPseudoplasticityExponentEnum));
     325                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.threshold_speed",FrictionThresholdSpeedEnum));
     326                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.delta",FrictionDeltaEnum));
     327                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.void_ratio",FrictionVoidRatioEnum));
     328                        break;
     329                case 11:
     330                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
     331                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     332                        break;
     333                case 12:
     334                        parameters->AddObject(new IntParam(FrictionCouplingEnum,2));
     335                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     336                        break;
     337                case 13:
     338                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
     339                        parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     340                        break;
     341                default: _error_("Friction law "<<frictionlaw<<" not implemented yet");
    213342        }
    214343
Note: See TracChangeset for help on using the changeset viewer.