Index: /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp
===================================================================
--- /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp	(revision 5688)
+++ /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp	(revision 5689)
@@ -5,13 +5,15 @@
 #include "./Mergesolutionfromftogx.h"
 
-void	Mergesolutionfromftogx( Vec* pug, Vec uf, Vec ys, NodeSets* nodesets,bool flag_ys0){
+void	Mergesolutionfromftogx( Vec* pug, Vec uf, Vec ys, NodeSets* nodesets,Parameters* parameters,bool flag_ys0){
 
 	/*output: */
 	Vec ug=NULL;
-	int  ug_local_size;
+	Vec ys0=NULL;
+	int ug_local_size;
+	
+	/*Display message*/
+	int verbose; parameters->FindParam(&verbose,VerboseEnum);
+	if (verbose) printf("   Merging solution vector from fset to gset\n");
 
-	/*intermediary*/
-	Vec ys0=NULL;
-	
 	/*Merge f set back into g set: */
 	ug=NewVec(nodesets->GetGSize());
Index: /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h
===================================================================
--- /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h	(revision 5688)
+++ /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h	(revision 5689)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void	Mergesolutionfromftogx( Vec* pug, Vec uf,Vec ys, NodeSets* nodesets,bool flag_ys0=false);
+void	Mergesolutionfromftogx( Vec* pug, Vec uf,Vec ys, NodeSets* nodesets,Parameters* parameters,bool flag_ys0=false);
 
 #endif  /* _MERGESOLUTIONFROMFTOGX_H */
Index: /issm/trunk/src/c/modules/PenaltyConstraintsx/PenaltyConstraintsx.cpp
===================================================================
--- /issm/trunk/src/c/modules/PenaltyConstraintsx/PenaltyConstraintsx.cpp	(revision 5688)
+++ /issm/trunk/src/c/modules/PenaltyConstraintsx/PenaltyConstraintsx.cpp	(revision 5689)
@@ -23,4 +23,8 @@
 	int analysis_type;
 
+	/*Display message*/
+	int verbose; parameters->FindParam(&verbose,VerboseEnum);
+	if (verbose) printf("   Constraining penalties\n");
+
 	/*recover parameters: */
 	parameters->FindParam(&min_mechanical_constraints,MinMechanicalConstraintsEnum);
Index: /issm/trunk/src/c/modules/PenaltySystemMatricesx/PenaltySystemMatricesx.cpp
===================================================================
--- /issm/trunk/src/c/modules/PenaltySystemMatricesx/PenaltySystemMatricesx.cpp	(revision 5688)
+++ /issm/trunk/src/c/modules/PenaltySystemMatricesx/PenaltySystemMatricesx.cpp	(revision 5689)
@@ -15,6 +15,9 @@
 	double kmax;
 	Load* load=NULL;
-	
 	int configuration_type;
+
+	/*Display message*/
+	int verbose; parameters->FindParam(&verbose,VerboseEnum);
+	if (verbose) printf("   Generating penalty matrices\n");
 
 	/*retrive parameters: */
Index: /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.cpp
===================================================================
--- /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.cpp	(revision 5688)
+++ /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.cpp	(revision 5689)
@@ -8,8 +8,7 @@
 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
 #endif
-
 #include "./Reduceloadfromgtofx.h"
 
-void	Reduceloadfromgtofx( Vec* ppf, Vec pg, Mat Kfs, Vec y_s, NodeSets* nodesets,bool flag_ys0){
+void	Reduceloadfromgtofx( Vec* ppf, Vec pg, Mat Kfs, Vec y_s, NodeSets* nodesets,Parameters* parameters,bool flag_ys0){
 
 	/*output: */
@@ -22,5 +21,8 @@
 	int Kfsm,Kfsn;
 	PetscScalar a;
-	
+
+	/*Display message*/
+	int verbose; parameters->FindParam(&verbose,VerboseEnum);
+	if (verbose) printf("   Reducing Load vector from gset to fset\n");
 
 	if(!pg){
@@ -28,5 +30,4 @@
 	}
 	else{
-
 		/* Reduce pg to pn:*/
 		VecDuplicate(pg,&pn);  
Index: /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.h
===================================================================
--- /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.h	(revision 5688)
+++ /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.h	(revision 5689)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void	Reduceloadfromgtofx( Vec* ppf, Vec pg, Mat Kfs, Vec ys, NodeSets* nodesets, bool flag_ys0=false);
+void	Reduceloadfromgtofx( Vec* ppf, Vec pg, Mat Kfs, Vec ys, NodeSets* nodesets,Parameters* parameters, bool flag_ys0=false);
 
 #endif  /* _REDUCELOADFROMGTOFX_H */
Index: /issm/trunk/src/c/modules/Reducematrixfromgtofx/Reducematrixfromgtofx.cpp
===================================================================
--- /issm/trunk/src/c/modules/Reducematrixfromgtofx/Reducematrixfromgtofx.cpp	(revision 5688)
+++ /issm/trunk/src/c/modules/Reducematrixfromgtofx/Reducematrixfromgtofx.cpp	(revision 5689)
@@ -2,12 +2,15 @@
  * \brief reduce matrix from g set to f fset
  */
-
 #include "./Reducematrixfromgtofx.h"
 
-void Reducematrixfromgtofx( Mat* pKff, Mat* pKfs,Mat Kgg,NodeSets* nodesets){
+void Reducematrixfromgtofx( Mat* pKff, Mat* pKfs,Mat Kgg,NodeSets* nodesets,Parameters* parameters){
 
 	/*output: */
 	Mat Kff=NULL;
 	Mat Kfs=NULL;
+
+	/*Display message*/
+	int verbose; parameters->FindParam(&verbose,VerboseEnum);
+	if (verbose) printf("   Reducing Stiffness Matrix from gset to fset\n");
 
 	//Reduce matrix from g-size to f-size
Index: /issm/trunk/src/c/modules/Reducematrixfromgtofx/Reducematrixfromgtofx.h
===================================================================
--- /issm/trunk/src/c/modules/Reducematrixfromgtofx/Reducematrixfromgtofx.h	(revision 5688)
+++ /issm/trunk/src/c/modules/Reducematrixfromgtofx/Reducematrixfromgtofx.h	(revision 5689)
@@ -10,5 +10,5 @@
 
 /* local prototypes: */
-void	Reducematrixfromgtofx( Mat* pKff, Mat* pKfs,Mat Kgg,NodeSets* nodesets);
+void	Reducematrixfromgtofx( Mat* pKff, Mat* pKfs,Mat Kgg,NodeSets* nodesets,Parameters* parameters);
 
 #endif  /* _REDUCEMATRIXFROMGTOFX_H */
Index: /issm/trunk/src/c/modules/Solverx/Solverx.cpp
===================================================================
--- /issm/trunk/src/c/modules/Solverx/Solverx.cpp	(revision 5688)
+++ /issm/trunk/src/c/modules/Solverx/Solverx.cpp	(revision 5689)
@@ -28,4 +28,8 @@
 	int solver_type;
 	char* solver_string=NULL;
+
+	/*Display message*/
+	int verbose; parameters->FindParam(&verbose,VerboseEnum);
+	if (verbose) printf("   Solving\n");
 
 	/*First, check that f-set is not NULL, ie model is fully constrained: */
Index: /issm/trunk/src/c/modules/SystemMatricesx/SystemMatricesx.cpp
===================================================================
--- /issm/trunk/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 5688)
+++ /issm/trunk/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 5689)
@@ -26,4 +26,8 @@
 	int analysis_type;
 	int configuration_type;
+
+	/*Display message*/
+	int verbose; parameters->FindParam(&verbose,VerboseEnum);
+	if (verbose) printf("   Generating matrices\n");
 
 	/*retrive parameters: */
Index: /issm/trunk/src/c/solvers/solver_adjoint_linear.cpp
===================================================================
--- /issm/trunk/src/c/solvers/solver_adjoint_linear.cpp	(revision 5688)
+++ /issm/trunk/src/c/solvers/solver_adjoint_linear.cpp	(revision 5689)
@@ -14,5 +14,4 @@
 	/*parameters:*/
 	int kflag,pflag;
-	int verbose=0;
 
 	/*output: */
@@ -27,36 +26,17 @@
 	Vec pf=NULL;
 
-	/*Recover parameters: */
 	kflag=1; pflag=1;
-	femmodel->parameters->FindParam(&verbose,VerboseEnum);
-
-	//*Generate system matrices
-	if(verbose)_printf_("   Generating matrices\n");
 	SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
-
-	if(verbose)_printf_("   Generating penalty matrices\n");
-	//*Generate penalty system matrices
 	PenaltySystemMatricesx(Kgg, pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
 
-	/*!Reduce matrix from g to f size:*/
-	if(verbose)_printf_("   reducing matrix from g to f set\n");
-	Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets); MatFree(&Kgg);
+	Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets,femmodel->parameters); MatFree(&Kgg);
+	Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets,femmodel->parameters,true);VecFree(&pg); MatFree(&Kfs);//true means spc = 0
 
-	/*!Reduce load from g to f size: */
-	if(verbose)_printf_("   reducing load from g to f set\n"); //true means spc = 0
-	Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets,true);VecFree(&pg); MatFree(&Kfs);
-
-	/*Solve: */
-	if(verbose)_printf_("   solving\n");
 	Solverx(&uf, Kff, pf, NULL, femmodel->parameters); MatFree(&Kff); VecFree(&pf);
 
-	//Merge back to g set
-	if(verbose)_printf_("   merging solution from f to g set\n");//true means spc=0
-	Mergesolutionfromftogx(&ug, uf,femmodel->ys,femmodel->nodesets,true);VecFree(&uf);
+	Mergesolutionfromftogx(&ug, uf,femmodel->ys,femmodel->nodesets,femmodel->parameters,true);VecFree(&uf);//true means spc0
 
-	//Update inputs using new solution:
 	InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
 
-	/*free ressources: */
 	VecFree(&ug);
 	VecFree(&uf);
Index: /issm/trunk/src/c/solvers/solver_diagnostic_nonlinear.cpp
===================================================================
--- /issm/trunk/src/c/solvers/solver_diagnostic_nonlinear.cpp	(revision 5688)
+++ /issm/trunk/src/c/solvers/solver_diagnostic_nonlinear.cpp	(revision 5689)
@@ -36,9 +36,7 @@
 	int kflag,pflag;
 	int verbose=0;
-	int dim;
 
 	/*Recover parameters: */
 	kflag=1; pflag=1;
-	femmodel->parameters->FindParam(&dim,DimEnum);
 	femmodel->parameters->FindParam(&verbose,VerboseEnum);
 	femmodel->parameters->FindParam(&min_mechanical_constraints,MinMechanicalConstraintsEnum);
@@ -69,42 +67,26 @@
 		VecFree(&old_uf);old_uf=uf;
 
-		if(verbose)_printf_("   Generating matrices\n");
 		SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters,kflag,pflag);
-
-		if(verbose)_printf_("   Generating penalty matrices\n");
 		PenaltySystemMatricesx(Kgg, pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters,kflag,pflag);
 		
-		if(verbose)_printf_("   reducing matrix from g to f set\n");
-		Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets);
-
-		/*Free ressources: */
+		Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets,femmodel->parameters);
 		MatFree(&Kgg);
 	
