Index: /issm/trunk/src/c/EnumDefinitions/EnumAsString.cpp
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumAsString.cpp	(revision 3696)
+++ /issm/trunk/src/c/EnumDefinitions/EnumAsString.cpp	(revision 3697)
@@ -2,4 +2,8 @@
 * \file EnumAsString.cpp:
 * \brief: output string associated with enum
+*
+*   WARNING: DO NOT MODIFY THIS FILE
+*            this file has been automatically generated by SynchronizeStrings.sh
+*            Please read README for more information
 */
 
@@ -350,4 +354,102 @@
 		case StabilizeConstraintsEnum :
 			return "StabilizeConstraints";
+		case PenaltyOffsetEnum :
+			return "PenaltyOffset";
+		case OutputFileNameEnum :
+			return "OutputFileName";
+		case DimEnum :
+			return "Dim";
+		case IsHutterEnum :
+			return "IsHutter";
+		case IsMacAyealPattynEnum :
+			return "IsMacAyealPattyn";
+		case IsStokesEnum :
+			return "IsStokes";
+		case VerboseEnum :
+			return "Verbose";
+		case EpsCmEnum :
+			return "EpsCm";
+		case MaxNonlinearIterationsEnum :
+			return "MaxNonlinearIterations";
+		case YtsEnum :
+			return "Yts";
+		case NdtEnum :
+			return "Ndt";
+		case SparsityEnum :
+			return "Sparsity";
+		case LowmemEnum :
+			return "Lowmem";
+		case ConnectivityEnum :
+			return "Connectivity";
+		case BetaEnum :
+			return "Beta";
+		case MeltingPointEnum :
+			return "MeltingPoint";
+		case LatentHeatEnum :
+			return "LatentHeat";
+		case HeatCapacityEnum :
+			return "HeatCapacity";
+		case PenaltyMeltingEnum :
+			return "PenaltyMelting";
+		case MinThermalConstraintsEnum :
+			return "MinThermalConstraints";
+		case MinMechanicalConstraintsEnum :
+			return "MinMechanicalConstraints";
+		case WaitOnLockEnum :
+			return "WaitOnLock";
+		case SolverStringEnum :
+			return "SolverString";
+		case NumberOfVerticesEnum :
+			return "NumberOfVertices";
+		case NumberOfNodesEnum :
+			return "NumberOfNodes";
+		case NumberOfElementsEnum :
+			return "NumberOfElements";
+		case NumberOfDofsPerNodeEnum :
+			return "NumberOfDofsPerNode";
+		case NumRiftsEnum :
+			return "NumRifts";
+		case NumOutputEnum :
+			return "NumOutput";
+		case ParameterOutputEnum :
+			return "ParameterOutput";
+		case ExtrudeParamEnum :
+			return "ExtrudeParam";
+		case ControlSteadyEnum :
+			return "ControlSteady";
+		case TolXEnum :
+			return "TolX";
+		case CmMinEnum :
+			return "CmMin";
+		case CmMaxEnum :
+			return "CmMax";
+		case CmGradientEnum :
+			return "CmGradient";
+		case CmJumpEnum :
+			return "CmJump";
+		case OptScalEnum :
+			return "OptScal";
+		case MaxIterEnum :
+			return "MaxIter";
+		case ControlParameterEnum :
+			return "ControlParameter";
+		case QmuAnalysisEnum :
+			return "QmuAnalysis";
+		case QmuInNameEnum :
+			return "QmuInName";
+		case QmuOutNameEnum :
+			return "QmuOutName";
+		case QmuErrNameEnum :
+			return "QmuErrName";
+		case QmuNPartEnum :
+			return "QmuNPart";
+		case QmuPartEnum :
+			return "QmuPart";
+		case VariableDescriptorsEnum :
+			return "VariableDescriptors";
+		case ResponseDescriptorsEnum :
+			return "ResponseDescriptors";
+		case DakotaParameterEnum :
+			return "DakotaParameter";
 		default :
 			ISSMERROR("Enum %i not found",en);
Index: /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 3696)
+++ /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 3697)
@@ -212,5 +212,60 @@
 	StokesReconditioningEnum,
 	StabilizeConstraintsEnum,
-	PenaltyOffsetEnum
+	PenaltyOffsetEnum,
+	/*}}}*/
+	/*Parameters{{{1*/
+	OutputFileNameEnum,
+	DimEnum,
+	IsHutterEnum,
+	IsMacAyealPattynEnum,
+	IsStokesEnum,
+	VerboseEnum,
+	EpsRes,
+	EpsRel,
+	EpsAbs,
+	EpsCmEnum,
+	MaxNonlinearIterationsEnum,
+	YtsEnum,
+	NdtEnum,
+	SparsityEnum,
+	LowmemEnum,
+	ConnectivityEnum,
+	BetaEnum,
+	MeltingPointEnum,
+	LatentHeatEnum,
+	HeatCapacityEnum,
+	PenaltyMeltingEnum,
+	MinThermalConstraintsEnum,
+	MinMechanicalConstraintsEnum,
+	WaitOnLockEnum,
+	SolverStringEnum,
+	NumberOfVerticesEnum,
+	NumberOfNodesEnum,
+	NumberOfElementsEnum,
+	NumberOfDofsPerNodeEnum,
+	NumRiftsEnum,
+	NumOutputEnum,
+	ParameterOutputEnum,
+	ExtrudeParamEnum,
+	ControlSteadyEnum,
+	NSteps,
+	TolXEnum,
+	CmMinEnum,
+	CmMaxEnum,
+	CmGradientEnum,
+	CmJumpEnum,
+	OptScalEnum,
+	MaxIterEnum,
+	ControlParameterEnum,
+	QmuAnalysisEnum,
+	QmuInNameEnum,
+	QmuOutNameEnum,
+	QmuErrNameEnum,
+	QmuNPartEnum,
+	QmuPartEnum,
+	VariableDescriptorsEnum,
+	ResponseDescriptorsEnum,
+	DakotaParameterEnum,
+	QmuMassFluxSegmentsEnum
 	/*}}}*/
 
Index: /issm/trunk/src/c/EnumDefinitions/StringAsEnum.cpp
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/StringAsEnum.cpp	(revision 3696)
+++ /issm/trunk/src/c/EnumDefinitions/StringAsEnum.cpp	(revision 3697)
@@ -2,4 +2,8 @@
 * \file StringAsEnum.cpp:
 * \brief: output enum associated with string
+*
+*   WARNING: DO NOT MODIFY THIS FILE
+*            this file has been automatically generated by SynchronizeStrings.sh
+*            Please read README for more information
 */
 
@@ -179,4 +183,54 @@
 	else if (strcmp(name,"StokesReconditioning")==0) return StokesReconditioningEnum;
 	else if (strcmp(name,"StabilizeConstraints")==0) return StabilizeConstraintsEnum;
