Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 21786)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 21787)
@@ -2065,6 +2065,4 @@
 void FemModel::TimeAdaptx(IssmDouble* pdt){/*{{{*/
 
-	int      i;
-
 	/*output: */
 	IssmDouble   dt;
@@ -2077,5 +2075,5 @@
 	Element* element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt();
 
-	for (i=1;i<elements->Size();i++){
+	for(int i=1;i<elements->Size();i++){
 		element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
 		dt=element->TimeAdapt();
@@ -2088,14 +2086,10 @@
 	min_dt=node_min_dt;
 
-	/*Constrain dt if necessary*/
-	int timestepping_type;
+	/*Constrain dt */
 	IssmDouble dt_low,dt_high;
-	parameters->FindParam(&timestepping_type,TimesteppingTypeEnum);
-	if(timestepping_type==TimeAdaptationEnum){
-		parameters->FindParam(&dt_low,TimesteppingTimeStepMinEnum);
-		parameters->FindParam(&dt_high,TimesteppingTimeStepMaxEnum);
-		if(min_dt<dt_low)  min_dt = dt_low;
-		if(min_dt>dt_high) min_dt = dt_high;
-	}
+	parameters->FindParam(&dt_low,TimesteppingTimeStepMinEnum);
+	parameters->FindParam(&dt_high,TimesteppingTimeStepMaxEnum);
+	if(min_dt<dt_low)  min_dt = dt_low;
+	if(min_dt>dt_high) min_dt = dt_high;
 
 	/*Assign output pointers:*/
Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 21786)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 21787)
@@ -23,5 +23,5 @@
 	bool       isstressbalance,ismasstransport,issmb,isFS,isthermal,isgroundingline,isgia,isslr,iscoupler,ismovingfront,isdamageevolution,ishydrology;
 	bool       save_results,dakota_analysis;
-	bool       time_adapt;
+	int        timestepping;
 	int        output_frequency;
 	int        recording_frequency;
@@ -47,5 +47,5 @@
 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
 	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
-	femmodel->parameters->FindParam(&time_adapt,TimesteppingTimeAdaptEnum);
+	femmodel->parameters->FindParam(&timestepping,TimesteppingTypeEnum);
 	femmodel->parameters->FindParam(&isstressbalance,TransientIsstressbalanceEnum);
 	femmodel->parameters->FindParam(&ismasstransport,TransientIsmasstransportEnum);
@@ -71,12 +71,17 @@
 
 	while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
-		/*Increment*/
-		if(time_adapt){
-			femmodel->TimeAdaptx(&dt);
-			if(time+dt>finaltime) dt=finaltime-time;
-			femmodel->parameters->SetParam(dt,TimesteppingTimeStepEnum);
-		}
-		else{
-			femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+
+		/*Time Increment*/
+		switch(timestepping){
+			case AdaptiveTimesteppingEnum:
+				femmodel->TimeAdaptx(&dt);
+				if(time+dt>finaltime) dt=finaltime-time;
+				femmodel->parameters->SetParam(dt,TimesteppingTimeStepEnum);
+				break;
+			case FixedTimesteppingEnum:
+				femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+				break;
+			default:
+				_error_("Time stepping \""<<EnumToStringx(timestepping)<<"\" not supported yet");
 		}
 		step+=1;
@@ -183,5 +188,4 @@
 		}
 		#endif
-	
 	}
 	
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21786)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21787)
@@ -143,11 +143,8 @@
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.start_time",TimesteppingStartTimeEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.final_time",TimesteppingFinalTimeEnum));
-			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_adapt",TimesteppingTimeAdaptEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step",TimesteppingTimeStepEnum));
-			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.cfl_coefficient",TimesteppingCflCoefficientEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
 			break;
-		case TimeAdaptationEnum:
-			parameters->AddObject(new BoolParam(TimesteppingTimeAdaptEnum,true));
+		case AdaptiveTimesteppingEnum:
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.start_time",TimesteppingStartTimeEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.final_time",TimesteppingFinalTimeEnum));
@@ -158,5 +155,5 @@
 			break;
 		default:
