Index: /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 9370)
@@ -36,13 +36,7 @@
 	
 	/*First fetch data: */
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
+	iomodel->FetchData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 
 	for (i=0;i<numberofvertices;i++){
-
 		if(iomodel->my_vertices[i]){
 			
@@ -54,10 +48,5 @@
 
 	/*Clean fetched data: */
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->vertices_type);	
+	iomodel->DeleteData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 	
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 9370)
@@ -21,6 +21,6 @@
 	/*Fetch data needed: */
 	iomodel->constants->FindParam(&dim,DimEnum);
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 	iomodel->constants->FindParam(&numberofelements,NumberOfElementsEnum);
+	iomodel->FetchData(1,ElementsEnum);
 
 	/*Update elements: */
@@ -44,5 +44,4 @@
 	
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
-
+	iomodel->DeleteData(1,ElementsEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 9370)
@@ -15,10 +15,14 @@
 	
 	int         i;
-	Parameters* parameters=NULL;
-	bool        control_analysis=false;
+	Parameters *parameters       = NULL;
+	bool        control_analysis = false;
 	int         nsteps;
 	int         num_control_type;
 	int         num_cm_responses;
-	int*        control_type=NULL;
+	int        *control_type     = NULL;
+	double     *cm_responses     = NULL;
+	double     *cm_jump          = NULL;
+	double     *optscal          = NULL;
+	double     *maxiter          = NULL;
 
 	/*Get parameters: */
@@ -29,9 +33,4 @@
 
 	if(control_analysis){
-
-		/*What control type?*/
-		iomodel->FetchData(&control_type,&num_control_type,NULL,ControlTypeEnum);
-		parameters->AddObject(new IntVecParam(ControlTypeEnum,control_type,num_control_type));
-		xfree((void**)&control_type);
 
 		/*What solution type?*/
@@ -44,18 +43,21 @@
 
 		/*Now, recover fit, optscal and maxiter as vectors: */
-		iomodel->FetchData(&iomodel->cm_responses,&nsteps,&num_control_type,CmResponsesEnum);
-		iomodel->FetchData(&iomodel->cm_jump,&nsteps,&num_cm_responses,CmJumpEnum);
-		iomodel->FetchData(&iomodel->optscal,NULL,NULL,OptscalEnum);
-		iomodel->FetchData(&iomodel->maxiter,NULL,NULL,MaxiterEnum);
+		iomodel->FetchData(&control_type,&num_control_type,NULL,ControlTypeEnum);
+		iomodel->FetchData(&cm_responses,&nsteps,&num_control_type,CmResponsesEnum);
+		iomodel->FetchData(&cm_jump,&nsteps,&num_cm_responses,CmJumpEnum);
+		iomodel->FetchData(&optscal,NULL,NULL,OptscalEnum);
+		iomodel->FetchData(&maxiter,NULL,NULL,MaxiterEnum);
 
-		parameters->AddObject(new DoubleMatParam(OptscalEnum,iomodel->optscal,nsteps,num_control_type));
-		parameters->AddObject(new DoubleMatParam(CmResponsesEnum,iomodel->cm_responses,nsteps,num_cm_responses));
-		parameters->AddObject(new DoubleVecParam(CmJumpEnum,iomodel->cm_jump,nsteps));
-		parameters->AddObject(new DoubleVecParam(MaxiterEnum,iomodel->maxiter,nsteps));
+		parameters->AddObject(new IntVecParam(ControlTypeEnum,control_type,num_control_type));
+		parameters->AddObject(new DoubleMatParam(OptscalEnum,optscal,nsteps,num_control_type));
+		parameters->AddObject(new DoubleMatParam(CmResponsesEnum,cm_responses,nsteps,num_cm_responses));
+		parameters->AddObject(new DoubleVecParam(CmJumpEnum,cm_jump,nsteps));
+		parameters->AddObject(new DoubleVecParam(MaxiterEnum,maxiter,nsteps));
 
-		xfree((void**)&iomodel->cm_responses);
-		xfree((void**)&iomodel->cm_jump);
-		xfree((void**)&iomodel->optscal);
-		xfree((void**)&iomodel->maxiter);
+		xfree((void**)&control_type);
+		xfree((void**)&cm_responses);
+		xfree((void**)&cm_jump);
+		xfree((void**)&optscal);
+		xfree((void**)&maxiter);
 	}
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 9370)
@@ -35,32 +35,18 @@
 
 	/*Fetch data needed: */
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(1,ElementsEnum);
 	iomodel->FetchDataToInput(elements,VxObsEnum);
 	iomodel->FetchDataToInput(elements,VyObsEnum); 
 	iomodel->FetchDataToInput(elements,ThicknessObsEnum);
 
-	iomodel->FetchData(&iomodel->control_type,NULL,NULL,ControlTypeEnum);
-	iomodel->FetchData(&iomodel->weights,NULL,NULL,WeightsEnum);
-	iomodel->FetchData(&iomodel->cm_min,NULL,NULL,CmMinEnum);
-	iomodel->FetchData(&iomodel->cm_max,NULL,NULL,CmMaxEnum);
+	iomodel->FetchData(4,ControlTypeEnum,WeightsEnum,CmMinEnum,CmMaxEnum);
 	for(i=0;i<num_control_type;i++){
-		switch((int)iomodel->control_type[i]){
-			case DhdtEnum:
-				iomodel->FetchData(&iomodel->dhdt,NULL,NULL,DhdtEnum);
-				break;
-			case VxEnum:
-				iomodel->FetchData(&iomodel->vx,NULL,NULL,VxEnum);
-				break;
-			case VyEnum:
-				iomodel->FetchData(&iomodel->vy,NULL,NULL,VyEnum);
-				break;
-			case DragCoefficientEnum:
-				iomodel->FetchData(&iomodel->drag_coefficient,NULL,NULL,DragCoefficientEnum);
-				break;
-			case RheologyBbarEnum:
-				iomodel->FetchData(&iomodel->rheology_B,NULL,NULL,RheologyBEnum);
-				break;
-			default:
-				_error_("Control %s not implemented yet",EnumToStringx((int)iomodel->control_type[i]));
+		switch((int)iomodel->f(ControlTypeEnum)[i]){
+			case DhdtEnum: iomodel->FetchData(1,DhdtEnum); break;
+			case VxEnum:   iomodel->FetchData(1,VxEnum); break;
+			case VyEnum:   iomodel->FetchData(1,VyEnum); break;
+			case DragCoefficientEnum: iomodel->FetchData(1,DragCoefficientEnum); break;
+			case RheologyBbarEnum:    iomodel->FetchData(1,RheologyBEnum); break;
+			default: _error_("Control %s not implemented yet",EnumToStringx((int)iomodel->f(ControlTypeEnum)[i]));
 		}
 	}
@@ -80,13 +66,4 @@
 	
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->weights);
-	xfree((void**)&iomodel->cm_min);
-	xfree((void**)&iomodel->cm_max);
-	xfree((void**)&iomodel->control_type);
-	xfree((void**)&iomodel->dhdt);
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&iomodel->drag_coefficient);
-	xfree((void**)&iomodel->rheology_B);
+	iomodel->DeleteData(1+4+5,ElementsEnum,ControlTypeEnum,WeightsEnum,CmMinEnum,CmMaxEnum,DhdtEnum,VxEnum,VyEnum,DragCoefficientEnum,RheologyBEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 9370)
@@ -17,7 +17,7 @@
 	/*Intermediary*/
 	int i,j,k,n;
