Changeset 21551
- Timestamp:
- 02/10/17 13:30:59 (8 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r21448 r21551 823 823 iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum); 824 824 break; 825 case 9: 826 iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum); 827 iomodel->FetchDataToInput(elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum); 828 break; 825 829 default: 826 830 _error_("not supported"); -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r21550 r21551 2033 2033 this->inputs->AddInput(new PentaInput(TemperatureEnum,&yearlytemperatures[0],P1Enum)); 2034 2034 2035 /*Convert that to enthalpy for the enthalpy model*/ 2036 IssmDouble enthalpy[6]; 2037 GetInputListOnVertices(&enthalpy[0],EnthalpyEnum); 2038 ThermalToEnthalpy(&enthalpy[3],yearlytemperatures[3],0.,0.); 2039 ThermalToEnthalpy(&enthalpy[4],yearlytemperatures[3],0.,0.); 2040 ThermalToEnthalpy(&enthalpy[5],yearlytemperatures[3],0.,0.); 2041 this->inputs->AddInput(new PentaInput(EnthalpyEnum,&enthalpy[0],P1Enum)); 2035 bool isenthalpy; 2036 this->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum); 2037 if(isenthalpy){ 2038 /*Convert that to enthalpy for the enthalpy model*/ 2039 IssmDouble enthalpy[6]; 2040 GetInputListOnVertices(&enthalpy[0],EnthalpyEnum); 2041 ThermalToEnthalpy(&enthalpy[3],yearlytemperatures[3],0.,0.); 2042 ThermalToEnthalpy(&enthalpy[4],yearlytemperatures[3],0.,0.); 2043 ThermalToEnthalpy(&enthalpy[5],yearlytemperatures[3],0.,0.); 2044 this->inputs->AddInput(new PentaInput(EnthalpyEnum,&enthalpy[0],P1Enum)); 2045 } 2042 2046 } 2043 2047 this->inputs->AddInput(new PentaInput(SmbMassBalanceEnum,&agd[0],P1Enum)); -
issm/trunk-jpl/src/c/classes/Loads/Friction.cpp
r20827 r21551 246 246 case 8: 247 247 GetAlpha2Sommers(palpha2,gauss); 248 break; 249 case 9: 250 GetAlpha2Josh(palpha2,gauss); 248 251 break; 249 252 default: … … 463 466 *palpha2=alpha2; 464 467 }/*}}}*/ 468 void Friction::GetAlpha2Josh(IssmDouble* palpha2, Gauss* gauss){/*{{{*/ 469 /*Here, we want to parameterize the friction as a function of temperature 470 * 471 * alpha2 = alpha2_viscous * 1/f(T) 472 * 473 * where f(T) = exp((T-Tpmp)/gamma) 474 */ 475 476 /*Intermediaries: */ 477 IssmDouble T,Tpmp,deltaT,deltaTref,pressure; 478 IssmDouble alpha2,time,gamma; 479 const IssmDouble yts = 365*24*3600.; 480 481 /*Get viscous part*/ 482 this->GetAlpha2Viscous(&alpha2,gauss); 483 484 /*Get delta Refs*/ 485 element->GetInputValue(&deltaTref,gauss,FrictionPressureAdjustedTemperatureEnum); 486 487 /*Compute delta T*/ 488 element->GetInputValue(&T,gauss,TemperatureEnum); 489 element->GetInputValue(&pressure,gauss,PressureEnum); 490 Tpmp = element->TMeltingPoint(pressure); 491 deltaT = T-Tpmp; 492 493 /*Compute gamma*/ 494 element->parameters->FindParam(&time,TimeEnum); 495 if(time<25e3*yts){ 496 gamma = 10.; 497 } 498 else{ 499 gamma = 5.; 500 } 501 gamma = 5.; 502 503 /*Compute scaling parameter*/ 504 alpha2 = alpha2 * exp((deltaTref - deltaT)/(2*gamma)); 505 506 /*Assign output pointers:*/ 507 *palpha2=alpha2; 508 }/*}}}*/ 465 509 void Friction::GetAlpha2Viscous(IssmDouble* palpha2, Gauss* gauss){/*{{{*/ 466 510 -
issm/trunk-jpl/src/c/classes/Loads/Friction.h
r20827 r21551 36 36 void GetAlpha2Coulomb(IssmDouble* palpha2,Gauss* gauss); 37 37 void GetAlpha2Hydro(IssmDouble* palpha2,Gauss* gauss); 38 void GetAlpha2Josh(IssmDouble* palpha2,Gauss* gauss); 38 39 void GetAlpha2Sommers(IssmDouble* palpha2,Gauss* gauss); 39 40 void GetAlpha2Temp(IssmDouble* palpha2,Gauss* gauss); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r21529 r21551 109 109 FrictionCoefficientEnum, 110 110 FrictionCoefficientcoulombEnum, 111 FrictionPressureAdjustedTemperatureEnum, 111 112 FrictionPEnum, 112 113 FrictionQEnum, … … 274 275 MaterialsEarthDensityEnum, 275 276 MeshAverageVertexConnectivityEnum, 277 MeshXEnum, 278 MeshYEnum, 279 MeshZEnum, 276 280 MeshElementsEnum, 277 281 MeshNumberofelementsEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r21529 r21551 115 115 case FrictionCoefficientEnum : return "FrictionCoefficient"; 116 116 case FrictionCoefficientcoulombEnum : return "FrictionCoefficientcoulomb"; 117 case FrictionPressureAdjustedTemperatureEnum : return "FrictionPressureAdjustedTemperature"; 117 118 case FrictionPEnum : return "FrictionP"; 118 119 case FrictionQEnum : return "FrictionQ"; … … 280 281 case MaterialsEarthDensityEnum : return "MaterialsEarthDensity"; 281 282 case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity"; 283 case MeshXEnum : return "MeshX"; 284 case MeshYEnum : return "MeshY"; 285 case MeshZEnum : return "MeshZ"; 282 286 case MeshElementsEnum : return "MeshElements"; 283 287 case MeshNumberofelementsEnum : return "MeshNumberofelements"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r21529 r21551 115 115 else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum; 116 116 else if (strcmp(name,"FrictionCoefficientcoulomb")==0) return FrictionCoefficientcoulombEnum; 117 else if (strcmp(name,"FrictionPressureAdjustedTemperature")==0) return FrictionPressureAdjustedTemperatureEnum; 117 118 else if (strcmp(name,"FrictionP")==0) return FrictionPEnum; 118 119 else if (strcmp(name,"FrictionQ")==0) return FrictionQEnum; … … 136 137 else if (strcmp(name,"EplHead")==0) return EplHeadEnum; 137 138 else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum; 138 else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;139 139 else stage=2; 140 140 } 141 141 if(stage==2){ 142 if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum; 142 if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum; 143 else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum; 143 144 else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum; 144 145 else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum; … … 259 260 else if (strcmp(name,"CalvingDev")==0) return CalvingDevEnum; 260 261 else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum; 261 else if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum; 265 if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum; 266 else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum; 266 267 else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum; 267 268 else if (strcmp(name,"CalvingdevCoeff")==0) return CalvingdevCoeffEnum; … … 286 287 else if (strcmp(name,"MaterialsEarthDensity")==0) return MaterialsEarthDensityEnum; 287 288 else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum; 289 else if (strcmp(name,"MeshX")==0) return MeshXEnum; 290 else if (strcmp(name,"MeshY")==0) return MeshYEnum; 291 else if (strcmp(name,"MeshZ")==0) return MeshZEnum; 288 292 else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum; 289 293 else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum; … … 379 383 else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum; 380 384 else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum; 381 else if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum; 382 389 else if (strcmp(name,"SmbGspini")==0) return SmbGspiniEnum; 383 390 else if (strcmp(name,"SmbECini")==0) return SmbECiniEnum; 384 391 else if (strcmp(name,"SmbWini")==0) return SmbWiniEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"SmbAini")==0) return SmbAiniEnum; 392 else if (strcmp(name,"SmbAini")==0) return SmbAiniEnum; 389 393 else if (strcmp(name,"SmbTini")==0) return SmbTiniEnum; 390 394 else if (strcmp(name,"SmbSizeini")==0) return SmbSizeiniEnum; … … 502 506 else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum; 503 507 else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum; 504 else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum; 505 512 else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum; 506 513 else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum; 507 514 else if (strcmp(name,"Temperature")==0) return TemperatureEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum; 515 else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum; 512 516 else if (strcmp(name,"TemperaturePDD")==0) return TemperaturePDDEnum; 513 517 else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum; … … 625 629 else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum; 626 630 else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum; 627 else if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum; 628 635 else if (strcmp(name,"Outputdefinition37")==0) return Outputdefinition37Enum; 629 636 else if (strcmp(name,"Outputdefinition38")==0) return Outputdefinition38Enum; 630 637 else if (strcmp(name,"Outputdefinition39")==0) return Outputdefinition39Enum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"Outputdefinition40")==0) return Outputdefinition40Enum; 638 else if (strcmp(name,"Outputdefinition40")==0) return Outputdefinition40Enum; 635 639 else if (strcmp(name,"Outputdefinition41")==0) return Outputdefinition41Enum; 636 640 else if (strcmp(name,"Outputdefinition42")==0) return Outputdefinition42Enum; … … 748 752 else if (strcmp(name,"Dense")==0) return DenseEnum; 749 753 else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum; 750 else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum; 751 758 else if (strcmp(name,"Seq")==0) return SeqEnum; 752 759 else if (strcmp(name,"Mpi")==0) return MpiEnum; 753 760 else if (strcmp(name,"Mumps")==0) return MumpsEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"Gsl")==0) return GslEnum; 761 else if (strcmp(name,"Gsl")==0) return GslEnum; 758 762 else if (strcmp(name,"Cuffey")==0) return CuffeyEnum; 759 763 else if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum; … … 871 875 else if (strcmp(name,"OptionCell")==0) return OptionCellEnum; 872 876 else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum; 873 else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum; 874 881 else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum; 875 882 else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum; 876 883 else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum; 884 else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum; 881 885 else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum; 882 886 else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum; … … 994 998 else if (strcmp(name,"Water")==0) return WaterEnum; 995 999 else if (strcmp(name,"DataSet")==0) return DataSetEnum; 996 else if (strcmp(name,"Constraints")==0) return ConstraintsEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"Constraints")==0) return ConstraintsEnum; 997 1004 else if (strcmp(name,"Loads")==0) return LoadsEnum; 998 1005 else if (strcmp(name,"Materials")==0) return MaterialsEnum; 999 1006 else if (strcmp(name,"Nodes")==0) return NodesEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"Contours")==0) return ContoursEnum; 1007 else if (strcmp(name,"Contours")==0) return ContoursEnum; 1004 1008 else if (strcmp(name,"Parameters")==0) return ParametersEnum; 1005 1009 else if (strcmp(name,"Vertices")==0) return VerticesEnum; -
issm/trunk-jpl/src/m/classes/frictionjosh.m
r21543 r21551 7 7 properties (SetAccess=public) 8 8 coefficient = NaN; 9 temperature = NaN;9 pressure_adjusted_temperature = NaN; 10 10 end 11 11 methods 12 12 function self = extrude(self,md) % {{{ 13 13 self.coefficient=project3d(md,'vector',self.coefficient,'type','node','layer',1); 14 self. temperature=project3d(md,'vector',self.temperature,'type','node','layer',1);14 self.pressure_adjusted_temperature=project3d(md,'vector',self.pressure_adjusted_temperature,'type','node','layer',1); 15 15 end % }}} 16 16 function self = frictionjosh(varargin) % {{{ … … 32 32 if ~ismember('StressbalanceAnalysis',analyses) & ~ismember('ThermalAnalysis',analyses), return; end 33 33 34 md = checkfield(md,'fieldname','friction.coefficient',' timeseries',1,'NaN',1,'Inf',1);35 md = checkfield(md,'fieldname','friction. temperature','timeseries',1,'NaN',1,'Inf',1);34 md = checkfield(md,'fieldname','friction.coefficient','NaN',1,'Inf',1); 35 md = checkfield(md,'fieldname','friction.pressure_adjusted_temperature','NaN',1,'Inf',1); 36 36 37 37 %Check that temperature is provided … … 41 41 disp(sprintf('Basal shear stress parameters: tau_b = coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b * 1/f(T)\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p)')); 42 42 fielddisplay(self,'coefficient','friction coefficient [SI]'); 43 fielddisplay(self,' temperature','friction temperature[K]');43 fielddisplay(self,'pressure_adjusted_temperature','friction pressure_adjusted_temperature (T - Tpmp) [K]'); 44 44 end % }}} 45 45 function marshall(self,prefix,md,fid) % {{{ … … 47 47 WriteData(fid,prefix,'name','md.friction.law','data',9,'format','Integer'); 48 48 WriteData(fid,prefix,'class','friction','object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 49 WriteData(fid,prefix,'class','friction','object',self,'fieldname',' temperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);49 WriteData(fid,prefix,'class','friction','object',self,'fieldname','pressure_adjusted_temperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 50 50 end % }}} 51 51 end
Note:
See TracChangeset
for help on using the changeset viewer.