-			_error_(EnumToStringx(timestepping_type) <<" not supported yet");
+			_error_("Time stepping \""<<EnumToStringx(timestepping_type)<<"\" not supported yet");
 	}
 	iomodel->FindConstant(&time,"md.timestepping.start_time");
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21786)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21787)
@@ -32,5 +32,5 @@
 	TimesteppingTypeEnum,
 	FixedTimesteppingEnum,
-	TimeAdaptationEnum,
+	AdaptiveTimesteppingEnum,
 	TimesteppingTimeStepMinEnum,
 	TimesteppingTimeStepMaxEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21786)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21787)
@@ -40,5 +40,5 @@
 		case TimesteppingTypeEnum : return "TimesteppingType";
 		case FixedTimesteppingEnum : return "FixedTimestepping";
-		case TimeAdaptationEnum : return "TimeAdaptation";
+		case AdaptiveTimesteppingEnum : return "AdaptiveTimestepping";
 		case TimesteppingTimeStepMinEnum : return "TimesteppingTimeStepMin";
 		case TimesteppingTimeStepMaxEnum : return "TimesteppingTimeStepMax";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21786)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21787)
@@ -40,5 +40,5 @@
 	      else if (strcmp(name,"TimesteppingType")==0) return TimesteppingTypeEnum;
 	      else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
-	      else if (strcmp(name,"TimeAdaptation")==0) return TimeAdaptationEnum;
+	      else if (strcmp(name,"AdaptiveTimestepping")==0) return AdaptiveTimesteppingEnum;
 	      else if (strcmp(name,"TimesteppingTimeStepMin")==0) return TimesteppingTimeStepMinEnum;
 	      else if (strcmp(name,"TimesteppingTimeStepMax")==0) return TimesteppingTimeStepMaxEnum;
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 21786)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 21787)
@@ -124,5 +124,5 @@
 	switch(enum_in){
 		case 1: return FixedTimesteppingEnum;
-		case 2: return TimeAdaptationEnum; 
+		case 2: return AdaptiveTimesteppingEnum; 
 		default: _error_("Marshalled materials code \""<<enum_in<<"\" not supported yet"); 
 	}
Index: /issm/trunk-jpl/src/m/classes/model.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.py	(revision 21786)
+++ /issm/trunk-jpl/src/m/classes/model.py	(revision 21787)
@@ -24,4 +24,5 @@
 from flowequation import flowequation
 from timestepping import timestepping
+from timesteppingadaptive import timesteppingadaptive
 from initialization import initialization
 from rifts import rifts