-		if(verbose)_printf_("   reducing load from g to f set\n");
-		Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets);
-
-		//no need for pg and Kfs anymore 
+		Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets,femmodel->parameters);
 		VecFree(&pg); 
 		MatFree(&Kfs);
 
-		if(verbose)_printf_("   solving\n");
 		Solverx(&uf, Kff, pf, old_uf, femmodel->parameters);
 
-		if(verbose)_printf_("   merging solution from f to g set\n");
-		Mergesolutionfromftogx(&ug, uf,femmodel->ys,femmodel->nodesets);
+		Mergesolutionfromftogx(&ug, uf,femmodel->ys,femmodel->nodesets,femmodel->parameters);
 
-		//Update inputs using new solution:
 		InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
 
-		if(verbose)_printf_("   penalty constraints\n");
 		PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters);
-
 		if(verbose)_printf_("   number of unstable constraints: %i\n",num_unstable_constraints);
 
-		/*Figure out if convergence is reached.*/
 		convergence(&converged,Kff,pf,uf,old_uf,femmodel->parameters);
 		MatFree(&Kff);VecFree(&pf);
 		
-		/*add converged to inputs: */
 		InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
 
@@ -126,8 +108,6 @@
 	}
 
-	/*Delete loads only if no ouput was requested: */
+	/*clean-up*/
 	if(conserve_loads) delete loads;
