Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 24359)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 24360)
@@ -61,5 +61,5 @@
 			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Tz",SmbTzEnum);
 			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Vz",SmbVzEnum);
-			InputUpdateFromConstantx(inputs2,elements,0.,SmbIsInitializedEnum);
+			InputUpdateFromConstantx(inputs2,elements,false,SmbIsInitializedEnum);
 			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Dzini",SmbDziniEnum);
 			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Dini",SmbDiniEnum);
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 24359)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 24360)
@@ -2067,5 +2067,5 @@
 
 	/*update input*/
-	this->SetBoolInput(this->inputs2,name,constant);
+	this->SetIntInput(this->inputs2,name,constant);
 }
 /*}}}*/
@@ -3301,4 +3301,12 @@
 			*parray_size      = 1;
 			break;
+		case ArrayInput2Enum:{
+			int M;
+			this->inputs2->GetArray(output_enum,this->lid,NULL,&M);
+			*pinterpolation   = P0ArrayEnum;
+			*pnodesperelement = 1;
+			*parray_size      = M;
+			}
+			break;
 		default:
 			_error_("Input type \""<<EnumToStringx(this->inputs2->GetInputObjectEnum(output_enum))<<"\" not supported yet");
@@ -3321,9 +3329,9 @@
 void       Element::ResultToMatrix(IssmDouble* values,int ncols,int output_enum){/*{{{*/
 
-	Input2* input=this->GetInput2(output_enum);
-	if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
-
-	_error_("not implemented yet");
-	//input->ResultToMatrix(values,ncols,this->Sid());
+	IssmDouble* array = NULL;
+	int         m;
+	this->inputs2->GetArray(output_enum,this->lid,&array,&m);
+	for(int i=0;i<m;i++) values[this->Sid()*ncols + i] = array[i];
+	xDelete<IssmDouble>(array);
 
 } /*}}}*/
@@ -3617,5 +3625,5 @@
 
 	/*Intermediary variables: {{{*/
-	IssmDouble isinitialized=0.0;
+	bool       isinitialized;
 	IssmDouble zTop=0.0;
 	IssmDouble dzTop=0.0;
@@ -3735,5 +3743,4 @@
 	/*}}}*/
 	/*Retrieve inputs: {{{*/
-	_error_("fix....");
 	Input2 *zTop_input          = this->GetInput2(SmbZTopEnum);         _assert_(zTop_input);
 	Input2 *dzTop_input         = this->GetInput2(SmbDzTopEnum);        _assert_(dzTop_input);
@@ -3749,12 +3756,5 @@
 	Input2 *teValue_input       = this->GetInput2(SmbTeValueEnum);      _assert_(teValue_input);
 	Input2 *aValue_input        = this->GetInput2(SmbAValueEnum);       _assert_(aValue_input);
-
-	TransientInput2 *Ta_input   = this->inputs2->GetTransientInput(SmbTaEnum);    _assert_(Ta_input);
-	TransientInput2 *V_input    = this->inputs2->GetTransientInput(SmbVEnum);     _assert_(V_input);
-	TransientInput2 *Dlwr_input = this->inputs2->GetTransientInput(SmbDlwrfEnum); _assert_(Dlwr_input);
-	TransientInput2 *Dswr_input = this->inputs2->GetTransientInput(SmbDswrfEnum); _assert_(Dswr_input);
-	TransientInput2 *P_input    = this->inputs2->GetTransientInput(SmbPEnum);     _assert_(P_input);
-	TransientInput2 *eAir_input = this->inputs2->GetTransientInput(SmbEAirEnum);  _assert_(eAir_input);
-	TransientInput2 *pAir_input = this->inputs2->GetTransientInput(SmbPAirEnum);  _assert_(pAir_input);
+	Input2 *EC_input            = this->GetInput2(SmbECiniEnum);        _assert_(EC_input);
 
 	/*Retrieve input values:*/
@@ -3778,32 +3778,21 @@
 
 	/*First, check that the initial structures have been setup in GEMB. If not, initialize profile variables: layer thickness dz, * density d, temperature T, etc. {{{*/