+	else if (strcmp(name,"PenaltyOffset")==0) return PenaltyOffsetEnum;
+	else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
+	else if (strcmp(name,"Dim")==0) return DimEnum;
+	else if (strcmp(name,"IsHutter")==0) return IsHutterEnum;
+	else if (strcmp(name,"IsMacAyealPattyn")==0) return IsMacAyealPattynEnum;
+	else if (strcmp(name,"IsStokes")==0) return IsStokesEnum;
+	else if (strcmp(name,"Verbose")==0) return VerboseEnum;
+	else if (strcmp(name,"EpsCm")==0) return EpsCmEnum;
+	else if (strcmp(name,"MaxNonlinearIterations")==0) return MaxNonlinearIterationsEnum;
+	else if (strcmp(name,"Yts")==0) return YtsEnum;
+	else if (strcmp(name,"Ndt")==0) return NdtEnum;
+	else if (strcmp(name,"Sparsity")==0) return SparsityEnum;
+	else if (strcmp(name,"Lowmem")==0) return LowmemEnum;
+	else if (strcmp(name,"Connectivity")==0) return ConnectivityEnum;
+	else if (strcmp(name,"Beta")==0) return BetaEnum;
+	else if (strcmp(name,"MeltingPoint")==0) return MeltingPointEnum;
+	else if (strcmp(name,"LatentHeat")==0) return LatentHeatEnum;
+	else if (strcmp(name,"HeatCapacity")==0) return HeatCapacityEnum;
+	else if (strcmp(name,"PenaltyMelting")==0) return PenaltyMeltingEnum;
+	else if (strcmp(name,"MinThermalConstraints")==0) return MinThermalConstraintsEnum;
+	else if (strcmp(name,"MinMechanicalConstraints")==0) return MinMechanicalConstraintsEnum;
+	else if (strcmp(name,"WaitOnLock")==0) return WaitOnLockEnum;
+	else if (strcmp(name,"SolverString")==0) return SolverStringEnum;
+	else if (strcmp(name,"NumberOfVertices")==0) return NumberOfVerticesEnum;
+	else if (strcmp(name,"NumberOfNodes")==0) return NumberOfNodesEnum;
+	else if (strcmp(name,"NumberOfElements")==0) return NumberOfElementsEnum;
+	else if (strcmp(name,"NumberOfDofsPerNode")==0) return NumberOfDofsPerNodeEnum;
+	else if (strcmp(name,"NumRifts")==0) return NumRiftsEnum;
+	else if (strcmp(name,"NumOutput")==0) return NumOutputEnum;
+	else if (strcmp(name,"ParameterOutput")==0) return ParameterOutputEnum;
+	else if (strcmp(name,"ExtrudeParam")==0) return ExtrudeParamEnum;
+	else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
+	else if (strcmp(name,"TolX")==0) return TolXEnum;
+	else if (strcmp(name,"CmMin")==0) return CmMinEnum;
+	else if (strcmp(name,"CmMax")==0) return CmMaxEnum;
+	else if (strcmp(name,"CmGradient")==0) return CmGradientEnum;
+	else if (strcmp(name,"CmJump")==0) return CmJumpEnum;
+	else if (strcmp(name,"OptScal")==0) return OptScalEnum;
+	else if (strcmp(name,"MaxIter")==0) return MaxIterEnum;
+	else if (strcmp(name,"ControlParameter")==0) return ControlParameterEnum;
+	else if (strcmp(name,"QmuAnalysis")==0) return QmuAnalysisEnum;
+	else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum;
+	else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
+	else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
+	else if (strcmp(name,"QmuNPart")==0) return QmuNPartEnum;
+	else if (strcmp(name,"QmuPart")==0) return QmuPartEnum;
+	else if (strcmp(name,"VariableDescriptors")==0) return VariableDescriptorsEnum;
+	else if (strcmp(name,"ResponseDescriptors")==0) return ResponseDescriptorsEnum;
+	else if (strcmp(name,"DakotaParameter")==0) return DakotaParameterEnum;
 	else ISSMERROR("Enum %i not found",en);
-	}
+
+}
Index: /issm/trunk/src/c/ModelProcessorx/Balancedthickness/CreateParametersBalancedthickness.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Balancedthickness/CreateParametersBalancedthickness.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/Balancedthickness/CreateParametersBalancedthickness.cpp	(revision 3697)
@@ -11,64 +11,3 @@
 void CreateParametersBalancedthickness(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
 	
-	Param*   param = NULL;
-	Parameters* parameters=NULL;
-	int      count;
-	int      i;
-	double* u_g=NULL;
-
-	/*recover parameters : */
-	parameters=*pparameters;
-
-	count=parameters->Size();
-
-	/*Get vx and vy: */
-	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-	IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
-
-	u_g=(double*)xcalloc(iomodel->numberofvertices*3,sizeof(double));
-
-	if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+0]=iomodel->vx[i]/iomodel->yts;
-	if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+1]=iomodel->vy[i]/iomodel->yts;
-	if(iomodel->vz) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+2]=iomodel->vz[i]/iomodel->yts;
-
-	count++;
-	param= new Param(count,"u_g",DOUBLEVEC);
-	param->SetDoubleVec(u_g,3*iomodel->numberofvertices,3);
-	parameters->AddObject(param);
-
-
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&iomodel->vz);
-	xfree((void**)&u_g);
-
-	/*Get melting_rate: */
-	IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-	if(iomodel->melting_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;
-	
-	count++;
-	param= new Param(count,"m_g",DOUBLEVEC);
-	if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->melting_rate,0,1);
-	parameters->AddObject(param);
-
-	/*Free melting_rate: */
-	xfree((void**)&iomodel->melting_rate);
-
-	/*Get accumulation_rate: */
-	IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-	if(iomodel->accumulation_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->accumulation_rate[i]=iomodel->accumulation_rate[i]/iomodel->yts;
-	
-	count++;
-	param= new Param(count,"a_g",DOUBLEVEC);
-	if(iomodel->accumulation_rate) param->SetDoubleVec(iomodel->accumulation_rate,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->accumulation_rate,0,0);
-	parameters->AddObject(param);
-
-	/*Free accumulation_rate: */
-	xfree((void**)&iomodel->accumulation_rate);
-
-	/*Assign output pointer: */
-	*pparameters=parameters;
 }
Index: /issm/trunk/src/c/ModelProcessorx/Balancedthickness2/CreateParametersBalancedthickness2.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Balancedthickness2/CreateParametersBalancedthickness2.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/Balancedthickness2/CreateParametersBalancedthickness2.cpp	(revision 3697)
@@ -12,93 +12,3 @@
 void CreateParametersBalancedthickness2(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
 	
-	Param*   param = NULL;
-	Parameters* parameters=NULL;
-	int      count;
-	int      i;
-	int      dim;
-	double*  vx_g=NULL;
-	double*  vy_g=NULL;
-
-	/*recover parameters : */
-	parameters=*pparameters;
-
-	count=parameters->Size();
-
-	/*Get vx and vy: */
-	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-
-	vx_g=(double*)xcalloc(iomodel->numberofvertices,sizeof(double));
-	vy_g=(double*)xcalloc(iomodel->numberofvertices,sizeof(double));
-
-	if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)vx_g[i]=iomodel->vx[i]/iomodel->yts;
-	if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)vy_g[i]=iomodel->vy[i]/iomodel->yts;
-
-	count++;
-	param= new Param(count,"vx_g",DOUBLEVEC);
-	param->SetDoubleVec(vx_g,iomodel->numberofvertices,1);
-	parameters->AddObject(param);
-	count++;
-	param= new Param(count,"vy_g",DOUBLEVEC);
-	param->SetDoubleVec(vy_g,iomodel->numberofvertices,1);
-	parameters->AddObject(param);
-
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&vx_g);
-	xfree((void**)&vy_g);
-
-	/*Get thickness: */
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-
-	count++;
-	param= new Param(count,"h_g",DOUBLEVEC);
-	if(iomodel->thickness) param->SetDoubleVec(iomodel->thickness,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->thickness,0,0);
-	parameters->AddObject(param);
-
-	/*Free thickness: */
-	xfree((void**)&iomodel->thickness);
-
-	/*Get dhdt: */
-	IoModelFetchData(&iomodel->dhdt,NULL,NULL,iomodel_handle,"dhdt");
-	if(iomodel->dhdt) for(i=0;i<iomodel->numberofvertices;i++)iomodel->dhdt[i]=iomodel->dhdt[i]/iomodel->yts;
-
-	count++;
-	param= new Param(count,"dhdt_g",DOUBLEVEC);
-	if(iomodel->dhdt) param->SetDoubleVec(iomodel->dhdt,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->dhdt,0,1);
-	parameters->AddObject(param);
-
-	/*Free dhdt: */
-	xfree((void**)&iomodel->dhdt);
-
-	/*Get melting_rate: */
-	IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-	if(iomodel->melting_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;
-	
-	count++;
-	param= new Param(count,"m_g",DOUBLEVEC);
-	if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->melting_rate,0,1);
-	parameters->AddObject(param);
-
-	/*Free melting_rate: */
-	xfree((void**)&iomodel->melting_rate);
-
-	/*Get accumulation_rate: */
-	IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-	if(iomodel->accumulation_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->accumulation_rate[i]=iomodel->accumulation_rate[i]/iomodel->yts;
-	
-	count++;
-	param= new Param(count,"a_g",DOUBLEVEC);
-	if(iomodel->accumulation_rate) param->SetDoubleVec(iomodel->accumulation_rate,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->accumulation_rate,0,0);
-	parameters->AddObject(param);
-
-	/*Free accumulation_rate: */
-	xfree((void**)&iomodel->accumulation_rate);
-
-	/*Assign output pointer: */
-	*pparameters=parameters;
 }