-
-	/*clean up*/
 	VecFree(&uf);
 	VecFree(&ug);
Index: /issm/trunk/src/c/solvers/solver_linear.cpp
===================================================================
--- /issm/trunk/src/c/solvers/solver_linear.cpp	(revision 5688)
+++ /issm/trunk/src/c/solvers/solver_linear.cpp	(revision 5689)
@@ -29,32 +29,16 @@
 	femmodel->parameters->FindParam(&verbose,VerboseEnum);
 
-	//*Generate system matrices
-	if(verbose)_printf_("   Generating matrices\n");
 	SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
-
-	if(verbose)_printf_("   Generating penalty matrices\n");
-	//*Generate penalty system matrices
 	PenaltySystemMatricesx(Kgg, pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
 
-	/*!Reduce matrix from g to f size:*/
-	if(verbose)_printf_("   reducing matrix from g to f set\n");
-	Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets); MatFree(&Kgg);
+	Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets,femmodel->parameters); MatFree(&Kgg);
+	Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets,femmodel->parameters);VecFree(&pg); MatFree(&Kfs);
 
-	/*!Reduce load from g to f size: */
-	if(verbose)_printf_("   reducing load from g to f set\n");
-	Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets);VecFree(&pg); MatFree(&Kfs);
-
-	/*Solve: */
-	if(verbose)_printf_("   solving\n");
 	Solverx(&uf, Kff, pf, NULL, femmodel->parameters); MatFree(&Kff); VecFree(&pf);
 
