Index: /issm/trunk/src/m/solutions/jpl/diagnostic_core_nonlinear.m
===================================================================
--- /issm/trunk/src/m/solutions/jpl/diagnostic_core_nonlinear.m	(revision 3891)
+++ /issm/trunk/src/m/solutions/jpl/diagnostic_core_nonlinear.m	(revision 3892)
@@ -57,5 +57,5 @@
 			
 		%add convergence status into 
-		m.elements=UpdateInputsFromConstant(m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,converged,analysis_type,sub_analysis_type);
+		[m.elements m.loads]=UpdateInputsFromConstant(m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,converged,ConvergedEnum);
 
 		%rift convergence criterion
Index: /issm/trunk/src/m/solutions/jpl/thermal.m
===================================================================
--- /issm/trunk/src/m/solutions/jpl/thermal.m	(revision 3891)
+++ /issm/trunk/src/m/solutions/jpl/thermal.m	(revision 3892)
@@ -8,7 +8,7 @@
 	t1=clock;
 	
+	%Build all models requested for thermal simulation
 	models.analysis_type=ThermalAnalysisEnum(); %needed for processresults
 
-	%Build all models requested for diagnostic simulation
 	displaystring(md.verbose,'%s',['reading thermal model data']);
 	md.analysis_type=ThermalAnalysisEnum(); models.t=CreateFemModel(md);
@@ -19,11 +19,4 @@
 	% figure out number of dof: just for information purposes.
 	md.dof=modelsize(models);
-
-	%initialize inputs
-	displaystring(md.verbose,'\n%s',['setup inputs...']);
-	inputs=inputlist;
-	inputs=add(inputs,'velocity',models.t.parameters.u_g,'doublevec',3,models.t.parameters.NumberOfNodes);
-	inputs=add(inputs,'pressure',models.t.parameters.p_g,'doublevec',1,models.t.parameters.NumberOfNodes);
-	inputs=add(inputs,'dt',models.t.parameters.Dt*models.t.parameters.Yts,'double');
 
 	%compute solution
Index: /issm/trunk/src/m/solutions/jpl/thermal_core.m
===================================================================
--- /issm/trunk/src/m/solutions/jpl/thermal_core.m	(revision 3891)
+++ /issm/trunk/src/m/solutions/jpl/thermal_core.m	(revision 3892)
@@ -5,27 +5,30 @@
 %      solution=thermal_core(models)
 
-%get FE model
-m_t=models.t;
-m_m=models.m;
+%recover parameters common to all solutions
+verbose=models.t.parameters.Verbose;
 
-if m_t.parameters.Dt==0,
+if models.t.parameters.Dt==0,
 
 	results.time=0;
 	results.step=1;
 
-	displaystring(m_t.parameters.Verbose,'\n%s',['computing temperatures...']);
-	[results.t_g m_t.loads melting_offset]=thermal_core_nonlinear(m_t,,ThermalAnalysisEnum(),NoneAnalysisEnum());
+	displaystring(verbose,'\n%s',['computing temperatures...']);
+	[t_g models.t.loads melting_offset]=thermal_core_nonlinear(models.t,ThermalAnalysisEnum(),NoneAnalysisEnum());
 
-	displaystring(m_t.parameters.Verbose,'\n%s',['computing melting...']);
-	inputs=add(inputs,'melting_offset',melting_offset,'double');
-	inputs=add(inputs,'temperature',results.t_g,'doublevec',1,m_t.parameters.NumberOfNodes);
-	results.m_g=diagnostic_core_linear(m_m,MeltingAnalysisEnum(),NoneAnalysisEnum());
+	displaystring(verbose,'\n%s',['computing melting...']);
+	models=ModelUpdateInputsFromVector(models,t_g,TemperatureEnum,VertexEnum);
+	[models.m.elements models.m.loads]=UpdateInputsFromConstant(models.m.elements,models.m.nodes,models.m.vertices,models.m.loads,models.m.materials,models.m.parameters,melting_offset,MeltingOffsetEnum);
+	m_g=diagnostic_core_linear(models.m,MeltingAnalysisEnum(),NoneAnalysisEnum());
+
+	%NEED TO BE CLEANED
+	results.t_g=t_g;
+	results.m_g=m_g;
 
 else
 
 	%initialize temperature and melting