Index: /issm/trunk/src/c/ModelProcessorx/Balancedvelocities/CreateParametersBalancedvelocities.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Balancedvelocities/CreateParametersBalancedvelocities.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/Balancedvelocities/CreateParametersBalancedvelocities.cpp	(revision 3697)
@@ -12,76 +12,3 @@
 void CreateParametersBalancedvelocities(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
 	
-	Param*   param = NULL;
-	Parameters* parameters=NULL;
-	int      count;
-	int      i;
-	double* u_g=NULL;
-
-	/*recover parameters : */
-	parameters=*pparameters;
-
-	count=parameters->Size();
-
-	/*Get vx and vy: */
-	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-	IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
-
-	u_g=(double*)xcalloc(iomodel->numberofvertices*3,sizeof(double));
-
-	if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+0]=iomodel->vx[i]/iomodel->yts;
-	if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+1]=iomodel->vy[i]/iomodel->yts;
-	if(iomodel->vz) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+2]=iomodel->vz[i]/iomodel->yts;
-
-	count++;
-	param= new Param(count,"u_g",DOUBLEVEC);
-	param->SetDoubleVec(u_g,3*iomodel->numberofvertices,3);
-	parameters->AddObject(param);
-
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&iomodel->vz);
-	xfree((void**)&u_g);
-
-	/*Get thickness: */
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	
-	count++;
-	param= new Param(count,"h_g",DOUBLEVEC);
-	if(iomodel->thickness) param->SetDoubleVec(iomodel->thickness,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->thickness,0,0);
-	parameters->AddObject(param);
-
-	/*Free thickness: */
-	xfree((void**)&iomodel->thickness);
-
-	/*Get melting_rate: */
-	IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-	if(iomodel->melting_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;
-	
-	count++;
-	param= new Param(count,"m_g",DOUBLEVEC);
-	if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->melting_rate,0,1);
-	parameters->AddObject(param);
-
-	/*Free melting_rate: */
-	xfree((void**)&iomodel->melting_rate);
-
-	/*Get accumulation_rate: */
-	IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-	if(iomodel->accumulation_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->accumulation_rate[i]=iomodel->accumulation_rate[i]/iomodel->yts;
-	
-	count++;
-	param= new Param(count,"a_g",DOUBLEVEC);
-	if(iomodel->accumulation_rate) param->SetDoubleVec(iomodel->accumulation_rate,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->accumulation_rate,0,0);
-	parameters->AddObject(param);
-
-	/*Free accumulation_rate: */
-	xfree((void**)&iomodel->accumulation_rate);
-
-
-	/*Assign output pointer: */
-	*pparameters=parameters;
 }
Index: /issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 3697)
@@ -14,116 +14,35 @@
 	
 	int i;
+	double* control_parameter=NULL;
 	
 	Parameters* parameters=NULL;
-	Param*   param = NULL;
-	int      count;
-
-	double* param_g=NULL;
-	double* u_g_obs=NULL;
-	double* control_parameter=NULL;
 
 	/*Get parameters: */
 	parameters=*pparameters;
-	count=parameters->Size();
 	
