Index: /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.cpp	(revision 24363)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.cpp	(revision 24364)
@@ -17,19 +17,23 @@
 
 	this->numberofelements_local = -1;
-	this->N                      = -1;
+	this->N                      = NULL;
 	this->values                 = NULL;
 
 }/*}}}*/
-ArrayInput2::ArrayInput2(int nbe_in,int N_in){/*{{{*/
+ArrayInput2::ArrayInput2(int nbe_in){/*{{{*/
 
 	_assert_(nbe_in>0);
 	_assert_(nbe_in<1e11);
 	this->numberofelements_local = nbe_in;
-	this->N                      = N_in;
-	this->values                 = xNewZeroInit<IssmDouble>(this->numberofelements_local*this->N);
+	this->N                      = xNewZeroInit<int>(this->numberofelements_local);
+	this->values                 = xNewZeroInit<IssmDouble*>(this->numberofelements_local);
 
 }/*}}}*/
 ArrayInput2::~ArrayInput2(){/*{{{*/
-	if(this->values) xDelete<IssmDouble>(this->values);
+	if(this->values){
+		for(int i=0;i<this->numberofelements_local;i++) if(this->values[i]) xDelete<IssmDouble>(this->values[i]);
+		xDelete<IssmDouble>(this->values);
+	}
+	if(this->N) xDelete<int>(this->N);
 }
 /*}}}*/
@@ -38,6 +42,20 @@
 Input2* ArrayInput2::copy() {/*{{{*/
 
-	ArrayInput2* output = new ArrayInput2(this->numberofelements_local,this->N);
-	xMemCpy<IssmDouble>(output->values,this->values,this->numberofelements_local*this->N);
+	ArrayInput2* output = new ArrayInput2(this->numberofelements_local);
+
+	output->N = xNew<int>(this->numberofelements_local);
+	xMemCpy<int>(output->N,this->N,this->numberofelements_local);
+
+	output->values = xNew<IssmDouble*>(this->numberofelements_local);
+	for(int i=0;i<this->numberofelements_local;i++){
+		if(this->values[i]){
+			_assert_(this->N[i]>0);
+			output->values[i] = xNew<IssmDouble>(this->N[i]);
+			xMemCpy<IssmDouble>(output->values[i],this->values[i],this->N[i]);
+		}
+		else{
+			output->values[i] = NULL;
+		}
+	}
 
 	return output;
@@ -46,5 +64,5 @@
 void ArrayInput2::DeepEcho(void){/*{{{*/
 	_printf_("ArrayInput2 Echo:\n");
-	_printf_("   Size:          "<<N<<"\n");
+	///_printf_("   Size:          "<<N<<"\n");
 	//printarray(this->values,this->M,this->N);
 	//_printf_(setw(15)<<"   ArrayInput2 "<<setw(25)<<left<<EnumToStringx(this->enum_type)<<" "<<(value?"true":"false") << "\n");
@@ -62,9 +80,16 @@
 	MARSHALLING_ENUM(ArrayInput2Enum);
 	MARSHALLING(this->numberofelements_local);
-	MARSHALLING(this->N);
-	if(this->numberofelements_local*this->N){
-		MARSHALLING_DYNAMIC(this->values,IssmDouble,this->numberofelements_local*this->N);
+	if(this->numberofelements_local){
+		MARSHALLING_DYNAMIC(this->N,int,this->numberofelements_local);
+		for(int i=0;i<this->numberofelements_local;i++){
+			if(this->values[i]){
+				MARSHALLING_DYNAMIC(this->values[i],IssmDouble,this->N[i]);
+			}
+		}
 	}
-	else this->values = NULL;
+	else{
+		this->N      = NULL;
+		this->values = NULL;
+	}
 
 }
@@ -79,6 +104,15 @@
 
 	_assert_(this);
-	_assert_(this->N==numindices);
-	for(int i=0;i<numindices;i++) this->values[row*this->N+i] = values_in[i];
+	_assert_(row>=0 && row<this->numberofelements_local);
+
+	if(this->N[row] != numindices){
+		if(this->values[row]) xDelete<IssmDouble>(this->values[row]);
+		this->values[row] = xNew<IssmDouble>(numindices);
+	}
+
+	IssmDouble *el_values = this->values[row];
+	for(int i=0;i<numindices;i++) el_values[i] = values_in[i];
+
+	this->N[row] = numindices;
 }
 /*}}}*/
@@ -88,10 +122,10 @@
 	_assert_(row>=0 && row<this->numberofelements_local);
 	if(pvalues){
-		IssmDouble* outvalues = xNew<IssmDouble>(this->N);
-		xMemCpy<IssmDouble>(outvalues,this->values,this->N);
+		IssmDouble* outvalues = xNew<IssmDouble>(this->N[row]);
+		xMemCpy<IssmDouble>(outvalues,this->values[row],this->N[row]);
 		*pvalues = outvalues;
 	}
 	if(pN){
-		*pN = this->N;
+		*pN = this->N[row];
 	}
 }
Index: /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.h	(revision 24363)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/ArrayInput2.h	(revision 24364)
@@ -9,11 +9,11 @@
 	private:
 		int         numberofelements_local;
-		int         N;
-		IssmDouble* values;
+		int*        N;
+		IssmDouble** values;
 
 	public:
 		/*ArrayInput2 constructors, destructors: {{{*/
 		ArrayInput2();
-		ArrayInput2(int nbe_in,int N_in);
+		ArrayInput2(int nbe_in);
 		~ArrayInput2();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.cpp	(revision 24363)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.cpp	(revision 24364)
@@ -554,5 +554,5 @@
 
 	if(recreate){
-		this->inputs[id] = new ArrayInput2(this->numberofelements_local,numlayers);
+		this->inputs[id] = new ArrayInput2(this->numberofelements_local);
 	}
 