Index: sm/trunk-jpl/src/m/classes/timeadaptation.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/timeadaptation.m	(revision 21786)
+++ 	(revision )
@@ -1,90 +1,0 @@
-%TIMESTEPPING Class definition
-%
-%   Usage:
-%      timeadaptation=timeadaptation();
-
-classdef timeadaptation
-	properties (SetAccess=public) 
-		start_time      = 0.;
-		final_time      = 0.;
-		time_step_min   = 0.;
-		time_step_max   = 0.;
-		cfl_coefficient = 0.;
-		interp_forcings = 1;
-	end
-	methods
-		function self = timeadaptation(varargin) % {{{
-			switch nargin
-				case 0
-					self=setdefaultparameters(self);
-				case 1
-					self=structtoobj(timeadaptation(),varargin{1});
-				otherwise
-					error('constructor not supported');
-			end
-		end % }}}
-		function self = setdefaultparameters(self) % {{{
-
-			%time between 2 time steps
-			self.time_step_min = 0.01;
-			self.time_step_max = 1.;
-
-			%final time
-			self.final_time=10.*self.time_step_max;
-
-			%default CFL coefficient
-			self.cfl_coefficient=0.5;
-
-			%should we interpolate forcings between timesteps?
-			self.interp_forcings=1;
-		end % }}}
-		function md = checkconsistency(self,md,solution,analyses) % {{{
-
-			md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
-			md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
-			md = checkfield(md,'fieldname','timestepping.time_step_min','numel',[1],'>=',0,'NaN',1,'Inf',1);
-			md = checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',0,'NaN',1,'Inf',1);
-			if (self.time_step_min>self.time_step_max)
-				md = checkmessage(md,['base not equal to bed on grounded ice!']);
-			end
-			md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
-			md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]);
-			if self.final_time-self.start_time<0,
-				md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time');
-			end 
-		end % }}}
-		function disp(self) % {{{
-			disp(sprintf('   timeadaptation parameters:'));
-
-			unit = 'yr';
-			fielddisplay(self,'start_time',['simulation starting time [' unit ']']);
-			fielddisplay(self,'final_time',['final time to stop the simulation [' unit ']']);
-			fielddisplay(self,'time_step_min',['minimum length of time step [' unit ']']);
-			fielddisplay(self,'time_step_max',['maximum length of time step [' unit ']']);
-			fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition');
-			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
-
-		end % }}}
-		function marshall(self,prefix,md,fid) % {{{
-
-			scale = md.constants.yts;
-			WriteData(fid,prefix,'name','md.timestepping.type','data',2,'format','Integer');
-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','start_time','format','Double','scale',scale);
-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','final_time','format','Double','scale',scale);
-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_min','format','Double','scale',scale);
-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',scale);
-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double');
-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean');
-		end % }}}
-		function savemodeljs(self,fid,modelname) % {{{
-		
-			writejsdouble(fid,[modelname '.timeadaptation.start_time'],self.start_time);
-			writejsdouble(fid,[modelname '.timeadaptation.final_time'],self.final_time);
-			writejsdouble(fid,[modelname '.timeadaptation.time_step_min'],self.time_step_min);
-			writejsdouble(fid,[modelname '.timeadaptation.time_step_max'],self.time_step_max);
-			writejsdouble(fid,[modelname '.timeadaptation.cfl_coefficient'],self.cfl_coefficient);
-			writejsdouble(fid,[modelname '.timeadaptation.interp_forcings'],self.interp_forcings);
-
-		end % }}}
-	end
-end
Index: /issm/trunk-jpl/src/m/classes/timestepping.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/timestepping.js	(revision 21786)
+++ /issm/trunk-jpl/src/m/classes/timestepping.js	(revision 21787)
@@ -13,8 +13,4 @@
 		this.final_time=10.*this.time_step;
 
-		//time adaptation? 
-		this.time_adapt=0;
-		this.cfl_coefficient=0.5;
-
 		//should we interpolate forcings between timesteps?
 		this.interp_forcings=1;
@@ -28,6 +24,4 @@
 		fielddisplay(this,'final_time','final time to stop the simulation ['+ unit + ']');
 		fielddisplay(this,'time_step','length of time steps [' +unit+ ']');
-		fielddisplay(this,'time_adapt','use cfl condition to define time step ? (0 or 1) ');
-		fielddisplay(this,'cfl_coefficient','coefficient applied to cfl condition');
 		fielddisplay(this,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
 
@@ -37,32 +31,28 @@
 
 	}// }}}
-		this.checkconsistency = function(md,solution,analyses) { //{{{
-			
-			checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
-			checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
-			checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
-			checkfield(md,'fieldname','timestepping.time_adapt','numel',[1],'values',[0,1]);
-			checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
-			checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1]);
-			if (this.final_time-this.start_time<0){
-				md.checkmessage('timestepping.final_time should be larger than timestepping.start_time');
-			}
-		} // }}}
-		this.marshall=function(md,prefix,fid) { //{{{
+	this.checkconsistency = function(md,solution,analyses) { //{{{
 
-			var scale;
-			scale = md.constants.yts;
-			
-			WriteData(fid,prefix,'name','md.timestepping.type','data',1,'format','Integer');
-			WriteData(fid,prefix,'object',this,'fieldname','start_time','format','Double','scale',scale);
-			WriteData(fid,prefix,'object',this,'fieldname','final_time','format','Double','scale',scale);
-			WriteData(fid,prefix,'object',this,'fieldname','time_step','format','Double','scale',scale);
-			WriteData(fid,prefix,'object',this,'fieldname','time_adapt','format','Boolean');
-			WriteData(fid,prefix,'object',this,'fieldname','cfl_coefficient','format','Double');
-			WriteData(fid,prefix,'object',this,'fieldname','interp_forcings','format','Boolean');
+		checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
+		checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
+		checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
+		checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1]);
+		if (this.final_time-this.start_time<0){
+			md.checkmessage('timestepping.final_time should be larger than timestepping.start_time');
+		}
+	} // }}}
+	this.marshall=function(md,prefix,fid) { //{{{
 
-		}//}}}
-		this.fix=function() { //{{{
-		}//}}}
+		var scale;
+		scale = md.constants.yts;
+
+		WriteData(fid,prefix,'name','md.timestepping.type','data',1,'format','Integer');
+		WriteData(fid,prefix,'object',this,'fieldname','start_time','format','Double','scale',scale);
+		WriteData(fid,prefix,'object',this,'fieldname','final_time','format','Double','scale',scale);
+		WriteData(fid,prefix,'object',this,'fieldname','time_step','format','Double','scale',scale);
+		WriteData(fid,prefix,'object',this,'fieldname','interp_forcings','format','Boolean');
+
+	}//}}}
+	this.fix=function() { //{{{
+	}//}}}
 	//properties 
 	// {{{
