Index: /issm/trunk-jpl/src/m/solutions/diagnostic_core.m
===================================================================
--- /issm/trunk-jpl/src/m/solutions/diagnostic_core.m	(revision 11334)
+++ /issm/trunk-jpl/src/m/solutions/diagnostic_core.m	(revision 11335)
@@ -15,4 +15,5 @@
 	ismacayealpattyn=femmodel.parameters.FlowequationIsmacayealpattyn;
 	isstokes=femmodel.parameters.FlowequationIsstokes;
+	isnewton=femmodel.parameters.DiagnosticIsnewton;
 	dakota_analysis=femmodel.parameters.QmuIsdakota;
 	control_analysis=femmodel.parameters.InversionIscontrol;
@@ -53,5 +54,9 @@
 		issmprintf(VerboseSolution,'\n%s',['   computing horizontal velocities']);
 		femmodel=SetCurrentConfiguration(femmodel,DiagnosticHorizAnalysisEnum);
-		femmodel=solver_nonlinear(femmodel,modify_loads); 
+		if isnewton,
+			femmodel=solver_newton(femmodel); 
+		else
+			femmodel=solver_nonlinear(femmodel,modify_loads); 
+		end
 	end
 	
Index: /issm/trunk-jpl/src/mex/CreateJacobianMatrix/CreateJacobianMatrix.cpp
===================================================================
--- /issm/trunk-jpl/src/mex/CreateJacobianMatrix/CreateJacobianMatrix.cpp	(revision 11335)
+++ /issm/trunk-jpl/src/mex/CreateJacobianMatrix/CreateJacobianMatrix.cpp	(revision 11335)
@@ -0,0 +1,66 @@
+/*\file CreateJacobianMatrix.c
+ *\brief: build system matrices (stiffness matrix, loads vector)
+ */
+
+#include "./CreateJacobianMatrix.h"
+
+void mexFunction( int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]){
+
+	/*input datasets: */
+	Elements   *elements   = NULL;
+	Nodes      *nodes      = NULL;
+	Vertices   *vertices   = NULL;
+	Loads      *loads      = NULL;
+	Materials  *materials  = NULL;
+	Parameters *parameters = NULL;
+	double kmax;
+	
+	/* output datasets: */
+	Mat    Jff  = NULL;
+
+	/*Boot module: */
+	MODULEBOOT();
+
+	/*checks on arguments on the matlab side: */
+	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&CreateJacobianMatrixUsage);
+
+	/*Input datasets: */
+	FetchMatlabData((DataSet**)&elements,ELEMENTS);
+	FetchMatlabData((DataSet**)&nodes,NODES);
+	FetchMatlabData((DataSet**)&vertices,VERTICES);
+	FetchMatlabData((DataSet**)&loads,LOADS);
+	FetchMatlabData((DataSet**)&materials,MATERIALS);
+	FetchMatlabData(&parameters,PARAMETERS);
+	FetchMatlabData(&kmax,KMAX);
+
+	/*configure: */
+	elements->  Configure(elements,loads, nodes,vertices, materials,parameters);
+	nodes->     Configure(elements,loads, nodes,vertices, materials,parameters);
+	loads->     Configure(elements, loads, nodes,vertices, materials,parameters);
+	materials-> Configure(elements, loads, nodes,vertices, materials,parameters);
+
+	/*!Generate internal degree of freedom numbers: */
+	CreateJacobianMatrixx(&Jff,elements,nodes,vertices,loads,materials,parameters,kmax);
+
+	/*write output datasets: */
+	WriteMatlabData(JFF,Jff);
+	
+	/*Free ressources: */
+	delete elements;
+	delete nodes;
+	delete vertices;
+	delete loads;
+	delete materials;
+	delete parameters;
+	MatFree(&Jff);
+
+	/*end module: */
+	MODULEEND();
+}
+
+void CreateJacobianMatrixUsage(void)
+{
+	_printf_(true,"\n");
+	_printf_(true,"   usage: [Jff] = %s(elements,nodes,vertices,loads,materials,parameters,kmax);\n",__FUNCT__);
+	_printf_(true,"\n");
+}
Index: /issm/trunk-jpl/src/mex/CreateJacobianMatrix/CreateJacobianMatrix.h
===================================================================
--- /issm/trunk-jpl/src/mex/CreateJacobianMatrix/CreateJacobianMatrix.h	(revision 11335)
+++ /issm/trunk-jpl/src/mex/CreateJacobianMatrix/CreateJacobianMatrix.h	(revision 11335)
@@ -0,0 +1,37 @@
+/*
+	CreateJacobianMatrix.h
+*/
+
+#ifndef _CREATEJACOBIANMATRIX_H
+#define _CREATEJACOBIANMATRIX_H
+
+/* local prototypes: */
+void CreateJacobianMatrixUsage(void);
+
+#include "../../c/modules/modules.h"
+#include "../../c/Container/Container.h"
+#include "../../c/shared/shared.h"
+#include "../../c/EnumDefinitions/EnumDefinitions.h"
+
+#undef __FUNCT__ 
+#define __FUNCT__  "CreateJacobianMatrix"
+
+/* serial input macros: */
+#define ELEMENTS     (mxArray *)prhs[0]
+#define NODES        (mxArray *)prhs[1]
+#define VERTICES     (mxArray *)prhs[2]
+#define LOADS        (mxArray *)prhs[3]
+#define MATERIALS    (mxArray *)prhs[4]
+#define PARAMETERS   (mxArray *)prhs[5]
+#define KMAX         (mxArray *)prhs[6]
+
+/* serial output macros: */
+#define JFF  (mxArray**)&plhs[0]
+
+/* serial arg counts: */
+#undef NLHS
+#define NLHS  1
+#undef NRHS
+#define NRHS  7
+
+#endif  /* _CREATEJACOBIANMATRIX_H*/
Index: /issm/trunk-jpl/src/mex/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/mex/Makefile.am	(revision 11334)
+++ /issm/trunk-jpl/src/mex/Makefile.am	(revision 11335)
@@ -22,4 +22,5 @@
 				CostFunction \
 				CreateNodalConstraints\
+				CreateJacobianMatrix\
 				Echo\
 				ElementConnectivity\
@@ -327,4 +328,8 @@
 			  SystemMatrices/SystemMatrices.h
 
+
+CreateJacobianMatrix_SOURCES = CreateJacobianMatrix/CreateJacobianMatrix.cpp\
+								 CreateJacobianMatrix/CreateJacobianMatrix.h
+
 SurfaceArea_SOURCES = SurfaceArea/SurfaceArea.cpp\
 								 SurfaceArea/SurfaceArea.h
