Index: /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13267)
+++ /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13268)
@@ -13,4 +13,8 @@
 	/*Model fields {{{1*/
 	AutodiffIsautodiffEnum, 
+	AutodiffDependentsEnum,
+	AutodiffNumDependentsEnum,
+	AutodiffIndependentsEnum,
+	AutodiffNumIndependentsEnum,
 	BalancethicknessSpcthicknessEnum,
 	BalancethicknessStabilizationEnum,
Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 13267)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 13268)
@@ -429,4 +429,5 @@
 					  ./modules/ModelProcessorx/Control/CreateParametersControl.cpp\
 					  ./modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp\
+					  ./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\
 					  ./modules/InputControlUpdatex/InputControlUpdatex.h\
 					  ./modules/InputControlUpdatex/InputControlUpdatex.cpp\
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 13267)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 13268)
@@ -889,5 +889,5 @@
 		case 3: {//IssmDouble
 					GenericOption<IssmDouble>* option;
-					IssmPDouble value;
+					IssmDouble value;
 					FetchData(&value,index+1);
 					option = new GenericOption<IssmDouble>();
Index: /issm/trunk-jpl/src/c/classes/IoModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 13267)
+++ /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 13268)
@@ -64,4 +64,7 @@
 		void        LastIndex(int *pindex);
 		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
+		#ifdef _HAVE_ADOLC_
+		void        FetchIndependentVariable(IssmDouble**  pscalarmatrix,int* pM,int* pN,int data_enum);
+		#endif
 };
 
Index: /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13267)
+++ /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13268)
@@ -18,4 +18,8 @@
 
 		case AutodiffIsautodiffEnum : return "AutodiffIsautodiff";
+		case AutodiffDependentsEnum : return "AutodiffDependents";
+		case AutodiffNumDependentsEnum : return "AutodiffNumDependents";
+		case AutodiffIndependentsEnum : return "AutodiffIndependents";
+		case AutodiffNumIndependentsEnum : return "AutodiffNumIndependents";
 		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13268)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13268)
@@ -0,0 +1,46 @@
+/*!\file: CreateParametersAutodiff.cpp
+ * \brief driver for creating parameters dataset, for autodiff analysis.
+ */ 
+
+#include "../../../Container/Container.h"
+#include "../../../toolkits/toolkits.h"
+#include "../../../io/io.h"
+#include "../../../EnumDefinitions/EnumDefinitions.h"
+#include "../../../classes/objects/objects.h"
+#include "../../../shared/shared.h"
+#include "../../../include/include.h"
+#include "../ModelProcessorx.h"
+
+void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+	
+	int         i;
+	Parameters *parameters       = NULL;
+	bool        autodiff_analysis;
+	int*        dependents       = NULL;
+	int         num_dependents;
+	int*        independents       = NULL;
+	int         num_independents;
+	
+	/*Get parameters: */
+	parameters=*pparameters;
+
+	/*retrieve some parameters: */
+	iomodel->Constant(&autodiff_analysis,AutodiffIsautodiffEnum);
+
+	if(autodiff_analysis){
+
+		/*recover dependents: */
+		parameters->AddObject(iomodel->CopyConstantObject(AutodiffNumDependentsEnum));
+		iomodel->FetchData(&dependents,NULL,&num_dependents,AutodiffDependentsEnum);
+		parameters->AddObject(new IntVecParam(AutodiffDependentsEnum,dependents,num_dependents));
+	
+		/*recover independents: */
+		parameters->AddObject(iomodel->CopyConstantObject(AutodiffNumIndependentsEnum));
+		iomodel->FetchData(&independents,NULL,&num_independents,AutodiffIndependentsEnum);
+		parameters->AddObject(new IntVecParam(AutodiffIndependentsEnum,independents,num_independents));
+
+	}
+
+	/*Assign output pointer: */
+	*pparameters=parameters;
+}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13267)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13268)
@@ -92,4 +92,5 @@
 	parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsdelta18oEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIssmbgradientsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(AutodiffIsautodiffEnum));
 
 	iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
@@ -145,4 +146,8 @@
 	#endif
 
+ 	#ifdef _HAVE_ADOLC_
+	CreateParametersAutodiff(&parameters,iomodel,solution_type,analysis_type);
+	#endif
+
 	/*Go through all parameters, and convert units to SI: */
 	parameters->UnitConversion(ExtToIuEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 13267)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 13268)
@@ -23,4 +23,5 @@
 void  CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
 void  CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+void  CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
 void  UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
 