-	if(isinitialized==0.0){
+	if(!isinitialized){
 		if(VerboseSmb() && this->Sid()==0)_printf0_("smb core: Initializing grid\n");
 		//if(this->Sid()==1) for(int i=0;i<m;i++)_printf_("z[" << i << "]=" <<
 		//dz[i] << "\n");
 
-		DoubleArrayInput* dz_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbDziniEnum)); _assert_(dz_input);
-		DoubleArrayInput* d_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbDiniEnum));_assert_(d_input);
-		DoubleArrayInput* re_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbReiniEnum));_assert_(re_input);
-		DoubleArrayInput* gdn_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbGdniniEnum));_assert_(gdn_input);
-		DoubleArrayInput* gsp_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbGspiniEnum));_assert_(gsp_input);
-		DoubleInput* EC_input= dynamic_cast<DoubleInput*>(this->GetInput(SmbECiniEnum));_assert_(EC_input);
-		DoubleArrayInput* W_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbWiniEnum));_assert_(W_input);
-		DoubleArrayInput* a_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbAiniEnum));_assert_(a_input);
-		DoubleArrayInput* T_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbTiniEnum));_assert_(T_input);
-
-		dz_input->GetValues(&dzini,&m);
-		d_input->GetValues(&dini,&m);
-		re_input->GetValues(&reini,&m);
-		gdn_input->GetValues(&gdnini,&m);
-		gsp_input->GetValues(&gspini,&m);
-		EC_input->GetInputValue(&EC);
-		W_input->GetValues(&Wini,&m);
-		a_input->GetValues(&aini,&m);
-		T_input->GetValues(&Tini,&m);
+		this->inputs2->GetArray(SmbDziniEnum,this->lid,&dzini,&m);
+		this->inputs2->GetArray(SmbDiniEnum,this->lid,&dini,&m);
+		this->inputs2->GetArray(SmbReiniEnum,this->lid,&reini,&m);
+		this->inputs2->GetArray(SmbGdniniEnum,this->lid,&gdnini,&m);
+		this->inputs2->GetArray(SmbGspiniEnum,this->lid,&gspini,&m);
+		this->inputs2->GetArray(SmbWiniEnum,this->lid,&Wini,&m);
+		this->inputs2->GetArray(SmbAiniEnum,this->lid,&aini,&m);
+		this->inputs2->GetArray(SmbTiniEnum,this->lid,&Tini,&m);
+		EC_input->GetInputAverage(&EC);
 
 		/*Retrive the correct value of m (without the zeroes at the end)*/
-		Input* Size_input=this->GetInput(SmbSizeiniEnum); _assert_(Size_input);
-		Size_input->GetInputValue(&m);
+		this->GetInput2Value(&m,SmbSizeiniEnum);
 
 		if(m==2){ //Snow properties are initialized with default values. Vertical grid has to be initialized too
@@ -3813,11 +3802,11 @@
 			GembgridInitialize(&dz, &m, zTop, dzTop, zMax, zY);
 
-			d = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)d[i]=dini[0]; //ice density [kg m-3]
-			re = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)re[i]=reini[0];         //set grain size to old snow [mm]
-			gdn = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)gdn[i]=gdnini[0];         //set grain dentricity to old snow
-			gsp = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)gsp[i]=gspini[0];         //set grain sphericity to old snow
-			W = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)W[i]=Wini[0];             //set water content to zero [kg m-2]
-			a = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)a[i]=aini[0];         //set albedo equal to fresh snow [fraction]
-			T = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)T[i]=Tmean;         //set initial grid cell temperature to the annual mean temperature [K]
+			d = xNew<IssmDouble>(m); for(int i=0;i<m;i++)d[i]=dini[0]; //ice density [kg m-3]
+			re = xNew<IssmDouble>(m); for(int i=0;i<m;i++)re[i]=reini[0];         //set grain size to old snow [mm]
+			gdn = xNew<IssmDouble>(m); for(int i=0;i<m;i++)gdn[i]=gdnini[0];         //set grain dentricity to old snow
+			gsp = xNew<IssmDouble>(m); for(int i=0;i<m;i++)gsp[i]=gspini[0];         //set grain sphericity to old snow
+			W = xNew<IssmDouble>(m); for(int i=0;i<m;i++)W[i]=Wini[0];             //set water content to zero [kg m-2]
+			a = xNew<IssmDouble>(m); for(int i=0;i<m;i++)a[i]=aini[0];         //set albedo equal to fresh snow [fraction]
+			T = xNew<IssmDouble>(m); for(int i=0;i<m;i++)T[i]=Tmean;         //set initial grid cell temperature to the annual mean temperature [K]
 			/*/!\ Default value of T can not be retrived from SMBgemb.m (like other snow properties)
 			 *    because don't know Tmean yet when set default values.
@@ -3830,44 +3819,35 @@
 			//            if(VerboseSmb() && this->Sid()==0)_printf0_("Snow properties initialized w RESTART values\n");
 
-			dz = xNewZeroInit<IssmDouble>(m);for(int i=0;i<m;i++)dz[i]=dzini[i];
-			d = xNewZeroInit<IssmDouble>(m);for(int i=0;i<m;i++)d[i]=dini[i];
-			re = xNewZeroInit<IssmDouble>(m);for(int i=0;i<m;i++)re[i]=reini[i];
-			gdn = xNewZeroInit<IssmDouble>(m);for(int i=0;i<m;i++)gdn[i]=gdnini[i];
-			gsp = xNewZeroInit<IssmDouble>(m);for(int i=0;i<m;i++)gsp[i]=gspini[i];
-			W = xNewZeroInit<IssmDouble>(m);for(int i=0;i<m;i++)W[i]=Wini[i];
-			a = xNewZeroInit<IssmDouble>(m);for(int i=0;i<m;i++)a[i]=aini[i];
-			T = xNewZeroInit<IssmDouble>(m);for(int i=0;i<m;i++)T[i]=Tini[i];
+			dz = xNew<IssmDouble>(m);for(int i=0;i<m;i++)dz[i]=dzini[i];
+			d = xNew<IssmDouble>(m);for(int i=0;i<m;i++)d[i]=dini[i];
+			re = xNew<IssmDouble>(m);for(int i=0;i<m;i++)re[i]=reini[i];
+			gdn = xNew<IssmDouble>(m);for(int i=0;i<m;i++)gdn[i]=gdnini[i];
+			gsp = xNew<IssmDouble>(m);for(int i=0;i<m;i++)gsp[i]=gspini[i];
+			W = xNew<IssmDouble>(m);for(int i=0;i<m;i++)W[i]=Wini[i];
+			a = xNew<IssmDouble>(m);for(int i=0;i<m;i++)a[i]=aini[i];
+			T = xNew<IssmDouble>(m);for(int i=0;i<m;i++)T[i]=Tini[i];
 
 			//fixed lower temperature bounday condition - T is fixed
+			_assert_(m>0);
 			T_bottom=T[m-1];
 		}
 
 		/*Flag the initialization:*/
