Changeset 18553


Ignore:
Timestamp:
10/01/14 05:58:08 (10 years ago)
Author:
jbondzio
Message:

ADD: thermal.reltol for enthalpy convergence check

Location:
issm/trunk-jpl/src
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r18551 r18553  
    274274        ThermalIsenthalpyEnum,
    275275        ThermalIsdynamicbasalspcEnum,
     276        ThermalReltolEnum,
    276277        ThermalMaxiterEnum,
    277278        ThermalPenaltyFactorEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r18551 r18553  
    282282                case ThermalIsenthalpyEnum : return "ThermalIsenthalpy";
    283283                case ThermalIsdynamicbasalspcEnum : return "ThermalIsdynamicbasalspc";
     284                case ThermalReltolEnum : return "ThermalReltol";
    284285                case ThermalMaxiterEnum : return "ThermalMaxiter";
    285286                case ThermalPenaltyFactorEnum : return "ThermalPenaltyFactor";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r18551 r18553  
    288288              else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
    289289              else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
     290              else if (strcmp(name,"ThermalReltol")==0) return ThermalReltolEnum;
    290291              else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
    291292              else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
     
    382383              else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
    383384              else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
    384               else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
     388              if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
     389              else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
    389390              else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
    390391              else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
     
    505506              else if (strcmp(name,"Fill")==0) return FillEnum;
    506507              else if (strcmp(name,"FractionIncrement")==0) return FractionIncrementEnum;
    507               else if (strcmp(name,"Friction")==0) return FrictionEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"Internal")==0) return InternalEnum;
     511              if (strcmp(name,"Friction")==0) return FrictionEnum;
     512              else if (strcmp(name,"Internal")==0) return InternalEnum;
    512513              else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
    513514              else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
     
    628629              else if (strcmp(name,"MisfitModelEnum")==0) return MisfitModelEnumEnum;
    629630              else if (strcmp(name,"MisfitObservation")==0) return MisfitObservationEnum;
    630               else if (strcmp(name,"MisfitObservationEnum")==0) return MisfitObservationEnumEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum;
     634              if (strcmp(name,"MisfitObservationEnum")==0) return MisfitObservationEnumEnum;
     635              else if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum;
    635636              else if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum;
    636637              else if (strcmp(name,"MisfitWeightsEnum")==0) return MisfitWeightsEnumEnum;
     
    751752              else if (strcmp(name,"MaterialsPoisson")==0) return MaterialsPoissonEnum;
    752753              else if (strcmp(name,"MaterialsYoungModulus")==0) return MaterialsYoungModulusEnum;
    753               else if (strcmp(name,"MaterialsTimeRelaxationStress")==0) return MaterialsTimeRelaxationStressEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"MaterialsTimeRelaxationDamage")==0) return MaterialsTimeRelaxationDamageEnum;
     757              if (strcmp(name,"MaterialsTimeRelaxationStress")==0) return MaterialsTimeRelaxationStressEnum;
     758              else if (strcmp(name,"MaterialsTimeRelaxationDamage")==0) return MaterialsTimeRelaxationDamageEnum;
    758759              else if (strcmp(name,"MaterialsRidgingExponent")==0) return MaterialsRidgingExponentEnum;
    759760              else if (strcmp(name,"MaterialsCohesion")==0) return MaterialsCohesionEnum;
  • issm/trunk-jpl/src/m/classes/thermal.m

    r18068 r18553  
    99                penalty_threshold = 0;
    1010                stabilization     = 0;
     11                reltol                          = 0;
    1112                maxiter           = 0;
    1213                penalty_lock      = 0;
     
    3132
    3233            fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="stabilization" type="',class(obj.stabilization),'" default="',convert2str(obj.stabilization),'">','     <section name="thermal" />','     <help> maximum number of non linear iterations </help>','  </parameter>');
     34                                fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="reltol" type="',class(obj.reltol),'" default="',convert2str(obj.reltol),'">','     <section name="steadystate" />','     <help> relative tolerance criterion [K] </help>','  </parameter>');
    3335            fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="maxiter" type="',class(obj.maxiter),'" default="',convert2str(obj.maxiter),'">','     <section name="thermal" />','     <help> stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization) </help>','  </parameter>');
    3436            fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="penalty_lock" type="',class(obj.penalty_lock),'" default="',convert2str(obj.penalty_lock),'">','     <section name="thermal" />','     <help> threshold to declare convergence of thermal solution (default is 0)  </help>','  </parameter>');
     
    6567                        obj.stabilization=1;
    6668
     69                        %Relative tolerance for the enthalpy convergence
     70                        obj.reltol=0.01;
     71
    6772                        %Maximum number of iterations
    6873                        obj.maxiter=100;
     
    9499                                md = checkfield(md,'fieldname','thermal.isdynamicbasalspc','numel', [1],'values',[0 1]);
    95100                                if(md.thermal.isenthalpy)
     101                                        md = checkfield(md,'fieldname','thermal.reltol','>',0.,'message','reltol must be larger than zero');
     102                                        if isnan(md.stressbalance.reltol),
     103                                                md = checkmessage(md,['for a steadystate computation, stressbalance.reltol (relative convergence criterion) must be defined!']);
     104                                        end
    96105                                        md = checkfield(md,'fieldname','thermal.isdynamicbasalspc','numel', [1],'values',[1], 'message',['for enthalpy run thermal.isdynamicbasalspc should be 1']);
    97106                                end
     
    105114                        fielddisplay(obj,'spctemperature','temperature constraints (NaN means no constraint) [K]');
    106115                        fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG');
     116                        fielddisplay(obj,'reltol','relative tolerance convergence criterion for enthalpy');
    107117                        fielddisplay(obj,'maxiter','maximum number of non linear iterations');
    108118                        fielddisplay(obj,'penalty_lock','stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization)');
     
    118128                        WriteData(fid,'object',obj,'fieldname','penalty_threshold','format','Integer');
    119129                        WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
     130                        WriteData(fid,'object',obj,'fieldname','reltol','format','Double');
    120131                        WriteData(fid,'object',obj,'fieldname','maxiter','format','Integer');
    121132                        WriteData(fid,'object',obj,'fieldname','penalty_lock','format','Integer');
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r18551 r18553  
    274274def ThermalIsenthalpyEnum(): return StringToEnum("ThermalIsenthalpy")[0]
    275275def ThermalIsdynamicbasalspcEnum(): return StringToEnum("ThermalIsdynamicbasalspc")[0]
     276def ThermalReltolEnum(): return StringToEnum("ThermalReltol")[0]
    276277def ThermalMaxiterEnum(): return StringToEnum("ThermalMaxiter")[0]
    277278def ThermalPenaltyFactorEnum(): return StringToEnum("ThermalPenaltyFactor")[0]
Note: See TracChangeset for help on using the changeset viewer.