Index: /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13267)
+++ /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13268)
@@ -19,4 +19,8 @@
    if(stage==1){
 	      if (strcmp(name,"AutodiffIsautodiff")==0) return AutodiffIsautodiffEnum;
+	      else if (strcmp(name,"AutodiffDependents")==0) return AutodiffDependentsEnum;
+	      else if (strcmp(name,"AutodiffNumDependents")==0) return AutodiffNumDependentsEnum;
+	      else if (strcmp(name,"AutodiffIndependents")==0) return AutodiffIndependentsEnum;
+	      else if (strcmp(name,"AutodiffNumIndependents")==0) return AutodiffNumIndependentsEnum;
 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
@@ -134,12 +138,12 @@
 	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
-	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
+         else stage=2;
+   }
+   if(stage==2){
+	      if (strcmp(name,"MeshZ")==0) return MeshZEnum;
 	      else if (strcmp(name,"MiscellaneousName")==0) return MiscellaneousNameEnum;
 	      else if (strcmp(name,"PrognosticHydrostaticAdjustment")==0) return PrognosticHydrostaticAdjustmentEnum;
 	      else if (strcmp(name,"PrognosticMinThickness")==0) return PrognosticMinThicknessEnum;
-         else stage=2;
-   }
-   if(stage==2){
-	      if (strcmp(name,"PrognosticPenaltyFactor")==0) return PrognosticPenaltyFactorEnum;
+	      else if (strcmp(name,"PrognosticPenaltyFactor")==0) return PrognosticPenaltyFactorEnum;
 	      else if (strcmp(name,"PrognosticSpcthickness")==0) return PrognosticSpcthicknessEnum;
 	      else if (strcmp(name,"PrognosticStabilization")==0) return PrognosticStabilizationEnum;
@@ -257,12 +261,12 @@
 	      else if (strcmp(name,"Parameters")==0) return ParametersEnum;
 	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
-	      else if (strcmp(name,"Results")==0) return ResultsEnum;
+         else stage=3;
+   }
+   if(stage==3){
+	      if (strcmp(name,"Results")==0) return ResultsEnum;
 	      else if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum;
 	      else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
 	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
-         else stage=3;
-   }
-   if(stage==3){
-	      if (strcmp(name,"Contour")==0) return ContourEnum;
+	      else if (strcmp(name,"Contour")==0) return ContourEnum;
 	      else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
 	      else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
@@ -380,12 +384,12 @@
 	      else if (strcmp(name,"VzPicard")==0) return VzPicardEnum;
 	      else if (strcmp(name,"VzStokes")==0) return VzStokesEnum;
-	      else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
+         else stage=4;
+   }
+   if(stage==4){
+	      if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
 	      else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
 	      else if (strcmp(name,"VzMesh")==0) return VzMeshEnum;
 	      else if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum;
-         else stage=4;
-   }
-   if(stage==4){
-	      if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum;
+	      else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum;
 	      else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum;
 	      else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
Index: /issm/trunk-jpl/src/c/solutions/issm.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/issm.cpp	(revision 13267)
+++ /issm/trunk-jpl/src/c/solutions/issm.cpp	(revision 13268)
@@ -124,4 +124,6 @@
 	femmodel->parameters->AddObject(theAdolcEDF_p);
 	if(autodiff) trace_on(1);
+	#else
+	if(autodiff) _error_("ISSM was not compiled with ADOLC support, cannot carry out autodiff analysis!");
 	#endif
 
Index: /issm/trunk-jpl/src/m/classes/autodiff.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/autodiff.m	(revision 13267)
+++ /issm/trunk-jpl/src/m/classes/autodiff.m	(revision 13268)
@@ -7,4 +7,6 @@
 	properties (SetAccess=public) 
 		isautodiff = false;
+		dependents = {''};
+		independents = {''};
 	end
 	methods
@@ -25,10 +27,29 @@
 		function disp(obj) % {{{
 			disp(sprintf('   automatic differentiation parameters:'));
-
 			fielddisplay(obj,'isautodiff','indicates if the automatic differentiation is activated');
-
+			fielddisplay(obj,'dependents','list of dependent variables ; ex: {''Thickness'',''FrictionCoefficient''}');
+			fielddisplay(obj,'independents','list of independent variables ; ex: {''IceVolume'',''MassFlux''}');
 		end % }}}
 		function marshall(obj,fid) % {{{
 			WriteData(fid,'object',obj,'fieldname','isautodiff','format','Boolean');
+			
+			%process dependent variables
+			num_dependents=numel(obj.dependents);
+			data=zeros(1,num_dependents);
+			for i=1:num_dependents,
+				data(i)=StringToEnum(obj.dependents{i});
+			end
+			WriteData(fid,'data',data,'enum',AutodiffDependentsEnum(),'format','DoubleMat','mattype',3);
+			WriteData(fid,'data',num_dependents,'enum',AutodiffNumDependentsEnum(),'format','Integer');
+			
+			%process independent variables
+			num_independents=numel(obj.independents);
+			data=zeros(1,num_independents);
+			for i=1:num_independents,
+				data(i)=StringToEnum(obj.independents{i});
+			end
+			WriteData(fid,'data',data,'enum',AutodiffIndependentsEnum(),'format','DoubleMat','mattype',3);
+			WriteData(fid,'data',num_independents,'enum',AutodiffNumIndependentsEnum(),'format','Integer');
+
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/enum/AutodiffDependentsEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/AutodiffDependentsEnum.m	(revision 13268)
+++ /issm/trunk-jpl/src/m/enum/AutodiffDependentsEnum.m	(revision 13268)
@@ -0,0 +1,11 @@
+function macro=AutodiffDependentsEnum()
+%AUTODIFFDEPENDENTSENUM - Enum of AutodiffDependents
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=AutodiffDependentsEnum()
+
+macro=StringToEnum('AutodiffDependents');
Index: /issm/trunk-jpl/src/m/enum/AutodiffIndependentsEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/AutodiffIndependentsEnum.m	(revision 13268)
+++ /issm/trunk-jpl/src/m/enum/AutodiffIndependentsEnum.m	(revision 13268)
@@ -0,0 +1,11 @@
+function macro=AutodiffIndependentsEnum()
+%AUTODIFFINDEPENDENTSENUM - Enum of AutodiffIndependents
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=AutodiffIndependentsEnum()
+
+macro=StringToEnum('AutodiffIndependents');
Index: /issm/trunk-jpl/src/m/enum/AutodiffNumDependentsEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/AutodiffNumDependentsEnum.m	(revision 13268)
+++ /issm/trunk-jpl/src/m/enum/AutodiffNumDependentsEnum.m	(revision 13268)
@@ -0,0 +1,11 @@
+function macro=AutodiffNumDependentsEnum()
+%AUTODIFFNUMDEPENDENTSENUM - Enum of AutodiffNumDependents
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=AutodiffNumDependentsEnum()
+
+macro=StringToEnum('AutodiffNumDependents');
Index: /issm/trunk-jpl/src/m/enum/AutodiffNumIndependentsEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/AutodiffNumIndependentsEnum.m	(revision 13268)
+++ /issm/trunk-jpl/src/m/enum/AutodiffNumIndependentsEnum.m	(revision 13268)
@@ -0,0 +1,11 @@
+function macro=AutodiffNumIndependentsEnum()
+%AUTODIFFNUMINDEPENDENTSENUM - Enum of AutodiffNumIndependents
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=AutodiffNumIndependentsEnum()
+
+macro=StringToEnum('AutodiffNumIndependents');
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13267)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13268)
@@ -19,4 +19,44 @@
 	return StringToEnum('AutodiffIsautodiff')[0]
 
+def AutodiffDependentsEnum():
+	"""
+	AUTODIFFDEPENDENTSENUM - Enum of AutodiffDependents
+
+	   Usage:
+	      macro=AutodiffDependentsEnum()
+	"""
+
+	return StringToEnum('AutodiffDependents')[0]
+
+def AutodiffNumDependentsEnum():
+	"""
+	AUTODIFFNUMDEPENDENTSENUM - Enum of AutodiffNumDependents
+
+	   Usage:
+	      macro=AutodiffNumDependentsEnum()
+	"""
+
+	return StringToEnum('AutodiffNumDependents')[0]
+
+def AutodiffIndependentsEnum():
+	"""
+	AUTODIFFINDEPENDENTSENUM - Enum of AutodiffIndependents
+
+	   Usage:
+	      macro=AutodiffIndependentsEnum()
+	"""
+
+	return StringToEnum('AutodiffIndependents')[0]
+
+def AutodiffNumIndependentsEnum():
+	"""
+	AUTODIFFNUMINDEPENDENTSENUM - Enum of AutodiffNumIndependents
+
+	   Usage:
+	      macro=AutodiffNumIndependentsEnum()
+	"""
+
+	return StringToEnum('AutodiffNumIndependents')[0]
+
 def BalancethicknessSpcthicknessEnum():
 	"""
@@ -4677,4 +4717,4 @@
 	"""
 
-	return 466
-
+	return 470
+
Index: /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13267)
+++ /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13268)
@@ -9,3 +9,3 @@
 %      macro=MaximumNumberOfEnums()
 
-macro=466;
+macro=470;
