source: issm/oecreview/Archive/22819-23185/ISSM-23155-23156.diff

Last change on this file was 23186, checked in by Mathieu Morlighem, 7 years ago

CHG: added Archive/22819-23185

File size: 12.5 KB
  • ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

     
    450450        FrictionPressureAdjustedTemperatureEnum,
    451451        FrictionQEnum,
    452452        FrictionWaterLayerEnum,
    453         FrictionWatercolumnMaxEnum,
     453        HydrologyWatercolumnMaxEnum,
    454454        FrictionTillFrictionAngleEnum,
    455455        FrictionSedimentCompressibilityCoefficientEnum,
    456456        GeometryHydrostaticRatioEnum,
  • ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

     
    456456                case FrictionPressureAdjustedTemperatureEnum : return "FrictionPressureAdjustedTemperature";
    457457                case FrictionQEnum : return "FrictionQ";
    458458                case FrictionWaterLayerEnum : return "FrictionWaterLayer";
    459                 case FrictionWatercolumnMaxEnum : return "FrictionWatercolumnMax";
     459                case HydrologyWatercolumnMaxEnum : return "HydrologyWatercolumnMax";
    460460                case FrictionTillFrictionAngleEnum : return "FrictionTillFrictionAngle";
    461461                case FrictionSedimentCompressibilityCoefficientEnum : return "FrictionSedimentCompressibilityCoefficient";
    462462                case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio";
  • ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

     
    465465              else if (strcmp(name,"FrictionPressureAdjustedTemperature")==0) return FrictionPressureAdjustedTemperatureEnum;
    466466              else if (strcmp(name,"FrictionQ")==0) return FrictionQEnum;
    467467              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;
    469469              else if (strcmp(name,"FrictionTillFrictionAngle")==0) return FrictionTillFrictionAngleEnum;
    470470              else if (strcmp(name,"FrictionSedimentCompressibilityCoefficient")==0) return FrictionSedimentCompressibilityCoefficientEnum;
    471471              else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
  • ../trunk-jpl/src/c/classes/Loads/Friction.cpp

     
    709709        element->parameters->FindParam(&e0,FrictionVoidRatioEnum);
    710710        element->GetInputValue(&Cc,gauss,FrictionSedimentCompressibilityCoefficientEnum);
    711711        element->GetInputValue(&W,gauss,WatercolumnEnum);
    712         element->GetInputValue(&Wmax,gauss,FrictionWatercolumnMaxEnum);
     712        element->GetInputValue(&Wmax,gauss,HydrologyWatercolumnMaxEnum);
    713713
    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.;
    727717
    728718        N = delta*P0*pow(10.,(e0/Cc)*(1.-W/Wmax));
    729719
     
    745735        IssmDouble u0,q;
    746736        element->parameters->FindParam(&u0,FrictionThresholdSpeedEnum);
    747737        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));
    749739
    750740        /*Final checks in debuging mode*/
    751741        _assert_(!xIsNan<IssmDouble>(alpha2));
  • ../trunk-jpl/src/c/analyses/HydrologyPismAnalysis.cpp

     
    3535        iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
    3636        iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
    3737        iomodel->FetchDataToInput(elements,"md.hydrology.drainage_rate",HydrologyDrainageRateEnum);
     38        iomodel->FetchDataToInput(elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);
    3839        iomodel->FetchDataToInput(elements,"md.initialization.watercolumn",WatercolumnEnum,0.);
    3940}/*}}}*/
    4041void HydrologyPismAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
     
    114115        IssmDouble* watercolumn  = xNew<IssmDouble>(numvertices);
    115116        IssmDouble* drainagerate = xNew<IssmDouble>(numvertices);
    116117        IssmDouble* meltingrate  = xNew<IssmDouble>(numvertices);
    117 //      IssmDouble* watercolumn_max  = xNew<IssmDouble>(numvertices);
     118        IssmDouble* watercolumn_max  = xNew<IssmDouble>(numvertices);
    118119        element->GetInputListOnVertices(&watercolumn[0],WatercolumnEnum);
    119120        element->GetInputListOnVertices(&drainagerate[0],HydrologyDrainageRateEnum);
    120121        element->GetInputListOnVertices(&meltingrate[0],BasalforcingsGroundediceMeltingRateEnum);
    121 //      element->GetInputListOnVertices(&watercolumn_max[0],FrictionWatercolumnMaxEnum);
     122        element->GetInputListOnVertices(&watercolumn_max[0],HydrologyWatercolumnMaxEnum);
    122123
    123124        /*Add water*/
    124 //    /*Check that water column height is within 0 and upper bound, correct if needed*/
    125125        for(int i=0;i<numvertices;i++){
    126126                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.;
    139130        }
    140131
    141132        /* Divide by connectivity, add degree of channelization as an input */
     
    143134
    144135        /*Clean up and return*/
    145136        xDelete<IssmDouble>(watercolumn);
     137        xDelete<IssmDouble>(meltingrate);
     138        xDelete<IssmDouble>(watercolumn_max);
    146139        xDelete<IssmDouble>(drainagerate);
    147140}/*}}}*/
  • ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

     
    847847                case 10:
    848848                        iomodel->FetchDataToInput(elements,"md.friction.till_friction_angle",FrictionTillFrictionAngleEnum);
    849849                        iomodel->FetchDataToInput(elements,"md.friction.sediment_compressibility_coefficient",FrictionSedimentCompressibilityCoefficientEnum);
    850                         iomodel->FetchDataToInput(elements,"md.friction.watercolumn_max",FrictionWatercolumnMaxEnum);
    851850                        break;
    852851                default:
    853852                        _error_("friction law "<< frictionlaw <<" not supported");
  • ../trunk-jpl/src/m/classes/hydrologypism.m

     
    55
    66classdef hydrologypism
    77        properties (SetAccess=public)
    8                 drainage_rate = NaN;
     8                drainage_rate   = NaN;
     9                watercolumn_max = NaN;
    910        end
    1011        methods
    1112                function self = extrude(self,md) % {{{
     
    3536                        end
    3637
    3738                        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]);
    3840                end % }}}
    3941                function disp(self) % {{{
    4042                        disp(sprintf('   hydrologypism solution parameters:'));
    4143                        fielddisplay(self,'drainage_rate','fixed drainage rate [mm/yr]');
     44                        fielddisplay(self,'watercolumn_max','maximum water column height [m], recommended default: 2 m');
    4245                end % }}}
    4346                function marshall(self,prefix,md,fid) % {{{
    4447
     
    4649
    4750                        WriteData(fid,prefix,'name','md.hydrology.model','data',4,'format','Integer');
    4851                        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);
    4953                        WriteData(fid,prefix,'data',{'Watercolumn'},'name','md.hydrology.requested_outputs','format','StringArray');
    5054                end % }}}
    5155        end
  • ../trunk-jpl/src/m/classes/frictionpism.m

     
    1111                void_ratio                           = 0.;
    1212                till_friction_angle                  = NaN;
    1313                sediment_compressibility_coefficient = NaN;
    14                 watercolumn_max                      = NaN;
    1514        end
    1615        methods
    1716                function self = extrude(self,md) % {{{
     
    4847                        md = checkfield(md,'fieldname','friction.void_ratio','numel',[1],'>',0,'<',1,'NaN',1,'Inf',1);
    4948                        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
    5049                        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]);
    5250                end % }}}
    5351                function disp(self) % {{{
    5452                        disp(sprintf('Basal shear stress parameters for the PISM friction law (See Aschwanden et al. 2016 for more details)'));
     
    5856                        fielddisplay(self,'void_ratio','void ratio at a reference effective pressure [dimensionless]');
    5957                        fielddisplay(self,'till_friction_angle','till friction angle [deg], recommended default: 30 deg');
    6058                        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');
    6259                end % }}}
    6360                function marshall(self,prefix,md,fid) % {{{
    6461                        yts=md.constants.yts;
     
    7067                        WriteData(fid,prefix,'class','friction','object',self,'fieldname','void_ratio','format','Double');
    7168                        WriteData(fid,prefix,'class','friction','object',self,'fieldname','till_friction_angle','format','DoubleMat','mattype',1);
    7269                        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);
    7470                end % }}}
    7571                function savemodeljs(self,fid,modelname) % {{{
    7672         error('not implemented yet!');
  • ../trunk-jpl/test/NightlyRun/test612.m

     
    66
    77%Hydrology
    88md.hydrology = hydrologypism();
    9 md.hydrology.drainage_rate      = 0.001*ones(md.mesh.numberofvertices,1);
     9md.hydrology.drainage_rate  = 0.001*ones(md.mesh.numberofvertices,1);
     10md.hydrology.watercolumn_max=2*ones(md.mesh.numberofvertices,1);
    1011md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
    1112md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
    1213md.basalforcings.groundedice_melting_rate = [1:md.mesh.numberofvertices]';
     
    1516md.friction=frictionpism();
    1617md.friction.till_friction_angle=30*ones(md.mesh.numberofvertices,1);
    1718md.friction.sediment_compressibility_coefficient=0.12*ones(md.mesh.numberofvertices,1);
    18 md.friction.watercolumn_max=2*ones(md.mesh.numberofvertices,1);
    1919
    2020md.transient.ishydrology        = 1;
    2121md.transient.issmb              = 0;
Note: See TracBrowser for help on using the repository browser.