Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h	(revision 14809)
@@ -56,4 +56,5 @@
 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
+		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
 		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
 		void GetVyStrainRate2d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h	(revision 14809)
@@ -61,4 +61,5 @@
 		void GetInputAverage(IssmDouble* pvalue);
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
+		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
 		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
 		void GetVyStrainRate2d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h	(revision 14809)
@@ -55,4 +55,5 @@
 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
+		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
 		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
 		void GetVyStrainRate2d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h	(revision 14809)
@@ -55,4 +55,5 @@
 		void GetInputAverage(IssmDouble* pvalue);
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
+		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
 		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss);
 		void GetVyStrainRate2d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussTria* gauss);
Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/Input.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/Input.h	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/Input.h	(revision 14809)
@@ -35,4 +35,5 @@
 		virtual void GetInputAverage(IssmDouble* pvalue)=0;
 		virtual void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes)=0;
+		virtual void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime)=0;
 		virtual void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss)=0;
 		virtual void GetVyStrainRate2d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussTria* gauss)=0;
Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/IntInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/IntInput.h	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/IntInput.h	(revision 14809)
@@ -56,4 +56,5 @@
 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
+		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
 
 		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h	(revision 14809)
@@ -56,4 +56,5 @@
 		void GetInputAverage(IssmDouble* pvalue);
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
+		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
 
 		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 14809)
@@ -247,5 +247,5 @@
 }
 /*}}}*/
-/*FUNCTION TransientInput::GetInputAverages{{{*/
+/*FUNCTION TransientInput::GetInputAllTimeAverages{{{*/
 void TransientInput::GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){
 
@@ -262,4 +262,48 @@
 		input->GetInputAverage(values+i);
 		times[i]=this->timesteps[i];
+	}
+
+	*pvalues=values;
+	*ptimes=times;
+	*pnumtimes=numtimesteps;
+}
+/*}}}*/
+/*FUNCTION TransientInput::GetInputUpToCurrentTimeAverages{{{*/
+void TransientInput::GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){
+
+	int i;
+	IssmDouble* times=NULL;
+	IssmDouble* values=NULL;
+	int numsteps;
+	int count;
+	bool iscurrenttime_included=false;
+
+	/*Figure out how many time steps we are going to return: */
+	numsteps=0;
+	for(i=0;i<numtimesteps;i++){
+		if(this->timesteps[i]==currenttime)iscurrenttime_included=true;
+		if (this->timesteps[i]>currenttime)break;
+		else numsteps++;
+	}
+	if(iscurrenttime_included==false)numsteps++;
+
+	/*allocate: */
+	times=xNew<IssmDouble>(numsteps);
+	values=xNew<IssmDouble>(numsteps);
+
+	for(i=0;i<numsteps;i++){
+
+		if((iscurrenttime_included==false) && (i==(numsteps-1))){
+			
+			/*Retrieve interpolated values for current time step: */
+			Input* input=GetTimeInput(currenttime);
+			input->GetInputAverage(values+i);
+			times[i]=currenttime;
+		}
+		else{
+			Input* input=(Input*)this->inputs->GetObjectByOffset(i);
+			input->GetInputAverage(values+i);
+			times[i]=this->timesteps[i];
+		}
 	}
 
Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h	(revision 14809)
@@ -58,4 +58,5 @@
 		void GetInputAverage(IssmDouble* pvalue);
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes);
+		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
 		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
 		void GetVyStrainRate2d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp	(revision 14809)
@@ -201,4 +201,24 @@
 }
 /*}}}*/
+/*FUNCTION TriaP1Input::GetInputUpToCurrentTimeAverages{{{*/
+void TriaP1Input::GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){
+
+	IssmDouble* outvalues=NULL;
+	IssmDouble* times=NULL;
+	int         numtimes;
+
+	/*this is not a transient forcing, so we only have 1 value, steady state: */
+	numtimes=1;
+	outvalues=xNew<IssmDouble>(1);
+	times=xNew<IssmDouble>(1);
+	
+	outvalues[0]=1./3.*(values[0]+values[1]+values[2]);
+	times[0]=currenttime; /*we don't have a time*/
+
+	*pvalues=outvalues;
+	*ptimes=times;
+	*pnumtimes=numtimes;
+}
+/*}}}*/
 
 
Index: /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h	(revision 14808)
+++ /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h	(revision 14809)
@@ -56,4 +56,5 @@
 		void GetInputAverage(IssmDouble* pvalue);
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes);
+		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
 		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss);
 		void GetVyStrainRate2d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussTria* gauss);
