Changeset 18732


Ignore:
Timestamp:
11/04/14 14:13:02 (10 years ago)
Author:
Mathieu Morlighem
Message:

NEW: added new friction law based on Tpmp, request from martin.rueckamp@…

Location:
issm/trunk-jpl/src
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp

    r18696 r18732  
    2626        if(numoutputs)parameters->AddObject(new StringArrayParam(ThermalRequestedOutputsEnum,requestedoutputs,numoutputs));
    2727        iomodel->DeleteData(&requestedoutputs,numoutputs,ThermalRequestedOutputsEnum);
     28
     29        /*Deal with friction parameters*/
     30        int frictionlaw;
     31        iomodel->Constant(&frictionlaw,FrictionLawEnum);
     32        if(frictionlaw==4) parameters->AddObject(iomodel->CopyConstantObject(FrictionGammaEnum));
    2833}/*}}}*/
    2934void EnthalpyAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
     
    95100                        iomodel->FetchDataToInput(elements,FrictionCEnum);
    96101                        iomodel->FetchDataToInput(elements,FrictionMEnum);
     102                        break;
     103                case 4:
     104                        iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
     105                        iomodel->FetchDataToInput(elements,FrictionPEnum);
     106                        iomodel->FetchDataToInput(elements,FrictionQEnum);
     107                        iomodel->FetchDataToInput(elements,PressureEnum);
     108                        iomodel->FetchDataToInput(elements,TemperatureEnum);
    97109                        break;
    98110                default:
  • issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r18570 r18732  
    130130        iomodel->DeleteData(&requestedoutputs,numoutputs,StressbalanceRequestedOutputsEnum);
    131131
     132        /*Deal with friction parameters*/
     133        int frictionlaw;
     134        iomodel->Constant(&frictionlaw,FrictionLawEnum);
     135        if(frictionlaw==4) parameters->AddObject(iomodel->CopyConstantObject(FrictionGammaEnum));
     136
    132137}/*}}}*/
    133138void StressbalanceAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
     
    261266                        iomodel->FetchDataToInput(elements,FrictionCEnum);
    262267                        iomodel->FetchDataToInput(elements,FrictionMEnum);
     268                        break;
     269                case 4:
     270                        iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
     271                        iomodel->FetchDataToInput(elements,FrictionPEnum);
     272                        iomodel->FetchDataToInput(elements,FrictionQEnum);
     273                        iomodel->FetchDataToInput(elements,PressureEnum);
     274                        iomodel->FetchDataToInput(elements,TemperatureEnum);
    263275                        break;
    264276                default:
  • issm/trunk-jpl/src/c/classes/Loads/Friction.cpp

    r18511 r18732  
    4848                case 2:
    4949                        GetAlpha2Weertman(palpha2,gauss);
    50           case 3:
     50                        break;
     51                case 3:
    5152                        GetAlpha2Hydro(palpha2,gauss);
     53                        break;
     54                case 4:
     55                        GetAlpha2Temp(palpha2,gauss);
    5256                        break;
    5357          default:
     
    219223        *palpha2=alpha2;
    220224}/*}}}*/
     225void Friction::GetAlpha2Temp(IssmDouble* palpha2, Gauss* gauss){/*{{{*/
     226        /*Here, we want to parameterize the friction as a function of temperature
     227         *
     228         * alpha2 = alpha2_viscous * f(T)
     229         *
     230         * where f(T) = exp((T-Tpmp)/gamma)
     231         */
     232
     233        /*Intermediaries: */
     234        IssmDouble  f,T,pressure,Tpmp,gamma;
     235        IssmDouble  alpha2;
     236
     237        /*Get viscous part*/
     238        this->GetAlpha2Viscous(&alpha2,gauss);
     239
     240        /*Get pressure melting point (Tpmp) for local pressure and get current temperature*/
     241        element->GetInputValue(&T,gauss,TemperatureEnum);
     242        element->GetInputValue(&pressure,gauss,PressureEnum);
     243        Tpmp = element->TMeltingPoint(pressure);
     244
     245        /*Compute scaling parameter*/
     246        element->parameters->FindParam(&gamma,FrictionGammaEnum);
     247        alpha2 = alpha2*exp((T-Tpmp)/gamma);
     248
     249        /*Assign output pointers:*/
     250        *palpha2=alpha2;
     251}/*}}}*/
    221252void Friction::GetAlphaComplement(IssmDouble* palpha_complement, Gauss* gauss){/*{{{*/
    222253
  • issm/trunk-jpl/src/c/classes/Loads/Friction.h

    r18511 r18732  
    3333                void  GetAlpha2Weertman(IssmDouble* palpha2,Gauss* gauss);
    3434                void  GetAlpha2Hydro(IssmDouble* palpha2,Gauss* gauss);
     35                void  GetAlpha2Temp(IssmDouble* palpha2,Gauss* gauss);
    3536                void  GetAlphaComplement(IssmDouble* alpha_complement,Gauss* gauss);
    3637};
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r18719 r18732  
    9595        FrictionCEnum,
    9696        FrictionLawEnum,
     97        FrictionGammaEnum,
    9798        GeometryHydrostaticRatioEnum,
    9899        HydrologyModelEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r18719 r18732  
    103103                case FrictionCEnum : return "FrictionC";
    104104                case FrictionLawEnum : return "FrictionLaw";
     105                case FrictionGammaEnum : return "FrictionGamma";
    105106                case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio";
    106107                case HydrologyModelEnum : return "HydrologyModel";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r18719 r18732  
    103103              else if (strcmp(name,"FrictionC")==0) return FrictionCEnum;
    104104              else if (strcmp(name,"FrictionLaw")==0) return FrictionLawEnum;
     105              else if (strcmp(name,"FrictionGamma")==0) return FrictionGammaEnum;
    105106              else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
    106107              else if (strcmp(name,"HydrologyModel")==0) return HydrologyModelEnum;
     
    136137              else if (strcmp(name,"HydrologydcEplThickness")==0) return HydrologydcEplThicknessEnum;
    137138              else if (strcmp(name,"HydrologydcEplThicknessOld")==0) return HydrologydcEplThicknessOldEnum;
    138               else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
    139139         else stage=2;
    140140   }
    141141   if(stage==2){
    142               if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
     142              if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
     143              else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
    143144              else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
    144145              else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
     
    259260              else if (strcmp(name,"MasstransportPenaltyFactor")==0) return MasstransportPenaltyFactorEnum;
    260261              else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;
    261               else if (strcmp(name,"MasstransportCalvingrate")==0) return MasstransportCalvingrateEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum;
     265              if (strcmp(name,"MasstransportCalvingrate")==0) return MasstransportCalvingrateEnum;
     266              else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum;
    266267              else if (strcmp(name,"MasstransportVertexPairing")==0) return MasstransportVertexPairingEnum;
    267268              else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum;
     
    382383              else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
    383384              else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum;
    384               else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
     388              if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
     389              else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
    389390              else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
    390391              else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
     
    505506              else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
    506507              else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
    507               else if (strcmp(name,"Air")==0) return AirEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"Ice")==0) return IceEnum;
     511              if (strcmp(name,"Air")==0) return AirEnum;
     512              else if (strcmp(name,"Ice")==0) return IceEnum;
    512513              else if (strcmp(name,"Melange")==0) return MelangeEnum;
    513514              else if (strcmp(name,"Water")==0) return WaterEnum;
     
    628629              else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
    629630              else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
    630               else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
     634              if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
     635              else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
    635636              else if (strcmp(name,"LACrouzeixRaviart")==0) return LACrouzeixRaviartEnum;
    636637              else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
     
    751752              else if (strcmp(name,"SeaiceMinConcentration")==0) return SeaiceMinConcentrationEnum;
    752753              else if (strcmp(name,"SeaiceMinThickness")==0) return SeaiceMinThicknessEnum;
    753               else if (strcmp(name,"SeaiceMaxThickness")==0) return SeaiceMaxThicknessEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"SeaiceSpcvx")==0) return SeaiceSpcvxEnum;
     757              if (strcmp(name,"SeaiceMaxThickness")==0) return SeaiceMaxThicknessEnum;
     758              else if (strcmp(name,"SeaiceSpcvx")==0) return SeaiceSpcvxEnum;
    758759              else if (strcmp(name,"SeaiceSpcvy")==0) return SeaiceSpcvyEnum;
    759760              else if (strcmp(name,"SeaiceCoriolisFactor")==0) return SeaiceCoriolisFactorEnum;
  • issm/trunk-jpl/src/m/classes/groundingline.m

    r18610 r18732  
    99        end
    1010        methods
    11          function createxml(obj,fid) % {{{
    12             fprintf(fid, '\n\n');
    13             fprintf(fid, '%s\n', '<!-- groundingline -->');
    14            
    15             % Convergence criteria         
    16             fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Grounding line migration parameters">','<section name="groundingline" />'); 
    17                        
    18             % migration (SoftMigration, AggressiveMigration, or None)drop-down
    19             fprintf(fid,'%s\n%s\n%s\n%s\n','<parameter key ="migration" type="alternative" optional="false">','     <section name="groundingline" />','     <help> type of grounding line migration: "SoftMigration","AggressiveMigration" or "None" </help>');
    20             fprintf(fid,'%s\n','       <option value="SoftMigration" type="string" default="true"> </option>');
    21             fprintf(fid,'%s\n','       <option value="AggressiveMigration" type="string" default="false"> </option>');
    22             fprintf(fid, '%s\n%s\n','       <option value="None" type="string" default="false"></option>','</parameter>');
     11                function createxml(obj,fid) % {{{
     12                        fprintf(fid, '\n\n');
     13                        fprintf(fid, '%s\n', '<!-- groundingline -->');
    2314
    24             fprintf(fid,'%s\n%s\n','</frame>');
    25         end % }}}
     15                        % Convergence criteria         
     16                        fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Grounding line migration parameters">','<section name="groundingline" />'); 
     17
     18                        % migration (SoftMigration, AggressiveMigration, or None)drop-down
     19                        fprintf(fid,'%s\n%s\n%s\n%s\n','<parameter key ="migration" type="alternative" optional="false">','     <section name="groundingline" />','     <help> type of grounding line migration: "SoftMigration","AggressiveMigration" or "None" </help>');
     20                        fprintf(fid,'%s\n','       <option value="SoftMigration" type="string" default="true"> </option>');
     21                        fprintf(fid,'%s\n','       <option value="AggressiveMigration" type="string" default="false"> </option>');
     22                        fprintf(fid, '%s\n%s\n','       <option value="None" type="string" default="false"></option>','</parameter>');
     23
     24                        fprintf(fid,'%s\n%s\n','</frame>');
     25                end % }}}
    2626                function obj = groundingline(varargin) % {{{
    2727                        switch nargin
  • issm/trunk-jpl/src/m/classes/initialization.m

    r18623 r18732  
    1919        end
    2020        methods
    21         function createxml(obj,fid) % {{{
    22             fprintf(fid, '\n\n');
    23             fprintf(fid, '%s\n', '<!-- initialization -->');
    24             fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Initial field values">','<section name="initialization" />');                   
    25            
    26                          fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vx" type="',class(obj.vx),'" default="',obj.vx,'">','     <section name="initialization" />','     <help> x component of velocity [m/yr] </help>','</parameter>');
    27              fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vy" type="',class(obj.vy),'" default="',obj.vy,'">','     <section name="initialization" />','     <help> y component of velocity [m/yr] </help>','</parameter>');
    28              fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vz" type="',class(obj.vz),'" default="',obj.vz,'">','     <section name="initialization" />','     <help> z component of velocity [m/yr] </help>','</parameter>');
    29              fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vel" type="',class(obj.vel),'" default="',obj.vel,'">','     <section name="initialization" />','     <help> velocity norm [m/yr] </help>','</parameter>');
    30              fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="pressure" type="',class(obj.pressure),'" default="',obj.pressure,'">','     <section name="initialization" />','     <help> pressure field [Pa] </help>','</parameter>');
    31                  fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="temperature" type="',class(obj.temperature),'" default="',obj.temperature,'">','     <section name="initialization" />','     <help> fraction of water in the ice </help>','</parameter>');
    32              fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="waterfraction" type="',class(obj.waterfraction),'" default="',obj.waterfraction,'">','     <section name="initialization" />','     <help> ice thickness [m] </help>','</parameter>');
    33              fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="sediment_head" type="',class(obj.sediment_head),'" default="',obj.sediment_head,'">','     <section name="initialization" />','     <help> sediment water head of subglacial system [m] </help>','</parameter>');
    34              fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="epl_head" type="',class(obj.epl_head),'" default="',obj.epl_head,'">','     <section name="initialization" />','     <help> epl water head of subglacial system [m] </help>','</parameter>');
    35              fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="watercolumn" type="',class(obj.watercolumn),'" default="',obj.watercolumn,'">','     <section name="initialization" />','     <help> thickness of subglacial water [m] </help>','</parameter>');
    36             fprintf(fid,'%s\n%s\n','</frame>');
    37         end % }}}
     21                function createxml(obj,fid) % {{{
     22                        fprintf(fid, '\n\n');
     23                        fprintf(fid, '%s\n', '<!-- initialization -->');
     24                        fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Initial field values">','<section name="initialization" />');                   
     25
     26                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vx" type="',class(obj.vx),'" default="',obj.vx,'">','     <section name="initialization" />','     <help> x component of velocity [m/yr] </help>','</parameter>');
     27                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vy" type="',class(obj.vy),'" default="',obj.vy,'">','     <section name="initialization" />','     <help> y component of velocity [m/yr] </help>','</parameter>');
     28                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vz" type="',class(obj.vz),'" default="',obj.vz,'">','     <section name="initialization" />','     <help> z component of velocity [m/yr] </help>','</parameter>');
     29                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vel" type="',class(obj.vel),'" default="',obj.vel,'">','     <section name="initialization" />','     <help> velocity norm [m/yr] </help>','</parameter>');
     30                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="pressure" type="',class(obj.pressure),'" default="',obj.pressure,'">','     <section name="initialization" />','     <help> pressure field [Pa] </help>','</parameter>');
     31                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="temperature" type="',class(obj.temperature),'" default="',obj.temperature,'">','     <section name="initialization" />','     <help> fraction of water in the ice </help>','</parameter>');
     32                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="waterfraction" type="',class(obj.waterfraction),'" default="',obj.waterfraction,'">','     <section name="initialization" />','     <help> ice thickness [m] </help>','</parameter>');
     33                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="sediment_head" type="',class(obj.sediment_head),'" default="',obj.sediment_head,'">','     <section name="initialization" />','     <help> sediment water head of subglacial system [m] </help>','</parameter>');
     34                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="epl_head" type="',class(obj.epl_head),'" default="',obj.epl_head,'">','     <section name="initialization" />','     <help> epl water head of subglacial system [m] </help>','</parameter>');
     35                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="watercolumn" type="',class(obj.watercolumn),'" default="',obj.watercolumn,'">','     <section name="initialization" />','     <help> thickness of subglacial water [m] </help>','</parameter>');
     36                        fprintf(fid,'%s\n%s\n','</frame>');
     37                end % }}}
    3838                function obj = initialization(varargin) % {{{
    3939                        switch nargin
     
    7373                                end
    7474                                md = checkfield(md,'fieldname','initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices 1]);
     75                                md = checkfield(md,'fieldname','initialization.temperature','NaN',1,'size',[md.mesh.numberofvertices 1]);
    7576                        end
    7677                        if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy)
  • issm/trunk-jpl/src/m/classes/initialization.py

    r18710 r18732  
    6969                        md = checkfield(md,'fieldname','initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
    7070                        md = checkfield(md,'fieldname','initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
     71                        md = checkfield(md,'fieldname','initialization.temperature','NaN',1,'size',[md.mesh.numberofvertices])
    7172                        if md.mesh.dimension()==3:
    7273                                md = checkfield(md,'fieldname','initialization.vz','NaN',1,'size',[md.mesh.numberofvertices])
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r18720 r18732  
    9595def FrictionCEnum(): return StringToEnum("FrictionC")[0]
    9696def FrictionLawEnum(): return StringToEnum("FrictionLaw")[0]
     97def FrictionGammaEnum(): return StringToEnum("FrictionGamma")[0]
    9798def GeometryHydrostaticRatioEnum(): return StringToEnum("GeometryHydrostaticRatio")[0]
    9899def HydrologyModelEnum(): return StringToEnum("HydrologyModel")[0]
Note: See TracChangeset for help on using the changeset viewer.