Changeset 11810


Ignore:
Timestamp:
03/29/12 11:32:29 (13 years ago)
Author:
Mathieu Morlighem
Message:

Added starttime in time stepping

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

Legend:

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

    r11695 r11810  
    163163        ThermalIsenthalpyEnum,
    164164        ThicknessEnum,
     165        TimesteppingStartTimeEnum,
     166        TimesteppingFinalTimeEnum,
    165167        TimesteppingCflCoefficientEnum,
    166         TimesteppingFinalTimeEnum,
    167168        TimesteppingTimeAdaptEnum,
    168169        TimesteppingTimeStepEnum,
  • issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r11695 r11810  
    167167                case ThermalIsenthalpyEnum : return "ThermalIsenthalpy";
    168168                case ThicknessEnum : return "Thickness";
     169                case TimesteppingStartTimeEnum : return "TimesteppingStartTime";
     170                case TimesteppingFinalTimeEnum : return "TimesteppingFinalTime";
    169171                case TimesteppingCflCoefficientEnum : return "TimesteppingCflCoefficient";
    170                 case TimesteppingFinalTimeEnum : return "TimesteppingFinalTime";
    171172                case TimesteppingTimeAdaptEnum : return "TimesteppingTimeAdapt";
    172173                case TimesteppingTimeStepEnum : return "TimesteppingTimeStep";
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r11347 r11810  
    4545        parameters->AddObject(iomodel->CopyConstantObject(SteadystateMaxiterEnum));
    4646        parameters->AddObject(iomodel->CopyConstantObject(ConstantsYtsEnum));
    47         parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum));
     47        parameters->AddObject(iomodel->CopyConstantObject(TimesteppingStartTimeEnum));
    4848        parameters->AddObject(iomodel->CopyConstantObject(TimesteppingFinalTimeEnum));
    4949        parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeAdaptEnum));
     50        parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum));
    5051        parameters->AddObject(iomodel->CopyConstantObject(TimesteppingCflCoefficientEnum));
    5152        parameters->AddObject(iomodel->CopyConstantObject(PrognosticHydrostaticAdjustmentEnum));
  • issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r11695 r11810  
    171171              else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
    172172              else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
     173              else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
     174              else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
    173175              else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
    174               else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
    175176              else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
    176177              else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
     
    259260              else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
    260261              else if (strcmp(name,"Param")==0) return ParamEnum;
    261               else if (strcmp(name,"PattynIceFront")==0) return PattynIceFrontEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"Pengrid")==0) return PengridEnum;
     265              if (strcmp(name,"PattynIceFront")==0) return PattynIceFrontEnum;
     266              else if (strcmp(name,"Pengrid")==0) return PengridEnum;
    266267              else if (strcmp(name,"Penpair")==0) return PenpairEnum;
    267268              else if (strcmp(name,"Penta")==0) return PentaEnum;
     
    382383              else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
    383384              else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
    384               else if (strcmp(name,"DoubleVecExternalResult")==0) return DoubleVecExternalResultEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
     388              if (strcmp(name,"DoubleVecExternalResult")==0) return DoubleVecExternalResultEnum;
     389              else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
    389390              else if (strcmp(name,"J")==0) return JEnum;
    390391              else if (strcmp(name,"Patch")==0) return PatchEnum;
  • issm/trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp

    r11509 r11810  
    4747        double scale;
    4848        switch(type_enum){
    49                 case TimesteppingTimeStepEnum: scale=1.0/yts;break; //yr
    50                 case TimesteppingFinalTimeEnum:    scale=1.0/yts;break; //yr
    51                 case TimeEnum:        scale=1.0/yts;break; //yr
    52                 case HydrologyWaterVxEnum: scale=yts;break; //m/yr
    53                 case HydrologyWaterVyEnum: scale=yts;break; //m/yr
    54                 case VxEnum:          scale=yts;break; //m/yr
    55                 case InversionVxObsEnum:       scale=yts;break; //m/yr
    56                 case VyEnum:          scale=yts;break; //m/yr
    57                 case InversionVyObsEnum:       scale=yts;break; //m/yr
    58                 case VzEnum:          scale=yts;break; //m/yr
    59                 case InversionVzObsEnum:       scale=yts;break; //m/yr
    60                 case VelEnum:         scale=yts;break; //m/yr
    61                 case InversionVelObsEnum:      scale=yts;break; //m/yr
    62                 case BalancethicknessThickeningRateEnum:  scale=yts;break; //m/yr
    63                 case BasalforcingsMeltingRateEnum:        scale=yts;break; //m/yr
     49                case TimesteppingStartTimeEnum:              scale=1.0/yts;break; //yr
     50                case TimesteppingFinalTimeEnum:              scale=1.0/yts;break; //yr
     51                case TimesteppingTimeStepEnum:               scale=1.0/yts;break; //yr
     52                case TimeEnum:                               scale=1.0/yts;break; //yr
     53                case HydrologyWaterVxEnum:                   scale=yts;break; //m/yr
     54                case HydrologyWaterVyEnum:                   scale=yts;break; //m/yr
     55                case VxEnum:                                 scale=yts;break; //m/yr
     56                case InversionVxObsEnum:                     scale=yts;break; //m/yr
     57                case VyEnum:                                 scale=yts;break; //m/yr
     58                case InversionVyObsEnum:                     scale=yts;break; //m/yr
     59                case VzEnum:                                 scale=yts;break; //m/yr
     60                case InversionVzObsEnum:                     scale=yts;break; //m/yr
     61                case VelEnum:                                scale=yts;break; //m/yr
     62                case InversionVelObsEnum:                    scale=yts;break; //m/yr
     63                case BalancethicknessThickeningRateEnum:     scale=yts;break; //m/yr
     64                case BasalforcingsMeltingRateEnum:           scale=yts;break; //m/yr
    6465                case BasalforcingsMeltingRateCorrectionEnum: scale=yts;break; //m/yr
    65                 case SurfaceforcingsPrecipitationEnum:     scale=yts;break; //m/yr
    66                 case SurfaceforcingsMassBalanceEnum:      scale=yts;break; //m/yr
    67                 case MisfitEnum:      scale=pow(yts,2);break; //(m/yr)^2
    68                 case MassFluxEnum:    scale=pow((double)10,-12)*yts;break; // (GigaTon/year)
     66                case SurfaceforcingsPrecipitationEnum:       scale=yts;break; //m/yr
     67                case SurfaceforcingsMassBalanceEnum:         scale=yts;break; //m/yr
     68                case MisfitEnum:                             scale=pow(yts,2);break; //(m/yr)^2
     69                case MassFluxEnum:                           scale=pow((double)10,-12)*yts;break; // (GigaTon/year)
    6970                default: scale=1.0; break;
    7071        }
    7172        return scale;
    7273}
    73 
    74 
    75 
  • issm/trunk-jpl/src/c/solutions/enthalpy_core.cpp

    r11299 r11810  
    2020        double time;
    2121        int    nsteps;
    22         double final_time;
     22        double starttime,final_time;
    2323        double dt;
    2424        double melting_offset;
    25         bool control_analysis;
    26         int solution_type;
     25        bool   control_analysis;
     26        int    solution_type;
    2727
    2828        //first recover parameters common to all solutions
     29        femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
    2930        femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
    3031        femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
     
    3738                nsteps=1;
    3839        }
    39         else nsteps=(int)(final_time/dt);
     40        else nsteps=(int)((final_time-starttime)/dt);
     41        time=starttime;
    4042
    4143        /*Loop through time: */
     
    4345               
    4446                if(nsteps)_printf_(VerboseSolution(),"time step: %i/%i\n",i+1,nsteps);
    45                 time=(i+1)*dt;
     47                time+=dt;
    4648
    4749                /*call enthalpy_core_step: */
  • issm/trunk-jpl/src/c/solutions/hydrology_core.cpp

    r10989 r11810  
    1919        double time;
    2020        int    nsteps;
    21         double final_time;
     21        double starttime,final_time;
    2222        double dt;
    23         bool control_analysis;
    24         int solution_type;
    25         int output_frequency;
     23        bool   control_analysis;
     24        int    solution_type;
     25        int    output_frequency;
    2626
    2727        //first recover parameters common to all solutions
     28        femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
    2829        femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
    2930        femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
     
    4041                nsteps=1;
    4142        }
    42         else nsteps=(int)(final_time/dt);
     43        else nsteps=(int)((final_time-starttime)/dt);
     44        time=starttime;
    4345
    4446        /*Loop through time: */
     
    4648               
    4749                if(nsteps)_printf_(VerboseSolution(),"time step:%i/%i\n",i+1,nsteps);
    48                 time=(i+1)*dt;
     50                time+=dt;
    4951                femmodel->parameters->SetParam(time,TimeEnum);
    5052
  • issm/trunk-jpl/src/c/solutions/thermal_core.cpp

    r10989 r11810  
    2020        double time;
    2121        int    nsteps;
    22         double final_time;
     22        double starttime,final_time;
    2323        double dt;
    2424        double melting_offset;
    25         bool control_analysis;
    26         int solution_type;
    27         bool   dakota_analysis         = false;
     25        bool   control_analysis;
     26        int    solution_type;
     27        bool   dakota_analysis  = false;
    2828
    2929        //first recover parameters common to all solutions
     30        femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
    3031        femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
    3132        femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
     
    3940                nsteps=1;
    4041        }
    41         else nsteps=(int)(final_time/dt);
     42        else nsteps=(int)((final_time-starttime)/dt);
     43        time=starttime;
    4244
    4345        if(dakota_analysis){
     
    4547                ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
    4648        }
     49        printf("start = %g final = %g n=%i\n",starttime,final_time,nsteps);
    4750
    4851        /*Loop through time: */
     
    5053               
    5154                if(nsteps)_printf_(VerboseSolution(),"time step: %i/%i\n",i+1,nsteps);
    52                 time=(i+1)*dt;
     55                time+=dt;
    5356                femmodel->parameters->SetParam(time,TimeEnum);
    5457
  • issm/trunk-jpl/src/c/solutions/transient_core.cpp

    r11347 r11810  
    2323
    2424        /*parameters: */
    25         double finaltime,dt,yts;
     25        double starttime,finaltime,dt,yts;
    2626        bool   control_analysis,isdiagnostic,isprognostic,isthermal,isgroundingline,isenthalpy;
    2727        bool   dakota_analysis=false;
     
    3939        //first recover parameters common to all solutions
    4040        femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
     41        femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
    4142        femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
    4243        femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
     
    5859        /*initialize: */
    5960        step=0;
    60         time=0;
     61        time=starttime;
    6162
    6263        /*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
  • issm/trunk-jpl/src/m/classes/timestepping.m

    r10969 r11810  
    66classdef timestepping
    77        properties (SetAccess=public)
     8                start_time      = 0;
     9                final_time      = 0;
    810                time_step       = 0;
    9                 final_time      = 0;
    1011                time_adapt      = 0;
    1112                cfl_coefficient = 0;
     
    4142                function checkconsistency(obj,md,solution,analyses) % {{{
    4243
     44                        checkfield(md,'timestepping.start_time','numel',1,'NaN',1);
     45                        checkfield(md,'timestepping.final_time','numel',1,'NaN',1);
     46                        checkfield(md,'timestepping.time_step','numel',1,'>=',0,'NaN',1);
    4347                        checkfield(md,'timestepping.time_adapt','numel',1,'values',[0 1]);
    4448                        checkfield(md,'timestepping.cfl_coefficient','numel',1,'>',0,'<=',1);
     49                        if obj.final_time-obj.start_time<0,
     50                                checkmessage('timestepping.final_time should be larger than timestepping.start_time');
     51                        end
    4552                end % }}}
    4653                function disp(obj) % {{{
    4754                        disp(sprintf('   timestepping parameters:'));
    4855
     56                        fielddisplay(obj,'start_time','simulation starting time [yrs]');
     57                        fielddisplay(obj,'final_time','final time to stop the simulation [yrs]');
    4958                        fielddisplay(obj,'time_step','length of time steps [yrs]');
    50                         fielddisplay(obj,'final_time','final time to stop the simulation [yrs]');
    5159                        fielddisplay(obj,'time_adapt','use cfl condition to define time step ? (0 or 1) ');
    5260                        fielddisplay(obj,'cfl_coefficient','coefficient applied to cfl condition');
     
    5462                end % }}}
    5563                function marshall(obj,fid) % {{{
     64                        WriteData(fid,'object',obj,'fieldname','start_time','format','Double');
     65                        WriteData(fid,'object',obj,'fieldname','final_time','format','Double');
    5666                        WriteData(fid,'object',obj,'fieldname','time_step','format','Double');
    57                         WriteData(fid,'object',obj,'fieldname','final_time','format','Double');
    5867                        WriteData(fid,'object',obj,'fieldname','time_adapt','format','Boolean');
    5968                        WriteData(fid,'object',obj,'fieldname','cfl_coefficient','format','Double');
  • issm/trunk-jpl/src/m/solutions/transient_core.m

    r11347 r11810  
    77        %recover parameters common to all solutions
    88        dim=femmodel.parameters.MeshDimension;
    9         ndt=femmodel.parameters.TimesteppingFinalTime;
     9        starttime=femmodel.parameters.TimesteppingStartTime;
     10        finaltime=femmodel.parameters.TimesteppingFinalTime;
    1011        dt=femmodel.parameters.TimesteppingTimeStep;
    1112        yts=femmodel.parameters.ConstantsYts;
     
    2324
    2425        %Initialize
    25         time=0;
     26        time=starttime;
    2627        step=0;
    2728
     
    4243
    4344        %Loop through time
    44         while (time < ndt - (yts*eps)),
     45        while (time < finaltime+eps),
    4546
    4647                %Increment
    4748                if(time_adapt),
    4849                        dt=TimeAdapt(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
    49                         if(time+dt>ndt), dt=ndt-time; end
     50                        if(time+dt>finaltime), dt=finaltime-time; end
    5051                        femmodel.parameters.TimesteppingTimeStep=dt;
    5152                end
     
    5455                femmodel.parameters.Time=time;
    5556
    56                 issmprintf(VerboseSolution,'\n%s%g%s%i%s%g\n','time [yr] ',time/yts,' iteration number: ',step,'/',floor(ndt/dt));
     57                issmprintf(VerboseSolution,'\n%s%g%s%i%s%g\n','time [yr] ',time/yts,' iteration number: ',step,'/',floor((finaltime-starttime)/dt));
    5758
    5859                if (isthermal & dim==3)
     
    8485                end
    8586
    86                 if (solution_type==TransientSolutionEnum & ~control_analysis & (mod(step,output_frequency)==0 | time==ndt)),
     87                if (solution_type==TransientSolutionEnum & ~control_analysis & (mod(step,output_frequency)==0 | time==finaltime)),
    8788                        issmprintf(VerboseSolution,'\n%s',['   saving results']);
    8889                        femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VxEnum,step,time);
Note: See TracChangeset for help on using the changeset viewer.