Index: /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 6164)
+++ /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 6165)
@@ -135,4 +135,5 @@
 	DoubleVecParamEnum,
 	IntParamEnum,
+	IntVecParamEnum,
 	FileParamEnum,
 	PetscMatParamEnum,
Index: /issm/trunk/src/c/EnumDefinitions/EnumToString.cpp
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumToString.cpp	(revision 6164)
+++ /issm/trunk/src/c/EnumDefinitions/EnumToString.cpp	(revision 6165)
@@ -117,4 +117,5 @@
 		case DoubleVecParamEnum : return "DoubleVecParam";
 		case IntParamEnum : return "IntParam";
+		case IntVecParamEnum : return "IntVecParam";
 		case FileParamEnum : return "FileParam";
 		case PetscMatParamEnum : return "PetscMatParam";
Index: /issm/trunk/src/c/EnumDefinitions/StringToEnum.cpp
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/StringToEnum.cpp	(revision 6164)
+++ /issm/trunk/src/c/EnumDefinitions/StringToEnum.cpp	(revision 6165)
@@ -115,4 +115,5 @@
 	else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
 	else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+	else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
 	else if (strcmp(name,"FileParam")==0) return FileParamEnum;
 	else if (strcmp(name,"PetscMatParam")==0) return PetscMatParamEnum;
Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 6164)
+++ /issm/trunk/src/c/Makefile.am	(revision 6165)
@@ -181,4 +181,6 @@
 					./objects/Params/IntParam.cpp\
 					./objects/Params/IntParam.h\
+					./objects/Params/IntVecParam.cpp\
+					./objects/Params/IntVecParam.h\
 					./objects/Params/DoubleParam.cpp\
 					./objects/Params/DoubleParam.h\
@@ -745,4 +747,6 @@
 					./objects/Params/IntParam.cpp\
 					./objects/Params/IntParam.h\
+					./objects/Params/IntVecParam.cpp\
+					./objects/Params/IntVecParam.h\
 					./objects/Params/DoubleParam.cpp\
 					./objects/Params/DoubleParam.h\
