Index: /issm/branches/trunk-larour-SLPS2020/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
===================================================================
--- /issm/branches/trunk-larour-SLPS2020/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 25739)
+++ /issm/branches/trunk-larour-SLPS2020/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 25740)
@@ -201,35 +201,45 @@
 	femmodel->inputs2->SetTransientInput(DummyEnum,times,N);
 	transientinput2 = femmodel->inputs2->GetTransientInput(DummyEnum);
-		
-	for (int i=0;i<femmodel->elements->Size();i++){
-
-		Tria*   element=xDynamicCast<Tria*>(femmodel->elements->GetObjectByOffset(i));
-
-		if((int)variable_partition[element->Sid()]==-1)id=0; //grab background field
-		else id=distributed_values[(int)variable_partition[element->Sid()]]-1; //grab partition field
-
-		/*recover the right field from the mme: */
-		transientinput = datasetinput->GetTransientInputByOffset(id); _assert_(transientinput);
-
-		/*copy values from the transientinput to the final transientinput2: */
-		for (int j=0;j<N;j++){
-			TriaInput2* tria_input=transientinput->GetTriaInput(j);
-			element->InputServe(tria_input);
-			if(interpolationenum==P0Enum){
-				value=tria_input->element_values[0];
-				transientinput2->AddTriaTimeInput( j,1,&(element->lid),&value,P0Enum); 
-			}
-			else if(interpolationenum==P1Enum){
-
-				/*Get values and lid list*/
-				const int   numvertices     = element->GetNumberOfVertices();
-				int        *vertexlids      = xNew<int>(numvertices);
-				int        *vertexsids      = xNew<int>(numvertices);
-
-				/*Recover vertices ids needed to initialize inputs*/
-				element->GetVerticesLidList(&vertexlids[0]);
-				element->GetVerticesSidList(&vertexsids[0]);
-				values=tria_input->element_values;
-				transientinput2->AddTriaTimeInput( j,numvertices,vertexlids,values,P1Enum); 
+
+	for (int p=npart;p>=0;p--){
+		int pp=p; 
+		if (p==npart)pp=-1; /*so, the logic is, we want to do the -1 partition first, then 
+							 go from npart-1 to 0 in reverse order:*/
+		
+		for (int i=0;i<femmodel->elements->Size();i++){
+			int element_partition;
+
+			Tria*   element=xDynamicCast<Tria*>(femmodel->elements->GetObjectByOffset(i));
+			
+			element_partition= (int)variable_partition[element->Sid()];
+			if(element_partition!=pp)continue;
+
+			if(element_partition==-1)id=0; //grab background field
+			else id=distributed_values[element_partition]-1; //grab partition field
+
+			/*recover the right field from the mme: */
+			transientinput = datasetinput->GetTransientInputByOffset(id); _assert_(transientinput);
+
+			/*copy values from the transientinput to the final transientinput2: */
+			for (int j=0;j<N;j++){
+				TriaInput2* tria_input=transientinput->GetTriaInput(j);
+				element->InputServe(tria_input);
+				if(interpolationenum==P0Enum){
+					value=tria_input->element_values[0];
+					transientinput2->AddTriaTimeInput( j,1,&(element->lid),&value,P0Enum); 
+				}
+				else if(interpolationenum==P1Enum){
+
+					/*Get values and lid list*/
+					const int   numvertices     = element->GetNumberOfVertices();
+					int        *vertexlids      = xNew<int>(numvertices);
+					int        *vertexsids      = xNew<int>(numvertices);
+
+					/*Recover vertices ids needed to initialize inputs*/
+					element->GetVerticesLidList(&vertexlids[0]);
+					element->GetVerticesSidList(&vertexsids[0]);
+					values=tria_input->element_values;
+					transientinput2->AddTriaTimeInput( j,numvertices,vertexlids,values,P1Enum); 
+				}
 			}
 		}
