Changeset 27161
- Timestamp:
- 07/18/22 12:42:48 (3 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Loads/Friction.cpp
r26676 r27161 749 749 * C |u_b|^(m-1) 750 750 * alpha2= __________________________ 751 * (1+(C/(Cmax N ))^1/m |u_b| )^m751 * (1+(C/(Cmax Neff))^1/m |u_b| )^m 752 752 * 753 753 * */ … … 764 764 C = coeff*coeff; 765 765 766 /*Get effective pressure and velocity magnitude*/ 767 IssmDouble N = EffectivePressure(gauss); 766 /*Get effective pressure*/ 767 bool ispwStochastic; 768 IssmDouble Neff; 769 element->parameters->FindParam(&ispwStochastic,StochasticForcingIsWaterPressureEnum); 770 if(ispwStochastic){ 771 /*Retrieve stochastic water pressure and compute ice pressure*/ 772 IssmDouble p_ice,p_water,Neff_limit; 773 element->GetInputValue(&p_water,gauss,FrictionSchoofWaterPressureEnum); 774 element->parameters->FindParam(&Neff_limit,FrictionEffectivePressureLimitEnum); 775 p_ice = IcePressure(gauss); 776 Neff = max(Neff_limit*p_ice, p_ice - p_water); 777 } 778 else{ 779 /*Compute effective pressure directly*/ 780 Neff = EffectivePressure(gauss); 781 } 782 783 /*Get velocity magnitude*/ 768 784 IssmDouble ub = VelMag(gauss); 769 785 770 786 /*Compute alpha^2*/ 771 if((ub<1e-10) ||(N ==0.0)){787 if((ub<1e-10) ||(Neff==0.0)){ 772 788 alpha2 = 0.; 773 789 } 774 790 else{ 775 alpha2= (C*pow(ub,m-1.)) / pow(1.+ pow(C/(Cmax*N ),1./m)*ub,m);791 alpha2= (C*pow(ub,m-1.)) / pow(1.+ pow(C/(Cmax*Neff),1./m)*ub,m); 776 792 } 777 793 -
issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
r27160 r27161 214 214 } 215 215 break; 216 default: 216 case FrictionSchoofWaterPressureEnum: 217 /*Specify that WaterPressure is stochastic*/ 218 femmodel->parameters->SetParam(true,StochasticForcingIsWaterPressureEnum); 219 for(Object* &object:femmodel->elements->objects){ 220 Element* element = xDynamicCast<Element*>(object); 221 int numvertices = element->GetNumberOfVertices(); 222 IssmDouble p_water_deterministic[numvertices]; 223 IssmDouble p_water[numvertices]; 224 element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum); 225 Gauss* gauss=element->NewGauss(); 226 Friction* friction = new Friction(element); 227 for(int i=0;i<numvertices;i++){ 228 gauss->GaussVertex(i); 229 p_water_deterministic[i] = friction->SubglacialWaterPressure(gauss); 230 p_water[i] = p_water_deterministic[i] + noisefield[dimensionid]; //make sure positive (29Nov2021) 231 } 232 element->AddInput(FrictionSchoofWaterPressureEnum,p_water,P1DGEnum); 233 delete gauss; 234 delete friction; 235 } 236 break; default: 217 237 _error_("Field "<<EnumToStringx(fields[j])<<" does not support stochasticity yet."); 218 238 } -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r27154 r27161 754 754 syn keyword cConstant FrictionSedimentCompressibilityCoefficientEnum 755 755 syn keyword cConstant FrictionTillFrictionAngleEnum 756 syn keyword cConstant FrictionSchoofWaterPressureEnum 756 757 syn keyword cConstant FrictionWaterLayerEnum 758 syn keyword cConstant FrictionWaterPressureEnum 757 759 syn keyword cConstant FrictionfEnum 758 760 syn keyword cConstant FrontalForcingsBasinIdEnum … … 1123 1125 syn keyword cConstant WaterfractionEnum 1124 1126 syn keyword cConstant WaterheightEnum 1125 syn keyword cConstant FrictionWaterPressureEnum1126 syn keyword cConstant FrictionWaterPressureNoiseEnum1127 1127 syn keyword cConstant WeightsLevelsetObservationEnum 1128 1128 syn keyword cConstant WeightsSurfaceObservationEnum … … 1639 1639 syn keyword cType Cfsurfacesquare 1640 1640 syn keyword cType Channel 1641 syn keyword cType classes 1641 1642 syn keyword cType Constraint 1642 1643 syn keyword cType Constraints … … 1645 1646 syn keyword cType ControlInput 1646 1647 syn keyword cType Covertree 1648 syn keyword cType DatasetInput 1647 1649 syn keyword cType DataSetParam 1648 syn keyword cType DatasetInput1649 1650 syn keyword cType Definition 1650 1651 syn keyword cType DependentObject … … 1659 1660 syn keyword cType ElementInput 1660 1661 syn keyword cType ElementMatrix 1662 syn keyword cType Elements 1661 1663 syn keyword cType ElementVector 1662 syn keyword cType Elements1663 1664 syn keyword cType ExponentialVariogram 1664 1665 syn keyword cType ExternalResult … … 1667 1668 syn keyword cType Friction 1668 1669 syn keyword cType Gauss 1670 syn keyword cType GaussianVariogram 1671 syn keyword cType gaussobjects 1669 1672 syn keyword cType GaussPenta 1670 1673 syn keyword cType GaussSeg 1671 1674 syn keyword cType GaussTetra 1672 1675 syn keyword cType GaussTria 1673 syn keyword cType GaussianVariogram1674 1676 syn keyword cType GenericExternalResult 1675 1677 syn keyword cType GenericOption … … 1688 1690 syn keyword cType IssmDirectApplicInterface 1689 1691 syn keyword cType IssmParallelDirectApplicInterface 1692 syn keyword cType krigingobjects 1690 1693 syn keyword cType Load 1691 1694 syn keyword cType Loads … … 1698 1701 syn keyword cType Matice 1699 1702 syn keyword cType Matlitho 1703 syn keyword cType matrixobjects 1700 1704 syn keyword cType MatrixParam 1701 1705 syn keyword cType Misfit … … 1710 1714 syn keyword cType Observations 1711 1715 syn keyword cType Option 1716 syn keyword cType Options 1712 1717 syn keyword cType OptionUtilities 1713 syn keyword cType Options1714 1718 syn keyword cType Param 1715 1719 syn keyword cType Parameters … … 1725 1729 syn keyword cType Regionaloutput 1726 1730 syn keyword cType Results 1731 syn keyword cType Riftfront 1727 1732 syn keyword cType RiftStruct 1728 syn keyword cType Riftfront1729 1733 syn keyword cType SealevelGeometry 1730 1734 syn keyword cType Seg 1731 1735 syn keyword cType SegInput 1736 syn keyword cType Segment 1732 1737 syn keyword cType SegRef 1733 syn keyword cType Segment1734 1738 syn keyword cType SpcDynamic 1735 1739 syn keyword cType SpcStatic … … 1750 1754 syn keyword cType Vertex 1751 1755 syn keyword cType Vertices 1752 syn keyword cType classes1753 syn keyword cType gaussobjects1754 syn keyword cType krigingobjects1755 syn keyword cType matrixobjects1756 1756 syn keyword cType AdjointBalancethickness2Analysis 1757 1757 syn keyword cType AdjointBalancethicknessAnalysis -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r27154 r27161 750 750 FrictionSedimentCompressibilityCoefficientEnum, 751 751 FrictionTillFrictionAngleEnum, 752 FrictionSchoofWaterPressureEnum, 752 753 FrictionWaterLayerEnum, 754 FrictionWaterPressureEnum, 753 755 FrictionfEnum, 754 756 FrontalForcingsBasinIdEnum, … … 1120 1122 WaterfractionEnum, 1121 1123 WaterheightEnum, 1122 FrictionWaterPressureEnum,1123 FrictionWaterPressureNoiseEnum,1124 1124 WeightsLevelsetObservationEnum, 1125 1125 WeightsSurfaceObservationEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r27154 r27161 756 756 case FrictionSedimentCompressibilityCoefficientEnum : return "FrictionSedimentCompressibilityCoefficient"; 757 757 case FrictionTillFrictionAngleEnum : return "FrictionTillFrictionAngle"; 758 case FrictionSchoofWaterPressureEnum : return "FrictionSchoofWaterPressure"; 758 759 case FrictionWaterLayerEnum : return "FrictionWaterLayer"; 760 case FrictionWaterPressureEnum : return "FrictionWaterPressure"; 759 761 case FrictionfEnum : return "Frictionf"; 760 762 case FrontalForcingsBasinIdEnum : return "FrontalForcingsBasinId"; … … 1125 1127 case WaterfractionEnum : return "Waterfraction"; 1126 1128 case WaterheightEnum : return "Waterheight"; 1127 case FrictionWaterPressureEnum : return "FrictionWaterPressure";1128 case FrictionWaterPressureNoiseEnum : return "FrictionWaterPressureNoise";1129 1129 case WeightsLevelsetObservationEnum : return "WeightsLevelsetObservation"; 1130 1130 case WeightsSurfaceObservationEnum : return "WeightsSurfaceObservation"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r27154 r27161 747 747 syn keyword juliaConstC FrictionSedimentCompressibilityCoefficientEnum 748 748 syn keyword juliaConstC FrictionTillFrictionAngleEnum 749 syn keyword juliaConstC FrictionSchoofWaterPressureEnum 749 750 syn keyword juliaConstC FrictionWaterLayerEnum 751 syn keyword juliaConstC FrictionWaterPressureEnum 750 752 syn keyword juliaConstC FrictionfEnum 751 753 syn keyword juliaConstC FrontalForcingsBasinIdEnum … … 1116 1118 syn keyword juliaConstC WaterfractionEnum 1117 1119 syn keyword juliaConstC WaterheightEnum 1118 syn keyword juliaConstC FrictionWaterPressureEnum1119 syn keyword juliaConstC FrictionWaterPressureNoiseEnum1120 1120 syn keyword juliaConstC WeightsLevelsetObservationEnum 1121 1121 syn keyword juliaConstC WeightsSurfaceObservationEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r27154 r27161 774 774 else if (strcmp(name,"FrictionSedimentCompressibilityCoefficient")==0) return FrictionSedimentCompressibilityCoefficientEnum; 775 775 else if (strcmp(name,"FrictionTillFrictionAngle")==0) return FrictionTillFrictionAngleEnum; 776 else if (strcmp(name,"FrictionSchoofWaterPressure")==0) return FrictionSchoofWaterPressureEnum; 776 777 else if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum; 778 else if (strcmp(name,"FrictionWaterPressure")==0) return FrictionWaterPressureEnum; 777 779 else if (strcmp(name,"Frictionf")==0) return FrictionfEnum; 778 780 else if (strcmp(name,"FrontalForcingsBasinId")==0) return FrontalForcingsBasinIdEnum; … … 873 875 else if (strcmp(name,"RadarIcePeriod")==0) return RadarIcePeriodEnum; 874 876 else if (strcmp(name,"RadarPowerMacGregor")==0) return RadarPowerMacGregorEnum; 875 else if (strcmp(name,"RadarPowerWolff")==0) return RadarPowerWolffEnum;876 else if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"RheologyBInitialguess")==0) return RheologyBInitialguessEnum; 880 if (strcmp(name,"RadarPowerWolff")==0) return RadarPowerWolffEnum; 881 else if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum; 882 else if (strcmp(name,"RheologyBInitialguess")==0) return RheologyBInitialguessEnum; 881 883 else if (strcmp(name,"RheologyBInitialguessMisfit")==0) return RheologyBInitialguessMisfitEnum; 882 884 else if (strcmp(name,"RheologyBbarAbsGradient")==0) return RheologyBbarAbsGradientEnum; … … 996 998 else if (strcmp(name,"SmbDzAdd")==0) return SmbDzAddEnum; 997 999 else if (strcmp(name,"SmbDz")==0) return SmbDzEnum; 998 else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;999 else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum; 1003 if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum; 1004 else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum; 1005 else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum; 1004 1006 else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum; 1005 1007 else if (strcmp(name,"SmbEC")==0) return SmbECEnum; … … 1119 1121 else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum; 1120 1122 else if (strcmp(name,"Thickness")==0) return ThicknessEnum; 1121 else if (strcmp(name,"ThicknessOld")==0) return ThicknessOldEnum;1122 else if (strcmp(name,"ThicknessPositive")==0) return ThicknessPositiveEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"ThicknessResidual")==0) return ThicknessResidualEnum; 1126 if (strcmp(name,"ThicknessOld")==0) return ThicknessOldEnum; 1127 else if (strcmp(name,"ThicknessPositive")==0) return ThicknessPositiveEnum; 1128 else if (strcmp(name,"ThicknessResidual")==0) return ThicknessResidualEnum; 1127 1129 else if (strcmp(name,"TransientAccumulatedDeltaIceThickness")==0) return TransientAccumulatedDeltaIceThicknessEnum; 1128 1130 else if (strcmp(name,"Vel")==0) return VelEnum; … … 1152 1154 else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum; 1153 1155 else if (strcmp(name,"Waterheight")==0) return WaterheightEnum; 1154 else if (strcmp(name,"FrictionWaterPressure")==0) return FrictionWaterPressureEnum;1155 else if (strcmp(name,"FrictionWaterPressureNoise")==0) return FrictionWaterPressureNoiseEnum;1156 1156 else if (strcmp(name,"WeightsLevelsetObservation")==0) return WeightsLevelsetObservationEnum; 1157 1157 else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum; -
issm/trunk-jpl/src/m/classes/stochasticforcing.m
r26859 r27161 95 95 end 96 96 if(contains(field,'WaterPressure')) 97 98 99 error(' stochasticforcing field %s is only implemented for default friction', char(field));97 mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field)))); 98 if~(isequal(class(md.friction),char(mdname))) 99 error('md.friction does not agree with stochasticforcing field %s', char(field)); 100 100 end 101 if(md.friction.coupling~=0 && md.friction.coupling~=1 && md.friction.coupling~=2) 102 error('stochasticforcing field %s is only implemented for cases md.friction.coupling 0 or 1 or 2', char(field)); 103 end 104 if(any(md.friction.q==0)) 105 error('stochasticforcing field %s requires non-zero q exponent',char(field)); 106 end 101 if(strcmp(class(md.friction),'friction') || strcmp(class(md.friction),'frictionschoof')) 102 if(md.friction.coupling~=0 && md.friction.coupling~=1 && md.friction.coupling~=2) 103 error('stochasticforcing field %s is only implemented for cases md.friction.coupling 0 or 1 or 2', char(field)); 104 end 105 end 106 if(strcmp(class(md.friction),'friction')) 107 if(any(md.friction.q==0)) 108 error('stochasticforcing field %s requires non-zero q exponent',char(field)); 109 end 110 end 107 111 end 108 112 %Checking for specific dimensions … … 267 271 'FloatingMeltRate',... 268 272 'FrictionWaterPressure',... 273 'FrictionSchoofWaterPressure',... 269 274 'FrontalForcingsRignotAutoregression',... 270 275 'SMBautoregression',... … … 277 282 'basalforcings',... 278 283 'friction',... 284 'frictionschoof',... 279 285 'frontalforcingsrignotautoregression',... 280 286 'SMBautoregression',... -
issm/trunk-jpl/src/m/classes/stochasticforcing.py
r26905 r27161 106 106 mdname = structstoch[field] 107 107 if (type(md.friction).__name__ != mdname): 108 raise TypeError('stochasticforcing field {} is only implemented for default friction'.format(field)) 109 if md.friction.coupling not in[0, 1, 2]: 110 raise TypeError('stochasticforcing field {} is only implemented for cases md.friction.coupling 0 or 1 or 2'.format(field)) 111 if (np.any(md.friction.q == 0)): 112 raise TypeError('stochasticforcing field {} requires non-zero q exponent'.format(field)) 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'): 110 if md.friction.coupling not in[0, 1, 2]: 111 raise TypeError('stochasticforcing field {} is only implemented for cases md.friction.coupling 0 or 1 or 2'.format(field)) 112 if (type(md.friction).__name__=='friction'): 113 if (np.any(md.friction.q == 0)): 114 raise TypeError('stochasticforcing field {} requires non-zero q exponent'.format(field)) 113 115 114 116 # Checking for specific dimensions … … 232 234 'FloatingMeltRate': 'basalforcings', 233 235 'FrictionWaterPressure': 'friction', 236 'FrictionSchoofWaterPressure': 'frictionschoof', 234 237 'FrontalForcingsRignotAutoregression': 'frontalforcingsrignotautoregression', 235 238 'SMBautoregression': 'SMBautoregression',
Note:
See TracChangeset
for help on using the changeset viewer.