Changeset 27165
- Timestamp:
- 07/28/22 08:11:55 (3 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Loads/Friction.cpp
r27164 r27165 344 344 345 345 /*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*/ 347 363 IssmDouble vmag = VelMag(gauss); 348 364 -
issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
r27161 r27165 207 207 gauss->GaussVertex(i); 208 208 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]; 210 210 } 211 211 element->AddInput(FrictionWaterPressureEnum,p_water,P1DGEnum); … … 228 228 gauss->GaussVertex(i); 229 229 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]; 231 231 } 232 232 element->AddInput(FrictionSchoofWaterPressureEnum,p_water,P1DGEnum); … … 234 234 delete friction; 235 235 } 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: 237 259 _error_("Field "<<EnumToStringx(fields[j])<<" does not support stochasticity yet."); 238 260 } -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r27161 r27165 747 747 syn keyword cConstant FrictionCoefficientEnum 748 748 syn keyword cConstant FrictionCoefficientcoulombEnum 749 syn keyword cConstant FrictionCoulombWaterPressureEnum 749 750 syn keyword cConstant FrictionEffectivePressureEnum 750 751 syn keyword cConstant FrictionMEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r27161 r27165 743 743 FrictionCoefficientEnum, 744 744 FrictionCoefficientcoulombEnum, 745 FrictionCoulombWaterPressureEnum, 745 746 FrictionEffectivePressureEnum, 746 747 FrictionMEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r27161 r27165 749 749 case FrictionCoefficientEnum : return "FrictionCoefficient"; 750 750 case FrictionCoefficientcoulombEnum : return "FrictionCoefficientcoulomb"; 751 case FrictionCoulombWaterPressureEnum : return "FrictionCoulombWaterPressure"; 751 752 case FrictionEffectivePressureEnum : return "FrictionEffectivePressure"; 752 753 case FrictionMEnum : return "FrictionM"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r27161 r27165 740 740 syn keyword juliaConstC FrictionCoefficientEnum 741 741 syn keyword juliaConstC FrictionCoefficientcoulombEnum 742 syn keyword juliaConstC FrictionCoulombWaterPressureEnum 742 743 syn keyword juliaConstC FrictionEffectivePressureEnum 743 744 syn keyword juliaConstC FrictionMEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r27161 r27165 767 767 else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum; 768 768 else if (strcmp(name,"FrictionCoefficientcoulomb")==0) return FrictionCoefficientcoulombEnum; 769 else if (strcmp(name,"FrictionCoulombWaterPressure")==0) return FrictionCoulombWaterPressureEnum; 769 770 else if (strcmp(name,"FrictionEffectivePressure")==0) return FrictionEffectivePressureEnum; 770 771 else if (strcmp(name,"FrictionM")==0) return FrictionMEnum; … … 874 875 else if (strcmp(name,"RadarAttenuationWolff")==0) return RadarAttenuationWolffEnum; 875 876 else if (strcmp(name,"RadarIcePeriod")==0) return RadarIcePeriodEnum; 876 else if (strcmp(name,"RadarPowerMacGregor")==0) return RadarPowerMacGregorEnum;877 877 else stage=8; 878 878 } 879 879 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; 881 882 else if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum; 882 883 else if (strcmp(name,"RheologyBInitialguess")==0) return RheologyBInitialguessEnum; … … 997 998 else if (strcmp(name,"SmbDswdiffrf")==0) return SmbDswdiffrfEnum; 998 999 else if (strcmp(name,"SmbDzAdd")==0) return SmbDzAddEnum; 999 else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 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; 1004 1005 else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum; 1005 1006 else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum; … … 1120 1121 else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum; 1121 1122 else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum; 1122 else if (strcmp(name,"Thickness")==0) return ThicknessEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 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; 1127 1128 else if (strcmp(name,"ThicknessPositive")==0) return ThicknessPositiveEnum; 1128 1129 else if (strcmp(name,"ThicknessResidual")==0) return ThicknessResidualEnum; … … 1243 1244 else if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum; 1244 1245 else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum; 1245 else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;1246 1246 else stage=11; 1247 1247 } 1248 1248 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; 1250 1251 else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum; 1251 1252 else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum; … … 1366 1367 else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum; 1367 1368 else if (strcmp(name,"FloatingAreaScaled")==0) return FloatingAreaScaledEnum; 1368 else if (strcmp(name,"FloatingMeltRate")==0) return FloatingMeltRateEnum;1369 1369 else stage=12; 1370 1370 } 1371 1371 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; 1373 1374 else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum; 1374 1375 else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum; … … 1489 1490 else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum; 1490 1491 else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum; 1491 else if (strcmp(name,"MeshX")==0) return MeshXEnum;1492 1492 else stage=13; 1493 1493 } 1494 1494 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; 1496 1497 else if (strcmp(name,"MinVel")==0) return MinVelEnum; 1497 1498 else if (strcmp(name,"MinVx")==0) return MinVxEnum; … … 1612 1613 else if (strcmp(name,"SubelementMelt2")==0) return SubelementMelt2Enum; 1613 1614 else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum; 1614 else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;1615 1615 else stage=14; 1616 1616 } 1617 1617 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; 1619 1620 else if (strcmp(name,"Tetra")==0) return TetraEnum; 1620 1621 else if (strcmp(name,"TetraInput")==0) return TetraInputEnum; -
issm/trunk-jpl/src/m/classes/stochasticforcing.m
r27161 r27165 99 99 error('md.friction does not agree with stochasticforcing field %s', char(field)); 100 100 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')) 102 102 if(md.friction.coupling~=0 && md.friction.coupling~=1 && md.friction.coupling~=2) 103 103 error('stochasticforcing field %s is only implemented for cases md.friction.coupling 0 or 1 or 2', char(field)); … … 271 271 'FloatingMeltRate',... 272 272 'FrictionWaterPressure',... 273 'FrictionCoulombWaterPressure',... 273 274 'FrictionSchoofWaterPressure',... 274 275 'FrontalForcingsRignotAutoregression',... … … 282 283 'basalforcings',... 283 284 'friction',... 285 'frictioncoulomb',... 284 286 'frictionschoof',... 285 287 'frontalforcingsrignotautoregression',... -
issm/trunk-jpl/src/m/classes/stochasticforcing.py
r27161 r27165 107 107 if (type(md.friction).__name__ != mdname): 108 108 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'): 110 110 if md.friction.coupling not in[0, 1, 2]: 111 111 raise TypeError('stochasticforcing field {} is only implemented for cases md.friction.coupling 0 or 1 or 2'.format(field)) … … 234 234 'FloatingMeltRate': 'basalforcings', 235 235 'FrictionWaterPressure': 'friction', 236 'FrictionCoulombWaterPressure': 'frictioncoulomb', 236 237 'FrictionSchoofWaterPressure': 'frictionschoof', 237 238 'FrontalForcingsRignotAutoregression': 'frontalforcingsrignotautoregression',
Note:
See TracChangeset
for help on using the changeset viewer.