Index: /issm/trunk-jpl-damage/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/Elements/Penta.h	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/Elements/Penta.h	(revision 11422)
@@ -88,4 +88,5 @@
 		void   CreateKMatrix(Mat Kff, Mat Kfs,Vec df);
 		void   CreatePVector(Vec pf);
+		void   CreateJacobianMatrix(Mat Jff);
 		void   DeleteResults(void);
 		int    GetNodeIndex(Node* node);
Index: /issm/trunk-jpl-damage/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/Elements/Tria.cpp	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/Elements/Tria.cpp	(revision 11422)
@@ -3103,5 +3103,5 @@
 		thickness_input->GetInputValue(&thickness, gauss);
 		this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
-		matice->GetViscosity2dDerivativeEpsSquare(&mu_prime,&epsilon[0]);
+		matice->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]);
 		eps1[0]=2*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
 		eps1[1]=epsilon[2];                eps2[1]=epsilon[0]+2*epsilon[1];
Index: /issm/trunk-jpl-damage/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/Elements/Tria.h	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/Elements/Tria.h	(revision 11422)
@@ -141,4 +141,5 @@
 		#ifdef _HAVE_CONTROL_
 		double DragCoefficientAbsGradient(bool process_units,int weight_index);
+		void   GradientIndexing(int* indexing,int control_index);
 		void   Gradj(Vec gradient,int control_type);
 		void   GradjBGradient(Vec gradient,int weight_index);
Index: /issm/trunk-jpl-damage/src/c/objects/KML/KML_File.cpp
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/KML/KML_File.cpp	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/KML/KML_File.cpp	(revision 11422)
@@ -65,19 +65,4 @@
 	_printf_(flag,"%sKML_File:\n",indent);
 	KML_Object::DeepEcho(indent);
-
-/*  loop over the kml objects for the file  */
-
-	memcpy(indent2,indent,(strlen(indent)+1)*sizeof(char));
-
-	strcat(indent2,"  ");
-
-	if (kmlobj->Size())
-		for (i=0; i<kmlobj->Size(); i++) {
-			_printf_(flag,"%s        kmlobj: -------- begin [%d] --------\n" ,indent,i);
-			((KML_Object *)kmlobj->GetObjectByOffset(i))->DeepEcho(indent2);
-			_printf_(flag,"%s        kmlobj: --------  end  [%d] --------\n" ,indent,i);
-		}
-	else
-		_printf_(flag,"%s        kmlobj: [empty]\n"    ,indent);
 
 	return;