@@ -70,6 +60,4 @@
 	this.final_time      = 0.;
 	this.time_step       = 0.;
-	this.time_adapt      = 0;
-	this.cfl_coefficient = 0.;
 	this.interp_forcings = 1;
 
Index: /issm/trunk-jpl/src/m/classes/timestepping.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/timestepping.m	(revision 21786)
+++ /issm/trunk-jpl/src/m/classes/timestepping.m	(revision 21787)
@@ -9,6 +9,4 @@
 		final_time      = 0.;
 		time_step       = 0.;
-		time_adapt      = 0;
-		cfl_coefficient = 0.;
 		interp_forcings = 1;
 	end
@@ -30,8 +28,4 @@
 			self.final_time=10.*self.time_step;
 
-			%time adaptation? 
-			self.time_adapt=0;
-			self.cfl_coefficient=0.5;
-
 			%should we interpolate forcings between timesteps?
 			self.interp_forcings=1;
@@ -42,6 +36,4 @@
 			md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
 			md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
-			md = checkfield(md,'fieldname','timestepping.time_adapt','numel',[1],'values',[0 1]);
-			md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
 			md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]);
 			if self.final_time-self.start_time<0,
@@ -56,6 +48,4 @@
 			fielddisplay(self,'final_time',['final time to stop the simulation [' unit ']']);
 			fielddisplay(self,'time_step',['length of time steps [' unit ']']);
-			fielddisplay(self,'time_adapt','use cfl condition to define time step ? (0 or 1) ');
-			fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition');
 			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
 
@@ -68,6 +58,4 @@
 			WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',scale);
 			WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',scale);
-			WriteData(fid,prefix,'object',self,'fieldname','time_adapt','format','Boolean');
-			WriteData(fid,prefix,'object',self,'fieldname','cfl_coefficient','format','Double');
 			WriteData(fid,prefix,'object',self,'fieldname','interp_forcings','format','Boolean');
 		end % }}}
@@ -77,6 +65,4 @@
 			writejsdouble(fid,[modelname '.timestepping.final_time'],self.final_time);
 			writejsdouble(fid,[modelname '.timestepping.time_step'],self.time_step);
-			writejsdouble(fid,[modelname '.timestepping.time_adapt'],self.time_adapt);
-			writejsdouble(fid,[modelname '.timestepping.cfl_coefficient'],self.cfl_coefficient);
 			writejsdouble(fid,[modelname '.timestepping.interp_forcings'],self.interp_forcings);
 
Index: /issm/trunk-jpl/src/m/classes/timestepping.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/timestepping.py	(revision 21786)
+++ /issm/trunk-jpl/src/m/classes/timestepping.py	(revision 21787)
@@ -15,6 +15,4 @@
 		self.final_time      = 0.
 		self.time_step       = 0.
-		self.time_adapt      = 0
-		self.cfl_coefficient = 0.
 		self.interp_forcings = 1
 		
