Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/thermal_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/thermal_core.cpp (revision 11809) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/thermal_core.cpp (revision 11810) @@ -19,14 +19,15 @@ /*intermediary*/ double time; int nsteps; - double final_time; + double starttime,final_time; double dt; double melting_offset; - bool control_analysis; - int solution_type; - bool dakota_analysis = false; + bool control_analysis; + int solution_type; + bool dakota_analysis = false; //first recover parameters common to all solutions + femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum); femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); @@ -38,18 +39,20 @@ dt=0; nsteps=1; } - else nsteps=(int)(final_time/dt); + else nsteps=(int)((final_time-starttime)/dt); + time=starttime; if(dakota_analysis){ femmodel->SetCurrentConfiguration(ThermalAnalysisEnum); ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); } + printf("start = %g final = %g n=%i\n",starttime,final_time,nsteps); /*Loop through time: */ for(i=0;iparameters->SetParam(time,TimeEnum); /*call thermal_core_step: */ Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/transient_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/transient_core.cpp (revision 11809) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/transient_core.cpp (revision 11810) @@ -22,7 +22,7 @@ void transient_core(FemModel* femmodel){ /*parameters: */ - double finaltime,dt,yts; + double starttime,finaltime,dt,yts; bool control_analysis,isdiagnostic,isprognostic,isthermal,isgroundingline,isenthalpy; bool dakota_analysis=false; bool time_adapt=false; @@ -38,6 +38,7 @@ //first recover parameters common to all solutions femmodel->parameters->FindParam(&dim,MeshDimensionEnum); + femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum); femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); femmodel->parameters->FindParam(&yts,ConstantsYtsEnum); @@ -57,7 +58,7 @@ /*initialize: */ step=0; - time=0; + time=starttime; /*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.*/ if(dakota_analysis){ Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/hydrology_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/hydrology_core.cpp (revision 11809) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/hydrology_core.cpp (revision 11810) @@ -18,13 +18,14 @@ /*intermediary*/ double time; int nsteps; - double final_time; + double starttime,final_time; double dt; - bool control_analysis; - int solution_type; - int output_frequency; + bool control_analysis; + int solution_type; + int output_frequency; //first recover parameters common to all solutions + femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum); femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); @@ -39,13 +40,14 @@ dt=0; nsteps=1; } - else nsteps=(int)(final_time/dt); + else nsteps=(int)((final_time-starttime)/dt); + time=starttime; /*Loop through time: */ for(i=0;iparameters->SetParam(time,TimeEnum); /*call hydrology_core step: */ Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/enthalpy_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/enthalpy_core.cpp (revision 11809) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/enthalpy_core.cpp (revision 11810) @@ -19,13 +19,14 @@ /*intermediary*/ double time; int nsteps; - double final_time; + double starttime,final_time; double dt; double melting_offset; - bool control_analysis; - int solution_type; + bool control_analysis; + int solution_type; //first recover parameters common to all solutions + femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum); femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); @@ -36,13 +37,14 @@ dt=0; nsteps=1; } - else nsteps=(int)(final_time/dt); + else nsteps=(int)((final_time-starttime)/dt); + time=starttime; /*Loop through time: */ for(i=0;iAddObject(iomodel->CopyConstantObject(SteadystateReltolEnum)); parameters->AddObject(iomodel->CopyConstantObject(SteadystateMaxiterEnum)); parameters->AddObject(iomodel->CopyConstantObject(ConstantsYtsEnum)); - parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum)); + parameters->AddObject(iomodel->CopyConstantObject(TimesteppingStartTimeEnum)); parameters->AddObject(iomodel->CopyConstantObject(TimesteppingFinalTimeEnum)); parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeAdaptEnum)); + parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum)); parameters->AddObject(iomodel->CopyConstantObject(TimesteppingCflCoefficientEnum)); parameters->AddObject(iomodel->CopyConstantObject(PrognosticHydrostaticAdjustmentEnum)); parameters->AddObject(iomodel->CopyConstantObject(PrognosticStabilizationEnum)); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/transient_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/transient_core.m (revision 11809) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/transient_core.m (revision 11810) @@ -6,7 +6,8 @@ %recover parameters common to all solutions dim=femmodel.parameters.MeshDimension; - ndt=femmodel.parameters.TimesteppingFinalTime; + starttime=femmodel.parameters.TimesteppingStartTime; + finaltime=femmodel.parameters.TimesteppingFinalTime; dt=femmodel.parameters.TimesteppingTimeStep; yts=femmodel.parameters.ConstantsYts; control_analysis=femmodel.parameters.InversionIscontrol; @@ -22,7 +23,7 @@ groundinglinemigration=femmodel.parameters.GroundinglineMigration; %Initialize - time=0; + time=starttime; step=0; %for qmu analysis, be sure the velocity input we are starting from is the one in the parameters: @@ -41,19 +42,19 @@ end %Loop through time - while (time < ndt - (yts*eps)), + while (time < finaltime+eps), %Increment if(time_adapt), dt=TimeAdapt(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); - if(time+dt>ndt), dt=ndt-time; end + if(time+dt>finaltime), dt=finaltime-time; end femmodel.parameters.TimesteppingTimeStep=dt; end step=step+1; time=time+dt; femmodel.parameters.Time=time; - issmprintf(VerboseSolution,'\n%s%g%s%i%s%g\n','time [yr] ',time/yts,' iteration number: ',step,'/',floor(ndt/dt)); + issmprintf(VerboseSolution,'\n%s%g%s%i%s%g\n','time [yr] ',time/yts,' iteration number: ',step,'/',floor((finaltime-starttime)/dt)); if (isthermal & dim==3) issmprintf(VerboseSolution,'\n%s',[' computing temperature']); @@ -83,7 +84,7 @@ GroundinglineMigration(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); end - if (solution_type==TransientSolutionEnum & ~control_analysis & (mod(step,output_frequency)==0 | time==ndt)), + if (solution_type==TransientSolutionEnum & ~control_analysis & (mod(step,output_frequency)==0 | time==finaltime)), issmprintf(VerboseSolution,'\n%s',[' saving results']); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VxEnum,step,time); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VyEnum,step,time); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/enum/TimesteppingStartTimeEnum.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/enum/TimesteppingStartTimeEnum.m (revision 0) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/enum/TimesteppingStartTimeEnum.m (revision 11810) @@ -0,0 +1,11 @@ +function macro=TimesteppingStartTimeEnum() +%TIMESTEPPINGSTARTTIMEENUM - Enum of TimesteppingStartTime +% +% WARNING: DO NOT MODIFY THIS FILE +% this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh +% Please read src/c/EnumDefinitions/README for more information +% +% Usage: +% macro=TimesteppingStartTimeEnum() + +macro=StringToEnum('TimesteppingStartTime'); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/classes/timestepping.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/classes/timestepping.m (revision 11809) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/classes/timestepping.m (revision 11810) @@ -5,8 +5,9 @@ classdef timestepping properties (SetAccess=public) + start_time = 0; + final_time = 0; time_step = 0; - final_time = 0; time_adapt = 0; cfl_coefficient = 0; end @@ -40,21 +41,29 @@ end % }}} function checkconsistency(obj,md,solution,analyses) % {{{ + checkfield(md,'timestepping.start_time','numel',1,'NaN',1); + checkfield(md,'timestepping.final_time','numel',1,'NaN',1); + checkfield(md,'timestepping.time_step','numel',1,'>=',0,'NaN',1); checkfield(md,'timestepping.time_adapt','numel',1,'values',[0 1]); checkfield(md,'timestepping.cfl_coefficient','numel',1,'>',0,'<=',1); + if obj.final_time-obj.start_time<0, + checkmessage('timestepping.final_time should be larger than timestepping.start_time'); + end end % }}} function disp(obj) % {{{ disp(sprintf(' timestepping parameters:')); + fielddisplay(obj,'start_time','simulation starting time [yrs]'); + fielddisplay(obj,'final_time','final time to stop the simulation [yrs]'); fielddisplay(obj,'time_step','length of time steps [yrs]'); - fielddisplay(obj,'final_time','final time to stop the simulation [yrs]'); fielddisplay(obj,'time_adapt','use cfl condition to define time step ? (0 or 1) '); fielddisplay(obj,'cfl_coefficient','coefficient applied to cfl condition'); end % }}} function marshall(obj,fid) % {{{ + WriteData(fid,'object',obj,'fieldname','start_time','format','Double'); + WriteData(fid,'object',obj,'fieldname','final_time','format','Double'); WriteData(fid,'object',obj,'fieldname','time_step','format','Double'); - WriteData(fid,'object',obj,'fieldname','final_time','format','Double'); WriteData(fid,'object',obj,'fieldname','time_adapt','format','Boolean'); WriteData(fid,'object',obj,'fieldname','cfl_coefficient','format','Double'); end % }}}