Index: /issm/trunk/src/c/ProcessParamsx/ProcessParamsx.cpp
===================================================================
--- /issm/trunk/src/c/ProcessParamsx/ProcessParamsx.cpp	(revision 595)
+++ /issm/trunk/src/c/ProcessParamsx/ProcessParamsx.cpp	(revision 596)
@@ -24,5 +24,4 @@
 	double* vy=NULL;
 	double* vz=NULL;
-	double* pressure=NULL;
 		
 	double* u_g=NULL;
@@ -40,7 +39,15 @@
 	double* p_g=NULL;
 
+	/*thermal*/ 
+	double* pressure=NULL; 
+	double* temperature=NULL; 
+	double* melting=NULL; 
+	
+	double* p_g=NULL; 
+	double* t_g=NULL; 
+	double* m_g=NULL;
+
 	/*prognostic: */
 	double* a_g=NULL;
-	double* m_g=NULL;
 	double* h_g=NULL;
 	double* accumulation=NULL;
@@ -61,5 +68,4 @@
 	/*First serialize partition vector: */
 	if(part)VecToMPISerial(&partition,part);
-
 	
 	if (   (analysis_type==ControlAnalysisEnum()) ||  
@@ -156,14 +162,30 @@
 	if(analysis_type==ThermalAnalysisEnum()){
 
+		parameters->FindParam((void*)&temperature,"temperature"); 
+		parameters->FindParam((void*)&melting,"melting"); 
 		parameters->FindParam((void*)&pressure,"pressure");
-		
-		/*Now, from pressure, build p_g, correctly partitioned: */
+
+		/*Now, from temperature and melting, build t_g and m_g, correctly partitioned: */ 
+		t_g=(double*)xcalloc(numberofnodes,sizeof(double)); 
+		m_g=(double*)xcalloc(numberofnodes,sizeof(double)); 
 		p_g=(double*)xcalloc(numberofnodes,sizeof(double));
 
-		for(i=0;i<numberofnodes;i++){
+		for(i=0;i<numberofnodes;i++){ 
+			t_g[(int)(partition[i])]=temperature[i]; 
+			m_g[(int)(partition[i])]=melting[i]; 
 			p_g[(int)(partition[i])]= pressure[i];  
-		}
-
-		/*Now, create new parameter: */
+		} 
+
+		/*Now, create new parameter: */ 
+		count++; 
+		param= new Param(count,"t_g",DOUBLEVEC); 
+		param->SetDoubleVec(t_g,numberofnodes); 
+		parameters->AddObject(param); 
+
+		count++; 
+		param= new Param(count,"m_g",DOUBLEVEC); 
+		param->SetDoubleVec(m_g,numberofnodes); 
+		parameters->AddObject(param); 
+
 		count++;
 		param= new Param(count,"p_g",DOUBLEVEC);
@@ -171,5 +193,11 @@
 		parameters->AddObject(param);
 
-		/*erase old parameter: */
+		/*erase old parameter: */ 
+		param=(Param*)parameters->FindParamObject("temperature"); 
+		parameters->DeleteObject((Object*)param); 
+
+		param=(Param*)parameters->FindParamObject("melting"); 
+		parameters->DeleteObject((Object*)param); 
+
 		param=(Param*)parameters->FindParamObject("pressure");
 		parameters->DeleteObject((Object*)param);
@@ -179,10 +207,16 @@
 
 		parameters->FindParam((void*)&melting,"melting");
-		
-		/*Now, from melting, build m_g, correctly partitioned: */
+		parameters->FindParam((void*)&thickness,"thickness");
+		parameters->FindParam((void*)&accumulation,"accumulation");
+		
+		/*Now, from melting accumulation and thickness, build m_g, h_g, correctly partitioned: */
 		m_g=(double*)xcalloc(numberofnodes,sizeof(double));
+		h_g=(double*)xcalloc(numberofnodes,sizeof(double));
+		a_g=(double*)xcalloc(numberofnodes,sizeof(double));
 
 		for(i=0;i<numberofnodes;i++){
 			m_g[(int)(partition[i])]= melting[i];  
+			h_g[(int)(partition[i])]= thickness[i];  
+			a_g[(int)(partition[i])]= accumulation[i];  
 		}
 
@@ -193,53 +227,23 @@
 		parameters->AddObject(param);
 
+		count++;
+		param= new Param(count,"h_g",DOUBLEVEC);
+		param->SetDoubleVec(h_g,numberofnodes);
+		parameters->AddObject(param);
+
+		count++;
+		param= new Param(count,"a_g",DOUBLEVEC);
+		param->SetDoubleVec(a_g,numberofnodes);
+		parameters->AddObject(param);
+
 		/*erase old parameter: */
 		param=(Param*)parameters->FindParamObject("melting");
 		parameters->DeleteObject((Object*)param);
-
-		
-		
-		parameters->FindParam((void*)&thickness,"thickness");
-		
-		/*Now, from thickness, build h_g, correctly partitioned: */
-		h_g=(double*)xcalloc(numberofnodes,sizeof(double));
-
-		for(i=0;i<numberofnodes;i++){
-			h_g[(int)(partition[i])]= thickness[i];  
-		}
-
-		/*Now, create new parameter: */
-		count++;
-		param= new Param(count,"h_g",DOUBLEVEC);
-		param->SetDoubleVec(h_g,numberofnodes);
-		parameters->AddObject(param);
-
-		/*erase old parameter: */
+		
 		param=(Param*)parameters->FindParamObject("thickness");
 		parameters->DeleteObject((Object*)param);
 
-
-
-
-		parameters->FindParam((void*)&accumulation,"accumulation");
-		
-		/*Now, from accumulation, build a_g, correctly partitioned: */
-		a_g=(double*)xcalloc(numberofnodes,sizeof(double));
-
-		for(i=0;i<numberofnodes;i++){
-			a_g[(int)(partition[i])]= accumulation[i];  
-		}
-
-		/*Now, create new parameter: */
-		count++;
-		param= new Param(count,"a_g",DOUBLEVEC);
-		param->SetDoubleVec(a_g,numberofnodes);
-		parameters->AddObject(param);
-
-		/*erase old parameter: */
 		param=(Param*)parameters->FindParamObject("accumulation");
 		parameters->DeleteObject((Object*)param);
-		
-
-
 	}
 	xfree((void**)&partition);