-	//control analysis?
-	count++;
-	param= new Param(count,"control_analysis",DOUBLE);
-	param->SetDouble(iomodel->control_analysis);
-	parameters->AddObject(param);
-	
+	parameters->AddObject(new   BoolParam(ControlAnalysisEnum,iomodel->control_analysis));
 	if(iomodel->control_analysis){
+		parameters->AddObject(new   StringParam(ControlTypeEnum,iomodel->control_type));
 
-		/*control_type: */
-		count++;
-		param= new Param(count,"control_type",STRING);
-		param->SetString(iomodel->control_type);
-		parameters->AddObject(param);
+		if (strcmp(iomodel->control_type,"drag")==0)
+		 parameters->AddObject(new BoolParam(ExtrudeParamEnum,false));
+		else  if (strcmp(iomodel->control_type,"B")==0)
+		 parameters->AddObject(new BoolParam(ExtrudeParamEnum,true));
+		else
+		 ISSMERROR("control_type %s not supported yet!",iomodel->control_type);
 
-		/*extrude_param: */
-		count++;
-		param= new Param(count,"extrude_param",DOUBLE);
-		if (strcmp(iomodel->control_type,"drag")==0)   param->SetDouble(0);
-		else if (strcmp(iomodel->control_type,"B")==0) param->SetDouble(1);
-		else ISSMERROR("control_type %s not supported yet!",iomodel->control_type);
-		parameters->AddObject(param);
-
-		/*control_steady: */
-		count++;
-		param= new Param(count,"control_steady",DOUBLE);
-		param->SetDouble(0);
-		parameters->AddObject(param);
-
-		/*nsteps: */
-		count++;
-		param= new Param(count,"nsteps",DOUBLE);
-		param->SetDouble(iomodel->nsteps);
-		parameters->AddObject(param);
-
-		/*tolx: */
-		count++;
-		param= new Param(count,"tolx",DOUBLE);
-		param->SetDouble(iomodel->tolx);
-		parameters->AddObject(param);
-
-		/*eps_cm: */
-		count++;
-		param= new Param(count,"eps_cm",DOUBLE);
-		param->SetDouble(iomodel->eps_cm);
-		parameters->AddObject(param);
-
-		/*meanvel: */
-		count++;
-		param= new Param(count,"meanvel",DOUBLE);
-		param->SetDouble(iomodel->meanvel);
-		parameters->AddObject(param);
-
-		/*cm_noisedmp: */
-		count++;
-		param= new Param(count,"cm_noisedmp",DOUBLE);
-		param->SetDouble(iomodel->cm_noisedmp);
-		parameters->AddObject(param);
-
-		/*cm_mindmp_value: */
-		count++;
-		param= new Param(count,"cm_mindmp_value",DOUBLE);
-		param->SetDouble(iomodel->cm_mindmp_value);
-		parameters->AddObject(param);
-
-		/*cm_mindmp_slope: */
-		count++;
-		param= new Param(count,"cm_mindmp_slope",DOUBLE);
-		param->SetDouble(iomodel->cm_mindmp_slope);
-		parameters->AddObject(param);
-
-		/*cm_maxdmp_value: */
-		count++;
-		param= new Param(count,"cm_maxdmp_value",DOUBLE);
-		param->SetDouble(iomodel->cm_maxdmp_value);
-		parameters->AddObject(param);
-
-		/*cm_maxdmp_slope: */
-		count++;
-		param= new Param(count,"cm_maxdmp_slope",DOUBLE);
-		param->SetDouble(iomodel->cm_maxdmp_slope);
-		parameters->AddObject(param);
-		
-		/*cm_min: */
-		count++;
-		param= new Param(count,"cm_min",DOUBLE);
-		param->SetDouble(iomodel->cm_min);
-		parameters->AddObject(param);
-
-		/*cm_max: */
-		count++;
-		param= new Param(count,"cm_max",DOUBLE);
-		param->SetDouble(iomodel->cm_max);
-		parameters->AddObject(param);
-
-		/*cm_gradient: */
-		count++;
-		param= new Param(count,"cm_gradient",DOUBLE);
-		param->SetDouble(iomodel->cm_gradient);
-		parameters->AddObject(param);
+		parameters->AddObject(new   BoolParam(ControlSteadyEnum,false));
+		parameters->AddObject(new    IntParam(NSteps,iomodel->nsteps));
+		parameters->AddObject(new DoubleParam(TolXEnum,iomodel->tolx));
+		parameters->AddObject(new DoubleParam(EpsCmEnum,iomodel->eps_cm));
+		parameters->AddObject(new DoubleParam(MeanVelEnum,iomodel->meanvel));
+		parameters->AddObject(new DoubleParam(CmNoiseDmpEnum,iomodel->cm_noisedmp));
+		parameters->AddObject(new DoubleParam(CmMinDmpValueEnum,iomodel->cm_mindmp_value));
+		parameters->AddObject(new DoubleParam(CmMinDmpSlopeEnum,iomodel->cm_mindmp_slope));
+		parameters->AddObject(new DoubleParam(CmMaxDmpValueEnum,iomodel->cm_maxdmp_value));
+		parameters->AddObject(new DoubleParam(CmMaxDmpSlopeEnum,iomodel->cm_maxdmp_slope));
+		parameters->AddObject(new DoubleParam(CmMinEnum,iomodel->cm_min));
+		parameters->AddObject(new DoubleParam(CmMaxEnum,iomodel->cm_max));
+		parameters->AddObject(new   BoolParam(CmGradientEnum,iomodel->cm_gradient));
 
 		/*Now, recover fit, optscal and maxiter as vectors: */
@@ -133,23 +52,8 @@
 		IoModelFetchData(&iomodel->maxiter,NULL,NULL,iomodel_handle,"maxiter");
 
-		count++;
-		param= new Param(count,"fit",DOUBLEVEC);
-		param->SetDoubleVec(iomodel->fit,iomodel->nsteps);
-		parameters->AddObject(param);
-
-		count++;
-		param= new Param(count,"cm_jump",DOUBLEVEC);
-		param->SetDoubleVec(iomodel->cm_jump,iomodel->nsteps);
-		parameters->AddObject(param);
-
-		count++;
-		param= new Param(count,"optscal",DOUBLEVEC);
-		param->SetDoubleVec(iomodel->optscal,iomodel->nsteps);
-		parameters->AddObject(param);
-
-		count++;
-		param= new Param(count,"maxiter",DOUBLEVEC);
-		param->SetDoubleVec(iomodel->maxiter,iomodel->nsteps);
-		parameters->AddObject(param);
+		parameters->AddObject(new DoubleVecParam(FitEnum,iomodel->fit,iomodel->nsteps));
+		parameters->AddObject(new DoubleVecParam(CmJumpEnum,iomodel->cm_jump,iomodel->nsteps));
+		parameters->AddObject(new DoubleVecParam(OptScalEnum,iomodel->optscal,iomodel->nsteps));
+		parameters->AddObject(new DoubleVecParam(MaxIterEnum,iomodel->maxiter,iomodel->nsteps));
 
 		xfree((void**)&iomodel->fit);
@@ -158,46 +62,6 @@
 		xfree((void**)&iomodel->maxiter);
 
-		/*Now, recover weights as vectors: */
-		IoModelFetchData(&iomodel->weights,NULL,NULL,iomodel_handle,"weights");
-
-		count++;
-		param= new Param(count,"weights",DOUBLEVEC);
-		param->SetDoubleVec(iomodel->weights,iomodel->numberofvertices);
-		parameters->AddObject(param);
-
-		xfree((void**)&iomodel->weights);
-
-		/*Get vx, vx_obs, vy, vy_obs, and the parameter value: */
-		IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-		IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
-		IoModelFetchData(&iomodel->vx_obs,NULL,NULL,iomodel_handle,"vx_obs");
-		IoModelFetchData(&iomodel->vy_obs,NULL,NULL,iomodel_handle,"vy_obs");
 		IoModelFetchData(&control_parameter,NULL,NULL,iomodel_handle,iomodel->control_type);
-
-		u_g_obs=(double*)xcalloc(iomodel->numberofvertices*2,sizeof(double));
-		if(iomodel->vx_obs)for(i=0;i<iomodel->numberofvertices;i++)u_g_obs[2*i+0]=iomodel->vx_obs[i]/iomodel->yts;
-		if(iomodel->vy_obs)for(i=0;i<iomodel->numberofvertices;i++)u_g_obs[2*i+1]=iomodel->vy_obs[i]/iomodel->yts;
-
-		count++;
-		param= new Param(count,"u_g_obs",DOUBLEVEC);
-		param->SetDoubleVec(u_g_obs,2*iomodel->numberofvertices,2);
-		parameters->AddObject(param);
-		
-		param_g=(double*)xcalloc(iomodel->numberofvertices,sizeof(double));
-		for(i=0;i<iomodel->numberofvertices;i++)param_g[i]=control_parameter[i];
-
-		count++;
-		param= new Param(count,"param_g",DOUBLEVEC);
-		param->SetDoubleVec(param_g,iomodel->numberofvertices,1);
-		parameters->AddObject(param);
-
-		xfree((void**)&iomodel->vx);
-		xfree((void**)&iomodel->vy);
-		xfree((void**)&iomodel->vz);
-		xfree((void**)&iomodel->vx_obs);
-		xfree((void**)&iomodel->vy_obs);
-		xfree((void**)&u_g_obs);
-		xfree((void**)&param_g);
+		parameters->AddObject(new DoubleVecParam(ControlParameterEnum,control_parameter,iomodel->nsteps));
 		xfree((void**)&control_parameter);
 	}
Index: /issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp	(revision 3697)
@@ -15,8 +15,5 @@
 	
 	Parameters* parameters = NULL;
-	Param*   param = NULL;
-	int      count=0;
 	int      numberofdofspernode;
-	int      dim;
 	char**   parameteroutput=NULL;
 	char*    descriptor=NULL;
@@ -28,186 +25,56 @@
 
 	/*Initialize dataset: */
-	parameters   = new Parameters(ParametersEnum);
+	parameters = new Parameters(ParametersEnum);
 
-	//outputfilename
-	parameters->AddObject(new StringParam(OutputFileNameEnum,iomodel->outputfilename));
- 
-	//dimension 2d or 3d:
-	if (strcmp(iomodel->meshtype,"2d")==0)dim=2;
-	else dim=3;
+	if (strcmp(iomodel->meshtype,"2d")==0) parameters->AddObject(new IntParam(DimEnum,2));
+	else parameters->AddObject(new IntParam(DimEnum,3));
+	parameters->AddObject(new   StringParam(OutputFileNameEnum,iomodel->outputfilename));
+	parameters->AddObject(new   BoolParam(IsHutterEnum,iomodel->ishutter));
+	parameters->AddObject(new   BoolParam(IsMacAyealPattynEnum,iomodel->ismacayealpattyn));
+	parameters->AddObject(new   BoolParam(IsStokesEnum,iomodel->isstokes));
+	parameters->AddObject(new   BoolParam(VerboseEnum,iomodel->verbose));
+	parameters->AddObject(new DoubleParam(EpsResEnum,iomodel->eps_res));
+	parameters->AddObject(new DoubleParam(EpsRelEnum,iomodel->eps_rel));
+	parameters->AddObject(new DoubleParam(EpsAbsEnum,iomodel->eps_abs));
+	parameters->AddObject(new DoubleParam(MaxNonlinearIterationsEnum,iomodel->max_nonlinear_iterations));
+	parameters->AddObject(new DoubleParam(EpsVelEnum,iomodel->epsvel));
+	parameters->AddObject(new DoubleParam(YtsEnum,iomodel->yts));
+	parameters->AddObject(new DoubleParam(DtEnum,iomodel->dt));
+	parameters->AddObject(new DoubleParam(NdtEnum,iomodel->ndt));
+	parameters->AddObject(new DoubleParam(PenaltyOffsetEnum,iomodel->penalty_offset));
+	parameters->AddObject(new DoubleParam(SparsityEnum,iomodel->sparsity));
+	parameters->AddObject(new   BoolParam(LowmemEnum,iomodel->lowmem));
+	parameters->AddObject(new DoubleParam(ConnectivityEnum,iomodel->connectivity));
+	parameters->AddObject(new DoubleParam(BetaEnum,iomodel->beta));
+	parameters->AddObject(new DoubleParam(MeltingPointEnum,iomodel->meltingpoint));
+	parameters->AddObject(new DoubleParam(LatentHeatEnum,iomodel->latentheat));
+	parameters->AddObject(new DoubleParam(HeatCapacityEnum,iomodel->heatcapacity));
+	parameters->AddObject(new   BoolParam(ArtDiffEnum,iomodel->artdiff));
+	parameters->AddObject(new DoubleParam(PenaltyMeltingEnum,iomodel->penalty_melting));
+	parameters->AddObject(new    IntParam(MinThermalConstraintsEnum,iomodel->min_thermal_constraints));
+	parameters->AddObject(new    IntParam(StabilizeConstraintsEnum,iomodel->stabilize_constraints));
+	parameters->AddObject(new DoubleParam(StokesReconditioningEnum,iomodel->stokesreconditioning));
+	parameters->AddObject(new DoubleParam(ViscosityOvershootEnum,iomodel->viscosity_overshoot));
+	parameters->AddObject(new   BoolParam(WaitOnLockEnum,iomodel->waitonlock));
+	parameters->AddObject(new   StringParam(SolverStringEnum,iomodel->solverstring));
+	parameters->AddObject(new    IntParam(NumberOfVerticesEnum,iomodel->numberofvertices));
+	parameters->AddObject(new    IntParam(NumberOfElementsEnum,iomodel->numberofelements));
 