-		this->AddInput(new DoubleInput(SmbIsInitializedEnum,1.0));
+		this->SetBoolInput(this->inputs2,SmbIsInitializedEnum,true);
 	}
 	else{
 		/*Recover inputs: */
-		DoubleArrayInput* dz_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbDzEnum)); _assert_(dz_input);
-		DoubleArrayInput* d_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbDEnum));_assert_(d_input);
-		DoubleArrayInput* re_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbReEnum));_assert_(re_input);
-		DoubleArrayInput* gdn_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbGdnEnum));_assert_(gdn_input);
-		DoubleArrayInput* gsp_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbGspEnum));_assert_(gsp_input);
-		DoubleInput* EC_input= dynamic_cast<DoubleInput*>(this->GetInput(SmbECEnum));_assert_(EC_input);
-		DoubleArrayInput* W_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbWEnum));_assert_(W_input);
-		DoubleArrayInput* a_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbAEnum));_assert_(a_input);
-		DoubleArrayInput* T_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbTEnum));_assert_(T_input);
-
-		/*Recover arrays: */
-		dz_input->GetValues(&dz,&m);
-		d_input->GetValues(&d,&m);
-		re_input->GetValues(&re,&m);
-		gdn_input->GetValues(&gdn,&m);
-		gsp_input->GetValues(&gsp,&m);
-		EC_input->GetInputValue(&EC);
-		W_input->GetValues(&W,&m);
-		a_input->GetValues(&a,&m);
-		T_input->GetValues(&T,&m);
+		this->inputs2->GetArray(SmbDzEnum,this->lid,&dzini,&m);
+		this->inputs2->GetArray(SmbDEnum,this->lid,&dini,&m);
+		this->inputs2->GetArray(SmbReEnum,this->lid,&reini,&m);
+		this->inputs2->GetArray(SmbGdnEnum,this->lid,&gdnini,&m);
+		this->inputs2->GetArray(SmbGspEnum,this->lid,&gspini,&m);
+		this->inputs2->GetArray(SmbWEnum,this->lid,&Wini,&m);
+		this->inputs2->GetArray(SmbAEnum,this->lid,&aini,&m);
+		this->inputs2->GetArray(SmbTEnum,this->lid,&Tini,&m);
+		EC_input->GetInputAverage(&EC);
 
 		//fixed lower temperature bounday condition - T is fixed
+		_assert_(m>0);
 		T_bottom=T[m-1];
 
