Index: /issm/trunk-jpl/src/c/analyses/thermal_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 15375)
@@ -15,10 +15,12 @@
 	bool   save_results;
 	bool   dakota_analysis  = false;
+	int    solution_type;
 
 	//first recover parameters common to all solutions
 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 
-	if(dakota_analysis){
+	if(dakota_analysis && solution_type!=TransientSolutionEnum){
 		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
 		ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
Index: /issm/trunk-jpl/src/c/analyses/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15375)
@@ -66,7 +66,18 @@
 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuSurfaceEnum,SurfaceEnum);
 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuBedEnum,BedEnum);
+		if(dim==2)InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
 		if(isthermal && dim==3){
+			//Update Vertex Position after updating Thickness and Bed
+			femmodel->SetCurrentConfiguration(PrognosticAnalysisEnum);
+			femmodel->UpdateVertexPositionsx();
+			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxMeshEnum,VxMeshEnum);
+			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyMeshEnum,VyMeshEnum);
+			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzMeshEnum,VzMeshEnum);
 			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuTemperatureEnum,TemperatureEnum);
 			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
+			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
+			//Reset Thermal Constraints
+			femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+			ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
 		}
 	}
@@ -152,5 +163,5 @@
 				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMonthlytemperaturesEnum);
 				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsPrecipitationEnum);
-			        InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalFrictionEnum);
+				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalFrictionEnum);
 			}
 			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
Index: /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 15375)
@@ -323,5 +323,5 @@
 }
 /*}}}*/
-/*FUNCTION Elements::InputCopy{{{*/
+/*FUNCTION Elements::InputDuplicate{{{*/
 void Elements::InputDuplicate(int input_enum,int output_enum){
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15375)
@@ -2142,4 +2142,7 @@
 				name==QmuVyEnum ||
 				name==QmuVzEnum ||
+				name==QmuVxMeshEnum ||
+				name==QmuVyMeshEnum ||
+				name==QmuVzMeshEnum ||
 				name==QmuPressureEnum ||
 				name==QmuBedEnum ||
@@ -3117,4 +3120,9 @@
 			this->inputs->AddInput(new PentaP1Input(VyMeshEnum,nodeinputs));
 			this->inputs->AddInput(new PentaP1Input(VzMeshEnum,nodeinputs));
+			if(dakota_analysis){
+				this->inputs->AddInput(new PentaP1Input(QmuVxMeshEnum,nodeinputs));
+				this->inputs->AddInput(new PentaP1Input(QmuVyMeshEnum,nodeinputs));
+				this->inputs->AddInput(new PentaP1Input(QmuVzMeshEnum,nodeinputs));
+			}
 			break;
 
Index: /issm/trunk-jpl/src/c/classes/Materials/Materials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Materials.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/classes/Materials/Materials.cpp	(revision 15375)
@@ -47,2 +47,10 @@
 }
 /*}}}*/
+/*FUNCTION Materials::InputDuplicate{{{*/
+void Materials::InputDuplicate(int input_enum,int output_enum){
+
+	for(int i=0;i<this->Size();i++){
+		Material* material=(Material*)this->GetObjectByOffset(i);
+		material->InputDuplicate(input_enum,output_enum);
+	}
+}
Index: /issm/trunk-jpl/src/c/classes/Materials/Materials.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Materials.h	(revision 15374)
+++ /issm/trunk-jpl/src/c/classes/Materials/Materials.h	(revision 15375)
@@ -24,4 +24,5 @@
 		/*numerics*/
 		void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+		void  InputDuplicate(int input_enum,int output_enum);
 
 };
Index: /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15375)
@@ -567,4 +567,10 @@
 					return;
 				}
+				case PentaEnum: {
+					IssmDouble valuesp[6];
+					for (int i=0;i<6;i++) valuesp[i]=vector[((Penta*)element)->vertices[i]->Sid()]; //use sid list, to index into serial oriented vector
+					this->inputs->AddInput(new PentaP1Input(name,valuesp));
+					return;
+				}
 				default: _error_("element " << EnumToStringx(element->ObjectEnum()) << " not implemented yet");
 			}