@@ -28,6 +26,4 @@
 		string="%s\n%s"%(string,fielddisplay(self,"final_time","final time to stop the simulation [yr]"))
 		string="%s\n%s"%(string,fielddisplay(self,"time_step","length of time steps [yr]"))
-		string="%s\n%s"%(string,fielddisplay(self,"time_adapt","use cfl condition to define time step ? (0 or 1) "))
-		string="%s\n%s"%(string,fielddisplay(self,"cfl_coefficient","coefficient applied to cfl condition"))
 		string="%s\n%s"%(string,fielddisplay(self,"interp_forcings","interpolate in time between requested forcing values ? (0 or 1)"))
 		return string
@@ -41,8 +37,4 @@
 		self.final_time=10.*self.time_step
 
-		#time adaptation? 
-		self.time_adapt=0
-		self.cfl_coefficient=0.5
-		
 		#should we interpolate forcings between timesteps?
 		self.interp_forcings=1
@@ -55,6 +47,4 @@
 		md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1)
 		md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1)
-		md = checkfield(md,'fieldname','timestepping.time_adapt','numel',[1],'values',[0,1])
-		md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1)
 		if self.final_time-self.start_time<0:
 			md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
@@ -70,6 +60,4 @@
 		WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',yts)
 		WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',yts)
-		WriteData(fid,prefix,'object',self,'fieldname','time_adapt','format','Boolean')
-		WriteData(fid,prefix,'object',self,'fieldname','cfl_coefficient','format','Double')
 		WriteData(fid,prefix,'object',self,'fieldname','interp_forcings','format','Boolean')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/timesteppingadaptive.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/timesteppingadaptive.js	(revision 21787)