-	parameters->AddObject(new DoubleParam(DimEnum,dim);
-	
-	//elements types
-	parameters->AddObject(new DoubleParam(IsHutterEnum,iomodel->ishutter));
-	parameters->AddObject(new DoubleParam(IsMacAyealPattynEnum,iomodel->ismacayealpattyn));
-	parameters->AddObject(new DoubleParam(IsStokesEnum,iomodel->isstokes));
-	parameters->AddObject(new DoubleParam(VerboseEnum,iomodel->verbose));
-
-	/*eps_res: */
-	parameters->AddObject(new DoubleParam(EpsResEnum,iomodel->eps_res));
-
-	/*eps_rel: */
-	parameters->AddObject(new DoubleParam(EpsRelEnum,iomodel->eps_rel));
-
-	/*eps_abs: */
-	parameters->AddObject(new DoubleParam(EpsAbsEnum,iomodel->eps_abs));
-
-	/*max_nonlinear_iterations: */
-	parameters->AddObject(new DoubleParam(MaxNonlinearIterationsEnum,iomodel->max_nonlinear_iterations));
-
-	/*yts: */
-	parameters->AddObject(new DoubleParam(YtsEnum,iomodel->yts));
-
-	/*dt: */
-	parameters->AddObject(new DoubleParam(DtEnum,iomodel->dt));
-
-	/*ndt: */
-	parameters->AddObject(new DoubleParam(NdtEnum,iomodel->ndt));
-
-	/*penalty_offset: */
-	parameters->AddObject(new DoubleParam(PenaltyOffsetEnum,iomodel->penalty_offset));
-
-	/*sparsity: */
-	parameters->AddObject(new DoubleParam(SparsityEnum,iomodel->sparsity));
-
-	/*lowmem: */
-	parameters->AddObject(new DoubleParam(LowmemEnum,iomodel->lowmem));
-
-	/*connectivity: */
-	parameters->AddObject(new DoubleParam(ConnectivityEnum,iomodel->connectivity));
-
-	/*beta: */
-	parameters->AddObject(new DoubleParam(BetaEnum,iomodel->beta));
-
-	/*meltingpoint: */
-	parameters->AddObject(new DoubleParam(BetaEnum,iomodel->beta));
-	count++;
-	param= new Param(count,"meltingpoint",DOUBLE);
-	param->SetDouble(iomodel->meltingpoint);
-	parameters->AddObject(param);
-
-	/*latentheat: */
-	count++;
-	param= new Param(count,"latentheat",DOUBLE);
-	param->SetDouble(iomodel->latentheat);
-	parameters->AddObject(param);
-
-	/*heatcapacity: */
-	count++;
-	param= new Param(count,"heatcapacity",DOUBLE);
-	param->SetDouble(iomodel->heatcapacity);
-	parameters->AddObject(param);
-
-	/*artdiff: */
-	count++;
-	param= new Param(count,"artdiff",DOUBLE);
-	param->SetDouble(iomodel->artdiff);
-	parameters->AddObject(param);
-	
-	/*penalty_melting: */
-	count++;
-	param= new Param(count,"penalty_melting",DOUBLE);
-	param->SetDouble(iomodel->penalty_melting);
-	parameters->AddObject(param);
-
-	/*min_thermal_constraints: */
-	count++;
-	param= new Param(count,"min_thermal_constraints",DOUBLE);
-	param->SetDouble(iomodel->min_thermal_constraints);
-	parameters->AddObject(param);
-
-	/*min_mechanical_constraints: */
-	count++;
-	param= new Param(count,"min_mechanical_constraints",DOUBLE);
-	param->SetDouble(iomodel->min_mechanical_constraints);
-	parameters->AddObject(param);
-
-	/*stabilize_constraints: */
-	count++;
-	param= new Param(count,"stabilize_constraints",DOUBLE);
-	param->SetDouble(iomodel->stabilize_constraints);
-	parameters->AddObject(param);
-
-	/*stokesreconditioning: */
-	count++;
-	param= new Param(count,"stokesreconditioning",DOUBLE);
-	param->SetDouble(iomodel->stokesreconditioning);
-	parameters->AddObject(param);
-
-	/*viscosity_overshoot: */
-	count++;
-	param= new Param(count,"viscosity_overshoot",DOUBLE);
-	param->SetDouble(iomodel->viscosity_overshoot);
-	parameters->AddObject(param);
-
-	/*waitonlock: */
-	count++;
-	param= new Param(count,"waitonlock",DOUBLE);
-	param->SetDouble(iomodel->waitonlock);
-	parameters->AddObject(param);
-
-	/*solverstring: */
-	count++;
-	param= new Param(count,"solverstring",STRING);
-	param->SetString(iomodel->solverstring);
-	parameters->AddObject(param);
-
-	/*plot: */
-	count++;
-	param= new Param(count,"plot",DOUBLE);
-	param->SetDouble(iomodel->plot);
-	parameters->AddObject(param);
-
-	/*numberofvertices: */
-	count++;
-	param= new Param(count,"numberofvertices",DOUBLE);
-	param->SetDouble(iomodel->numberofvertices);
-	parameters->AddObject(param);
-
-	/*numberofnodes: */
-	count++;
-	param= new Param(count,"numberofnodes",DOUBLE);
+	/*Deal with more complex parameters*/
 	if (
 				iomodel->analysis_type==Prognostic2AnalysisEnum ||
 				iomodel->analysis_type==Balancedthickness2AnalysisEnum
 				)
-	 param->SetDouble(3*iomodel->numberofelements);
-	else param->SetDouble(iomodel->numberofvertices);
-	parameters->AddObject(param);
+	 parameters->AddObject(new    IntParam(NumberOfNodesEnum,3*iomodel->numberofelements));
+	else parameters->AddObject(new    IntParam(NumberOfNodesEnum,iomodel->numberofvertices));
 
-	/*numberofelements: */
-	count++;
-	param= new Param(count,"numberofelements",DOUBLE);
-	param->SetDouble(iomodel->numberofelements);
-	parameters->AddObject(param);
+	DistributeNumDofs(&numberofdofspernode,iomodel->analysis_type,iomodel->sub_analysis_type);
+	parameters->AddObject(new    IntParam(NumberOfDofsPerNodeEnum,numberofdofspernode));
 
-	/*Deal with numberofdofspernode: */
-	DistributeNumDofs(&numberofdofspernode,iomodel->analysis_type,iomodel->sub_analysis_type);
-	count++;
-	param= new Param(count,"numberofdofspernode",DOUBLE);
-	param->SetDouble(numberofdofspernode);
-	parameters->AddObject(param);
+	IoModelFetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,iomodel_handle,"riftinfo");
+	parameters->AddObject(new    IntParam(NumRiftsEnum,iomodel->numrifts));
+	xfree((void**)&iomodel->riftinfo); 
 