-	int    dim;
-	int    numberofelements;
-	int    numberofvertices;
+	int dim;
+	int numberofelements;
+	int numberofvertices;
 
 	/*DataSets: */
@@ -43,5 +43,6 @@
 	
 	/*Fetch data needed: */
-	iomodel->FetchData(9,ElementsEnum,ElementconnectivityEnum,UpperelementsEnum,LowerelementsEnum,RheologyBEnum,RheologyNEnum,ControlTypeEnum,CmMinEnum,CmMaxEnum);
+	iomodel->FetchData(9,ElementsEnum,ElementconnectivityEnum,UpperelementsEnum,LowerelementsEnum,
+				RheologyBEnum,RheologyNEnum,ControlTypeEnum,CmMinEnum,CmMaxEnum);
 	
 	/*Create elements and materials: */
@@ -60,5 +61,6 @@
 	
 	/*Free data: */
-	iomodel->DeleteData(9,ElementsEnum,ElementconnectivityEnum,UpperelementsEnum,LowerelementsEnum,RheologyBEnum,RheologyNEnum,ControlTypeEnum,CmMinEnum,CmMaxEnum);
+	iomodel->DeleteData(9,ElementsEnum,ElementconnectivityEnum,UpperelementsEnum,LowerelementsEnum,
+				RheologyBEnum,RheologyNEnum,ControlTypeEnum,CmMinEnum,CmMaxEnum);
 
 	/*Add new constrant material property tgo materials, at the end: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 9370)
@@ -27,4 +27,7 @@
 	/*output*/
 	int* connectivity=NULL;
+
+	/*Return if connectivity already present*/
+	if(iomodel->singlenodetoelementconnectivity) return;
 
 	/*Fetch parameters: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 9370)
@@ -14,11 +14,21 @@
 
 	/*Intermediary*/
-	int i,j;
-	int count;
-	double yts;
-	double g;
-	double rho_ice;
-	double stokesreconditioning;
-	bool   isstokes,ismacayealpattyn;
+	int     i,j;
+	int     count;
+	double  yts;
+	double  g;
+	double  rho_ice;
+	double  stokesreconditioning;
+	bool    isstokes,ismacayealpattyn;
+	double *spcvx           = NULL;
+	double *spcvy           = NULL;
+	double *spcvz           = NULL;
+	double *nodeonhutter    = NULL;
+	double *nodeonmacayeal  = NULL;
+	double *nodeonpattyn    = NULL;
+	double *nodeonstokes    = NULL;
+	double *vertices_type   = NULL;
+	double *surface         = NULL;
+	double *z               = NULL;
 	
 	/*Output*/
@@ -46,17 +56,20 @@
 	
 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
-	if (!ismacayealpattyn & !isstokes)goto cleanup_and_return;
+	if (!ismacayealpattyn & !isstokes){
+		*pconstraints=constraints;
+		return;
+	}
 	
 	/*Constraints: fetch data: */