-	t_g=m_t.parameters.t_g;
-	m_g=m_m.parameters.m_g;
-	nsteps=m_t.parameters.Ndt/m_t.parameters.Dt;
+	t_g=models.t.parameters.t_g;
+	m_g=models.m.parameters.m_g;
+	nsteps=models.t.parameters.Ndt/models.t.parameters.Dt;
 
 	%initialize temperature and melting
@@ -37,16 +40,16 @@
 	for n=1:nsteps, 
 
-		displaystring(m_t.parameters.Verbose,'\n%s%i/%i\n','time step: ',n,nsteps);
+		displaystring(verbose,'\n%s%i/%i\n','time step: ',n,nsteps);
 		results(n+1).step=n+1;
-		results(n+1).time=n*m_t.parameters.Dt;
+		results(n+1).time=n*models.t.parameters.Dt;
 
-		displaystring(m_t.parameters.Verbose,'\n%s',['    computing temperatures...']);
-		inputs=add(inputs,'temperature',results(n).t_g,'doublevec',1,m_t.parameters.NumberOfNodes);
-		[results(n+1).t_g m_t.loads melting_offset]=thermal_core_nonlinear(m_t,ThermalAnalysisEnum(),NoneAnalysisEnum());
+		displaystring(verbose,'\n%s',['    computing temperatures...']);
+		inputs=add(inputs,'temperature',results(n).t_g,'doublevec',1,models.t.parameters.NumberOfNodes);
+		[results(n+1).t_g models.t.loads melting_offset]=thermal_core_nonlinear(models.t,ThermalAnalysisEnum(),NoneAnalysisEnum());
 
-		displaystring(m_t.parameters.Verbose,'\n%s',['    computing melting...']);
-		inputs=add(inputs,'temperature',results(n+1).t_g,'doublevec',1,m_t.parameters.NumberOfNodes);
+		displaystring(verbose,'\n%s',['    computing melting...']);
+		inputs=add(inputs,'temperature',results(n+1).t_g,'doublevec',1,models.t.parameters.NumberOfNodes);
 		inputs=add(inputs,'melting_offset',melting_offset,'double');
-		results(n+1).m_g=diagnostic_core_linear(m_m,MeltingAnalysisEnum(),NoneAnalysisEnum());
+		results(n+1).m_g=diagnostic_core_linear(models.m,MeltingAnalysisEnum(),NoneAnalysisEnum());
 
 	end
Index: /issm/trunk/src/m/solutions/jpl/thermal_core_nonlinear.m
===================================================================
--- /issm/trunk/src/m/solutions/jpl/thermal_core_nonlinear.m	(revision 3891)
+++ /issm/trunk/src/m/solutions/jpl/thermal_core_nonlinear.m	(revision 3892)
@@ -20,5 +20,6 @@
 
 		%Update inputs in datasets
-		[m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters]=UpdateFromInputs(m.elements,m.nodes,m.vertices, loads,m.materials,m.parameters);
+		if count==1 reset_penalties=0; else reset_penalties=1; end
+		[m.elements m.loads]=UpdateInputsFromConstant(m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,reset_penalties,ResetPenaltiesEnum);
 
 		%system matrices 
@@ -31,4 +32,5 @@
 			[K_gg , p_g, melting_offset]=PenaltySystemMatrices(K_gg_nopenalty,p_g_nopenalty,m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,analysis_type,sub_analysis_type);
 		else
+				m.parameters.Verbose
 			displaystring(m.parameters.Verbose,'%s',['   system matrices']);
 			[K_gg , p_g]=SystemMatrices(m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,analysis_type,sub_analysis_type);
@@ -52,7 +54,6 @@
 
 		%Update inputs in datasets
-		inputs=add(inputs,'temperature',t_g,'doublevec',m.parameters.NumberOfDofsPerNode,m.parameters.NumberOfNodes);
 		displaystring(m.parameters.Verbose,'%s',['   update inputs']);
-		[m.elements,m.nodes,m.vertices, loads,m.materials,m.parameters]=UpdateFromInputs(m.elements,m.nodes,m.vertices, loads,m.materials,m.parameters);
+		[m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters] = UpdateInputsFromVector(m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,t_g,TemperatureEnum, VertexEnum);
 	
 		%penalty constraints