-	/*numrifts: */
-	IoModelFetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,iomodel_handle,"riftinfo");
-	count++;
-	param= new Param(count,"numrifts",DOUBLE);
-	param->SetDouble(iomodel->numrifts);
-	parameters->AddObject(param);
-	xfree((void**)&iomodel->riftinfo); 
-	
-	/*epsvel: */
-	count++;
-	param= new Param(count,"epsvel",DOUBLE);
-	param->SetDouble(iomodel->epsvel);
-	parameters->AddObject(param);
-
-	/*parameteroutput: */
-	count++;
-	param= new Param(count,"numoutput",DOUBLE);
-	param->SetDouble(iomodel->numoutput);
-	parameters->AddObject(param);
-
+	parameters->AddObject(new    IntParam(NumOutputEnum,iomodel->numoutput));
 	if(iomodel->numoutput){
 		parameteroutput=(char**)xmalloc(iomodel->numoutput*sizeof(char*));
@@ -230,8 +97,5 @@
 
 		/*Ok, we have all the parameter output  descriptors. Build a parameter with it: */
-		count++;
-		param= new Param(count,"parameteroutput",STRINGARRAY);
-		param->SetStringArray(parameteroutput,iomodel->numoutput);
-		parameters->AddObject(param);
+		parameters->AddObject(new StringArrayParam(ParameterOutputEnum,parameteroutput,iomodel->numoutput));
 	}
 
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateParametersDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateParametersDiagnosticHoriz.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateParametersDiagnosticHoriz.cpp	(revision 3697)
@@ -12,41 +12,3 @@
 void CreateParametersDiagnosticHoriz(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
 	
-	Param*   param = NULL;
-	Parameters* parameters=NULL;
-	int      count;
-	int i;
-
-	double* ug=NULL;
-
-	/*recover parameters : */
-	parameters=*pparameters;
-
-	count=parameters->Size();
-
-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
-//	if (!iomodel->ismacayealpattyn)return;
-
-	/*Get vx and vy: */
-	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-	IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
-
-	ug=(double*)xcalloc(iomodel->numberofvertices*3,sizeof(double));
-
-	if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++) ug[3*i+0]=iomodel->vx[i]/iomodel->yts;
-	if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++) ug[3*i+1]=iomodel->vy[i]/iomodel->yts;
-	if(iomodel->vz) for(i=0;i<iomodel->numberofvertices;i++) ug[3*i+2]=iomodel->vz[i]/iomodel->yts;
-
-	count++;
-	param= new Param(count,"u_g",DOUBLEVEC);
-	param->SetDoubleVec(ug,3*iomodel->numberofvertices,3);
-	parameters->AddObject(param);
-
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&iomodel->vz);
-	xfree((void**)&ug);
-	
-	/*Assign output pointer: */
-	*pparameters=parameters;
 }
Index: /issm/trunk/src/c/ModelProcessorx/Melting/CreateParametersMelting.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Melting/CreateParametersMelting.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/Melting/CreateParametersMelting.cpp	(revision 3697)
@@ -12,42 +12,3 @@
 void CreateParametersMelting(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
 	
-	Param*   param = NULL;
-	Parameters* parameters=NULL;
-	int      count;
-	int i;
-
-	/*recover parameters : */
-	parameters=*pparameters;
-
-	/*if 2d: return*/
-	if (strcmp(iomodel->meshtype,"2d")==0)goto cleanup_and_return;
-
-	count=parameters->Size();
-
-	/* get initial melting_rate if transient*/
-	if(iomodel->dt){
-
-		/*Get melting_rate: */
-		IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-		if(iomodel->melting_rate) {
-			for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;   //m/s instead of m/yr
-		}
-		else{
-			for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=0;
-		}
-
-		count++;
-		param= new Param(count,"m_g",DOUBLEVEC);
-		if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices);
-		else param->SetDoubleVec(iomodel->melting_rate,0);
-		parameters->AddObject(param);
-
-		/*Free melting_rate: */
-		xfree((void**)&iomodel->melting_rate);
-	}
-
-	cleanup_and_return:
-	
-	/*Assign output pointer: */
-	*pparameters=parameters;
 }
Index: /issm/trunk/src/c/ModelProcessorx/Prognostic/CreateParametersPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Prognostic/CreateParametersPrognostic.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/Prognostic/CreateParametersPrognostic.cpp	(revision 3697)
@@ -13,131 +13,3 @@
 void CreateParametersPrognostic(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
 	
-	Param*   param = NULL;
-	Parameters* parameters=NULL;
-	int      count;
-	int      i;
-	int      dim;
-	double* u_g=NULL;
-
-	/*recover parameters : */
-	parameters=*pparameters;
-
-	count=parameters->Size();
-
-	/*Get vx and vy: */
-	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-	IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
-
-	u_g=(double*)xcalloc(iomodel->numberofvertices*3,sizeof(double));
-
-	if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+0]=iomodel->vx[i]/iomodel->yts;
-	if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+1]=iomodel->vy[i]/iomodel->yts;
-	if(iomodel->vz) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+2]=iomodel->vz[i]/iomodel->yts;
-
-	count++;
-	param= new Param(count,"u_g",DOUBLEVEC);
-	param->SetDoubleVec(u_g,3*iomodel->numberofvertices,3);
-	parameters->AddObject(param);
-
-
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&iomodel->vz);
-	xfree((void**)&u_g);
-
-	/*Get pressure if 3d iomodel: */
-	parameters->FindParam(&dim,"dim");
-	if (dim==3){ 
-		IoModelFetchData(&iomodel->pressure,NULL,NULL,iomodel_handle,"pressure");
-		
-		count++;
-		param= new Param(count,"p_g",DOUBLEVEC);
-		if(iomodel->pressure) param->SetDoubleVec(iomodel->pressure,iomodel->numberofvertices,1);
-		else param->SetDoubleVec(iomodel->pressure,0,0);
-		parameters->AddObject(param);
-
-		/*Free pressure: */
-		xfree((void**)&iomodel->pressure);
-	}
-
-	/*Get temperature if 3d iomodel: */
-	parameters->FindParam(&dim,"dim");
-	if (dim==3){ 
-		IoModelFetchData(&iomodel->temperature,NULL,NULL,iomodel_handle,"temperature");
-		
-		count++;
-		param= new Param(count,"t_g",DOUBLEVEC);
-		if(iomodel->temperature) param->SetDoubleVec(iomodel->temperature,iomodel->numberofvertices,1);
-		else param->SetDoubleVec(iomodel->temperature,0,0);
-		parameters->AddObject(param);
-
-		/*Free temperature: */
-		xfree((void**)&iomodel->temperature);
-	}
-
-	/*Get thickness: */
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	
-	count++;
-	param= new Param(count,"h_g",DOUBLEVEC);
-	if(iomodel->thickness) param->SetDoubleVec(iomodel->thickness,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->thickness,0,0);
-	parameters->AddObject(param);
-
-	/*Free thickness: */
-	xfree((void**)&iomodel->thickness);
-
-	/*Get surface: */
-	IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-	
-	count++;
-	param= new Param(count,"s_g",DOUBLEVEC);
-	if(iomodel->surface) param->SetDoubleVec(iomodel->surface,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->surface,0,0);
-	parameters->AddObject(param);
-
-	/*Free surface: */
-	xfree((void**)&iomodel->surface);
-
-	/*Get bed: */
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-	
-	count++;
-	param= new Param(count,"b_g",DOUBLEVEC);
-	if(iomodel->bed) param->SetDoubleVec(iomodel->bed,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->bed,0,0);
-	parameters->AddObject(param);
-
-	/*Free bed: */
-	xfree((void**)&iomodel->bed);
-
-	/*Get melting_rate: */
-	IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-	if(iomodel->melting_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;
-	
-	count++;
-	param= new Param(count,"m_g",DOUBLEVEC);
-	if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->melting_rate,0,1);
-	parameters->AddObject(param);
-
-	/*Free melting_rate: */
-	xfree((void**)&iomodel->melting_rate);
-
-	/*Get accumulation_rate: */
-	IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-	if(iomodel->accumulation_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->accumulation_rate[i]=iomodel->accumulation_rate[i]/iomodel->yts;
-	
-	count++;
-	param= new Param(count,"a_g",DOUBLEVEC);
-	if(iomodel->accumulation_rate) param->SetDoubleVec(iomodel->accumulation_rate,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->accumulation_rate,0,0);
-	parameters->AddObject(param);
-
-	/*Free accumulation_rate: */
-	xfree((void**)&iomodel->accumulation_rate);
-
-	/*Assign output pointer: */
-	*pparameters=parameters;
 }
