Changeset 27165


Ignore:
Timestamp:
07/28/22 08:11:55 (3 years ago)
Author:
vverjans
Message:

CHG: allowing stochastic water pressure for frictioncoulomb

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

Legend:

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

    r27164 r27165  
    344344
    345345        /*Get effective pressure*/
    346         IssmDouble Neff = EffectivePressure(gauss);
     346        bool ispwStochastic;
     347        IssmDouble Neff;
     348        element->parameters->FindParam(&ispwStochastic,StochasticForcingIsWaterPressureEnum);
     349        if(ispwStochastic){
     350                /*Retrieve stochastic water pressure and compute ice pressure*/
     351                IssmDouble p_ice,p_water,Neff_limit;
     352                element->GetInputValue(&p_water,gauss,FrictionCoulombWaterPressureEnum);
     353                element->parameters->FindParam(&Neff_limit,FrictionEffectivePressureLimitEnum);
     354                p_ice = IcePressure(gauss);
     355                Neff  = max(Neff_limit*p_ice, p_ice - p_water);
     356        }       
     357        else{
     358                /*Compute effective pressure directly*/
     359                Neff = EffectivePressure(gauss);
     360        }
     361       
     362        /*Get velocity magnitude*/
    347363        IssmDouble vmag = VelMag(gauss);
    348364
  • issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp

    r27161 r27165  
    207207                                                        gauss->GaussVertex(i);
    208208                                                        p_water_deterministic[i] = friction->SubglacialWaterPressure(gauss);
    209                                                         p_water[i]               = p_water_deterministic[i] + noisefield[dimensionid]; //make sure positive (29Nov2021)
     209                                                        p_water[i]               = p_water_deterministic[i] + noisefield[dimensionid];
    210210                                                }
    211211                                                element->AddInput(FrictionWaterPressureEnum,p_water,P1DGEnum);
     
    228228                                                        gauss->GaussVertex(i);
    229229                                                        p_water_deterministic[i] = friction->SubglacialWaterPressure(gauss);
    230                                                         p_water[i]               = p_water_deterministic[i] + noisefield[dimensionid]; //make sure positive (29Nov2021)
     230                                                        p_water[i]               = p_water_deterministic[i] + noisefield[dimensionid];
    231231                                                }
    232232                                                element->AddInput(FrictionSchoofWaterPressureEnum,p_water,P1DGEnum);
     
    234234                                                delete friction;
    235235                                        }
    236                                         break;                          default:
     236                                        break;
     237                                case FrictionCoulombWaterPressureEnum:
     238                                        /*Specify that WaterPressure is stochastic*/
     239                                        femmodel->parameters->SetParam(true,StochasticForcingIsWaterPressureEnum);
     240                                        for(Object* &object:femmodel->elements->objects){
     241                  Element* element = xDynamicCast<Element*>(object);
     242                  int numvertices  = element->GetNumberOfVertices();
     243                  IssmDouble p_water_deterministic[numvertices];
     244                  IssmDouble p_water[numvertices];
     245                                                element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum);
     246                                                Gauss* gauss=element->NewGauss();
     247                                                Friction* friction = new Friction(element);
     248                                                for(int i=0;i<numvertices;i++){
     249                                                        gauss->GaussVertex(i);
     250                                                        p_water_deterministic[i] = friction->SubglacialWaterPressure(gauss);
     251                                                        p_water[i]               = p_water_deterministic[i] + noisefield[dimensionid];
     252                                                }
     253                                                element->AddInput(FrictionCoulombWaterPressureEnum,p_water,P1DGEnum);
     254                                                delete gauss;
     255                                                delete friction;
     256                                        }
     257                                        break;
     258                                default:
    237259                                        _error_("Field "<<EnumToStringx(fields[j])<<" does not support stochasticity yet.");
    238260                        }
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r27161 r27165  
    747747syn keyword cConstant FrictionCoefficientEnum
    748748syn keyword cConstant FrictionCoefficientcoulombEnum
     749syn keyword cConstant FrictionCoulombWaterPressureEnum
    749750syn keyword cConstant FrictionEffectivePressureEnum
    750751syn keyword cConstant FrictionMEnum
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r27161 r27165  
    743743        FrictionCoefficientEnum,
    744744        FrictionCoefficientcoulombEnum,
     745        FrictionCoulombWaterPressureEnum,
    745746        FrictionEffectivePressureEnum,
    746747        FrictionMEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r27161 r27165  
    749749                case FrictionCoefficientEnum : return "FrictionCoefficient";
    750750                case FrictionCoefficientcoulombEnum : return "FrictionCoefficientcoulomb";
     751                case FrictionCoulombWaterPressureEnum : return "FrictionCoulombWaterPressure";
    751752                case FrictionEffectivePressureEnum : return "FrictionEffectivePressure";
    752753                case FrictionMEnum : return "FrictionM";
  • issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim

    r27161 r27165  
    740740syn keyword juliaConstC FrictionCoefficientEnum
    741741syn keyword juliaConstC FrictionCoefficientcoulombEnum
     742syn keyword juliaConstC FrictionCoulombWaterPressureEnum
    742743syn keyword juliaConstC FrictionEffectivePressureEnum
    743744syn keyword juliaConstC FrictionMEnum
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r27161 r27165  
    767767              else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;
    768768              else if (strcmp(name,"FrictionCoefficientcoulomb")==0) return FrictionCoefficientcoulombEnum;
     769              else if (strcmp(name,"FrictionCoulombWaterPressure")==0) return FrictionCoulombWaterPressureEnum;
    769770              else if (strcmp(name,"FrictionEffectivePressure")==0) return FrictionEffectivePressureEnum;
    770771              else if (strcmp(name,"FrictionM")==0) return FrictionMEnum;
     
    874875              else if (strcmp(name,"RadarAttenuationWolff")==0) return RadarAttenuationWolffEnum;
    875876              else if (strcmp(name,"RadarIcePeriod")==0) return RadarIcePeriodEnum;
    876               else if (strcmp(name,"RadarPowerMacGregor")==0) return RadarPowerMacGregorEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"RadarPowerWolff")==0) return RadarPowerWolffEnum;
     880              if (strcmp(name,"RadarPowerMacGregor")==0) return RadarPowerMacGregorEnum;
     881              else if (strcmp(name,"RadarPowerWolff")==0) return RadarPowerWolffEnum;
    881882              else if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum;
    882883              else if (strcmp(name,"RheologyBInitialguess")==0) return RheologyBInitialguessEnum;
     
    997998              else if (strcmp(name,"SmbDswdiffrf")==0) return SmbDswdiffrfEnum;
    998999              else if (strcmp(name,"SmbDzAdd")==0) return SmbDzAddEnum;
    999               else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
     1003              if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
     1004              else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
    10041005              else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;
    10051006              else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
     
    11201121              else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum;
    11211122              else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
    1122               else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"ThicknessOld")==0) return ThicknessOldEnum;
     1126              if (strcmp(name,"Thickness")==0) return ThicknessEnum;
     1127              else if (strcmp(name,"ThicknessOld")==0) return ThicknessOldEnum;
    11271128              else if (strcmp(name,"ThicknessPositive")==0) return ThicknessPositiveEnum;
    11281129              else if (strcmp(name,"ThicknessResidual")==0) return ThicknessResidualEnum;
     
    12431244              else if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum;
    12441245              else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum;
    1245               else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
     1249              if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
     1250              else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
    12501251              else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
    12511252              else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
     
    13661367              else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
    13671368              else if (strcmp(name,"FloatingAreaScaled")==0) return FloatingAreaScaledEnum;
    1368               else if (strcmp(name,"FloatingMeltRate")==0) return FloatingMeltRateEnum;
    13691369         else stage=12;
    13701370   }
    13711371   if(stage==12){
    1372               if (strcmp(name,"Free")==0) return FreeEnum;
     1372              if (strcmp(name,"FloatingMeltRate")==0) return FloatingMeltRateEnum;
     1373              else if (strcmp(name,"Free")==0) return FreeEnum;
    13731374              else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
    13741375              else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
     
    14891490              else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
    14901491              else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
    1491               else if (strcmp(name,"MeshX")==0) return MeshXEnum;
    14921492         else stage=13;
    14931493   }
    14941494   if(stage==13){
    1495               if (strcmp(name,"MeshY")==0) return MeshYEnum;
     1495              if (strcmp(name,"MeshX")==0) return MeshXEnum;
     1496              else if (strcmp(name,"MeshY")==0) return MeshYEnum;
    14961497              else if (strcmp(name,"MinVel")==0) return MinVelEnum;
    14971498              else if (strcmp(name,"MinVx")==0) return MinVxEnum;
     
    16121613              else if (strcmp(name,"SubelementMelt2")==0) return SubelementMelt2Enum;
    16131614              else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
    1614               else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
    16151615         else stage=14;
    16161616   }
    16171617   if(stage==14){
    1618               if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
     1618              if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
     1619              else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
    16191620              else if (strcmp(name,"Tetra")==0) return TetraEnum;
    16201621              else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
  • issm/trunk-jpl/src/m/classes/stochasticforcing.m

    r27161 r27165  
    9999                  error('md.friction does not agree with stochasticforcing field %s', char(field));
    100100               end
    101                                         if(strcmp(class(md.friction),'friction') || strcmp(class(md.friction),'frictionschoof'))
     101                                        if(strcmp(class(md.friction),'friction') || strcmp(class(md.friction),'frictionschoof') || strcmp(class(md.friction),'frictioncoulomb'))
    102102                  if(md.friction.coupling~=0 && md.friction.coupling~=1 && md.friction.coupling~=2)
    103103                     error('stochasticforcing field %s is only implemented for cases md.friction.coupling 0 or 1 or 2', char(field));
     
    271271                'FloatingMeltRate',...
    272272                'FrictionWaterPressure',...
     273                'FrictionCoulombWaterPressure',...
    273274                'FrictionSchoofWaterPressure',...
    274275                'FrontalForcingsRignotAutoregression',...
     
    282283                'basalforcings',...
    283284                'friction',...
     285                'frictioncoulomb',...
    284286                'frictionschoof',...
    285287                'frontalforcingsrignotautoregression',...
  • issm/trunk-jpl/src/m/classes/stochasticforcing.py

    r27161 r27165  
    107107                if (type(md.friction).__name__ != mdname):
    108108                    raise TypeError('md.friction does not agree with stochasticforcing field {}'.format(field))
    109                 if (type(md.friction).__name__=='friction' or type(md.friction).__name__=='frictionschoof'):
     109                if (type(md.friction).__name__=='friction' or type(md.friction).__name__=='frictionschoof' or type(md.friction).__name__=='frictioncoulomb'):
    110110                    if md.friction.coupling not in[0, 1, 2]:
    111111                        raise TypeError('stochasticforcing field {} is only implemented for cases md.friction.coupling 0 or 1 or 2'.format(field))
     
    234234                     'FloatingMeltRate': 'basalforcings',
    235235                     'FrictionWaterPressure': 'friction',
     236                     'FrictionCoulombWaterPressure': 'frictioncoulomb',
    236237                     'FrictionSchoofWaterPressure': 'frictionschoof',
    237238                     'FrontalForcingsRignotAutoregression': 'frontalforcingsrignotautoregression',
Note: See TracChangeset for help on using the changeset viewer.