+++ /issm/trunk-jpl/src/m/classes/timesteppingadaptive.js	(revision 21787)
@@ -0,0 +1,78 @@
+//TIMESTEPPINGADAPTIVE class definition
+//
+//   Usage:
+//      timesteppingadaptive=new timesteppingadaptive();
+
+function timesteppingadaptive (){
+	//methods
+	this.setdefaultparameters = function(){// {{{
+		//time between 2 time steps
+		this.time_step_min=0.01;
+		this.time_step_max=10.;
+
+		//final time
+		this.final_time=10.*this.time_step_max;
+
+		//time adaptation? 
+		this.cfl_coefficient=0.5;
+
+		//should we interpolate forcings between timesteps?
+		this.interp_forcings=1;
+	}// }}}
+	this.disp= function(){// {{{
+
+		var unit;
+		console.log(sprintf('   timesteppingadaptive parameters:'));
+		unit = 'yr';
+		fielddisplay(this,'start_time','simulation starting time ['+ unit + ']');
+		fielddisplay(this,'final_time','final time to stop the simulation ['+ unit + ']');
+		fielddisplay(this,'time_step_min','minimum length of time steps [' +unit+ ']');
+		fielddisplay(this,'time_step_max','maximum length of time steps [' +unit+ ']');
+		fielddisplay(this,'cfl_coefficient','coefficient applied to cfl condition');
+		fielddisplay(this,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
+
+	}// }}}
+	this.classname= function(){// {{{
+		return "timesteppingadaptive";
+
+	}// }}}
+	this.checkconsistency = function(md,solution,analyses) { //{{{
+
+		checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
+		checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
+		checkfield(md,'fieldname','timestepping.time_step_min','numel',[1],'>=',0,'NaN',1,'Inf',1);
+		checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',md.timestepping.time_step_max,'NaN',1,'Inf',1);
+		checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
+		checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1]);
+		if (this.final_time-this.start_time<0){
+			md.checkmessage('timestepping.final_time should be larger than timestepping.start_time');
+		}
+	} // }}}
+	this.marshall=function(md,prefix,fid) { //{{{
+
+		var scale;
+		scale = md.constants.yts;
+
+		WriteData(fid,prefix,'name','md.timestepping.type','data',2,'format','Integer');
+		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','start_time','format','Double','scale',scale);
+		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','final_time','format','Double','scale',scale);
+		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','time_step_min','format','Double','scale',scale);
+		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','time_step_max','format','Double','scale',scale);
+		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','cfl_coefficient','format','Double');
+		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','interp_forcings','format','Boolean');
+
+	}//}}}
+	this.fix=function() { //{{{
+	}//}}}
+	//properties 
+	// {{{
+	this.start_time      = 0.;
+	this.final_time      = 0.;
+	this.time_step_min   = 0.;
+	this.time_step_max   = 0.;
+	this.cfl_coefficient = 0.;
+	this.interp_forcings = 1;
+
+	this.setdefaultparameters();
+	//}}}
+}
Index: /issm/trunk-jpl/src/m/classes/timesteppingadaptive.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/timesteppingadaptive.m	(revision 21787)
+++ /issm/trunk-jpl/src/m/classes/timesteppingadaptive.m	(revision 21787)
@@ -0,0 +1,87 @@
+%TIMESTEPPINGADAPTIVE Class definition
+%
+%   Usage:
+%      timesteppingadaptive=timesteppingadaptive();
+
+classdef timesteppingadaptive
+	properties (SetAccess=public) 
+		start_time      = 0.;
+		final_time      = 0.;
+		time_step_min   = 0.;
+		time_step_max   = 0.;
+		cfl_coefficient = 0.;
+		interp_forcings = 1;
+	end
+	methods
+		function self = timesteppingadaptive(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				case 1
+					self=structtoobj(timesteppingadaptive(),varargin{1});
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+
+			%time between 2 time steps
+			self.time_step_min = 0.01;
+			self.time_step_max = 10.;
+
+			%final time
+			self.final_time=10.*self.time_step_max;
+
+			%default CFL coefficient
+			self.cfl_coefficient=0.5;
+
+			%should we interpolate forcings between timesteps?
+			self.interp_forcings=1;
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','timestepping.time_step_min','numel',[1],'>=',0,'NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',md.timestepping.time_step_min,'NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
+			md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]);
+			if self.final_time-self.start_time<0,
+				md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time');
+			end 
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   timesteppingadaptive parameters:'));
+
+			unit = 'yr';
+			fielddisplay(self,'start_time',['simulation starting time [' unit ']']);
+			fielddisplay(self,'final_time',['final time to stop the simulation [' unit ']']);
+			fielddisplay(self,'time_step_min',['minimum length of time step [' unit ']']);
+			fielddisplay(self,'time_step_max',['maximum length of time step [' unit ']']);
+			fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition');
+			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+
+			scale = md.constants.yts;
+			WriteData(fid,prefix,'name','md.timestepping.type','data',2,'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','start_time','format','Double','scale',scale);
+			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','final_time','format','Double','scale',scale);
+			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_min','format','Double','scale',scale);
+			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',scale);
+			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double');
+			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean');
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.timesteppingadaptive.start_time'],self.start_time);
+			writejsdouble(fid,[modelname '.timesteppingadaptive.final_time'],self.final_time);
+			writejsdouble(fid,[modelname '.timesteppingadaptive.time_step_min'],self.time_step_min);
+			writejsdouble(fid,[modelname '.timesteppingadaptive.time_step_max'],self.time_step_max);
+			writejsdouble(fid,[modelname '.timesteppingadaptive.cfl_coefficient'],self.cfl_coefficient);
+			writejsdouble(fid,[modelname '.timesteppingadaptive.interp_forcings'],self.interp_forcings);
+
+		end % }}}
+	end
+end
Index: /issm/trunk-jpl/src/m/classes/timesteppingadaptive.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/timesteppingadaptive.py	(revision 21787)
+++ /issm/trunk-jpl/src/m/classes/timesteppingadaptive.py	(revision 21787)
@@ -0,0 +1,86 @@
+from fielddisplay import fielddisplay
+from checkfield import checkfield
+from WriteData import WriteData
+
+class timesteppingadaptive(object):
+	"""
+	TIMESTEPPINGADAPTIVE Class definition
+
+	   Usage:
+	      timesteppingadaptive=timesteppingadaptive();
+	"""
+
+	def __init__(self,*args): # {{{
+		if not len(args):
+			self.start_time      = 0.
+			self.final_time      = 0.
+			self.time_step_min   = 0.
+			self.time_step_max   = 0.
+			self.cfl_coefficient = 0.
+			self.interp_forcings = 1
+			
+			#set defaults
+			self.setdefaultparameters()
+
+		elif len(args)==1 and args[0].__module__=='timestepping':
+			old=args[0]
+			#first call setdefaultparameters: 
+			self.setdefaultparameters()
+			self.start_time      = old.start_time      
+			self.final_time      = old.final_time      
+			self.interp_forcings = old.interp_forcings 
+
+		else:
+			raise Exception('constructor not supported')
+		#}}}
+	def __repr__(self): # {{{
+		string="   timesteppingadaptive parameters:"
+		string="%s\n%s"%(string,fielddisplay(self,"start_time","simulation starting time [yr]"))
+		string="%s\n%s"%(string,fielddisplay(self,"final_time","final time to stop the simulation [yr]"))
+		string="%s\n%s"%(string,fielddisplay(self,"time_step_min","minimum length of time steps [yr]"))
+		string="%s\n%s"%(string,fielddisplay(self,"time_step_max","maximum length of time steps [yr]"))
+		string="%s\n%s"%(string,fielddisplay(self,"cfl_coefficient","coefficient applied to cfl condition"))
+		string="%s\n%s"%(string,fielddisplay(self,"interp_forcings","interpolate in time between requested forcing values ? (0 or 1)"))
+		return string
+		#}}}
+	def setdefaultparameters(self): # {{{
+		
+		#time between 2 time steps
+		self.time_step_min=0.01
+		self.time_step_max=10.
+
+		#final time
+		self.final_time=10.*self.time_step_max
+
+		#time adaptation? 
+		self.cfl_coefficient=0.5
+		
+		#should we interpolate forcings between timesteps?
+		self.interp_forcings=1
+
+		return self
+	#}}}
+	def checkconsistency(self,md,solution,analyses):    # {{{
+
+		md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1)
+		md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1)
+		md = checkfield(md,'fieldname','timestepping.time_step_min','numel',[1],'>=',0,'NaN',1,'Inf',1)
+		md = checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',md.timestepping.time_step_min,'NaN',1,'Inf',1)
+		md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1)
+		if self.final_time-self.start_time<0:
+			md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
+		md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1])
+
+		return md
+	# }}}
+	def marshall(self,prefix,md,fid):    # {{{
+
+		yts=md.constants.yts
+		WriteData(fid,prefix,'name','md.timestepping.type','data',2,'format','Integer');
+		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','start_time','format','Double','scale',yts)
+		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','final_time','format','Double','scale',yts)
+		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_min','format','Double','scale',yts)
+		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',yts)
+		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double')
+		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean')
+	# }}}
Index: /issm/trunk-jpl/test/NightlyRun/test226.js
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test226.js	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test226.js	(revision 21787)
@@ -6,5 +6,5 @@
 setflowequation(md,'SSA','all');
 //md.cluster=generic('name',oshostname(),'np',3);