Index: /issm/trunk/src/c/ModelProcessorx/Prognostic2/CreateParametersPrognostic2.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Prognostic2/CreateParametersPrognostic2.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/Prognostic2/CreateParametersPrognostic2.cpp	(revision 3697)
@@ -13,104 +13,3 @@
 void CreateParametersPrognostic2(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
 	
-	Param*   param = NULL;
-	Parameters* parameters=NULL;
-	int      count;
-	int      i;
-	int      dim;
-	double*  vx_g=NULL;
-	double*  vy_g=NULL;
-
-	/*recover parameters : */
-	parameters=*pparameters;
-
-	count=parameters->Size();
-
-	/*Get vx and vy: */
-	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-
-	vx_g=(double*)xcalloc(iomodel->numberofvertices,sizeof(double));
-	vy_g=(double*)xcalloc(iomodel->numberofvertices,sizeof(double));
-
-	if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)vx_g[i]=iomodel->vx[i]/iomodel->yts;
-	if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)vy_g[i]=iomodel->vy[i]/iomodel->yts;
-
-	count++;
-	param= new Param(count,"vx_g",DOUBLEVEC);
-	param->SetDoubleVec(vx_g,iomodel->numberofvertices,1);
-	parameters->AddObject(param);
-	count++;
-	param= new Param(count,"vy_g",DOUBLEVEC);
-	param->SetDoubleVec(vy_g,iomodel->numberofvertices,1);
-	parameters->AddObject(param);
-
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&vx_g);
-	xfree((void**)&vy_g);
-
-	/*Get thickness: */
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	
-	count++;
-	param= new Param(count,"h_g",DOUBLEVEC);
-	if(iomodel->thickness) param->SetDoubleVec(iomodel->thickness,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->thickness,0,0);
-	parameters->AddObject(param);
-
-	/*Free thickness: */
-	xfree((void**)&iomodel->thickness);
-
-	/*Get surface: */
-	IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-	
-	count++;
-	param= new Param(count,"s_g",DOUBLEVEC);
-	if(iomodel->surface) param->SetDoubleVec(iomodel->surface,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->surface,0,0);
-	parameters->AddObject(param);
-
-	/*Free surface: */
-	xfree((void**)&iomodel->surface);
-
-	/*Get bed: */
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-	
-	count++;
-	param= new Param(count,"b_g",DOUBLEVEC);
-	if(iomodel->bed) param->SetDoubleVec(iomodel->bed,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->bed,0,0);
-	parameters->AddObject(param);
-
-	/*Free bed: */
-	xfree((void**)&iomodel->bed);
-
-	/*Get melting_rate: */
-	IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-	if(iomodel->melting_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;
-	
-	count++;
-	param= new Param(count,"m_g",DOUBLEVEC);
-	if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->melting_rate,0,1);
-	parameters->AddObject(param);
-
-	/*Free melting_rate: */
-	xfree((void**)&iomodel->melting_rate);
-
-	/*Get accumulation_rate: */
-	IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-	if(iomodel->accumulation_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->accumulation_rate[i]=iomodel->accumulation_rate[i]/iomodel->yts;
-	
-	count++;
-	param= new Param(count,"a_g",DOUBLEVEC);
-	if(iomodel->accumulation_rate) param->SetDoubleVec(iomodel->accumulation_rate,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->accumulation_rate,0,0);
-	parameters->AddObject(param);
-
-	/*Free accumulation_rate: */
-	xfree((void**)&iomodel->accumulation_rate);
-
-	/*Assign output pointer: */
-	*pparameters=parameters;
 }
Index: /issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 3697)
@@ -17,6 +17,4 @@
 	
 	Parameters* parameters = NULL;
-	Param*   param = NULL;
-	int      count;
 	int      second_count;
 	
@@ -42,7 +40,4 @@
 	int num_qmu_mass_flux_segments=0;
 	int my_num_qmu_mass_flux_segments=0;
-	
-	/*parameters for misfit: */
-	double* u_g_obs=NULL;
 
 	#ifdef _SERIAL_
@@ -54,13 +49,5 @@
 	parameters=*pparameters;
 
-	count=parameters->Size();
-
-	//qmu analysis?
-	count++;
-	param= new Param(count,"qmu_analysis",DOUBLE);
-	param->SetDouble(iomodel->qmu_analysis);
-	parameters->AddObject(param);
-
-
+	parameters->AddObject(new   BoolParam(QmuAnalysisEnum,iomodel->qmu_analysis));
 	if(iomodel->qmu_analysis){
 
@@ -68,31 +55,15 @@
 		qmuinname=(char*)xmalloc((strlen(iomodel->name)+strlen(".qmu.in")+1)*sizeof(char));
 		sprintf(qmuinname,"%s%s",iomodel->name,".qmu.in");
-		
-		count++;
-		param= new Param(count,"qmuinname",STRING);
-		param->SetString(qmuinname);
-		parameters->AddObject(param);
+		parameters->AddObject(new   StringParam(QmuInNameEnum,qmuinname));
 
 		qmuoutname=(char*)xmalloc((strlen(iomodel->name)+strlen(".qmu.out")+1)*sizeof(char));
 		sprintf(qmuoutname,"%s%s",iomodel->name,".qmu.out");
-		
-		count++;
-		param= new Param(count,"qmuoutname",STRING);
-		param->SetString(qmuoutname);
-		parameters->AddObject(param);
+		parameters->AddObject(new   StringParam(QmuOutNameEnum,qmuoutname));
 
 		qmuerrname=(char*)xmalloc((strlen(iomodel->name)+strlen(".qmu.err")+1)*sizeof(char));
 		sprintf(qmuerrname,"%s%s",iomodel->name,".qmu.err");
+		parameters->AddObject(new   StringParam(QmuErrNameEnum,qmuerrname));
 		
-		count++;
-		param= new Param(count,"qmuerrname",STRING);
-		param->SetString(qmuerrname);
-		parameters->AddObject(param);
-
-		//npart
-		count++;
-		param= new Param(count,"qmu_npart",DOUBLE);
-		param->SetDouble(iomodel->qmu_npart);
-		parameters->AddObject(param);
+		parameters->AddObject(new    IntParam(QmuNPartEnum,iomodel->qmu_npart));
 
 		/*Deal with variables for qmu iomodeling: */
@@ -120,11 +91,6 @@
 		#endif
 
-
 		/*Ok, we have all the variable descriptors. Build a parameter with it: */
-		count++;
-		param= new Param(count,"variabledescriptors",STRINGARRAY);
-		param->SetStringArray(variabledescriptors,iomodel->numberofvariables);
-		parameters->AddObject(param);
-
+		parameters->AddObject(new StringArrayParam(VariableDescriptorsEnum,variabledescriptors,iomodel->numberofvariables));
 
 		/*Deal with responses and partition for qmu iomodeling: */
@@ -151,8 +117,5 @@
 
 		/*Ok, we have all the response descriptors. Build a parameter with it: */
-		count++;
-		param= new Param(count,"responsedescriptors",STRINGARRAY);
-		param->SetStringArray(responsedescriptors,iomodel->numberofresponses);
-		parameters->AddObject(param);
+		parameters->AddObject(new StringArrayParam(ResponseDescriptorsEnum,responsedescriptors,iomodel->numberofresponses));
 
 		/*partition vertices in iomodel->qmu_npart parts, unless a partition is already present: */
@@ -167,10 +130,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++)dpart[i]=iomodel->my_vertices[i];
 		}