Index: /issm/trunk-jpl-damage/src/c/objects/KML/KML_Object.cpp
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/KML/KML_Object.cpp	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/KML/KML_Object.cpp	(revision 11422)
@@ -117,8 +117,11 @@
 void  KML_Object::Write(FILE* filout,const char* indent){
 
+	int   i;
+	char  indent2[81];
+
 //  attributes always written in keyword line of derived classes
 //  comments always written after keyword line of derived classes
 
-	;
+/*  loop over the unknown objects for the object  */
 
 	memcpy(indent2,indent,(strlen(indent)+1)*sizeof(char));
@@ -135,4 +138,6 @@
 /*FUNCTION KML_Object::Read {{{1*/
 void  KML_Object::Read(FILE* fid,char* kstr){
+
+	KML_Object*  kobj;
 
 /*  process field within opening and closing tags  */
@@ -249,8 +254,4 @@
 	else if (!strncmp(kstr,"<",1)) {
 		_printf_(true,"KML_Object::Read -- Unrecognized opening tag %s.\n",kstr);
-<<<<<<< .working
-		KMLFileTagSkip(kstr,
-					   fid);
-=======
 //		KMLFileTagSkip(kstr,
 //					   fid);
Index: /issm/trunk-jpl-damage/src/c/objects/KML/KML_Unknown.cpp
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/KML/KML_Unknown.cpp	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/KML/KML_Unknown.cpp	(revision 11422)
@@ -107,8 +107,4 @@
 	WriteCommnt(filout,indent);
 
-	KML_Object::Write(filout,indent);
-
-	if (value     )
-		fprintf(filout,"%s  %s\n",indent,value);
 	if (value     ) {
 		valuei=(char *) xmalloc((strlen(value)+1)*sizeof(char));
@@ -139,4 +135,10 @@
 	char         nl[]={'\n','\0'};
 
+/*  get object name  */
+
+	/*name=KMLFileTagName(NULL,
+						kstr);*/
+//	_printf_(true,"KML_Unknown::Read -- opening name=%s.\n",name);
+
 /*  get object attributes and check for solo tag  */
 
@@ -149,6 +151,8 @@
 	while (kstri=KMLFileToken(fid,
 							  &ncom,&pcom)) {
+//		_printf_(true,"KML_Unknown::Read -- kstri=%s.\n",kstri);
 		if      (!strncmp(&kstri[0],"</", 2) &&
 				 !strncmp(&kstri[2],name,strlen(name))) {
+//			_printf_(true,"KML_Unknown::Read -- closing name=%s.\n",name);
 			xfree((void**)&kstri);
 			break;
@@ -157,8 +161,4 @@
 			_error_("KML_Unknown::Read -- Unexpected closing tag %s.\n",kstri);
 
-		else if (strncmp(kstri,"<",1))
-			KMLFileTokenParse( value     ,NULL,0,
-							  NULL,
-							  fid);
 		else if (strncmp(kstri,"<",1)) {
 			if (value) {
Index: /issm/trunk-jpl-damage/src/c/objects/Loads/Penpair.h
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/Loads/Penpair.h	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/Loads/Penpair.h	(revision 11422)
@@ -64,6 +64,8 @@
 		void  CreateKMatrix(Mat Kff, Mat Kfs);
 		void  CreatePVector(Vec pf);
-		void  PenaltyCreateKMatrix(Mat Kff, Mat kfs, double kmax);
+		void  CreateJacobianMatrix(Mat Jff);
+		void  PenaltyCreateKMatrix(Mat Kff, Mat Kfs,double kmax);
 		void  PenaltyCreatePVector(Vec pf, double kmax);
+		void  PenaltyCreateJacobianMatrix(Mat Jff,double kmax);
 		bool  InAnalysis(int analysis_type);
 		/*}}}*/
Index: /issm/trunk-jpl-damage/src/c/objects/Materials/Matice.cpp
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/Materials/Matice.cpp	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/Materials/Matice.cpp	(revision 11422)
@@ -608,6 +608,6 @@
 }
 /*}}}*/
-/*FUNCTION Matice::GetViscosity2dDerivativeEpsSquare{{{1*/
-void  Matice::GetViscosity2dDerivativeEpsSquare(double* pmu_prime, double* epsilon){
+/*FUNCTION Matice::GetViscosityDerivativeEpsSquare{{{1*/
+void  Matice::GetViscosityDerivativeEpsSquare(double* pmu_prime, double* epsilon){
 
 	/*output: */
Index: /issm/trunk-jpl-damage/src/c/objects/Materials/Matice.h
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/Materials/Matice.h	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/Materials/Matice.h	(revision 11422)
@@ -69,5 +69,5 @@
 		void   GetViscosityComplement(double* pviscosity_complement, double* pepsilon);
 		void   GetViscosityZComplement(double* pviscosity_complement, double* pepsilon);
-		void   GetViscosity2dDerivativeEpsSquare(double* pmu_prime, double* pepsilon);
+		void   GetViscosityDerivativeEpsSquare(double* pmu_prime, double* pepsilon);
 		double GetB();
 		double GetBbar();
Index: /issm/trunk-jpl-damage/src/c/objects/Numerics/ElementMatrix.cpp
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/Numerics/ElementMatrix.cpp	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/Numerics/ElementMatrix.cpp	(revision 11422)
@@ -251,4 +251,10 @@
 	double* localvalues=NULL;
 
+	/*If Kfs is not provided, call the other function*/ 
+	if(!Kfs){ 
+		this->AddToGlobal(Kff); 
+		return; 
+	} 
+
 	/*In debugging mode, check consistency (no NaN, and values not too big)*/
 	this->CheckConsistency();
@@ -294,4 +300,41 @@
 }
 /*}}}*/
+/*FUNCTION ElementMatrix::AddToGlobal(Mat Jff){{{1*/
+void ElementMatrix::AddToGlobal(Mat Jff){
+	  
+	int i,j;
+	double* localvalues=NULL;
+	
+	/*Check that Jff is not NULL*/
+	_assert_(Jff); 
+	
+	/*In debugging mode, check consistency (no NaN, and values not too big)*/
+	this->CheckConsistency();
+	
+	if(this->dofsymmetrical){
+		/*only use row dofs to add values into global matrices: */
+		
+		if(this->row_fsize){
+			/*first, retrieve values that are in the f-set from the g-set values matrix: */
+			localvalues=(double*)xmalloc(this->row_fsize*this->row_fsize*sizeof(double));
+			for(i=0;i<this->row_fsize;i++){
+				for(j=0;j<this->row_fsize;j++){
+					*(localvalues+this->row_fsize*i+j)=*(this->values+this->ncols*this->row_flocaldoflist[i]+this->row_flocaldoflist[j]);
+				}
+			}
+			/*add local values into global  matrix, using the fglobaldoflist: */
+			MatSetValues(Jff,this->row_fsize,this->row_fglobaldoflist,this->row_fsize,this->row_fglobaldoflist,(const double*)localvalues,ADD_VALUES);
+			
+			/*Free ressources:*/
+			xfree((void**)&localvalues);
+		}
+		
+	}
+	else{
+		_error_(" non dofsymmetrical matrix AddToGlobal routine not support yet!");
+	}
+	
+}
+/*}}}*/
 /*FUNCTION ElementMatrix::CheckConsistency{{{1*/
 void ElementMatrix::CheckConsistency(void){
Index: /issm/trunk-jpl-damage/src/c/objects/Numerics/ElementMatrix.h
===================================================================
--- /issm/trunk-jpl-damage/src/c/objects/Numerics/ElementMatrix.h	(revision 11421)
+++ /issm/trunk-jpl-damage/src/c/objects/Numerics/ElementMatrix.h	(revision 11422)
@@ -59,4 +59,5 @@
 		/*ElementMatrix specific routines {{{1*/
 		void AddToGlobal(Mat Kff, Mat Kfs);
+		void AddToGlobal(Mat Jff);
 		void Echo(void);
 		void CheckConsistency(void);