@@ -3888,7 +3868,8 @@
 	if (isclimatology){
 		//If this is a climatology, we need to repeat the forcing after the final time
-		offsetend = Ta_input->GetTimeInputOffset(finaltime);
-		time0     = Ta_input->GetTimeByOffset(-1);
-		timeend   = Ta_input->GetTimeByOffset(offsetend);
+		TransientInput2* Ta_input_tr  = this->inputs2->GetTransientInput(SmbTaEnum);    _assert_(Ta_input_tr);
+		offsetend = Ta_input_tr->GetTimeInputOffset(finaltime);
+		time0     = Ta_input_tr->GetTimeByOffset(-1);
+		timeend   = Ta_input_tr->GetTimeByOffset(offsetend);
 		if (time>time0 & timeend>time0){
 			delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));
@@ -3903,14 +3884,14 @@
 		if(VerboseSmb() && this->Sid()==0 && IssmComm::GetRank()==0)_printf0_("Time: t=" << setprecision(8) << t/365.0/24.0/3600.0 << " yr/" << (time+dt)/365.0/24.0/3600.0 << " yr" << setprecision(3) << " Step: " << count << "\n");
 
-		Input2* Ta_input2  = this->GetInput2(SmbTaEnum,t-time+timeclim);    _assert_(Ta_input2);
-		Input2 *V_input2   = this->GetInput2(SmbVEnum,t-time+timeclim);     _assert_(V_input);
-		Input2 *Dlwr_input2= this->GetInput2(SmbDlwrfEnum,t-time+timeclim); _assert_(Dlwr_input);
-		Input2 *Dswr_input2= this->GetInput2(SmbDswrfEnum,t-time+timeclim); _assert_(Dswr_input);
-		Input2 *P_input2   = this->GetInput2(SmbPEnum,t-time+timeclim);     _assert_(P_input);
-		Input2 *eAir_input2= this->GetInput2(SmbEAirEnum,t-time+timeclim);  _assert_(eAir_input);
-		Input2 *pAir_input2= this->GetInput2(SmbPAirEnum,t-time+timeclim);  _assert_(pAir_input);
+		Input2* Ta_input  = this->GetInput2(SmbTaEnum,t-time+timeclim);    _assert_(Ta_input);
+		Input2 *V_input   = this->GetInput2(SmbVEnum,t-time+timeclim);     _assert_(V_input);
+		Input2 *Dlwr_input= this->GetInput2(SmbDlwrfEnum,t-time+timeclim); _assert_(Dlwr_input);
+		Input2 *Dswr_input= this->GetInput2(SmbDswrfEnum,t-time+timeclim); _assert_(Dswr_input);
+		Input2 *P_input   = this->GetInput2(SmbPEnum,t-time+timeclim);     _assert_(P_input);
+		Input2 *eAir_input= this->GetInput2(SmbEAirEnum,t-time+timeclim);  _assert_(eAir_input);
+		Input2 *pAir_input= this->GetInput2(SmbPAirEnum,t-time+timeclim);  _assert_(pAir_input);
 
 		/*extract daily data:{{{*/
-		Ta_input2->GetInputValue(&Ta,gauss);//screen level air temperature [K]
+		Ta_input->GetInputValue(&Ta,gauss);//screen level air temperature [K]
 		V_input->GetInputValue(&V,gauss);  //wind speed [m s-1]
 		Dlwr_input->GetInputValue(&dlw,gauss);   //downward longwave radiation flux [W m-2]
Index: /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.cpp	(revision 24359)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.cpp	(revision 24360)
@@ -83,2 +83,16 @@
 }
 /*}}}*/
+void ArrayInput2::GetArray(int row,IssmDouble** pvalues,int* pN){/*{{{*/
+
+	_assert_(this);
+	_assert_(row>=0 && row<this->numberofelements_local);
+	if(pvalues){
+		IssmDouble* outvalues = xNew<IssmDouble>(this->N);
+		xMemCpy<IssmDouble>(outvalues,this->values,this->N);
+		*pvalues = outvalues;
+	}
+	if(pN){
+		*pN = this->N;
+	}
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.h	(revision 24359)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.h	(revision 24360)
@@ -26,7 +26,7 @@
 		int     ObjectEnum();
 		/*}}}*/
-		/*ArrayInput2 management: {{{*/
+		/*ArrayInput2 management:*/
 		void SetInput(int row,int numinds,IssmDouble* values_in);
-		/*}}}*/
+		void GetArray(int row,IssmDouble** pvalues,int* pN);
 
 };