Index: /issm/trunk/src/c/objects/Params/BoolParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/BoolParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/BoolParam.h	(revision 6165)
@@ -51,4 +51,5 @@
 		void  GetParameterValue(bool* pbool){*pbool=value;}
 		void  GetParameterValue(int* pinteger){ISSMERROR("Bool param of enum %i (%s) cannot return an integer",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("Bool param of enum %i (%s) cannot return an array of integers",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){ISSMERROR("Bool param of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(char** pstring){ISSMERROR("Bool param of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
@@ -63,4 +64,5 @@
 		void  SetValue(bool boolean){this->value=boolean;}
 		void  SetValue(int integer){this->value=(bool)integer;}
+		void  SetValue(int* intarray,int M){ISSMERROR("Bool param of enum %i (%s) cannot hold an int array",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){this->value=(bool)scalar;}
 		void  SetValue(char* string){ISSMERROR("Bool param of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
Index: /issm/trunk/src/c/objects/Params/DoubleMatArrayParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/DoubleMatArrayParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/DoubleMatArrayParam.h	(revision 6165)
@@ -54,4 +54,5 @@
 		void  GetParameterValue(bool* pbool){ISSMERROR("DoubleMatArray param of enum %i (%s) cannot return a bool",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(int* pinteger){ISSMERROR("DoubleMatArray param of enum %i (%s) cannot return an integer",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("DoubleMatArray param of enum %i (%s) cannot return an array of integers",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){ISSMERROR("DoubleMatArray param of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(char** pstring){ISSMERROR("DoubleMatArray param of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
@@ -66,4 +67,5 @@
 		void  SetValue(bool boolean){ISSMERROR("DoubleMatArray param of enum %i (%s) cannot hold a boolean",enum_type,EnumToString(enum_type));}
 		void  SetValue(int integer){ISSMERROR("DoubleMatArray param of enum %i (%s) cannot hold an integer",enum_type,EnumToString(enum_type));}
+		void  SetValue(int* intarray,int M){ISSMERROR("DoubleMatArray param of enum %i (%s) cannot hold an int array",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){ISSMERROR("DoubleMatArray param of enum %i (%s) cannot hold a scalar",enum_type,EnumToString(enum_type));}
 		void  SetValue(char* string){ISSMERROR("DoubleMatArray param of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
Index: /issm/trunk/src/c/objects/Params/DoubleMatParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/DoubleMatParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/DoubleMatParam.h	(revision 6165)
@@ -53,4 +53,5 @@
 		void  GetParameterValue(bool* pbool){ISSMERROR("DoubleMat param of enum %i (%s) cannot return a bool",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(int* pinteger){ISSMERROR("DoubleMat param of enum %i (%s) cannot return an integer",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("DoubleMat param of enum %i (%s) cannot return an array of integers",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){ISSMERROR("DoubleMat param of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(char** pstring){ISSMERROR("DoubleMat param of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
@@ -65,4 +66,5 @@
 		void  SetValue(bool boolean){ISSMERROR("DoubleMat param of enum %i (%s) cannot hold a boolean",enum_type,EnumToString(enum_type));}
 		void  SetValue(int integer){ISSMERROR("DoubleMat param of enum %i (%s) cannot hold an integer",enum_type,EnumToString(enum_type));}
+		void  SetValue(int* intarray,int M){ISSMERROR("DoubleMat param of enum %i (%s) cannot hold an int array",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){ISSMERROR("DoubleMat param of enum %i (%s) cannot hold a scalar",enum_type,EnumToString(enum_type));}
 		void  SetValue(char* string){ISSMERROR("DoubleMat param of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
Index: /issm/trunk/src/c/objects/Params/DoubleParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/DoubleParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/DoubleParam.h	(revision 6165)
@@ -52,4 +52,5 @@
 		void  GetParameterValue(bool* pbool);
 		void  GetParameterValue(int* pinteger);
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("Double param of enum %i (%s) cannot return an array of integers",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){*pdouble=value;}
 		void  GetParameterValue(char** pstring){ISSMERROR("Double param of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
@@ -64,4 +65,5 @@
 		void  SetValue(bool boolean){this->value=(double)boolean;}
 		void  SetValue(int integer){this->value=(double)integer;}
+		void  SetValue(int* intarray,int M){ISSMERROR("Double param of enum %i (%s) cannot hold an int array",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){this->value=(double)scalar;}
 		void  SetValue(char* string){ISSMERROR("Double param of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
Index: /issm/trunk/src/c/objects/Params/DoubleVecParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/DoubleVecParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/DoubleVecParam.h	(revision 6165)
@@ -52,4 +52,5 @@
 		void  GetParameterValue(bool* pbool){ISSMERROR("DoubleVec param of enum %i (%s) cannot return a bool",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(int* pinteger){ISSMERROR("DoubleVec param of enum %i (%s) cannot return an integer",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("DoubleVec param of enum %i (%s) cannot return an array of integers",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){ISSMERROR("DoubleVec param of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(char** pstring){ISSMERROR("DoubleVec param of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
@@ -64,4 +65,5 @@
 		void  SetValue(bool boolean){ISSMERROR("DoubleVec param of enum %i (%s) cannot hold a boolean",enum_type,EnumToString(enum_type));}
 		void  SetValue(int integer){ISSMERROR("DoubleVec param of enum %i (%s) cannot hold an integer",enum_type,EnumToString(enum_type));}
+		void  SetValue(int* intarray,int M){ISSMERROR("DoubleVec param of enum %i (%s) cannot hold an int array",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){ISSMERROR("DoubleVec param of enum %i (%s) cannot hold a scalar",enum_type,EnumToString(enum_type));}
 		void  SetValue(char* string){ISSMERROR("DoubleVec param of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
Index: /issm/trunk/src/c/objects/Params/FileParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/FileParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/FileParam.h	(revision 6165)
@@ -51,4 +51,5 @@
 		void  GetParameterValue(bool* pbool){  ISSMERROR("FileParam of enum %i (%s) cannot return a bool",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(int* pinteger){ISSMERROR("FileParam of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("FileParam of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){ISSMERROR("FileParam of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(char** pstring){ISSMERROR("FileParam of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
@@ -63,4 +64,5 @@
 		void  SetValue(bool boolean){ISSMERROR("FileParam of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
 		void  SetValue(int integer){ISSMERROR("FileParam of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
+		void  SetValue(int* intarray,int M){ISSMERROR("FileParam of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){ISSMERROR("FileParam of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
 		void  SetValue(char* string){ISSMERROR("FileParam of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
Index: /issm/trunk/src/c/objects/Params/IntParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/IntParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/IntParam.h	(revision 6165)
@@ -52,4 +52,5 @@
 		void  GetParameterValue(bool* pbool){ISSMERROR("Int param of enum %i (%s) cannot return a bool",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(int* pinteger){*pinteger=value;}
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("Int param of enum %i (%s) cannot return an array of integers",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){ISSMERROR("Int param of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(char** pstring){ISSMERROR("Int param of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
@@ -64,4 +65,5 @@
 		void  SetValue(bool boolean){this->value=(int)boolean;}
 		void  SetValue(int integer){this->value=integer;}
+		void  SetValue(int* intarray,int M){ISSMERROR("Int param of enum %i (%s) cannot hold an int array",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){this->value=(int)scalar;}
 		void  SetValue(char* string){ISSMERROR("Int param of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
Index: /issm/trunk/src/c/objects/Params/IntVecParam.cpp
===================================================================
--- /issm/trunk/src/c/objects/Params/IntVecParam.cpp	(revision 6165)
+++ /issm/trunk/src/c/objects/Params/IntVecParam.cpp	(revision 6165)
@@ -0,0 +1,202 @@
+/*!\file IntVecParam.c
+ * \brief: implementation of the IntVecParam object
+ */
+
+/*header files: */
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*IntVecParam constructors and destructor*/
+/*FUNCTION IntVecParam::IntVecParam(){{{1*/
+IntVecParam::IntVecParam(){
+	return;
+}
+/*}}}*/
+/*FUNCTION IntVecParam::IntVecParam(int enum_type,int* values,int M){{{1*/
+IntVecParam::IntVecParam(int in_enum_type,int* in_values, int in_M){
+
+	enum_type=in_enum_type;
+	M=in_M;
+
+	values=(int*)xmalloc(M*sizeof(int));
+	memcpy(values,in_values,M*sizeof(int));
+}
+/*}}}*/
+/*FUNCTION IntVecParam::~IntVecParam(){{{1*/
+IntVecParam::~IntVecParam(){
+	xfree((void**)&values);
+	return;
+}
+/*}}}*/
+
+/*Object virtual functions definitions:*/
+/*FUNCTION IntVecParam::Echo {{{1*/
+void IntVecParam::Echo(void){
+
+	printf("IntVecParam:\n");
+	printf("   enum: %i (%s)\n",this->enum_type,EnumToString(this->enum_type));
+	printf("   vector size: %i\n",this->M);
+
+}
+/*}}}*/
+/*FUNCTION IntVecParam::DeepEcho{{{1*/
+void IntVecParam::DeepEcho(void){
+
+	int i;
+	
+	printf("IntVecParam:\n");
+	printf("   enum: %i (%s)\n",this->enum_type,EnumToString(this->enum_type));
+	printf("   vector size: %i\n",this->M);
+	for(i=0;i<this->M;i++){
+		printf("%i %g\n",i,this->values[i]);
+	}
+}
+/*}}}*/
+/*FUNCTION IntVecParam::Id{{{1*/
+int    IntVecParam::Id(void){ return -1; }
+/*}}}*/
+/*FUNCTION IntVecParam::MyRank{{{1*/
+int    IntVecParam::MyRank(void){ 
+	extern int my_rank;
+	return my_rank; 
+}
+/*}}}*/
+/*FUNCTION IntVecParam::Marshall{{{1*/
+void  IntVecParam::Marshall(char** pmarshalled_dataset){
+
+	char* marshalled_dataset=NULL;
+	int   enum_value=0;
+
+	/*recover marshalled_dataset: */
+	marshalled_dataset=*pmarshalled_dataset;
+
+	/*get enum value of IntVecParam: */
+	enum_value=IntVecParamEnum;
+	
+	/*marshall enum: */
+	memcpy(marshalled_dataset,&enum_value,sizeof(enum_value));marshalled_dataset+=sizeof(enum_value);
+	
+	/*marshall IntVecParam data: */
+	memcpy(marshalled_dataset,&enum_type,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
+	memcpy(marshalled_dataset,&M,sizeof(M));marshalled_dataset+=sizeof(M);
+	memcpy(marshalled_dataset,values,M*sizeof(int));marshalled_dataset+=M*sizeof(int);
+
+	*pmarshalled_dataset=marshalled_dataset;
+}
+/*}}}*/
+/*FUNCTION IntVecParam::MarshallSize{{{1*/
+int   IntVecParam::MarshallSize(){
+	
+	return sizeof(M)
+		+M*sizeof(int)
+		+sizeof(enum_type)+
+		+sizeof(int); //sizeof(int) for enum value
+}
+/*}}}*/
+/*FUNCTION IntVecParam::Demarshall{{{1*/
+void  IntVecParam::Demarshall(char** pmarshalled_dataset){
+
+	char* marshalled_dataset=NULL;
+	int   i;
+
+	/*recover marshalled_dataset: */
+	marshalled_dataset=*pmarshalled_dataset;
+
+	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
+	 *object data (thanks to DataSet::Demarshall):*/
+	memcpy(&enum_type,marshalled_dataset,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
+	
+	/*data: */
+	memcpy(&M,marshalled_dataset,sizeof(M));marshalled_dataset+=sizeof(M);
+	values=(int*)xmalloc(M*sizeof(int));
+	memcpy(values,marshalled_dataset,M*sizeof(int));marshalled_dataset+=M*sizeof(int);
+
+	/*return: */
+	*pmarshalled_dataset=marshalled_dataset;
+	return;
+}
+/*}}}*/
+/*FUNCTION IntVecParam::Enum{{{1*/
+int IntVecParam::Enum(void){
+
+	return IntVecParamEnum;
+
+}
+/*}}}*/
+/*FUNCTION IntVecParam::copy{{{1*/
+Object* IntVecParam::copy() {
+	
+	return new IntVecParam(this->enum_type,this->values,this->M);
+
+}
+/*}}}*/
+
+/*IntVecParam virtual functions definitions: */
+/*FUNCTION IntVecParam::GetParameterValue{{{1*/
+void  IntVecParam::GetParameterValue(int** pintarray,int* pM){
+	int* output=NULL;
+
+	output=(int*)xmalloc(M*sizeof(int));
+	memcpy(output,values,M*sizeof(int));
+
+	/*Assign output pointers:*/
+	if(pM) *pM=M;
+	*pintarray=output;
+}
+/*}}}*/
+/*FUNCTION IntVecParam::GetParameterName{{{1*/
+char* IntVecParam::GetParameterName(void){
+	return  EnumToString(this->enum_type);
+}
+/*}}}*/
+/*FUNCTION IntVecParam::SetMatlabField{{{1*/
+#ifdef _SERIAL_
+void  IntVecParam::SetMatlabField(mxArray* dataref){
+
+	char    *name      = NULL;
+	double  *doublevec = NULL;
+	int     *intvec    = NULL;
+	mxArray *pfield    = NULL;
+
+	this->GetParameterValue(&intvec,NULL);
+	name=this->GetParameterName();
+
+	/*cast intvec into doublevec for Matlab*/
+	doublevec=(double*)xmalloc(M*sizeof(double));
+	for(int i=0;i<M;i++)doublevec[i]=(double)intvec[i];
+	xfree((void**)&intvec);
+				
+	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
+	mxSetM(pfield,M);
+	mxSetN(pfield,1);
+	mxSetPr(pfield,doublevec);
+	
+	mxSetField(dataref, 0, name, pfield);
+}
+#endif
+/*}}}*/
+/*FUNCTION IntVecParam::SetValue{{{1*/
+void  IntVecParam::SetValue(int* intarray,int in_M){
+
+	/*avoid leak: */
+	xfree((void**)&this->values);
+
+	this->values=(int*)xmalloc(in_M*sizeof(int));
+	memcpy(this->values,intarray,in_M*sizeof(int));
+
+	this->M=in_M;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Params/IntVecParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/IntVecParam.h	(revision 6165)
+++ /issm/trunk/src/c/objects/Params/IntVecParam.h	(revision 6165)
@@ -0,0 +1,84 @@
+/*! \file IntVecParam.h 
+ *  \brief: header file for triavertexinput object
+ */
+
+
+#ifndef _INTVECPARAM_H_
+#define _INTVECPARAM_H_
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#ifdef _SERIAL_
+#include <mex.h>
+#endif
+
+#include "./Param.h"
+#include "../../include/include.h"
+#include "../../shared/shared.h"
+/*}}}*/
+
+class IntVecParam: public Param{
+
+	private: 
+		int enum_type;
+		int* values;
+		int M;
+
+	public:
+		/*IntVecParam constructors, destructors: {{{1*/
+		IntVecParam();
+		IntVecParam(int enum_type,int* values,int M);
+		~IntVecParam();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1 */
+		void  Echo();
+		void  DeepEcho();
+		int   Id(); 
+		int   MyRank();
+		void  Marshall(char** pmarshalled_dataset);
+		int   MarshallSize();
+		void  Demarshall(char** pmarshalled_dataset);
+		int   Enum();
+		Object* copy();
+		/*}}}*/
+		/*Param virtual functions definitions: {{{1*/
+		int   EnumType(){return enum_type;}
+		void  GetParameterValue(bool* pbool){ISSMERROR("IntVec param of enum %i (%s) cannot return a bool",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int* pinteger){ISSMERROR("IntVec param of enum %i (%s) cannot return an integer",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int** pintarray,int* pM);
+		void  GetParameterValue(double* pdouble){ISSMERROR("IntVec param of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(char** pstring){ISSMERROR("IntVec param of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(char*** pstringarray,int* pM){ISSMERROR("IntVec param of enum %i (%s) cannot return a string arrayl",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(double** pdoublearray,int* pM);
+		void  GetParameterValue(double** pdoublearray,int* pM, int* pN){ISSMERROR("IntVec param of enum %i (%s) cannot return a double array",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(double*** parray, int* pM,int** pmdims, int** pndims){ISSMERROR("IntVec param of enum %i (%s) cannot return a matrix array",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(Vec* pvec){ISSMERROR("IntVec param of enum %i (%s) cannot return a Vec",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(Mat* pmat){ISSMERROR("IntVec param of enum %i (%s) cannot return a Mat",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(FILE** pfid){ISSMERROR("IntVec param of enum %i (%s) cannot return a FILE",enum_type,EnumToString(enum_type));}
+
+		void  SetValue(bool boolean){ISSMERROR("IntVec param of enum %i (%s) cannot hold a boolean",enum_type,EnumToString(enum_type));}
+		void  SetValue(int integer){ISSMERROR("IntVec param of enum %i (%s) cannot hold an integer",enum_type,EnumToString(enum_type));}
+		void  SetValue(int* intarray,int M);
+		void  SetValue(double scalar){ISSMERROR("IntVec param of enum %i (%s) cannot hold a scalar",enum_type,EnumToString(enum_type));}
+		void  SetValue(char* string){ISSMERROR("IntVec param of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
+		void  SetValue(char** stringarray,int M){ISSMERROR("IntVec param of enum %i (%s) cannot hold a string array",enum_type,EnumToString(enum_type));}
+		void  SetValue(double* doublearray,int M);
+		void  SetValue(double* pdoublearray,int M,int N){ISSMERROR("IntVec param of enum %i (%s) cannot hold a double mat array",enum_type,EnumToString(enum_type));}
+		void  SetValue(Vec vec){ISSMERROR("IntVec param of enum %i (%s) cannot hold a Vec",enum_type,EnumToString(enum_type));}
+		void  SetValue(Mat mat){ISSMERROR("IntVec param of enum %i (%s) cannot hold a Mat",enum_type,EnumToString(enum_type));}
+		void  SetValue(FILE* fid){ISSMERROR("IntVec param of enum %i (%s) cannot hold a FILE",enum_type,EnumToString(enum_type));}
+		void  SetValue(double** array, int M, int* mdim_array, int* ndim_array){ISSMERROR("IntVec param of enum %i (%s) cannot hold an array of matrices",enum_type,EnumToString(enum_type));}
+		
+		char* GetParameterName(void);
+		#ifdef _SERIAL_
+		void  SetMatlabField(mxArray* dataref);
+		#endif
+		/*}}}*/
+};
+#endif
Index: /issm/trunk/src/c/objects/Params/Param.h
===================================================================
--- /issm/trunk/src/c/objects/Params/Param.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/Param.h	(revision 6165)
@@ -34,4 +34,5 @@
 		virtual void  GetParameterValue(bool* pbool)=0;
 		virtual void  GetParameterValue(int* pinteger)=0;
+		virtual void  GetParameterValue(int** pintarray,int* pM)=0;
 		virtual void  GetParameterValue(double* pdouble)=0;
 		virtual void  GetParameterValue(char** pstring)=0;
@@ -46,4 +47,5 @@
 		virtual void  SetValue(bool boolean)=0;
 		virtual void  SetValue(int integer)=0;
+		virtual void  SetValue(int* intarray,int M)=0;
 		virtual void  SetValue(double scalar)=0;
 		virtual void  SetValue(char* string)=0;
Index: /issm/trunk/src/c/objects/Params/PetscMatParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/PetscMatParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/PetscMatParam.h	(revision 6165)
@@ -52,4 +52,5 @@
 		void  GetParameterValue(bool* pbool){ISSMERROR("PetscMat param of enum %i (%s) cannot return a bool",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(int* pinteger){ISSMERROR("PetscMat param of enum %i (%s) cannot return an integer",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("PetscMat param of enum %i (%s) cannot return an array of integers",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){ISSMERROR("PetscMat param of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(char** pstring){ISSMERROR("PetscMat param of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
@@ -64,4 +65,5 @@
 		void  SetValue(bool boolean){ISSMERROR("PetscMat param of enum %i (%s) cannot hold a boolean",enum_type,EnumToString(enum_type));}
 		void  SetValue(int integer){ISSMERROR("PetscMat param of enum %i (%s) cannot hold an integer",enum_type,EnumToString(enum_type));}
+		void  SetValue(int* intarray,int M){ISSMERROR("PetscMat param of enum %i (%s) cannot hold an int array",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){ISSMERROR("PetscMat param of enum %i (%s) cannot hold a scalar",enum_type,EnumToString(enum_type));}
 		void  SetValue(char* string){ISSMERROR("PetscMat param of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
Index: /issm/trunk/src/c/objects/Params/PetscVecParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/PetscVecParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/PetscVecParam.h	(revision 6165)
@@ -52,4 +52,5 @@
 		void  GetParameterValue(bool* pbool){ISSMERROR("PetscVec param of enum %i (%s) cannot return a bool",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(int* pinteger){ISSMERROR("PetscVec param of enum %i (%s) cannot return an integer",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("PetscVec param of enum %i (%s) cannot return an array of integers",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){ISSMERROR("PetscVec param of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(char** pstring){ISSMERROR("PetscVec param of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
@@ -64,4 +65,5 @@
 		void  SetValue(bool boolean){ISSMERROR("PetscVec of enum %i (%s) cannot hold a boolean",enum_type,EnumToString(enum_type));}
 		void  SetValue(int integer){ISSMERROR("PetscVec of enum %i (%s) cannot hold an integer",enum_type,EnumToString(enum_type));}
+		void  SetValue(int* intarray,int M){ISSMERROR("PetscVec of enum %i (%s) cannot hold an int array",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){ISSMERROR("PetscVec of enum %i (%s) cannot hold a scalar",enum_type,EnumToString(enum_type));}
 		void  SetValue(char* string){ISSMERROR("PetscVec of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
Index: /issm/trunk/src/c/objects/Params/StringArrayParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/StringArrayParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/StringArrayParam.h	(revision 6165)
@@ -54,4 +54,5 @@
 		void  GetParameterValue(bool* pbool){ISSMERROR("StringArray param of enum %i (%s) cannot return a bool",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(int* pinteger){ISSMERROR("StringArray param of enum %i (%s) cannot return an integer",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("StringArray param of enum %i (%s) cannot return an array of integers",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){ISSMERROR("StringArray param of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(char** pstring){ISSMERROR("StringArray param of enum %i (%s) cannot return a string",enum_type,EnumToString(enum_type));}
@@ -66,4 +67,5 @@
 		void  SetValue(bool boolean){ISSMERROR("StringArray param of enum %i (%s) cannot hold a boolean",enum_type,EnumToString(enum_type));}
 		void  SetValue(int integer){ISSMERROR("StringArray param of enum %i (%s) cannot hold an integer",enum_type,EnumToString(enum_type));}
+		void  SetValue(int* intarray,int M){ISSMERROR("StringArray param of enum %i (%s) cannot hold an int array",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){ISSMERROR("StringArray param of enum %i (%s) cannot hold a scalar",enum_type,EnumToString(enum_type));}
 		void  SetValue(char* string){ISSMERROR("StringArray param of enum %i (%s) cannot hold a string",enum_type,EnumToString(enum_type));}
Index: /issm/trunk/src/c/objects/Params/StringParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/StringParam.h	(revision 6164)
+++ /issm/trunk/src/c/objects/Params/StringParam.h	(revision 6165)
@@ -52,4 +52,5 @@
 		void  GetParameterValue(bool* pbool){ISSMERROR("String param of enum %i (%s) cannot return a bool",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(int* pinteger){ISSMERROR("String param of enum %i (%s) cannot return an integer",enum_type,EnumToString(enum_type));}
+		void  GetParameterValue(int** pintarray,int* pM){ISSMERROR("String param of enum %i (%s) cannot return an array of integers",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(double* pdouble){ISSMERROR("String param of enum %i (%s) cannot return a double",enum_type,EnumToString(enum_type));}
 		void  GetParameterValue(char** pstring);
@@ -64,4 +65,5 @@
 		void  SetValue(bool boolean){ISSMERROR("String param of enum %i (%s) cannot hold a boolean",enum_type,EnumToString(enum_type));}
 		void  SetValue(int integer){ISSMERROR("String param of enum %i (%s) cannot hold an integer",enum_type,EnumToString(enum_type));}
+		void  SetValue(int* intarray,int M){ISSMERROR("String param of enum %i (%s) cannot hold an int array",enum_type,EnumToString(enum_type));}
 		void  SetValue(double scalar){ISSMERROR("String param of enum %i (%s) cannot hold a scalar",enum_type,EnumToString(enum_type));}
 		void  SetValue(char* string);
Index: /issm/trunk/src/c/objects/objects.h
===================================================================
--- /issm/trunk/src/c/objects/objects.h	(revision 6164)
+++ /issm/trunk/src/c/objects/objects.h	(revision 6165)
@@ -84,4 +84,5 @@
 #include "./Params/DoubleVecParam.h"
 #include "./Params/IntParam.h"
+#include "./Params/IntVecParam.h"
 #include "./Params/FileParam.h"
 #include "./Params/Param.h"