-md.timestepping.time_adapt=1.;
+md.timestepping = timesteppingadaptive(md.timestepping);
 md.timestepping.final_time=15.;
 md=solve(md,'Transient');
Index: /issm/trunk-jpl/test/NightlyRun/test226.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test226.m	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test226.m	(revision 21787)
@@ -5,5 +5,5 @@
 md=setflowequation(md,'SSA','all');
 md.cluster=generic('name',oshostname(),'np',3);
-md.timestepping.time_adapt=1.;
+md.timestepping = timesteppingadaptive(md.timestepping);
 md.timestepping.final_time=15.;
 md=solve(md,'Transient');
Index: /issm/trunk-jpl/test/NightlyRun/test226.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test226.py	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test226.py	(revision 21787)
@@ -14,5 +14,5 @@
 md=setflowequation(md,'SSA','all')
 md.cluster=generic('name',gethostname(),'np',3)
-md.timestepping.time_adapt=1.
+md.timestepping = timesteppingadaptive(md.timestepping);
 md.timestepping.final_time=15.
 md=solve(md,'Transient')
Index: /issm/trunk-jpl/test/NightlyRun/test227.js
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test227.js	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test227.js	(revision 21787)
@@ -7,5 +7,5 @@
 setflowequation(md,'HO','all');
 //md.cluster=generic('name',oshostname(),'np',3);