Index: /issm/trunk-jpl/src/c/classes/Inputs2/Input2.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/Input2.h	(revision 24359)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/Input2.h	(revision 24360)
@@ -36,5 +36,5 @@
 		virtual IssmDouble GetInputMin(void){_error_("Not implemented yet");};
 		virtual void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss){_error_("Not implemented yet");};
-		virtual void GetInputValue(IssmDouble* pvalue,Gauss* gauss){int* temp = xNew<int>(3); _error_("Not implemented yet");};
+		virtual void GetInputValue(IssmDouble* pvalue,Gauss* gauss){int* temp = xNew<int>(3); _error_("Not implemented yet for");};
 		virtual int  GetInputInterpolationType(){_error_("Not implemented yet");};
 		virtual SegInput2*   GetSegInput(){ int* temp = xNew<int>(3); this->Echo(); _error_("Not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.cpp	(revision 24359)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.cpp	(revision 24360)
@@ -232,6 +232,11 @@
 	/*Make sure this parameter is at the right place*/
 	#ifdef _ISSM_DEBUG_
-	if(enum_in<=InputsSTARTEnum) _error_("Enum "<<EnumToStringx(enum_in)<<" should appear after InputsSTARTEnum");
-	if(enum_in>=InputsENDEnum)   _error_("Enum "<<EnumToStringx(enum_in)<<" should appear before InputsENDEnum");
+	if(enum_in<=InputsSTARTEnum){
+		//int* temp = xNew<int>(3);
+		_error_("Enum "<<EnumToStringx(enum_in)<<" should appear after InputsSTARTEnum");
+	}
+	if(enum_in>=InputsENDEnum){
+		_error_("Enum "<<EnumToStringx(enum_in)<<" should appear before InputsENDEnum");
+	}
 	#endif
 	return enum_in - InputsSTARTEnum -1;
@@ -428,4 +433,21 @@
 	return xDynamicCast<ControlInput2*>(input);
 }/*}}}*/
+void Inputs2::GetArray(int enum_in,int row,IssmDouble** pvalues,int* pN){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=ArrayInput2Enum) _error_(EnumToStringx(this->inputs[id]->ObjectEnum())<<" cannot return an array");
+	}
+	else{
+		_error_("Input "<<EnumToStringx(enum_in)<<" not found");
+	}
+
+	/*Set input*/
+	ArrayInput2* input = xDynamicCast<ArrayInput2*>(this->inputs[id]);
+	input->GetArray(row,pvalues,pN);
+}/*}}}*/
 void Inputs2::GetInputValue(bool* pvalue,int enum_in,int index){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.h	(revision 24359)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.h	(revision 24360)
@@ -50,4 +50,5 @@
 		bool     Exist(int enum_type);
 		void     GetInputsInterpolations(int* pnuminputs,int** pinterpolations,int** penum);
+		void             GetArray(int enum_in,int row,IssmDouble** pvalues,int* pN);
 		SegInput2*       GetSegInput(int enum_type);
 		TriaInput2*      GetTriaInput(int enum_type);
Index: /issm/trunk-jpl/src/c/classes/Inputs2/TriaInput2.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/TriaInput2.cpp	(revision 24359)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/TriaInput2.cpp	(revision 24360)
@@ -104,5 +104,5 @@
 		_printf_("   current values:      ");
 		_printf_("[ ");
-		for(int i=0;i<3;i++) _printf_(" "<<this->element_values[i]);
+		for(int i=0;i<TriaRef::NumberofNodes(this->interpolation);i++) _printf_(" "<<this->element_values[i]);
 		_printf_("] ("<<EnumToStringx(this->interpolation)<<")\n");
 	}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 24359)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 24360)
@@ -58,5 +58,14 @@
 		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
 		element->SetElementInput(inputs2,name,constant);
-		//element->InputUpdateFromConstant(constant,name);
 	}
 }
+void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,bool constant, int name){
+
+	if(VerboseModule()) _printf0_("   Input updates from constant\n");
+
+	/*Elements and loads drive the update: */
+	for(int i=0;i<elements->Size();i++){
+		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+		element->SetBoolInput(inputs2,name,constant);
+	}
+}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 24359)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 24360)
@@ -14,4 +14,5 @@
 void InputUpdateFromConstantx(FemModel* femmodel,IssmDouble constant,int name);
 void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,IssmDouble constant,int name);
+void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,bool       constant,int name);
 
 #endif  /* _UPDATEINPUTSFROMCONSTANTXX_H */