@@ -618,5 +624,5 @@
 						parameters->FindParam(&dim,MeshDimensionEnum);
 						if(dim==2){
-							/*Dupliacte rheology input: */
+							/*Duplicate rheology input: */
 							this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,values,P1Enum));
 						}
@@ -782,5 +788,6 @@
 				name==MaterialsRheologyBEnum ||
 				name==MaterialsRheologyBbarEnum ||
-				name==MaterialsRheologyNEnum
+				name==MaterialsRheologyNEnum ||
+				name==QmuMaterialsRheologyBEnum
 		){
 		return true;
Index: /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 15375)
@@ -242,4 +242,12 @@
 
 /*Matpar management: */
+/*FUNCTION Matpar::InputDuplicate{{{*/
+void  Matpar::InputDuplicate(int original_enum,int new_enum){
+
+	   /*Call inputs method*/
+	   if (IsInput(original_enum)) inputs->DuplicateInput(original_enum,new_enum);
+
+}
+/*}}}*/
 /*FUNCTION Matpar::Configure {{{*/
 void  Matpar::Configure(Elements* elementsin){
@@ -455,2 +463,7 @@
 }		 
 /*}}}*/ 
+/*FUNCTION Matpar::IsInput{{{*/
+bool Matpar::IsInput(int name){
+	return false;
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Materials/Matpar.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 15374)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 15375)
@@ -84,5 +84,5 @@
 		/*}}}*/
 		/*Material virtual functions resolution: {{{*/
-		void   InputDuplicate(int original_enum,int new_enum){_error_("not implemented yet");};
+		void   InputDuplicate(int original_enum,int new_enum);
 		void   Configure(Elements* elements);
 		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){return;}
@@ -136,4 +136,5 @@
 		IssmDouble GetDesFac();
 		IssmDouble GetS0p(); 
+		bool       IsInput(int name);
 		/*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/Vertex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 15375)
@@ -124,5 +124,5 @@
 int    Vertex::Pid(void){ return pid; }
 /*}}}*/
-/*FUNCTION Vertex::UpdateVertexPosition {{{*/
+/*FUNCTION Vertex::UpdatePosition {{{*/
 void  Vertex::UpdatePosition(Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* thickness,IssmDouble* bed){
 
Index: /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 15375)
@@ -18,5 +18,5 @@
 	for(i=0;i<materials->Size();i++){
 		Material* material=(Material*)materials->GetObjectByOffset(i);
-		//material->InputDuplicate(original_enum,new_enum);
+		material->InputDuplicate(original_enum,new_enum);
 	}
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15375)
@@ -17,4 +17,5 @@
 	int numberofvertices;
 	bool control_analysis;
+	bool dakota_analysis;
 
 	/*DataSets: */
@@ -28,4 +29,5 @@
 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
 	iomodel->Constant(&materials_type,MaterialsEnum);
 
@@ -64,4 +66,10 @@
 			iomodel->FetchData(2,MaterialsRheologyBEnum,MaterialsRheologyNEnum);
 			for (i=0;i<numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
+			if(dakota_analysis){
+				if(dim==2) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 
+           #ifdef _HAVE_3D_
+				else       materials->InputDuplicate(MaterialsRheologyBEnum,QmuMaterialsRheologyBEnum); 
+           #endif
+			}
 			break;
 		case MatdamageiceEnum:
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15375)
@@ -58,4 +58,7 @@
 		elements->InputDuplicate(ThicknessEnum,QmuThicknessEnum);
 		elements->InputDuplicate(SurfaceEnum,QmuSurfaceEnum);
+		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
+		elements->InputDuplicate(VxEnum,QmuVxEnum);
+		elements->InputDuplicate(VyEnum,QmuVyEnum);
 	}
 
@@ -65,4 +68,10 @@
 		iomodel->FetchDataToInput(elements,PressureEnum);
 		iomodel->FetchDataToInput(elements,TemperatureEnum);