-	//Merge back to g set
-	if(verbose)_printf_("   merging solution from f to g set\n");
-	Mergesolutionfromftogx(&ug, uf,femmodel->ys,femmodel->nodesets);VecFree(&uf);
+	Mergesolutionfromftogx(&ug, uf,femmodel->ys,femmodel->nodesets,femmodel->parameters);VecFree(&uf);
 
-	//Update inputs using new solution:
 	InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
 
-	/*free ressources: */
 	VecFree(&ug);
 	VecFree(&uf);
Index: /issm/trunk/src/c/solvers/solver_thermal_nonlinear.cpp
===================================================================
--- /issm/trunk/src/c/solvers/solver_thermal_nonlinear.cpp	(revision 5688)
+++ /issm/trunk/src/c/solvers/solver_thermal_nonlinear.cpp	(revision 5689)
@@ -75,12 +75,10 @@
 		}
 
-		/*!Reduce matrix from g to f size:*/
-		Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets);
+		Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets,femmodel->parameters);
 
 		/*Free ressources: */
 		MatFree(&Kgg);
 	
-		if(verbose)_printf_("   reducing load from g to f set\n");
-		Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets);
+		Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets,femmodel->parameters);
 
 		//no need for pg and Kfs anymore 
@@ -89,5 +87,4 @@
 
 		/*Solve: */
-		if(verbose)_printf_("%s\n","solving");
 		VecFree(&tf);
 		Solverx(&tf, Kff, pf,tf_old, femmodel->parameters);
@@ -97,13 +94,9 @@
 		MatFree(&Kff);VecFree(&pf);VecFree(&tg);
 
-		if(verbose)_printf_("   merging solution from f to g set\n");
-		Mergesolutionfromftogx(&tg, tf,femmodel->ys,femmodel->nodesets);
+		Mergesolutionfromftogx(&tg, tf,femmodel->ys,femmodel->nodesets,femmodel->parameters);
 
-		//Update inputs using new solution:
-		if (verbose) _printf_("   updating inputs\n");
 		InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,tg);
 
 		//Deal with penalty loads
-		if(verbose)_printf_("   penalty constraints\n");
 		PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
 
Index: /issm/trunk/src/m/solvers/solver_adjoint_linear.m
===================================================================
--- /issm/trunk/src/m/solvers/solver_adjoint_linear.m	(revision 5688)
+++ /issm/trunk/src/m/solvers/solver_adjoint_linear.m	(revision 5689)
@@ -5,26 +5,17 @@
 %      femmodel =solver_adjoint_linear(femmodel)
 
-	%stiffness and load generation only:
 	femmodel.parameters.Kflag=1; femmodel.parameters.Pflag=1;
 
