source:
issm/oecreview/Archive/22819-23185/ISSM-23155-23156.diff
Last change on this file was 23186, checked in by , 7 years ago | |
---|---|
File size: 12.5 KB |
-
../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
450 450 FrictionPressureAdjustedTemperatureEnum, 451 451 FrictionQEnum, 452 452 FrictionWaterLayerEnum, 453 FrictionWatercolumnMaxEnum,453 HydrologyWatercolumnMaxEnum, 454 454 FrictionTillFrictionAngleEnum, 455 455 FrictionSedimentCompressibilityCoefficientEnum, 456 456 GeometryHydrostaticRatioEnum, -
../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
456 456 case FrictionPressureAdjustedTemperatureEnum : return "FrictionPressureAdjustedTemperature"; 457 457 case FrictionQEnum : return "FrictionQ"; 458 458 case FrictionWaterLayerEnum : return "FrictionWaterLayer"; 459 case FrictionWatercolumnMaxEnum : return "FrictionWatercolumnMax";459 case HydrologyWatercolumnMaxEnum : return "HydrologyWatercolumnMax"; 460 460 case FrictionTillFrictionAngleEnum : return "FrictionTillFrictionAngle"; 461 461 case FrictionSedimentCompressibilityCoefficientEnum : return "FrictionSedimentCompressibilityCoefficient"; 462 462 case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio"; -
../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
465 465 else if (strcmp(name,"FrictionPressureAdjustedTemperature")==0) return FrictionPressureAdjustedTemperatureEnum; 466 466 else if (strcmp(name,"FrictionQ")==0) return FrictionQEnum; 467 467 else if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum; 468 else if (strcmp(name," FrictionWatercolumnMax")==0) return FrictionWatercolumnMaxEnum;468 else if (strcmp(name,"HydrologyWatercolumnMax")==0) return HydrologyWatercolumnMaxEnum; 469 469 else if (strcmp(name,"FrictionTillFrictionAngle")==0) return FrictionTillFrictionAngleEnum; 470 470 else if (strcmp(name,"FrictionSedimentCompressibilityCoefficient")==0) return FrictionSedimentCompressibilityCoefficientEnum; 471 471 else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum; -
../trunk-jpl/src/c/classes/Loads/Friction.cpp
709 709 element->parameters->FindParam(&e0,FrictionVoidRatioEnum); 710 710 element->GetInputValue(&Cc,gauss,FrictionSedimentCompressibilityCoefficientEnum); 711 711 element->GetInputValue(&W,gauss,WatercolumnEnum); 712 element->GetInputValue(&Wmax,gauss, FrictionWatercolumnMaxEnum);712 element->GetInputValue(&Wmax,gauss,HydrologyWatercolumnMaxEnum); 713 713 714 // /*Check that water column height is within 0 and upper bound, correct if needed*/ 715 // // if watercolumn height is higher than the maximum allowed height, set height to upper bound 716 // if(W>Wmax){ 717 // W=Wmax; 718 // } 719 // // if watercolumn height is negative (shouldn't happen), set it to 0 720 // if(W<0){ 721 // W=0; 722 // } 723 // // if watercolumn height is within 0 and upper bound, nothing to be done 724 // else{ 725 // //do nothing 726 // } 714 /*Check that water column height is within 0 and upper bound, correct if needed*/ 715 if(W>Wmax) W=Wmax; 716 if(W<0) W=0.; 727 717 728 718 N = delta*P0*pow(10.,(e0/Cc)*(1.-W/Wmax)); 729 719 … … 745 735 IssmDouble u0,q; 746 736 element->parameters->FindParam(&u0,FrictionThresholdSpeedEnum); 747 737 element->parameters->FindParam(&q,FrictionPseudoplasticityExponentEnum); 748 IssmDouble alpha2 = tau_c/(pow(ub ,1.-q)*pow(u0,q));738 IssmDouble alpha2 = tau_c/(pow(ub+1.e-10,1.-q)*pow(u0,q)); 749 739 750 740 /*Final checks in debuging mode*/ 751 741 _assert_(!xIsNan<IssmDouble>(alpha2)); -
../trunk-jpl/src/c/analyses/HydrologyPismAnalysis.cpp
35 35 iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 36 36 iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 37 37 iomodel->FetchDataToInput(elements,"md.hydrology.drainage_rate",HydrologyDrainageRateEnum); 38 iomodel->FetchDataToInput(elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum); 38 39 iomodel->FetchDataToInput(elements,"md.initialization.watercolumn",WatercolumnEnum,0.); 39 40 }/*}}}*/ 40 41 void HydrologyPismAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ … … 114 115 IssmDouble* watercolumn = xNew<IssmDouble>(numvertices); 115 116 IssmDouble* drainagerate = xNew<IssmDouble>(numvertices); 116 117 IssmDouble* meltingrate = xNew<IssmDouble>(numvertices); 117 //IssmDouble* watercolumn_max = xNew<IssmDouble>(numvertices);118 IssmDouble* watercolumn_max = xNew<IssmDouble>(numvertices); 118 119 element->GetInputListOnVertices(&watercolumn[0],WatercolumnEnum); 119 120 element->GetInputListOnVertices(&drainagerate[0],HydrologyDrainageRateEnum); 120 121 element->GetInputListOnVertices(&meltingrate[0],BasalforcingsGroundediceMeltingRateEnum); 121 // element->GetInputListOnVertices(&watercolumn_max[0],FrictionWatercolumnMaxEnum);122 element->GetInputListOnVertices(&watercolumn_max[0],HydrologyWatercolumnMaxEnum); 122 123 123 124 /*Add water*/ 124 // /*Check that water column height is within 0 and upper bound, correct if needed*/125 125 for(int i=0;i<numvertices;i++){ 126 126 watercolumn[i] += (meltingrate[i]/rho_ice*rho_water-drainagerate[i])*dt; 127 // // if watercolumn height is higher than the maximum allowed height, set height to upper bound 128 // if(watercolumn[i]>watercolumn_max[i]){ 129 // watercolumn[i]=watercolumn_max[i]; 130 // } 131 // // if watercolumn height is negative (shouldn't happen), set it to 0 132 // if(watercolumn[i]<0){ 133 // watercolumn[i]=0; 134 // } 135 // // if watercolumn height is within 0 and upper bound, nothing to be done 136 // else{ 137 // //do nothing 138 // } 127 /*Check that water column height is within 0 and upper bound, correct if needed*/ 128 if(watercolumn[i]>watercolumn_max[i]) watercolumn[i]=watercolumn_max[i]; 129 if(watercolumn[i]<0) watercolumn[i]=0.; 139 130 } 140 131 141 132 /* Divide by connectivity, add degree of channelization as an input */ … … 143 134 144 135 /*Clean up and return*/ 145 136 xDelete<IssmDouble>(watercolumn); 137 xDelete<IssmDouble>(meltingrate); 138 xDelete<IssmDouble>(watercolumn_max); 146 139 xDelete<IssmDouble>(drainagerate); 147 140 }/*}}}*/ -
../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
847 847 case 10: 848 848 iomodel->FetchDataToInput(elements,"md.friction.till_friction_angle",FrictionTillFrictionAngleEnum); 849 849 iomodel->FetchDataToInput(elements,"md.friction.sediment_compressibility_coefficient",FrictionSedimentCompressibilityCoefficientEnum); 850 iomodel->FetchDataToInput(elements,"md.friction.watercolumn_max",FrictionWatercolumnMaxEnum);851 850 break; 852 851 default: 853 852 _error_("friction law "<< frictionlaw <<" not supported"); -
../trunk-jpl/src/m/classes/hydrologypism.m
5 5 6 6 classdef hydrologypism 7 7 properties (SetAccess=public) 8 drainage_rate = NaN; 8 drainage_rate = NaN; 9 watercolumn_max = NaN; 9 10 end 10 11 methods 11 12 function self = extrude(self,md) % {{{ … … 35 36 end 36 37 37 38 md = checkfield(md,'fieldname','hydrology.drainage_rate','Inf',1,'NaN',1,'>=',0,'size',[md.mesh.numberofvertices 1]); 39 md = checkfield(md,'fieldname','friction.watercolumn_max','NaN',1,'Inf',1,'>',0.,'size',[md.mesh.numberofvertices 1]); 38 40 end % }}} 39 41 function disp(self) % {{{ 40 42 disp(sprintf(' hydrologypism solution parameters:')); 41 43 fielddisplay(self,'drainage_rate','fixed drainage rate [mm/yr]'); 44 fielddisplay(self,'watercolumn_max','maximum water column height [m], recommended default: 2 m'); 42 45 end % }}} 43 46 function marshall(self,prefix,md,fid) % {{{ 44 47 … … 46 49 47 50 WriteData(fid,prefix,'name','md.hydrology.model','data',4,'format','Integer'); 48 51 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','drainage_rate','format','DoubleMat','mattype',1,'scale',1./(1000.*yts)); %from mm/yr to m/s 52 WriteData(fid,prefix,'class','hydrology','object',self,'fieldname','watercolumn_max','format','DoubleMat','mattype',1); 49 53 WriteData(fid,prefix,'data',{'Watercolumn'},'name','md.hydrology.requested_outputs','format','StringArray'); 50 54 end % }}} 51 55 end -
../trunk-jpl/src/m/classes/frictionpism.m
11 11 void_ratio = 0.; 12 12 till_friction_angle = NaN; 13 13 sediment_compressibility_coefficient = NaN; 14 watercolumn_max = NaN;15 14 end 16 15 methods 17 16 function self = extrude(self,md) % {{{ … … 48 47 md = checkfield(md,'fieldname','friction.void_ratio','numel',[1],'>',0,'<',1,'NaN',1,'Inf',1); 49 48 md = checkfield(md,'fieldname','friction.till_friction_angle','NaN',1,'Inf',1,'<',360.,'>',0.,'size',[md.mesh.numberofvertices 1]); %User should give angle in degrees, Matlab calculates in rad 50 49 md = checkfield(md,'fieldname','friction.sediment_compressibility_coefficient','NaN',1,'Inf',1,'<',1.,'>',0.,'size',[md.mesh.numberofvertices 1]); 51 md = checkfield(md,'fieldname','friction.watercolumn_max','NaN',1,'Inf',1,'>',0.,'size',[md.mesh.numberofvertices 1]);52 50 end % }}} 53 51 function disp(self) % {{{ 54 52 disp(sprintf('Basal shear stress parameters for the PISM friction law (See Aschwanden et al. 2016 for more details)')); … … 58 56 fielddisplay(self,'void_ratio','void ratio at a reference effective pressure [dimensionless]'); 59 57 fielddisplay(self,'till_friction_angle','till friction angle [deg], recommended default: 30 deg'); 60 58 fielddisplay(self,'sediment_compressibility_coefficient','coefficient of compressibility of the sediment [dimensionless], recommended default: 0.12'); 61 fielddisplay(self,'watercolumn_max','maximum water column height [m], recommended default: 2 m');62 59 end % }}} 63 60 function marshall(self,prefix,md,fid) % {{{ 64 61 yts=md.constants.yts; … … 70 67 WriteData(fid,prefix,'class','friction','object',self,'fieldname','void_ratio','format','Double'); 71 68 WriteData(fid,prefix,'class','friction','object',self,'fieldname','till_friction_angle','format','DoubleMat','mattype',1); 72 69 WriteData(fid,prefix,'class','friction','object',self,'fieldname','sediment_compressibility_coefficient','format','DoubleMat','mattype',1); 73 WriteData(fid,prefix,'class','friction','object',self,'fieldname','watercolumn_max','format','DoubleMat','mattype',1);74 70 end % }}} 75 71 function savemodeljs(self,fid,modelname) % {{{ 76 72 error('not implemented yet!'); -
../trunk-jpl/test/NightlyRun/test612.m
6 6 7 7 %Hydrology 8 8 md.hydrology = hydrologypism(); 9 md.hydrology.drainage_rate = 0.001*ones(md.mesh.numberofvertices,1); 9 md.hydrology.drainage_rate = 0.001*ones(md.mesh.numberofvertices,1); 10 md.hydrology.watercolumn_max=2*ones(md.mesh.numberofvertices,1); 10 11 md.initialization.pressure=zeros(md.mesh.numberofvertices,1); 11 12 md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1); 12 13 md.basalforcings.groundedice_melting_rate = [1:md.mesh.numberofvertices]'; … … 15 16 md.friction=frictionpism(); 16 17 md.friction.till_friction_angle=30*ones(md.mesh.numberofvertices,1); 17 18 md.friction.sediment_compressibility_coefficient=0.12*ones(md.mesh.numberofvertices,1); 18 md.friction.watercolumn_max=2*ones(md.mesh.numberofvertices,1);19 19 20 20 md.transient.ishydrology = 1; 21 21 md.transient.issmb = 0;
Note:
See TracBrowser
for help on using the repository browser.