-md.timestepping.time_adapt=1.;
+md.timestepping = timesteppingadaptive(md.timestepping);
 md.timestepping.final_time=20.;
 md=solve(md,'Transient');
Index: /issm/trunk-jpl/test/NightlyRun/test227.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test227.m	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test227.m	(revision 21787)
@@ -6,5 +6,5 @@
 md=setflowequation(md,'HO','all');
 md.cluster=generic('name',oshostname(),'np',3);
-md.timestepping.time_adapt=1.;
+md.timestepping = timesteppingadaptive(md.timestepping);
 md.timestepping.final_time=20.;
 md=solve(md,'Transient');
Index: /issm/trunk-jpl/test/NightlyRun/test227.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test227.py	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test227.py	(revision 21787)
@@ -15,5 +15,5 @@
 md=setflowequation(md,'HO','all')
 md.cluster=generic('name',gethostname(),'np',3)
-md.timestepping.time_adapt=1.
+md.timestepping = timesteppingadaptive(md.timestepping)
 md.timestepping.final_time=20.
 md=solve(md,'Transient')
Index: /issm/trunk-jpl/test/NightlyRun/test323.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test323.m	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test323.m	(revision 21787)
@@ -5,5 +5,6 @@
 md=setflowequation(md,'SSA','all');
 md.cluster=generic('name',oshostname(),'np',3);
-md.timestepping.time_adapt=1;
+md.timestepping = timesteppingadaptive(md.timestepping);
+md.timestepping.time_step_max = 10000.;
 md.timestepping.final_time=1120.;
 md=solve(md,'Transient');
Index: /issm/trunk-jpl/test/NightlyRun/test323.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test323.py	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test323.py	(revision 21787)
@@ -15,5 +15,6 @@
 md=setflowequation(md,'SSA','all')
 md.cluster=generic('name',gethostname(),'np',3)
-md.timestepping.time_adapt=1
+md.timestepping = timesteppingadaptive(md.timestepping);
+md.timestepping.time_step_max = 10000.;
 md.timestepping.final_time=1120.
 md=solve(md,'Transient')
Index: /issm/trunk-jpl/test/NightlyRun/test324.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test324.m	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test324.m	(revision 21787)
@@ -6,5 +6,6 @@
 md=setflowequation(md,'SIA','all');
 md.cluster=generic('name',oshostname(),'np',3);
-md.timestepping.time_adapt=1;
+md.timestepping = timesteppingadaptive(md.timestepping);
+md.timestepping.time_step_max = 10000.;
 md.timestepping.final_time=16000.;
 md=solve(md,'Transient');
Index: /issm/trunk-jpl/test/NightlyRun/test324.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test324.py	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test324.py	(revision 21787)
@@ -16,5 +16,6 @@
 md=setflowequation(md,'SIA','all')
 md.cluster=generic('name',gethostname(),'np',3)
-md.timestepping.time_adapt=1
+md.timestepping = timesteppingadaptive(md.timestepping);
+md.timestepping.time_step_max = 10000.;
 md.timestepping.final_time=16000.
 md=solve(md,'Transient')
Index: /issm/trunk-jpl/test/NightlyRun/test4001.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test4001.m	(revision 21786)
+++ /issm/trunk-jpl/test/NightlyRun/test4001.m	(revision 21787)
@@ -539,5 +539,4 @@
 	md.timestepping.final_time=final_time;
 	md.timestepping.time_step=time_step;
-	md.timestepping.time_adapt=0;
 	md.transient.isgroundingline=1;
 	md.transient.isthermal=0;
@@ -653,5 +652,4 @@
 	md.timestepping.final_time=final_time;
 	md.timestepping.time_step=time_step;
-	md.timestepping.time_adapt=0;
 	md.cluster=generic('name',oshostname(),'np',2);
 	md.results.TransientSolution.Base=md.geometry.base;