+		iomodel->FetchDataToInput(elements,VzEnum);
+		if(dakota_analysis){
+			elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+			elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+			elements->InputDuplicate(VzEnum,QmuVzEnum);
+		}
 	}
 	if(issmbgradients){
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15375)
@@ -58,6 +58,8 @@
 	if(dakota_analysis){
 		elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+		elements->InputDuplicate(PressureEnum,QmuPressureEnum);
 		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
 	}
+
 	/*Free data: */
 	iomodel->DeleteData(1,MeshElementsEnum);
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15374)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15375)
@@ -204,4 +204,5 @@
 	QmuResponsedescriptorsEnum,
 	QmuVariabledescriptorsEnum,
+	QmuMaterialsRheologyBEnum,
 	RiftsNumriftsEnum,
 	RiftsRiftstructEnum,
@@ -431,4 +432,7 @@
 	QmuSurfaceEnum,
 	QmuMeltingEnum,
+	QmuVxMeshEnum,
+	QmuVyMeshEnum,
+	QmuVzMeshEnum,
 	AndroidFrictionCoefficientEnum,
 	ResetPenaltiesEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15375)
@@ -212,4 +212,5 @@
 		case QmuResponsedescriptorsEnum : return "QmuResponsedescriptors";
 		case QmuVariabledescriptorsEnum : return "QmuVariabledescriptors";
+		case QmuMaterialsRheologyBEnum : return "QmuMaterialsRheologyB";
 		case RiftsNumriftsEnum : return "RiftsNumrifts";
 		case RiftsRiftstructEnum : return "RiftsRiftstruct";
@@ -425,4 +426,7 @@
 		case QmuSurfaceEnum : return "QmuSurface";
 		case QmuMeltingEnum : return "QmuMelting";
+		case QmuVxMeshEnum : return "QmuVxMesh";
+		case QmuVyMeshEnum : return "QmuVyMesh";
+		case QmuVzMeshEnum : return "QmuVzMesh";
 		case AndroidFrictionCoefficientEnum : return "AndroidFrictionCoefficient";
 		case ResetPenaltiesEnum : return "ResetPenalties";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15374)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15375)
@@ -215,4 +215,5 @@
 	      else if (strcmp(name,"QmuResponsedescriptors")==0) return QmuResponsedescriptorsEnum;
 	      else if (strcmp(name,"QmuVariabledescriptors")==0) return QmuVariabledescriptorsEnum;
+	      else if (strcmp(name,"QmuMaterialsRheologyB")==0) return QmuMaterialsRheologyBEnum;
 	      else if (strcmp(name,"RiftsNumrifts")==0) return RiftsNumriftsEnum;
 	      else if (strcmp(name,"RiftsRiftstruct")==0) return RiftsRiftstructEnum;
@@ -259,9 +260,9 @@
 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
-	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
-	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+	      if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
@@ -434,4 +435,7 @@
 	      else if (strcmp(name,"QmuSurface")==0) return QmuSurfaceEnum;
 	      else if (strcmp(name,"QmuMelting")==0) return QmuMeltingEnum;
+	      else if (strcmp(name,"QmuVxMesh")==0) return QmuVxMeshEnum;
+	      else if (strcmp(name,"QmuVyMesh")==0) return QmuVyMeshEnum;
+	      else if (strcmp(name,"QmuVzMesh")==0) return QmuVzMeshEnum;
 	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
 	      else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
@@ -502,12 +506,12 @@
 	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
-	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+         else stage=5;
+   }
+   if(stage==5){
+	      if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
 	      else if (strcmp(name,"J")==0) return JEnum;
 	      else if (strcmp(name,"Patch")==0) return PatchEnum;
-         else stage=5;
-   }
-   if(stage==5){
-	      if (strcmp(name,"PatchNodes")==0) return PatchNodesEnum;
+	      else if (strcmp(name,"PatchNodes")==0) return PatchNodesEnum;
 	      else if (strcmp(name,"PatchVertices")==0) return PatchVerticesEnum;
 	      else if (strcmp(name,"PentaP1ElementResult")==0) return PentaP1ElementResultEnum;