-	iomodel->FetchData(&iomodel->spcvx,NULL,NULL,SpcvxEnum);
-	iomodel->FetchData(&iomodel->spcvy,NULL,NULL,SpcvyEnum);
-	iomodel->FetchData(&iomodel->spcvz,NULL,NULL,SpcvzEnum);
-	iomodel->FetchData(&iomodel->nodeonhutter,NULL,NULL,NodeOnHutterEnum);
-	iomodel->FetchData(&iomodel->nodeonmacayeal,NULL,NULL,NodeOnMacayealEnum);
-	if(dim==3)iomodel->FetchData(&iomodel->nodeonpattyn,NULL,NULL,NodeOnPattynEnum);
-	if(dim==3)iomodel->FetchData(&iomodel->nodeonstokes,NULL,NULL,NodeOnStokesEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->surface,NULL,NULL,SurfaceEnum);
-	iomodel->FetchData(&iomodel->z,NULL,NULL,ZEnum);
+	iomodel->FetchData(&spcvx,NULL,NULL,SpcvxEnum);
+	iomodel->FetchData(&spcvy,NULL,NULL,SpcvyEnum);
+	iomodel->FetchData(&spcvz,NULL,NULL,SpcvzEnum);
+	iomodel->FetchData(&nodeonhutter,NULL,NULL,NodeOnHutterEnum);
+	iomodel->FetchData(&nodeonmacayeal,NULL,NULL,NodeOnMacayealEnum);
+	if(dim==3)iomodel->FetchData(&nodeonpattyn,NULL,NULL,NodeOnPattynEnum);
+	if(dim==3)iomodel->FetchData(&nodeonstokes,NULL,NULL,NodeOnStokesEnum);
+	iomodel->FetchData(&vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
+	iomodel->FetchData(&z,NULL,NULL,ZEnum);
 
 	/*Initialize counter: */
@@ -68,32 +81,32 @@
 
 			/*Start with adding spcs of coupling: zero at the border macayeal/pattyn for the appropriate dofs*/
-			if ((int)iomodel->vertices_type[i]==MacAyealPattynApproximationEnum){
+			if ((int)vertices_type[i]==MacAyealPattynApproximationEnum){
 				/*If grionmacayeal, spc pattyn dofs: 3 & 4*/
-					if ((int)iomodel->nodeonpattyn[i]){
+					if ((int)nodeonpattyn[i]){
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-
-					}
-					else if ((int)iomodel->nodeonmacayeal[i]){
+						if (!isnan(spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+
+					}
+					else if ((int)nodeonmacayeal[i]){
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						if (!isnan(spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
@@ -103,7 +116,7 @@
 			}
 			/*Also add spcs of coupling: zero at the border pattyn/stokes for the appropriate dofs*/
-			else if ((int)iomodel->vertices_type[i]==PattynStokesApproximationEnum){
+			else if ((int)vertices_type[i]==PattynStokesApproximationEnum){
 				/*If grion,pattyn spc stokes dofs: 3 4 & 5*/
-					if ((int)iomodel->nodeonpattyn[i]){
+					if ((int)nodeonpattyn[i]){
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
@@ -112,29 +125,29 @@
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-
-					}
-					else if ((int)iomodel->nodeonstokes[i]){ //spc pattyn nodes: 1 & 2
+						if (!isnan(spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+
+					}
+					else if ((int)nodeonstokes[i]){ //spc pattyn nodes: 1 & 2
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvz[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,iomodel->spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						if (!isnan(spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(spcvz[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
@@ -143,7 +156,7 @@
 			}
 			/*Also add spcs of coupling: zero at the border pattyn/stokes for the appropriate dofs*/
-			else if ((int)iomodel->vertices_type[i]==MacAyealStokesApproximationEnum){
+			else if ((int)vertices_type[i]==MacAyealStokesApproximationEnum){
 				/*If grion,pattyn spc stokes dofs: 3 4 & 5*/
-					if ((int)iomodel->nodeonmacayeal[i]){
+					if ((int)nodeonmacayeal[i]){
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
@@ -152,29 +165,29 @@
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-
-					}
-					else if ((int)iomodel->nodeonstokes[i]){ //spc macayeal nodes: 1 & 2
+						if (!isnan(spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+
+					}
+					else if ((int)nodeonstokes[i]){ //spc macayeal nodes: 1 & 2
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvz[i])){
-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,iomodel->spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						if (!isnan(spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(spcvz[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
@@ -184,28 +197,28 @@
 			/*Now add the regular spcs*/
 			else{
-				if (!isnan(iomodel->spcvx[i])){
-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-					count++;
-				}
-				else if (iomodel->nodeonhutter[i]){
+				if (!isnan(spcvx[i])){
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+					count++;
+				}
+				else if (nodeonhutter[i]){
 					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,DiagnosticHorizAnalysisEnum)); 
 					count++;
 				}
 				
-				if (!isnan(iomodel->spcvy[i])){
-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
-					count++;
-				}
-				else if (iomodel->nodeonhutter[i]){
+				if (!isnan(spcvy[i])){
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
+					count++;
+				}
+				else if (nodeonhutter[i]){
 					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,DiagnosticHorizAnalysisEnum)); 
 					count++;
 				}
 
-				if (!isnan(iomodel->spcvz[i]) && ((int)iomodel->vertices_type[i]==StokesApproximationEnum ||  ((int)iomodel->vertices_type[i]==NoneApproximationEnum))){
-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
-					count++;
-				}
-				if ((int)iomodel->vertices_type[i]==NoneApproximationEnum){
-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,g*rho_ice*(iomodel->surface[i]-iomodel->z[i])/stokesreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+				if (!isnan(spcvz[i]) && ((int)vertices_type[i]==StokesApproximationEnum ||  ((int)vertices_type[i]==NoneApproximationEnum))){
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+					count++;
+				}
+				if ((int)vertices_type[i]==NoneApproximationEnum){
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,g*rho_ice*(surface[i]-z[i])/stokesreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
 					count++;
 				}
@@ -215,16 +228,14 @@
 	  
 	/*Free data: */
-	xfree((void**)&iomodel->spcvx);
-	xfree((void**)&iomodel->spcvy);
-	xfree((void**)&iomodel->spcvz);
-	xfree((void**)&iomodel->nodeonhutter);
-	xfree((void**)&iomodel->nodeonmacayeal);
-	xfree((void**)&iomodel->nodeonpattyn);
-	xfree((void**)&iomodel->nodeonstokes);
-	xfree((void**)&iomodel->vertices_type);
-	xfree((void**)&iomodel->surface);
-	xfree((void**)&iomodel->z);
-
-	cleanup_and_return:
+	xfree((void**)&spcvx);
+	xfree((void**)&spcvy);
+	xfree((void**)&spcvz);
+	xfree((void**)&nodeonhutter);
+	xfree((void**)&nodeonmacayeal);
+	xfree((void**)&nodeonpattyn);
+	xfree((void**)&nodeonstokes);
+	xfree((void**)&vertices_type);
+	xfree((void**)&surface);
+	xfree((void**)&z);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 9370)
@@ -29,4 +29,21 @@
 	bool ismacayealpattyn,isstokes;
 	int  numpenalties,numberofpressureloads,numrifts;
+	double *pressureload   = NULL;
+	double *elements_type  = NULL;
+	double *thickness      = NULL;
+	double *bed            = NULL;
+	double *nodeoniceshelf = NULL;
+	double *riftinfo       = NULL;
+	double *surface        = NULL;
+	double *nodeonbed      = NULL;
+	double *nodeonstokes   = NULL;
+	double *nodeonicesheet = NULL;
+	double *elements       = NULL;
+	double *spcvx          = NULL;
+	double *spcvy          = NULL;
+	double *spcvz          = NULL;
+	double *vertices_type  = NULL;
+	double *penalties      = NULL;
+
 
 	/*Fetch parameters: */
@@ -43,12 +60,15 @@
 
 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
-	if (!ismacayealpattyn & !isstokes)goto cleanup_and_return;
+	if (!ismacayealpattyn & !isstokes){
+		*ploads=loads;
+		return;
+	}
 	
 	/*Create pressure loads as boundary conditions. Pay attention to the partitioning if we are running in parallel (the nodes
 	 * referenced by a certain load must belong to the cluster node): */
-	iomodel->FetchData(&iomodel->pressureload,&numberofpressureloads,NULL,PressureloadEnum);
-	iomodel->FetchData(&iomodel->elements_type,NULL,NULL,ElementsTypeEnum);
-	iomodel->FetchData(&iomodel->thickness,NULL,NULL,ThicknessEnum);
-	iomodel->FetchData(&iomodel->bed,NULL,NULL,BedEnum);
+	iomodel->FetchData(&pressureload,&numberofpressureloads,NULL,PressureloadEnum);
+	iomodel->FetchData(&elements_type,NULL,NULL,ElementsTypeEnum);
+	iomodel->FetchData(&thickness,NULL,NULL,ThicknessEnum);
+	iomodel->FetchData(&bed,NULL,NULL,BedEnum);
 
 	/*Initialize counter: */
@@ -61,5 +81,5 @@
 		if (dim==2) segment_width=4; 
 		else segment_width=6;
-		element=(int)(*(iomodel->pressureload+segment_width*i+segment_width-2)-1); //element is in the penultimate column (node1 node2 ... elem fill)
+		element=(int)(*(pressureload+segment_width*i+segment_width-2)-1); //element is in the penultimate column (node1 node2 ... elem fill)
 
 		/*Now, if this element is not in the partition, pass: */
@@ -67,24 +87,24 @@
 		
 		/*Do not create ice front if Hutter or Stokes elements*/
-		if ((int)*(iomodel->elements_type+element)==HutterApproximationEnum) continue;
+		if ((int)*(elements_type+element)==HutterApproximationEnum) continue;
 
 		/*Create and  add load: */
-		if ((int)*(iomodel->elements_type+element)==(MacAyealApproximationEnum) && dim==2){
+		if ((int)*(elements_type+element)==(MacAyealApproximationEnum) && dim==2){
 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal2dIceFrontEnum,DiagnosticHorizAnalysisEnum));
 			count++;
 		}
-		else if ((int)*(iomodel->elements_type+element)==(MacAyealApproximationEnum) && dim==3){
+		else if ((int)*(elements_type+element)==(MacAyealApproximationEnum) && dim==3){
 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
 			count++;
 		}
-		else if ((int)*(iomodel->elements_type+element)==(PattynApproximationEnum)){
+		else if ((int)*(elements_type+element)==(PattynApproximationEnum)){
 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,PattynIceFrontEnum,DiagnosticHorizAnalysisEnum));
 			count++;
 		}
-		else if ((int)*(iomodel->elements_type+element)==(StokesApproximationEnum)){
+		else if ((int)*(elements_type+element)==(StokesApproximationEnum)){
 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,StokesIceFrontEnum,DiagnosticHorizAnalysisEnum));
 			count++;
 		}
-		else if ((int)*(iomodel->elements_type+element)==(MacAyealPattynApproximationEnum)){
+		else if ((int)*(elements_type+element)==(MacAyealPattynApproximationEnum)){
 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
 			count++;
@@ -92,5 +112,5 @@
 			count++;
 		}
-		else if ((int)*(iomodel->elements_type+element)==(PattynStokesApproximationEnum)){
+		else if ((int)*(elements_type+element)==(PattynStokesApproximationEnum)){
 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,PattynIceFrontEnum,DiagnosticHorizAnalysisEnum));
 			count++;
@@ -98,5 +118,5 @@
 			count++;
 		}
-		else if ((int)*(iomodel->elements_type+element)==(MacAyealStokesApproximationEnum)){
+		else if ((int)*(elements_type+element)==(MacAyealStokesApproximationEnum)){
 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
 			count++;
@@ -107,18 +127,18 @@
 
 	/*Free data: */
-	xfree((void**)&iomodel->pressureload);
-	xfree((void**)&iomodel->elements_type);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
+	xfree((void**)&pressureload);
+	xfree((void**)&elements_type);
+	xfree((void**)&thickness);
+	xfree((void**)&bed);
 
 	/*create penalties for nodes on the base of icesheet. We must have wb=ub*db/dx+vb*db/dy */
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeonstokes,NULL,NULL,NodeOnStokesEnum);
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
-	iomodel->FetchData(&iomodel->spcvx,NULL,NULL,SpcvxEnum);
-	iomodel->FetchData(&iomodel->spcvy,NULL,NULL,SpcvyEnum);
-	iomodel->FetchData(&iomodel->spcvz,NULL,NULL,SpcvzEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&nodeonstokes,NULL,NULL,NodeOnStokesEnum);
+	iomodel->FetchData(&elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(&spcvx,NULL,NULL,SpcvxEnum);
+	iomodel->FetchData(&spcvy,NULL,NULL,SpcvyEnum);
+	iomodel->FetchData(&spcvz,NULL,NULL,SpcvzEnum);
+	iomodel->FetchData(&vertices_type,NULL,NULL,VerticesTypeEnum);
 	CreateSingleNodeToElementConnectivity(iomodel);
 	
@@ -127,6 +147,6 @@
 		if(iomodel->my_vertices[i]==1 && iomodel->singlenodetoelementconnectivity[i]!=0){
 
-			//if ((iomodel->nodeonbed[i]) && (iomodel->nodeonstokes[i])){
-			if ((iomodel->nodeonbed[i]) && (iomodel->nodeonicesheet[i]) && (iomodel->nodeonstokes[i])){
+			//if ((nodeonbed[i]) && (nodeonstokes[i])){
+			if ((nodeonbed[i]) && (nodeonicesheet[i]) && (nodeonstokes[i])){
 				
 				loads->AddObject(new Pengrid(iomodel->loadcounter+count+1,i,iomodel,DiagnosticHorizAnalysisEnum));
@@ -136,27 +156,26 @@
 	}
 
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonstokes);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->spcvx);
-	xfree((void**)&iomodel->spcvy);
-	xfree((void**)&iomodel->spcvz);
-	xfree((void**)&iomodel->vertices_type);
-	xfree((void**)&iomodel->singlenodetoelementconnectivity);
+	xfree((void**)&nodeonbed);
+	xfree((void**)&nodeonstokes);
+	xfree((void**)&nodeonicesheet);
+	xfree((void**)&elements);
+	xfree((void**)&spcvx);
+	xfree((void**)&spcvy);
+	xfree((void**)&spcvz);
+	xfree((void**)&vertices_type);
 
 	/*Create Penpair for penalties: */
-	iomodel->FetchData(&iomodel->penalties,&numpenalties,NULL,PenaltiesEnum);
+	iomodel->FetchData(&penalties,&numpenalties,NULL,PenaltiesEnum);
 	
 	for(i=0;i<numpenalties;i++){
 
-		if(iomodel->my_vertices[(int)iomodel->penalties[2*i+0]-1]){
+		if(iomodel->my_vertices[(int)penalties[2*i+0]-1]){
 
 			/*In debugging mode, check that the second node is in the same cpu*/
-			_assert_(iomodel->my_vertices[(int)iomodel->penalties[2*i+1]-1]);
+			_assert_(iomodel->my_vertices[(int)penalties[2*i+1]-1]);
 
 			/*Get node ids*/
-			penpair_ids[0]=iomodel->nodecounter+(int)iomodel->penalties[2*i+0];
-			penpair_ids[1]=iomodel->nodecounter+(int)iomodel->penalties[2*i+1];
+			penpair_ids[0]=iomodel->nodecounter+(int)penalties[2*i+0];
+			penpair_ids[1]=iomodel->nodecounter+(int)penalties[2*i+1];
 
 			/*Create Load*/
@@ -167,17 +186,15 @@
 
 	/*free ressources: */
-	xfree((void**)&iomodel->penalties);
+	xfree((void**)&penalties);
 
 	/*Create Riffront loads for rifts: */
-	iomodel->FetchData(&iomodel->riftinfo,&numrifts,NULL,RiftinfoEnum);
-	iomodel->FetchData(&iomodel->thickness,NULL,NULL,ThicknessEnum);
-	iomodel->FetchData(&iomodel->bed,NULL,NULL,BedEnum);
-	iomodel->FetchData(&iomodel->surface,NULL,NULL,SurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-
-	
+	iomodel->FetchData(&riftinfo,&numrifts,NULL,RiftinfoEnum);
+	iomodel->FetchData(&thickness,NULL,NULL,ThicknessEnum);
+	iomodel->FetchData(&bed,NULL,NULL,BedEnum);
+	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
+	iomodel->FetchData(&nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+
 	for(i=0;i<numrifts;i++){
-
-		if(iomodel->my_elements[(int)*(iomodel->riftinfo+RIFTINFOSIZE*i+2)-1]){
+		if(iomodel->my_elements[(int)*(riftinfo+RIFTINFOSIZE*i+2)-1]){
 			loads->AddObject(new Riftfront(iomodel->loadcounter+count+1,i,iomodel,DiagnosticHorizAnalysisEnum));
 			count++;
@@ -186,11 +203,9 @@
 				
 	/*free ressources: */
-	xfree((void**)&iomodel->riftinfo);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
-	xfree((void**)&iomodel->surface);
-	xfree((void**)&iomodel->nodeoniceshelf);
-
-	cleanup_and_return:
+	xfree((void**)&riftinfo);
+	xfree((void**)&thickness);
+	xfree((void**)&bed);
+	xfree((void**)&surface);
+	xfree((void**)&nodeoniceshelf);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 9370)
@@ -36,5 +36,8 @@
 	
 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
-	if (!ismacayealpattyn & !isstokes)goto cleanup_and_return;
+	if(!ismacayealpattyn & !isstokes){
+		*pnodes=nodes;
+		return;
+	}
 
 	/*Continuous Galerkin partition of nodes: */
@@ -42,14 +45,6 @@
 
 	/*Create nodes: */
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonhutter,NULL,NULL,NodeOnHutterEnum);
-	iomodel->FetchData(&iomodel->nodeonmacayeal,NULL,NULL,NodeOnMacayealEnum);
-	iomodel->FetchData(&iomodel->nodeonstokes,NULL,NULL,NodeOnStokesEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->diagnostic_ref,NULL,NULL,DiagnosticRefEnum);
+	iomodel->FetchData(10,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnHutterEnum,NodeOnMacayealEnum,NodeOnStokesEnum,
+				NodeOnIceSheetEnum,NodeOnIceShelfEnum,NodeOnWaterEnum,VerticesTypeEnum,DiagnosticRefEnum);
 	
 	for (i=0;i<numberofvertices;i++){
@@ -63,19 +58,8 @@
 
 	/*Clean fetched data: */
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonhutter);
-	xfree((void**)&iomodel->nodeonmacayeal);
-	xfree((void**)&iomodel->nodeonstokes);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->vertices_type);	
-	xfree((void**)&iomodel->diagnostic_ref);	
-
-	cleanup_and_return:
+	iomodel->DeleteData(10,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnHutterEnum,NodeOnMacayealEnum,NodeOnStokesEnum,
+				NodeOnIceSheetEnum,NodeOnIceShelfEnum,NodeOnWaterEnum,VerticesTypeEnum,DiagnosticRefEnum);
 
 	/*Assign output pointer: */
 	*pnodes=nodes;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 9370)
@@ -22,9 +22,6 @@
 	bool   control_analysis;
 	bool   qmu_analysis;
-		
-	/*Fetch data needed: */
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
-	iomodel->FetchData(&iomodel->elements_type,NULL,NULL,ElementsTypeEnum);
 
+	/*Fetch constants needed: */
 	iomodel->constants->FindParam(&isstokes,IsstokesEnum);
 	iomodel->constants->FindParam(&ismacayealpattyn,IsmacayealpattynEnum);
@@ -34,7 +31,9 @@
 	iomodel->constants->FindParam(&qmu_analysis,QmuAnalysisEnum);
 
+	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+	if(!ismacayealpattyn & !isstokes) return;
 
-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
-	if (!ismacayealpattyn & !isstokes) return;
+	/*Fetch data needed: */
+	iomodel->FetchData(2,ElementsEnum,ElementsTypeEnum);
 
 	/*Update elements: */
@@ -82,5 +81,4 @@
 
 	/*Post-process: */
-
 	elements->InputDuplicate(VxEnum,VxPicardEnum);
 	elements->InputDuplicate(VxEnum,VxObsEnum);
@@ -98,5 +96,4 @@
 	
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->elements_type);
+	iomodel->DeleteData(2,ElementsEnum,ElementsTypeEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 9370)
@@ -36,10 +36,11 @@
 
 	/*Now, is the flag ishutter on? otherwise, do nothing: */
-	if (!ishutter) goto cleanup_and_return;
+	if (!ishutter){
+		*pconstraints=constraints;
+		return;
+	}
 
 	/*Fetch data: */
-	iomodel->FetchData(&iomodel->spcvx,NULL,NULL,SpcvxEnum);
-	iomodel->FetchData(&iomodel->spcvy,NULL,NULL,SpcvyEnum);
-	iomodel->FetchData(&iomodel->nodeonhutter,NULL,NULL,NodeOnHutterEnum);
+	iomodel->FetchData(3,SpcvxEnum,SpcvyEnum,NodeOnHutterEnum);
 
 	/*Initialize conunter*/
@@ -50,5 +51,5 @@
 		/*keep only this partition's nodes:*/
 		if((iomodel->my_vertices[i])){
-			if (!(int)iomodel->nodeonhutter[i]){
+			if (!(int)iomodel->f(NodeOnHutterEnum)[i]){
 
 				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHutterAnalysisEnum));
@@ -59,23 +60,19 @@
 			}
 			else{
-				if (!isnan(iomodel->spcvx[i])){
-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+				if (!isnan(iomodel->f(SpcvxEnum)[i])){
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->f(SpcvxEnum)[i]/yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 					count++;
 				}
 
-				if (!isnan(iomodel->spcvy[i])){
-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+				if (!isnan(iomodel->f(SpcvyEnum)[i])){
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->f(SpcvyEnum)[i]/yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
 					count++;
 				}
 			}
-		} //if((my_vertices[i]))
+		}
 	}
 
 	/*Free data: */
-	xfree((void**)&iomodel->nodeonhutter);
-	xfree((void**)&iomodel->spcvx);
-	xfree((void**)&iomodel->spcvy);
-
-	cleanup_and_return:
+	iomodel->DeleteData(3,SpcvxEnum,SpcvyEnum,NodeOnHutterEnum);
 	
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 9370)
@@ -35,5 +35,8 @@
 
 	/*Now, is the flag ishutter on? otherwise, do nothing: */
-	if (!ishutter)goto cleanup_and_return;
+	if(!ishutter){
+		*pnodes=nodes;
+		return;
+	}
 
 	/*Continuous Galerkin partition of nodes: */
@@ -41,17 +44,8 @@
 
 	/*First fetch data: */
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonhutter,NULL,NULL,NodeOnHutterEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
-
+	iomodel->FetchData(8,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnHutterEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,ElementsEnum,VerticesTypeEnum,NodeOnWaterEnum);
 	CreateNumberNodeToElementConnectivity(iomodel);
 
 	for (i=0;i<numberofvertices;i++){
-
 		if(iomodel->my_vertices[i]){
 
@@ -63,15 +57,5 @@
 
 	/*Clean fetched data: */
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonhutter);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->numbernodetoelementconnectivity);
-	xfree((void**)&iomodel->vertices_type);	
-
-	cleanup_and_return:
+	iomodel->DeleteData(8,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnHutterEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,ElementsEnum,VerticesTypeEnum,NodeOnWaterEnum);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 9370)
@@ -21,6 +21,4 @@
 	
 	/*Fetch data needed: */
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
-	iomodel->FetchData(&iomodel->elements_type,NULL,NULL,ElementsTypeEnum);
 	iomodel->constants->FindParam(&numberofelements,NumberOfElementsEnum);
 	iomodel->constants->FindParam(&ishutter,IshutterEnum);
@@ -28,4 +26,6 @@
 	/*Now, is the flag hutter on? otherwise, do nothing: */
 	if (!ishutter)return;
+
+	iomodel->FetchData(2,ElementsEnum,ElementsTypeEnum);
 
 	/*Update elements: */
@@ -44,5 +44,4 @@
 	
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
-
+	iomodel->DeleteData(2,ElementsEnum,ElementsTypeEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 9370)
@@ -26,4 +26,5 @@
 	iomodel->constants->FindParam(&dim,DimEnum);
 	iomodel->constants->FindParam(&yts,YtsEnum);
+	iomodel->constants->FindParam(&numberofvertices,NumberOfVerticesEnum);
 
 	/*Recover pointer: */
@@ -34,10 +35,11 @@
 
 	/*return if 2d mesh*/
-	if (dim==2) goto cleanup_and_return;
+	if(dim==2){
+		*pconstraints=constraints;
+		return;
+	}
 
 	/*Fetch data: */
-	iomodel->FetchData(&iomodel->spcvz,NULL,NULL,SpcvzEnum);
-	iomodel->FetchData(&iomodel->nodeonstokes,NULL,NULL,NodeOnStokesEnum);
-	iomodel->constants->FindParam(&numberofvertices,NumberOfVerticesEnum);
+	iomodel->FetchData(2,SpcvzEnum,NodeOnStokesEnum);
 
 	/*Initialize counter*/
@@ -50,11 +52,11 @@
 		if(iomodel->my_vertices[i]){
 
-			if ((int)iomodel->nodeonstokes[i]){
+			if ((int)iomodel->f(NodeOnStokesEnum)[i]){
 				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticVertAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for Stokes
 				count++;
 			}
-			else if (!isnan(iomodel->spcvz[i])){
+			else if (!isnan(iomodel->f(SpcvzEnum)[i])){
 				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,
-								iomodel->spcvz[i]/yts,DiagnosticVertAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+								iomodel->f(SpcvzEnum)[i]/yts,DiagnosticVertAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 				count++;
 
@@ -64,6 +66,5 @@
 
 	/*Free data: */
-	xfree((void**)&iomodel->spcvz);
-	xfree((void**)&iomodel->nodeonstokes);
+	iomodel->DeleteData(2,SpcvzEnum,NodeOnStokesEnum);
 
 	cleanup_and_return:
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 9370)
@@ -35,5 +35,8 @@
 
 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
-	if (dim==2)goto cleanup_and_return;
+	if (dim==2){
+		*pnodes=nodes;
+		return;
+	}
 
 	/*Continuous Galerkin partition of nodes: */
@@ -41,13 +44,7 @@
 	
 	/*First fetch data: */
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
+	iomodel->FetchData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 
 	for (i=0;i<numberofvertices;i++){
-
 		if(iomodel->my_vertices[i]){
 
@@ -59,13 +56,6 @@
 
 	/*Clean fetched data: */
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->vertices_type);	
+	iomodel->DeleteData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 	
-	cleanup_and_return:
-
 	/*Assign output pointer: */
 	*pnodes=nodes;
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 9370)
@@ -27,5 +27,5 @@
 
 	/*Fetch data needed: */
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(1,ElementsEnum);
 
 	/*Update elements: */
@@ -55,5 +55,5 @@
 
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
+	iomodel->DeleteData(1,ElementsEnum);
 	
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 9370)
@@ -36,10 +36,5 @@
 	
 	/*First fetch data: */
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
+	iomodel->FetchData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 
 	for (i=0;i<numberofvertices;i++){
@@ -54,10 +49,5 @@
 
 	/*Clean fetched data: */
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->vertices_type);	
+	iomodel->DeleteData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 	
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 9370)
@@ -21,6 +21,6 @@
 	/*Fetch data needed: */
 	iomodel->constants->FindParam(&dim,DimEnum);
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 	iomodel->constants->FindParam(&numberofelements,NumberOfElementsEnum);
+	iomodel->FetchData(1,ElementsEnum);
 
 	/*Update elements: */
@@ -44,5 +44,4 @@
 	
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
-
+	iomodel->DeleteData(1,ElementsEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 9369)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 9370)
@@ -29,5 +29,5 @@
 
 	/*Fetch data needed: */
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(1,ElementsEnum);
 
 	/*Update elements: */
@@ -65,6 +65,4 @@
 
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
-
-	
+	iomodel->DeleteData(1,ElementsEnum);
 }
Index: /issm/trunk/src/c/objects/Bamg/AdjacentTriangle.h
===================================================================
--- /issm/trunk/src/c/objects/Bamg/AdjacentTriangle.h	(revision 9369)
+++ /issm/trunk/src/c/objects/Bamg/AdjacentTriangle.h	(revision 9370)
@@ -18,5 +18,5 @@
 
 			//Constructors
-			AdjacentTriangle():a(0),t(NULL) {};
+			AdjacentTriangle(){};
 			AdjacentTriangle(Triangle* tt,int  aa): t(tt),a(aa &3) {};
 
Index: /issm/trunk/src/c/objects/Bamg/EigenMetric.cpp
===================================================================
--- /issm/trunk/src/c/objects/Bamg/EigenMetric.cpp	(revision 9369)
+++ /issm/trunk/src/c/objects/Bamg/EigenMetric.cpp	(revision 9370)
@@ -10,5 +10,5 @@
 	/*Constructor*/
 	/*FUNCTION EigenMetric::EigenMetric(const Metric M){{{1*/
-	EigenMetric::EigenMetric(const Metric& M){
+	EigenMetric::EigenMetric(const Metric M){
 		/*From a metric (a11,a21,a22), get eigen values lambda1 and lambda2 and one eigen vector v*/
 
@@ -90,5 +90,5 @@
 	/*}}}1*/
 	/*FUNCTION EigenMetric::EigenMetric(double r1,double r2,const D2 vp1){{{1*/
-	EigenMetric::EigenMetric(double r1,double r2,const D2& vp1): lambda1(r1),lambda2(r2),v(vp1){
+	EigenMetric::EigenMetric(double r1,double r2,const D2 vp1): lambda1(r1),lambda2(r2),v(vp1){
 
 	}/*}}}*/
Index: /issm/trunk/src/c/objects/Bamg/Metric.cpp
===================================================================
--- /issm/trunk/src/c/objects/Bamg/Metric.cpp	(revision 9369)
+++ /issm/trunk/src/c/objects/Bamg/Metric.cpp	(revision 9370)
@@ -14,5 +14,5 @@
 
 	/*Constructor/Destructor*/
-	/*FUNCTION Metric::Metric(){{{1*/
+	Metric::Metric(){ };
 	/*FUNCTION Metric::Metric(double a){{{1*/
 	Metric::Metric(double a): a11(1/(a*a)),a21(0),a22(1/(a*a)){
@@ -24,5 +24,5 @@
 	}/*}}}*/
 	/*FUNCTION Metric::Metric(const double  a[3],const  Metric& m0, const  Metric& m1,const  Metric&  m2 ){{{1*/ 
-	Metric::Metric(const double  a[3],const  Metric& m0, const  Metric& m1,const  Metric& m2 ){
+	Metric::Metric(const double  a[3],const  Metric m0, const  Metric m1,const  Metric m2 ){
 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/Metric)*/
 
@@ -45,5 +45,5 @@
 	/*}}}1*/
 	/*FUNCTION Metric::Metric(double  a,const  Metric& ma, double  b,const  Metric& mb){{{1*/
-	Metric::Metric(double  a,const  Metric& ma, double  b,const  Metric& mb) { 
+	Metric::Metric(double  a,const  Metric ma, double  b,const  Metric mb) { 
 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/EigenMetric)*/
 
@@ -139,5 +139,5 @@
 	/*Intermediary*/
 	/*FUNCTION LengthInterpole{{{1*/
-	double LengthInterpole(const Metric& Ma,const  Metric& Mb, R2 AB) {
+	double LengthInterpole(const Metric Ma,const  Metric Mb, R2 AB) {
 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/LengthInterpole)*/
 
@@ -310,5 +310,5 @@
 	/*}}}1*/
 	/*FUNCTION abscisseInterpole{{{1*/
-	double abscisseInterpole(const Metric& Ma,const  Metric& Mb, R2 AB,double s,int optim) { 
+	double abscisseInterpole(const Metric Ma,const  Metric Mb, R2 AB,double s,int optim) { 
 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/abscisseInterpole)*/
 
Index: /issm/trunk/src/c/objects/Bamg/Metric.h
===================================================================
--- /issm/trunk/src/c/objects/Bamg/Metric.h	(revision 9369)
+++ /issm/trunk/src/c/objects/Bamg/Metric.h	(revision 9370)
@@ -25,10 +25,10 @@
 
 			//functions
-			Metric():a11(0),a21(0),a22(0){};
-			Metric(const EigenMetric&);
+			Metric();
+			Metric(const EigenMetric);
 			Metric(double a);
 			Metric(double a,double b,double c);
-			Metric( double  a,const  Metric& ma, double  b,const  Metric& mb);
-			Metric(const double  a[3],const  Metric& m0,const  Metric& m1,const  Metric& m2 );
+			Metric( double  a,const  Metric ma, double  b,const  Metric mb);
+			Metric(const double  a[3],const  Metric m0,const  Metric m1,const  Metric m2 );
 			void        Echo();
 			R2          mul(const R2 x)const;
@@ -62,6 +62,6 @@
 
 			//functions
-			EigenMetric(const Metric& );
-			EigenMetric(double r1,double r2,const D2& vp1);
+			EigenMetric(const Metric );
+			EigenMetric(double r1,double r2,const D2 vp1);
 			void   Echo();
 			void   Abs();
@@ -97,6 +97,6 @@
 	//Functions
 	void  SimultaneousMatrixReduction( Metric M1,  Metric M2,D2xD2 &V);
-	double LengthInterpole(const Metric& Ma,const  Metric& Mb, R2 AB);
-	double abscisseInterpole(const Metric& Ma,const  Metric& Mb, R2 AB,double s,int optim=0);
+	double LengthInterpole(const Metric Ma,const  Metric Mb, R2 AB);
+	double abscisseInterpole(const Metric Ma,const  Metric Mb, R2 AB,double s,int optim=0);
 
 	//inlines
@@ -115,5 +115,5 @@
 		}
 	}
-	inline Metric::Metric(const EigenMetric& M) {
+	inline Metric::Metric(const EigenMetric M) {
 		double v00=M.v.x*M.v.x;
 		double v11=M.v.y*M.v.y;
Index: /issm/trunk/src/c/objects/Bamg/R2.h
===================================================================
--- /issm/trunk/src/c/objects/Bamg/R2.h	(revision 9369)
+++ /issm/trunk/src/c/objects/Bamg/R2.h	(revision 9370)
@@ -68,5 +68,5 @@
 			  P2<R,RR>    ty() {return P2<R,RR>(x.y,y.y);} 
 			  //Operators
-			  P2<R,RR>     operator*(const P2<R,RR>& c) const {return P2<R,RR>(x.x*c.x + x.y*c.y, y.x*c.x + y.y*c.y);}
+			  P2<R,RR>     operator*(const P2<R,RR> c) const {return P2<R,RR>(x.x*c.x + x.y*c.y, y.x*c.x + y.y*c.y);}
 			  P2xP2<R,RR>  operator*(P2xP2<R,RR> c) const{
 				  return  P2xP2<R,RR>(x.x*c.x.x + x.y*c.y.x,
Index: /issm/trunk/src/c/objects/Bamg/Triangle.cpp
===================================================================
--- /issm/trunk/src/c/objects/Bamg/Triangle.cpp	(revision 9369)
+++ /issm/trunk/src/c/objects/Bamg/Triangle.cpp	(revision 9370)
@@ -9,9 +9,4 @@
 
 	/*Constructors/Destructors*/
-	/*FUNCTION Triangle(){{{1*/
-	Triangle::Triangle(void){
-
-	}
-	/*}}}*/
 	/*FUNCTION Triangle(Mesh *Th,long i,long j,long k) {{{1*/
 	Triangle::Triangle(Mesh *Th,long i,long j,long k) {
Index: /issm/trunk/src/c/objects/Bamg/Triangle.h
===================================================================
--- /issm/trunk/src/c/objects/Bamg/Triangle.h	(revision 9369)
+++ /issm/trunk/src/c/objects/Bamg/Triangle.h	(revision 9370)
@@ -29,5 +29,5 @@
 
 			//Constructors/Destructors
-			Triangle();
+			Triangle(){}
 			Triangle(Mesh *Th,long i,long j,long k);
 			Triangle(BamgVertex *v0,BamgVertex *v1,BamgVertex *v2);
Index: /issm/trunk/src/c/objects/Bamg/VertexOnEdge.h
===================================================================
--- /issm/trunk/src/c/objects/Bamg/VertexOnEdge.h	(revision 9369)
+++ /issm/trunk/src/c/objects/Bamg/VertexOnEdge.h	(revision 9370)
@@ -19,6 +19,6 @@
 
 			//Constructors
-			VertexOnEdge(BamgVertex * w, Edge *bw,double s) :v(w),be(bw),abcisse(s) {};
-			VertexOnEdge(){};
+			VertexOnEdge(BamgVertex * w, Edge *bw,double s) :v(w),be(bw),abcisse(s) {}
+			VertexOnEdge(){}
 
 			//Operators
Index: /issm/trunk/src/c/objects/Bamg/VertexOnGeom.cpp
===================================================================
--- /issm/trunk/src/c/objects/Bamg/VertexOnGeom.cpp	(revision 9369)
+++ /issm/trunk/src/c/objects/Bamg/VertexOnGeom.cpp	(revision 9370)
@@ -16,5 +16,5 @@
 		curvilincoord=0;
 		gv=0;
-		ge=0;
+		//ge=0;
 	} 
 	/*}}}*/
@@ -24,5 +24,5 @@
 		curvilincoord=-1;
 		gv=&g;
-		ge=0;
+		//ge=0;
 	}
 	/*}}}*/
@@ -32,5 +32,5 @@
 		curvilincoord=s;
 		ge=&g;
-		gv=0;
+		//gv=0;
 	}
 	/*}}}*/
Index: /issm/trunk/src/c/objects/Bamg/VertexOnVertex.cpp
===================================================================
--- /issm/trunk/src/c/objects/Bamg/VertexOnVertex.cpp	(revision 9369)
+++ /issm/trunk/src/c/objects/Bamg/VertexOnVertex.cpp	(revision 9370)
@@ -12,6 +12,6 @@
 	/*FUNCTION VertexOnVertex::VertexOnVertex(){{{1*/
 	VertexOnVertex::VertexOnVertex() {
-		v=NULL;
-		bv=NULL;
+		//v=NULL;
+		//bv=NULL;
 	};/*}}}*/
 	/*FUNCTION VertexOnVertex::VertexOnVertex(BamgVertex * w,BamgVertex *bw){{{1*/
Index: /issm/trunk/src/c/objects/IoModel.cpp
===================================================================
--- /issm/trunk/src/c/objects/IoModel.cpp	(revision 9369)
+++ /issm/trunk/src/c/objects/IoModel.cpp	(revision 9370)
@@ -482,5 +482,4 @@
 void  IoModel::FetchData(int num,...){
 
-
 	va_list ap;
 	int     dataenum;
@@ -493,8 +492,7 @@
 	
 	va_start(ap,num);
-
-	for(i = 0; i <num; i++){
+	for(i=0; i<num; i++){
 		
-		dataenum=va_arg(ap, int);
+		dataenum=va_arg(ap, int); _assert_(this->data->Exist(dataenum)==false);
 		this->FetchData(&matrix,&M,&N,dataenum);
 
@@ -521,9 +519,6 @@
 	
 	va_start(ap,num);
-
 	for(i = 0; i <num; i++){
-		
 		dataenum=va_arg(ap, int);
-	
 		parameter=(DoubleMatParam*)this->data->FindParamObject(dataenum); 
 		if(parameter){
@@ -538,5 +533,5 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::get(int dataenum){{{1*/
+/*FUNCTION IoModel::f(int dataenum){{{1*/
 double* IoModel::f(int dataenum){
 
@@ -544,9 +539,6 @@
 		
 	parameter=(DoubleMatParam*)this->data->FindParamObject(dataenum);
-
-	if (parameter==NULL)return NULL; //might be legitimate
-	else{
-		return parameter->GetPointer();
-	}
+	if (parameter==NULL) _error_("Field of enum %s has not been loaded in iomodel",EnumToStringx(dataenum));
+	return parameter->GetPointer();
 }
 /*}}}*/
@@ -763,5 +755,4 @@
 	extern int num_procs;
 	
-	
 	int found=0;
 	int record_enum;
@@ -821,5 +812,4 @@
 /*FUNCTION IoModel::FetchDataToInput(Elements* elements,IoModel* iomodel,int vector_enum,int default_vector_enum,double default_value{{{1*/
 void IoModel::FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum,double default_value){
-	
 
 	/*intermediary: */
Index: /issm/trunk/src/c/objects/IoModel.h
===================================================================
--- /issm/trunk/src/c/objects/IoModel.h	(revision 9369)
+++ /issm/trunk/src/c/objects/IoModel.h	(revision 9370)
@@ -20,18 +20,18 @@
 
 	public:
-		Parameters* constants; //this dataset holds all double, int, bool and char* parameters read in from the input file.* 
-		Parameters* data; //this dataset holds temporary data, memory intensive.
+		Parameters *constants;   //this dataset holds all double, int, bool and char*parameters read in from the input file.*
+		Parameters *data;        //this dataset holds temporary data, memory intensive.
 
 		/*This data needs to stay memory resident at all time, even if it's memory intensive: */
-		bool*   my_elements;
-		bool*   my_nodes;
-		int*    my_vertices;
-		int*    singlenodetoelementconnectivity;
-		int*    numbernodetoelementconnectivity;
+		bool *my_elements;
+		bool *my_nodes;
+		int  *my_vertices;
+		int  *singlenodetoelementconnectivity;
+		int  *numbernodetoelementconnectivity;
 
 		/*Data to synchronize through low level object drivers: */
-		int     nodecounter; //keep track of how many nodes are being created in each analysis type
-		int     loadcounter; //keep track of how many loads are being created in each analysis type
-		int     constraintcounter; //keep track of how many constraints are being created in each analysis type
+		int nodecounter;         //keep track of how many nodes are being created in each analysis type
+		int loadcounter;         //keep track of how many loads are being created in each analysis type
+		int constraintcounter;   //keep track of how many constraints are being created in each analysis type
 
 		/*Methods: {{{1*/