-
-		count++;
-		param= new Param(count,"qmu_part",DOUBLEVEC);
-		param->SetDoubleVec(dpart,iomodel->numberofvertices,1);
-		parameters->AddObject(param);
-
+		parameters->AddObject(new DoubleVecParam(QmuPartEnum,dpart,iomodel->numberofvertices));
 
 		/*Ok, now if any of the variables input from Dakota are distributed, we are going to need the parameters: */
@@ -183,14 +141,6 @@
 				){
 
-				//Fetch data: 
 				IoModelFetchData(&dakota_parameter,NULL,NULL,iomodel_handle,descriptor);
-
-				//Add parameter
-				count++;
-				param= new Param(count,descriptor,DOUBLEVEC);
-				param->SetDoubleVec(dakota_parameter,iomodel->numberofvertices,1);
-				parameters->AddObject(param);
-
-				//free data
+				parameters->AddObject(new DoubleVecParam(DakotaParameterEnum,dakota_parameter,iomodel->numberofvertices));
 				xfree((void**)&dakota_parameter);
 
@@ -230,8 +180,5 @@
 						}
 
-						count++;
-						param= new Param(count,"qmu_mass_flux_segments",DOUBLEMAT);
-						param->SetDoubleMat(my_qmu_mass_flux_segments,my_num_qmu_mass_flux_segments,5);
-						parameters->AddObject(param);
+						parameters->AddObject(new DoubleMatParam(QmuMassFluxSegmentsEnum,my_qmu_mass_flux_segments,my_num_qmu_mass_flux_segments,5));
 
 					}
@@ -239,8 +186,5 @@
 				#else
 
-					count++;
-					param= new Param(count,"qmu_mass_flux_segments",DOUBLEMAT);
-					param->SetDoubleMat(qmu_mass_flux_segments,num_qmu_mass_flux_segments,5);
-					parameters->AddObject(param);
+					parameters->AddObject(new DoubleMatParam(QmuMassFluxSegmentsEnum,qmu_mass_flux_segments,num_qmu_mass_flux_segments,5));
 
 				#endif
@@ -254,26 +198,16 @@
 				IoModelFetchData(&iomodel->vx_obs,NULL,NULL,iomodel_handle,"vx_obs");
 				IoModelFetchData(&iomodel->vy_obs,NULL,NULL,iomodel_handle,"vy_obs");
-
-				/*Now, recover fit: */
 				IoModelFetchData(&iomodel->fit,NULL,NULL,iomodel_handle,"fit");
 
-				u_g_obs=(double*)xcalloc(iomodel->numberofvertices*2,sizeof(double));
-				if(iomodel->vx_obs)for(i=0;i<iomodel->numberofvertices;i++)u_g_obs[2*i+0]=iomodel->vx_obs[i]/iomodel->yts;
-				if(iomodel->vy_obs)for(i=0;i<iomodel->numberofvertices;i++)u_g_obs[2*i+1]=iomodel->vy_obs[i]/iomodel->yts;
-
-				count++;
-				param= new Param(count,"velocity_obs",DOUBLEVEC);
-				param->SetDoubleVec(u_g_obs,2*iomodel->numberofvertices,2);
-				parameters->AddObject(param);
-
-				count++;
-				param= new Param(count,"fit",DOUBLEVEC);
-				param->SetDoubleVec(iomodel->fit,iomodel->nsteps);
-				parameters->AddObject(param);
+				if(iomodel->vx_obs)for(i=0;i<iomodel->numberofvertices;i++)iomodel->vx_obs[2*i+0]=iomodel->vx_obs[i]/iomodel->yts;
+				if(iomodel->vy_obs)for(i=0;i<iomodel->numberofvertices;i++)iomodel->vy_obs[2*i+1]=iomodel->vy_obs[i]/iomodel->yts;
+
+				parameters->AddObject(new DoubleVecParam(VxObsEnum,iomodel->vx_obs,iomodel->numberofvertices));
+				parameters->AddObject(new DoubleVecParam(VyObsEnum,iomodel->vy_obs,iomodel->numberofvertices));
+				parameters->AddObject(new DoubleVecParam(FitEnum,iomodel->fit,iomodel->nsteps));
 
 				xfree((void**)&iomodel->vx_obs);
 				xfree((void**)&iomodel->vy_obs);
 				xfree((void**)&iomodel->fit);
-				xfree((void**)&u_g_obs);
 
 			}
Index: /issm/trunk/src/c/ModelProcessorx/Thermal/CreateParametersThermal.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Thermal/CreateParametersThermal.cpp	(revision 3696)
+++ /issm/trunk/src/c/ModelProcessorx/Thermal/CreateParametersThermal.cpp	(revision 3697)
@@ -13,70 +13,3 @@
 void CreateParametersThermal(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
 	
-	Param*   param = NULL;
-	Parameters* parameters=NULL;
-	int      count;
-	int i;
-	double* u_g=NULL;
-
-	/*recover parameters : */
-	parameters=*pparameters;
-
-	/*return if 2d mesh*/
-	if (strcmp(iomodel->meshtype,"2d")==0)goto cleanup_and_return;
-
-	count=parameters->Size();
-
-	/*Get vx vy and vz: */
-	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-	IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
-
-	u_g=(double*)xcalloc(iomodel->numberofvertices*3,sizeof(double));
-
-	if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+0]=iomodel->vx[i]/iomodel->yts;
-	if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+1]=iomodel->vy[i]/iomodel->yts;
-	if(iomodel->vz) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+2]=iomodel->vz[i]/iomodel->yts;
-
-	count++;
-	param= new Param(count,"u_g",DOUBLEVEC);
-	param->SetDoubleVec(u_g,3*iomodel->numberofvertices,3);
-	parameters->AddObject(param);
-
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&iomodel->vz);
-	xfree((void**)&u_g);
-	
-	/*Get pressure: */
-	IoModelFetchData(&iomodel->pressure,NULL,NULL,iomodel_handle,"pressure");
-	
-	count++;
-	param= new Param(count,"p_g",DOUBLEVEC);
-	if(iomodel->pressure) param->SetDoubleVec(iomodel->pressure,iomodel->numberofvertices,1);
-	else param->SetDoubleVec(iomodel->pressure,0,0);
-	parameters->AddObject(param);
-
-	/*Free pressure: */
-	xfree((void**)&iomodel->pressure);
-
-	/* get initial temperature and melting if transient*/
-	if(iomodel->dt){
-
-		/*Get melting and temperature: */
-		IoModelFetchData(&iomodel->temperature,NULL,NULL,iomodel_handle,"temperature");
-
-		count++;
-		param= new Param(count,"t_g",DOUBLEVEC);
-		if(iomodel->temperature) param->SetDoubleVec(iomodel->temperature,iomodel->numberofvertices,1);
-		else ISSMERROR("Missing initial temperature");
-		parameters->AddObject(param);
-
-		/*Free temperature: */
-		xfree((void**)&iomodel->temperature);
-	}
-
-	cleanup_and_return:
-	
-	/*Assign output pointer: */
-	*pparameters=parameters;
 }
Index: /issm/trunk/src/c/objects/Params/DoubleVecParam.cpp
===================================================================
--- /issm/trunk/src/c/objects/Params/DoubleVecParam.cpp	(revision 3696)
+++ /issm/trunk/src/c/objects/Params/DoubleVecParam.cpp	(revision 3697)
@@ -28,5 +28,5 @@
 }
 /*}}}*/
-/*FUNCTION DoubleVecParam::DoubleVecParam(int enum_type,IssmDoubleVec value){{{1*/
+/*FUNCTION DoubleVecParam::DoubleVecParam(int enum_type,IssmDoubleVec value,int M){{{1*/
 DoubleVecParam::DoubleVecParam(int in_enum_type,double* in_value, int in_M){
 