-	%system matrices
 	[K_gg, p_g]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
 	[K_gg, p_g,kmax]=PenaltySystemMatrices(K_gg,p_g,femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
 	
-	%Reduce tangent matrix from g size to f size
-	[K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets); 
+	[K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters); 
 	%K_ff=transpose(K_ff);
+	p_f = Reduceloadfromgtof( p_g, K_fs, femmodel.ys, femmodel.nodesets,femmodel.parameters,true);
+
 	displaystring(femmodel.parameters.Verbose>1,'%s%g','      condition number of stiffness matrix: ',condest(K_ff));
-	
-	%Reduce load from g size to f size
-	p_f = Reduceloadfromgtof( p_g, K_fs, femmodel.ys, femmodel.nodesets,true);
-
-	%Solve	
 	u_f=Solver(K_ff,p_f,[],femmodel.parameters);
 	
-	%Merge back to g set
-	u_g= Mergesolutionfromftog( u_f, femmodel.ys, femmodel.nodesets,true); 
+	u_g= Mergesolutionfromftog( u_f, femmodel.ys, femmodel.nodesets,femmodel.parameters,true); 
 
-	%Update inputs using new solution
 	[femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,u_g);
-
Index: /issm/trunk/src/m/solvers/solver_diagnostic_nonlinear.m
===================================================================
--- /issm/trunk/src/m/solvers/solver_diagnostic_nonlinear.m	(revision 5688)
+++ /issm/trunk/src/m/solvers/solver_diagnostic_nonlinear.m	(revision 5689)
@@ -31,27 +31,15 @@
 		old_uf=uf;
 		
-		displaystring(femmodel.parameters.Verbose,'%s','   Generating matrices:');
 		[K_gg_nopenalty , p_g_nopenalty]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters);
-	
-		displaystring(femmodel.parameters.Verbose,'%s','   Generating penalty matrices:');
 		[K_gg , p_g, kmax]=PenaltySystemMatrices(K_gg_nopenalty,p_g_nopenalty,femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters);
 		
+		[K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters); 
+		p_f = Reduceloadfromgtof( p_g, K_fs, femmodel.ys, femmodel.nodesets,femmodel.parameters);
 
-		displaystring(femmodel.parameters.Verbose,'%s','   reducing matrix from g to f set');
-		[K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets); 
-		
-		displaystring(femmodel.parameters.Verbose,'%s','   reduce load from g size to f size');
-		p_f = Reduceloadfromgtof( p_g, K_fs, femmodel.ys, femmodel.nodesets);
-
-		displaystring(femmodel.parameters.Verbose,'%s','   solving');
 		uf=Solver(K_ff,p_f,old_uf,femmodel.parameters);
 
-		displaystring(femmodel.parameters.Verbose,'%s','   merge back to g set');
-		ug= Mergesolutionfromftog( uf, femmodel.ys, femmodel.nodesets ); 
+		ug= Mergesolutionfromftog( uf, femmodel.ys, femmodel.nodesets,femmodel.parameters); 
 
-		%Update inputs using new solution
 		[femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,ug);
-		
-		displaystring(femmodel.parameters.Verbose,'%s','   penalty constraints');
 		[loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints( femmodel.elements,femmodel.nodes,femmodel.vertices,loads, femmodel.materials,femmodel.parameters);
 		
Index: /issm/trunk/src/m/solvers/solver_linear.m
===================================================================
--- /issm/trunk/src/m/solvers/solver_linear.m	(revision 5688)
+++ /issm/trunk/src/m/solvers/solver_linear.m	(revision 5689)
@@ -5,24 +5,16 @@
 %      femmodel =solver_linear(femmodel)
 
-	%stiffness and load generation only:
 	femmodel.parameters.Kflag=1; femmodel.parameters.Pflag=1;
 
-	%system matrices
 	[K_gg, p_g]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
 	[K_gg, p_g,kmax]=PenaltySystemMatrices(K_gg,p_g,femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
 	
-	%Reduce tangent matrix from g size to f size
-	[K_ff, K_fs] = Reducematrixfromgtof( K_gg,  femmodel.nodesets); 
+	[K_ff, K_fs] = Reducematrixfromgtof( K_gg,  femmodel.nodesets,femmodel.parameters); 
+	p_f = Reduceloadfromgtof( p_g,  K_fs, femmodel.ys, femmodel.nodesets,femmodel.parameters);
+
 	displaystring(femmodel.parameters.Verbose>1,'%s%g','      condition number of stiffness matrix: ',condest(K_ff));
-	
-	%Reduce load from g size to f size
-	p_f = Reduceloadfromgtof( p_g,  K_fs, femmodel.ys, femmodel.nodesets);
-
-	%Solve	
 	u_f=Solver(K_ff,p_f,[],femmodel.parameters);
 	
-	%Merge back to g set
-	u_g= Mergesolutionfromftog( u_f, femmodel.ys, femmodel.nodesets ); 
+	u_g= Mergesolutionfromftog( u_f, femmodel.ys, femmodel.nodesets,femmodel.parameters); 
 
-	%Update inputs using new solution
 	[femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,u_g);
Index: /issm/trunk/src/m/solvers/solver_thermal_nonlinear.m
===================================================================
--- /issm/trunk/src/m/solvers/solver_thermal_nonlinear.m	(revision 5688)
+++ /issm/trunk/src/m/solvers/solver_thermal_nonlinear.m	(revision 5689)
@@ -27,21 +27,13 @@
 		[K_gg , p_g, melting_offset]=PenaltySystemMatrices(K_gg_nopenalty,p_g_nopenalty,femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
 
-		%Reduce tangent matrix from g size to f size
-		[K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets); 
-
-		%Reduce load from g size to f size
-		p_f = Reduceloadfromgtof( p_g, K_fs, femmodel.ys, femmodel.nodesets);
+		[K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters); 
+		p_f = Reduceloadfromgtof( p_g, K_fs, femmodel.ys, femmodel.nodesets,femmodel.parameters);
 
 		displaystring(femmodel.parameters.Verbose,'%s%g','   condition number of stiffness matrix: ',condest(K_ff));
 		t_f=Solver(K_ff,p_f,[],femmodel.parameters);
 
-		displaystring(femmodel.parameters.Verbose,'%s',['   merging solution back to g set']);
-		t_g= Mergesolutionfromftog( t_f, femmodel.ys, femmodel.nodesets ); 
-
-		displaystring(femmodel.parameters.Verbose,'%s',['   updating inputs']);
+		t_g= Mergesolutionfromftog( t_f, femmodel.ys, femmodel.nodesets,femmodel.parameters); 
 		[femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,t_g);
 	
-		%penalty constraints
-		displaystring(femmodel.parameters.Verbose,'%s',['   penalty constraints']);
 		[femmodel.loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads, femmodel.materials,femmodel.parameters);
 	
Index: /issm/trunk/src/mex/Mergesolutionfromftog/Mergesolutionfromftog.cpp
===================================================================
--- /issm/trunk/src/mex/Mergesolutionfromftog/Mergesolutionfromftog.cpp	(revision 5688)
+++ /issm/trunk/src/mex/Mergesolutionfromftog/Mergesolutionfromftog.cpp	(revision 5689)
@@ -8,8 +8,9 @@
 
 	/*input datasets: */
-	bool flag_ys0;
-	Vec uf=NULL;
-	Vec ys=NULL;
-	NodeSets* nodesets=NULL;
+	bool        flag_ys0;
+	Vec         uf         = NULL;
+	Vec         ys         = NULL;
+	NodeSets   *nodesets   = NULL;
+	Parameters *parameters = NULL;
 
 	/* output datasets: */
@@ -20,5 +21,5 @@
 
 	/*checks on arguments on the matlab side: */
-	if((nlhs!=NLHS) || (nrhs!=3 && nrhs!=4)){
+	if((nlhs!=NLHS) || (nrhs!=4 && nrhs!=5)){
 		MergesolutionfromftogUsage();
 		ISSMERROR(" usage. See above");
@@ -29,12 +30,13 @@
 	FetchData(&ys,YS);
 	FetchNodeSets(&nodesets,NODESETS);
+	FetchParams(&parameters,PARAMETERS);
 
 	/*!Reduce vector: */
-	if (nrhs==3){
-		Mergesolutionfromftogx(&ug, uf,ys,nodesets);
+	if (nrhs==4){
+		Mergesolutionfromftogx(&ug, uf,ys,nodesets,parameters);
 	}
 	else{
 		FetchData(&flag_ys0,YSFLAG);
-		Mergesolutionfromftogx(&ug, uf,ys,nodesets,flag_ys0);
+		Mergesolutionfromftogx(&ug, uf,ys,nodesets,parameters,flag_ys0);
 	}
 
@@ -44,7 +46,8 @@
 	/*Free ressources: */
 	VecFree(&uf);
+	VecFree(&ug);
 	VecFree(&ys);
 	delete nodesets;
-	VecFree(&ug);
+	delete parameters;
 
 	/*end module: */
@@ -55,5 +58,5 @@
 {
 	_printf_("\n");
-	_printf_("   usage: [ug] = %s(uf,ys,nodesets);\n",__FUNCT__);
+	_printf_("   usage: [ug] = %s(uf,ys,nodesets,parameters);\n",__FUNCT__);
 	_printf_("\n");
 }
Index: /issm/trunk/src/mex/Mergesolutionfromftog/Mergesolutionfromftog.h
===================================================================
--- /issm/trunk/src/mex/Mergesolutionfromftog/Mergesolutionfromftog.h	(revision 5688)
+++ /issm/trunk/src/mex/Mergesolutionfromftog/Mergesolutionfromftog.h	(revision 5689)
@@ -22,5 +22,6 @@
 #define YS (mxArray*)prhs[1]
 #define NODESETS (mxArray*)prhs[2]
-#define YSFLAG (mxArray*)prhs[3]
+#define PARAMETERS (mxArray*)prhs[3]
+#define YSFLAG (mxArray*)prhs[4]
 
 /* serial output macros: */
@@ -31,6 +32,5 @@
 #define NLHS  1
 #undef NRHS
-#define NRHS  3
+#define NRHS  5
 
 #endif  /* _MERGESOLUTIONFROMFTOG_H */
-
Index: /issm/trunk/src/mex/Reduceloadfromgtof/Reduceloadfromgtof.cpp
===================================================================
--- /issm/trunk/src/mex/Reduceloadfromgtof/Reduceloadfromgtof.cpp	(revision 5688)
+++ /issm/trunk/src/mex/Reduceloadfromgtof/Reduceloadfromgtof.cpp	(revision 5689)
@@ -8,9 +8,10 @@
 
 	/*input datasets: */
-	bool flag_ys0;
-	Vec pg=NULL;
-	Mat Kfs=NULL;
-	Vec ys=NULL;
-	NodeSets* nodesets=NULL;
+	bool        flag_ys0;
+	Vec         pg         = NULL;
+	Mat         Kfs        = NULL;
+	Vec         ys         = NULL;
+	NodeSets   *nodesets   = NULL;
+	Parameters *parameters = NULL;
 
 	/* output datasets: */
@@ -21,5 +22,5 @@
 
 	/*checks on arguments on the matlab side: */
-	if((nlhs!=NLHS) || (nrhs!=4 && nrhs!=5)){
+	if((nlhs!=NLHS) || (nrhs!=5 && nrhs!=6)){
 		ReduceloadfromgtofUsage();
 		ISSMERROR(" usage. See above");
@@ -31,12 +32,13 @@
 	FetchData(&ys,YS);
 	FetchNodeSets(&nodesets,NODESETS);
+	FetchParams(&parameters,PARAMETERS);
 
 	/*!Reduce load from g to f size: */
-	if (nrhs==4){
-		Reduceloadfromgtofx(&pf, pg, Kfs, ys, nodesets);
+	if (nrhs==5){
+		Reduceloadfromgtofx(&pf, pg, Kfs, ys, nodesets,parameters);
 	}
 	else{
 		FetchData(&flag_ys0,YSFLAG);
-		Reduceloadfromgtofx(&pf, pg, Kfs, ys, nodesets,flag_ys0);
+		Reduceloadfromgtofx(&pf, pg, Kfs, ys, nodesets,parameters,flag_ys0);
 	}
 
@@ -50,4 +52,5 @@
 	VecFree(&ys);
 	delete nodesets;
+	delete parameters;
 
 	/*end module: */
@@ -58,5 +61,5 @@
 {
 	_printf_("\n");
-	_printf_("   usage: [pf] = %s(pg,Kfs,ys,nodesets);\n",__FUNCT__);
+	_printf_("   usage: [pf] = %s(pg,Kfs,ys,nodesets,parameters);\n",__FUNCT__);
 	_printf_("\n");
 }
Index: /issm/trunk/src/mex/Reduceloadfromgtof/Reduceloadfromgtof.h
===================================================================
--- /issm/trunk/src/mex/Reduceloadfromgtof/Reduceloadfromgtof.h	(revision 5688)
+++ /issm/trunk/src/mex/Reduceloadfromgtof/Reduceloadfromgtof.h	(revision 5689)
@@ -23,5 +23,6 @@
 #define YS (mxArray*)prhs[2]
 #define NODESETS (mxArray*)prhs[3]
-#define YSFLAG (mxArray*)prhs[4]
+#define PARAMETERS (mxArray*)prhs[4]
+#define YSFLAG (mxArray*)prhs[5]
 
 /* serial output macros: */
@@ -32,7 +33,5 @@
 #define NLHS  1
 #undef NRHS
-#define NRHS  4
-
+#define NRHS  5
 
 #endif  /* _REDUCELOADFROMGTOF_H */
-
Index: /issm/trunk/src/mex/Reducematrixfromgtof/Reducematrixfromgtof.cpp
===================================================================
--- /issm/trunk/src/mex/Reducematrixfromgtof/Reducematrixfromgtof.cpp	(revision 5688)
+++ /issm/trunk/src/mex/Reducematrixfromgtof/Reducematrixfromgtof.cpp	(revision 5689)
@@ -8,10 +8,11 @@
 
 	/*input datasets: */
-	Mat Kgg=NULL;
-	NodeSets* nodesets=NULL;
+	Mat         Kgg        = NULL;
+	NodeSets   *nodesets   = NULL;
+	Parameters *parameters = NULL;
 
 	/* output datasets: */
-	Mat Kff=NULL;
-	Mat Kfs=NULL;
+	Mat Kff = NULL;
+	Mat Kfs = NULL;
 
 	/*Boot module: */
@@ -24,7 +25,8 @@
 	FetchData(&Kgg,KGG);
 	FetchNodeSets(&nodesets,NODESETS);
+	FetchParams(&parameters,PARAMETERS);
 
 	/*!Reduce matrix from g to f size:*/
-	Reducematrixfromgtofx(&Kff,&Kfs,Kgg,nodesets);
+	Reducematrixfromgtofx(&Kff,&Kfs,Kgg,nodesets,parameters);
 
 	/*write output datasets: */
@@ -34,4 +36,5 @@
 	/*Free ressources: */
 	delete nodesets;
+	delete parameters;
 	MatFree(&Kgg);
 	MatFree(&Kff);
@@ -45,5 +48,5 @@
 {
 	_printf_("\n");
-	_printf_("   usage: [Kff,Kfs] = %s(Kgg,nodesets);\n",__FUNCT__);
+	_printf_("   usage: [Kff,Kfs] = %s(Kgg,nodesets,parameters);\n",__FUNCT__);
 	_printf_("\n");
 }
Index: /issm/trunk/src/mex/Reducematrixfromgtof/Reducematrixfromgtof.h
===================================================================
--- /issm/trunk/src/mex/Reducematrixfromgtof/Reducematrixfromgtof.h	(revision 5688)
+++ /issm/trunk/src/mex/Reducematrixfromgtof/Reducematrixfromgtof.h	(revision 5689)
@@ -21,4 +21,5 @@
 #define KGG (mxArray*)prhs[0]
 #define NODESETS (mxArray*)prhs[1]
+#define PARAMETERS (mxArray*)prhs[2]
 
 /* serial output macros: */
@@ -30,7 +31,5 @@
 #define NLHS  2
 #undef NRHS
-#define NRHS  2
-
+#define NRHS  3
 
 #endif  /* _REDUCEMATRIXFROMGTOF_H */
-
Index: /issm/trunk/src/mex/SystemMatrices/SystemMatrices.cpp
===================================================================
--- /issm/trunk/src/mex/SystemMatrices/SystemMatrices.cpp	(revision 5688)
+++ /issm/trunk/src/mex/SystemMatrices/SystemMatrices.cpp	(revision 5689)
@@ -8,10 +8,10 @@
 
 	/*input datasets: */
-	Elements* elements=NULL;
-	Nodes* nodes=NULL;
-	Vertices* vertices=NULL;
-	Loads* loads=NULL;
-	Materials* materials=NULL;
-	Parameters* parameters=NULL;
+	Elements   *elements   = NULL;
+	Nodes      *nodes      = NULL;
+	Vertices   *vertices   = NULL;
+	Loads      *loads      = NULL;
+	Materials  *materials  = NULL;
+	Parameters *parameters = NULL;
 	int         kflag,pflag;
 	
@@ -42,5 +42,5 @@
 	nodes->     Configure(elements,loads, nodes,vertices, materials,parameters);
 	loads->     Configure(elements, loads, nodes,vertices, materials,parameters);
-	materials->     Configure(elements, loads, nodes,vertices, materials,parameters);
+	materials-> Configure(elements, loads, nodes,vertices, materials,parameters);
 
 	/*!Generate internal degree of freedom numbers: */
